使用的是堆叠方案,即etcd与控制平面被部署在同一节点当中,之所以最少使用三个master节点是因为ETCD的RAFT算法,集群中节点超过半数可用,集群才可用,所以一般使用奇数master节点,比如3、5等
每台机器都做
至少2cpu,4g机器环境
关闭防火墙、关闭selinux、关闭交换分区
(1)关闭selinux,设置为disabled
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
(2)关闭交换分区
修改配置文件/etc/fstab文件配置,注释 swap的挂在命令行,永久有效。
使用swapoff -a 命令仅临时有效,重启失效,需要手动修改配置文件。
(3)关闭防火墙
systemctl disable firewalld 禁止防火墙开机自启
systemctl stop firewalld 关闭防火墙服务
Systemctl status firewalld 查看防火墙服务
(4)修改主机名及/etc/hosts文件作为名称解析(所有节点都操作)
192.168.11.128 master01
192.168.11.129 master02
192.168.11.130 master03
192.168.11.138 node
(5)所有节点设置kube-proxy开启ipvs的前置条件
yum -y install ipvsadm ipset
cat > /etc/sysconfig/modules/ipvs.modules < modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4 配置系统yum源 每台机器都做 将系统默认的yum源文件repo移动到新目录bak下,执行下面的wget命令下载新的配置文件: wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo 配置k8s源 每台机器都做(此处是华为云的源,可能需要手动添加$basearch) cat < [kubernetes] name=Kubernetes baseurl=https://repo.huaweicloud.com/kubernetes/yum/repos/kubernetes-el7-$basearch enabled=1 gpgcheck=1 repo_gpgcheck=0 gpgkey=https://repo.huaweicloud.com/kubernetes/yum/doc/yum-key.gpg https://repo.huaweicloud.com/kubernetes/yum/doc/rpm-package-key.gpg EOF 配置docker源 每台机器都做 wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo sudo sed -i 's+download.docker.com+repo.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo 执行命令生成yum缓存 yum clean all yum makecache 修改文件/etc/sysctl.conf cat < net.ipv4.ip_forward = 1 net.ipv4.conf.all.forwarding = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF 执行下面的命令使其生效: modprobe br_netfilter;sudo sysctl -p /etc/sysctl.conf yum install ntpdate -y ntpdate time.windows.com 或ntpdate ntp1.aliyun.com yum -y install docker-ce;systemctl enable docker.service --now 配置国内镜像源或加速,这里例子是使用163加速,不过建议去阿里官方申请自己的镜像加速地址,免费的 修改docker Cgroup Driver为systemd 创建文件: cat < { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://hub-mirror.c.163.com"] } EOF (4)使得/etc/docker/daemon.json文件配置生效。 systemctl daemon-reload;systemctl restart docker 通过命令docker info查看 查看可用的kubeadm版本,这里不太建议最新版 yum list --showduplicates kubeadm 我选择的是这个版本 yum -y install kubeadm-1.19.16 kubectl-1.19.16 kubelet-1.19.16 部署k8s快捷键 kubectl completion bash >/etc/bash_completion.d/kubectl;kubeadm completion bash >/etc/bash_completion.d/kubeadm 说明:master01、master02、master03 nginx的配置一样,keepalived的配置也一样,只是keepalived priority的优先级不同,此处将VIP设置为与三台主机网段一致,VIP为192.168.11.200/24 nginx为源码安装,编译时加上stream模块,默认安装位置为/usr/local/nginx、默认配置文件为/usr/local/nginx/conf/nginx.conf 查看三台master主节点的nginx配置,在nginx 配置文件中http 上面配置stream 四层代理这一段 查看三台master节点keepalived的配置,配置文件中只有state及priority有区别,state三台分别为 MASTER BACKUP BACKUP ;priority三台分别为 100 80 70 查看初始化集群需要哪些镜像 kubeadm config images list 使用脚本拉取镜像,脚本内容如下(根据需要修改版本即可) vim k8s.images.pull.sh images=( kube-apiserver:v1.19.16 kube-controller-manager:v1.19.16 kube-scheduler:v1.19.16 kube-proxy:v1.19.16 pause:3.2 coredns:1.7.0 etcd:3.4.13-0 ) for imageName in ${images[@]} ; do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName done 执行脚本 bash k8s.images.pull.sh 脚本执行后,使用命令查看,发现需要镜像已经全部拉取 初始化init配置(master01 节点执行) [root@master01 ~]# kubeadm init --kubernetes-version=v1.19.16 --apiserver-advertise-address=192.168.11.128 --control-plane-endpoint=192.168.11.200:16443 --image-repository k8s.gcr.io --pod-network-cidr=10.244.0.0/16 --upload-certs --v=5 解析: apiserver-advertise-address=192.168.11.128 这里的IP地址是master01的地址。 pod-network-cidr=10.244.0.0/16 这里的IP地址是pod节点之间的地址。 image-repository k8s.gcr.io 这个是镜像地址 --control-plane-endpoint=192.168.11.200:16443 控制面板的地址,这个是必须要的,此地址是keepalived的VIP地址,端口是nginx四层代理监听的端口 如何上述命令执行成功,会在最后显示如下,会有提示加入master节点的命令与加入node节点的命令以及必须的操作。 在master01上根据提示内容执行命令 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config 接下来把master02、master03、node节点加入Kubernetes集群,主机加入成为master节点与node节点的指令是有区别的 执行下面命令,这个命令在上图中可以看到 [root@master02 ~]# kubeadm join 192.168.11.200:16443 --token qdbff7.pxt192g9owgz7g4g \ --discovery-token-ca-cert-hash sha256:094f007fe7600557629cae441db90f0fa97d90980badec2a4b673028a3bd9e94 \ --control-plane --certificate-key 97582818beee6cc47f4e1b7df40614bfddfc2152fffda7ceaf874e04cae3541d [root@master02 ~]# mkdir -p $HOME/.kube [root@master02 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@master02 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config [root@master03 ~]# kubeadm join 192.168.11.200:16443 --token qdbff7.pxt192g9owgz7g4g \ --discovery-token-ca-cert-hash sha256:094f007fe7600557629cae441db90f0fa97d90980badec2a4b673028a3bd9e94 \ --control-plane --certificate-key 97582818beee6cc47f4e1b7df40614bfddfc2152fffda7ceaf874e04cae3541d [root@master03 ~]# mkdir -p $HOME/.kube [root@master03 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@master03 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config [root@node ~]# kubeadm join 192.168.11.200:16443 --token qdbff7.pxt192g9owgz7g4g --discovery-token-ca-cert-hash sha256:094f007fe7600557629cae441db90f0fa97d90980badec2a4b673028a3bd9e94 获取下面这个文件并上传到本地(如果下载不了,可以复制内容并粘贴) https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml kubectl apply -f kube-flannel.yml 此时在任意一台节点上查看所有节点状态都已经是好的(到此基本集群已经部署完毕) 因为设置的时候设置master01节点上的keepalived为master ,所以VIP192.168.11.200/24在master01上,现在查看master01的VIP,并把master01关机,master01关机以后需要等一会儿查看才能发现master 01 NotReady 在master01 NotReady的情况下,在剩下两台master02 master03任意一台均可用,实现master节点的高可用性。但是注意,必须半数以上master节点可用,3master节点至少2台master节点高可用 因为懒所以没有将nginx设置为开机自启,其实是需要设置开机自启的 第二步:配置yum源
第三步:配置系统内核参数每台机器都做
第四步:同步时间 每台机器都做
第五步:安装docker-ce 并设置开机自启每台机器都做
第六步:创建和编辑/etc/docker/daemon.json文件
第七步:安装k8s工具、部署k8s快捷键、并查看版本 每台机器都做
第八步:安装nginx+keepalived
第九步:K8s中的master01主机初始化
使用flannel网络方案
第十步、测试高可用性