寫在前面
使用的是堆疊方案,即etcd與控制平面被部署在同一節(jié)點(diǎn)當(dāng)中,之所以最少使用三個(gè)master節(jié)點(diǎn)是因?yàn)镋TCD的RAFT算法,集群中節(jié)點(diǎn)超過半數(shù)可用,集群才可用,所以一般使用奇數(shù)master節(jié)點(diǎn),比如3、5等
第一步:環(huán)境準(zhǔn)備
每臺(tái)機(jī)器都做
至少2cpu,4g機(jī)器環(huán)境
關(guān)閉防火墻、關(guān)閉selinux、關(guān)閉交換分區(qū)
(1)關(guān)閉selinux,設(shè)置為disabled
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
(2)關(guān)閉交換分區(qū)
修改配置文件/etc/fstab文件配置,注釋 swap的掛在命令行,永久有效。
使用swapoff -a 命令僅臨時(shí)有效,重啟失效,需要手動(dòng)修改配置文件。
(3)關(guān)閉防火墻
systemctl disable firewalld 禁止防火墻開機(jī)自啟
systemctl stop firewalld 關(guān)閉防火墻服務(wù)
Systemctl status firewalld 查看防火墻服務(wù)
(4)修改主機(jī)名及/etc/hosts文件作為名稱解析(所有節(jié)點(diǎn)都操作)
192.168.11.128 master01
192.168.11.129 master02
192.168.11.130 master03
192.168.11.138 node
(5)所有節(jié)點(diǎn)設(shè)置kube-proxy開啟ipvs的前置條件
yum -y install ipvsadm ipset
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
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源
配置系統(tǒng)yum源 每臺(tái)機(jī)器都做
將系統(tǒng)默認(rèn)的yum源文件repo移動(dòng)到新目錄bak下,執(zhí)行下面的wget命令下載新的配置文件:
wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo
配置k8s源 每臺(tái)機(jī)器都做(此處是華為云的源,可能需要手動(dòng)添加$basearch)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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源 每臺(tái)機(jī)器都做
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
執(zhí)行命令生成yum緩存
yum clean all
yum makecache
第三步:配置系統(tǒng)內(nèi)核參數(shù)每臺(tái)機(jī)器都做
修改文件/etc/sysctl.conf
cat <<EOF>/etc/sysctl.conf
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
執(zhí)行下面的命令使其生效:
modprobe br_netfilter;sudo sysctl -p /etc/sysctl.conf
第四步:同步時(shí)間 每臺(tái)機(jī)器都做
yum install ntpdate -y
ntpdate time.windows.com
或ntpdate ntp1.aliyun.com
第五步:安裝docker-ce 并設(shè)置開機(jī)自啟每臺(tái)機(jī)器都做
yum -y install docker-ce;systemctl enable docker.service --now
第六步:創(chuàng)建和編輯/etc/docker/daemon.json文件
配置國內(nèi)鏡像源或加速,這里例子是使用163加速,不過建議去阿里官方申請(qǐng)自己的鏡像加速地址,免費(fèi)的
修改docker Cgroup Driver為systemd
創(chuàng)建文件:
cat <<EOF >/etc/docker/daemon.json
{
"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查看
第七步:安裝k8s工具、部署k8s快捷鍵、并查看版本 每臺(tái)機(jī)器都做
查看可用的kubeadm版本,這里不太建議最新版
yum list --showduplicates kubeadm
我選擇的是這個(gè)版本
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
第八步:安裝nginx+keepalived
說明:master01、master02、master03 nginx的配置一樣,keepalived的配置也一樣,只是keepalived priority的優(yōu)先級(jí)不同,此處將VIP設(shè)置為與三臺(tái)主機(jī)網(wǎng)段一致,VIP為192.168.11.200/24
nginx為源碼安裝,編譯時(shí)加上stream模塊,默認(rèn)安裝位置為/usr/local/nginx、默認(rèn)配置文件為/usr/local/nginx/conf/nginx.conf
查看三臺(tái)master主節(jié)點(diǎn)的nginx配置,在nginx 配置文件中http 上面配置stream 四層代理這一段

查看三臺(tái)master節(jié)點(diǎn)keepalived的配置,配置文件中只有state及priority有區(qū)別,state三臺(tái)分別為 MASTER BACKUP BACKUP ;priority三臺(tái)分別為 100 80 70

第九步:K8s中的master01主機(jī)初始化
查看初始化集群需要哪些鏡像
kubeadm config images list

使用腳本拉取鏡像,腳本內(nèi)容如下(根據(jù)需要修改版本即可)
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
執(zhí)行腳本
bash k8s.images.pull.sh
腳本執(zhí)行后,使用命令查看,發(fā)現(xiàn)需要鏡像已經(jīng)全部拉取

初始化init配置(master01 節(jié)點(diǎn)執(zhí)行)
[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節(jié)點(diǎn)之間的地址。
image-repository k8s.gcr.io 這個(gè)是鏡像地址
--control-plane-endpoint=192.168.11.200:16443 控制面板的地址,這個(gè)是必須要的,此地址是keepalived的VIP地址,端口是nginx四層代理監(jiān)聽的端口
如何上述命令執(zhí)行成功,會(huì)在最后顯示如下,會(huì)有提示加入master節(jié)點(diǎn)的命令與加入node節(jié)點(diǎn)的命令以及必須的操作。

在master01上根據(jù)提示內(nèi)容執(zhí)行命令
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節(jié)點(diǎn)加入Kubernetes集群,主機(jī)加入成為master節(jié)點(diǎn)與node節(jié)點(diǎn)的指令是有區(qū)別的
執(zhí)行下面命令,這個(gè)命令在上圖中可以看到
[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
使用flannel網(wǎng)絡(luò)方案
獲取下面這個(gè)文件并上傳到本地(如果下載不了,可以復(fù)制內(nèi)容并粘貼)
https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml

此時(shí)在任意一臺(tái)節(jié)點(diǎn)上查看所有節(jié)點(diǎn)狀態(tài)都已經(jīng)是好的(到此基本集群已經(jīng)部署完畢)

第十步、測(cè)試高可用性
因?yàn)樵O(shè)置的時(shí)候設(shè)置master01節(jié)點(diǎn)上的keepalived為master ,所以VIP192.168.11.200/24在master01上,現(xiàn)在查看master01的VIP,并把master01關(guān)機(jī),master01關(guān)機(jī)以后需要等一會(huì)兒查看才能發(fā)現(xiàn)master 01 NotReady


在master01 NotReady的情況下,在剩下兩臺(tái)master02 master03任意一臺(tái)均可用,實(shí)現(xiàn)master節(jié)點(diǎn)的高可用性。但是注意,必須半數(shù)以上master節(jié)點(diǎn)可用,3master節(jié)點(diǎn)至少2臺(tái)master節(jié)點(diǎn)高可用文章來源:http://www.zghlxwxcb.cn/news/detail-405046.html

因?yàn)閼兴詻]有將nginx設(shè)置為開機(jī)自啟,其實(shí)是需要設(shè)置開機(jī)自啟的文章來源地址http://www.zghlxwxcb.cn/news/detail-405046.html
到了這里,關(guān)于k8s master節(jié)點(diǎn)高可用方案部署的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!