前言
公司准备将所有应用迁移.NetCore,并部署于k8s。借此契机来记录下k8s的学习过程。
一、创建三台CentOs7.x虚拟机
192.168.124.201
192.168.124.202
192.168.124.203
二、配置Hosts与静态ip映射
vim /etc/hosts
192.168.124.201 k8s-master
192.168.124.202 k8s-node1
192.168.124.203 k8s-node2
三、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
四、关闭SELinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
五、配置内核参数,将桥接的IPv4流量传递倒iptables的链
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#让上述命令生效
sysctl --system
六、关闭swap分区=>K8S中不支持swap分区
vim /etc/fstab
#注释下面语句
#/dev/mapper/centos-swap swap swap defaults 0 0
#执行以下命令
echo vm.swappiness=0 >> /etc/sysctl.conf
sudo reboot
#验证Swap行均为o
free -m
7、安装docker
配置yum 的阿里云包源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看所有docker版本
yum list docker-ce --showduplicates | sort -r
本次选择docker版本 docker-ce-18.06.3
sudo yum install docker-ce-18.06.3.ce
配置开机启动docker
systemctl start docker
systemctl enable docker
8、安装Kubeadm、kubelet、kubectl
配置阿里云Yum软件源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
Kubeadm、kubelet、kubectl 三者的版本需要统一
查看kubelet版本
yum list kubelet --showduplicates | sort -r
选择 kubelet 版本1.19.2,执行下面命令,安装指定版本的kubelet、kubeadm、kubectl安装:
yum install -y kubelet-1.19.2-0.x86_64 --nogpgcheck kubeadm-1.19.2-0.x86_64 --nogpgcheck
kubectl-1.19.2-0.x86_64 --nogpgcheck kubernetes-cni-0.8.7 –disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet
下面 9-10的步骤只需要在Master节点执行-------------------------------------------------------------------------------------------------
9、初始化Kubernetes Master
--apiserver-advertise-address 为Master的IP
kubeadm init
--apiserver-advertise-address=192.168.124.201
--image-repository registry.aliyuncs.com/google_containers
--kubernetes-version v1.19.2
--service-cidr=10.1.0.0/16
--pod-network-cidr=10.244.0.0/16
此过程利用kubeadm帮我们去安装k8s需要的镜像以及相关插件。
初始化成功会有如下提示:
标红的为node节点加入集群命令,忘了也可以重新生成。下面再介绍相关命令。
初始化成功后,为顺利使用kubectl,执行以下命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
执行kubectl get nodes,查看master节点状态:
master 状态为NotReady
通过如下命令查看kubelet状态:
journalctl -xef -u kubelet -n 20
提示未安装cni 网络插件。
10、安装flannel网络插件(CNI)
该镜像在国外,有可能出现ImagePullError等错误,下面提供几种方法解决:
首先先查看该flannel的yml文件引用了那些镜像,把yml下载下来:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
查看flannel镜像版本
cat kube-flannel.yml |grep image|uniq
可以看到镜像版本为image: quay.io/coreos/flannel:v0.13.0-rc2,该镜像非常新,如果该镜像全网都没有,那么就按照下面方法①解决,如果存在,就按照方法②执行。
解决方法:
①如果你自己有阿里云、腾讯云等服务器,那么直接在自己的服务器上拉取该镜像,下载下来,再在你的虚拟机还原该镜像。
先拉取镜像:
docker pull image: quay.io/coreos/flannel:v0.13.0-rc2
将镜像保存为flannel.tar包:
docker save -o flannel.tar quay.io/coreos/flannel:v0.13.0-rc2
通过FTP将flannel.tar传输到本地的虚拟机
通过下面命令加载镜像:
docker load -i flannel.tar
查看本地镜像,红色框所示,所需镜像已加载成功:
执行以下命令安装flannel即可:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
②修改该yml文件,将镜像版本修改为已有的版本,可在https://github.com/coreos/flannel/releases上查看flannel相关镜像包。
将flannel:v0.12.0-amd64.docker 下载到本地:
修改yml文件镜像源:
sed -i 's/flannel:v0.13.0-rc2/flannel:v0.12.0-amd64/' kube-flannel.yml
参考①中,传输镜像到虚拟机装载
同样,执行以下命令安装flannel即可:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
输入命令kubectl get pods -n kube-system,等待所有插件为running状态。
待所有pod status为Running的时候,再次执行kubectl get nodes:
如上图所示,master状态变为,表明Master节点部署成功!
11、部署k8s-node1、k8s-node2集群
1、在k8s-node1、k8s-node2等两台虚拟机中重复执行上面1-8的步骤,安装好docker、kubelet、kubectl、kubeadm。
2、node节点加入集群
在上面第九步初始化master节点成功后,输出了下面的kubeadm join命令:
该命令就是node加入集群的命令,分别在k8s-node1、k8s-node2上执行该命令加入集群。
如果忘记该命令,可以通过以下命令重新生成:
kubeadm token create --print-join-command
3、在master节点执行下面命令查看集群状态:
kubectl get nodes
如上图所示,所有节点都为ready,集群搭建成功。