[!TIP]
二进制部署k8s
- 部署HA
高可用
转载请注明出处:https://janrs.com
[!WARNING]
如果该环节在阿里云ecs
部署,因为阿里云现在已经不支持vip
了。
HA
部署环节可以在本地测试。或者线上不使用keepalived
做高可用。
直接用nginx
的tcp
反向代理也是可以。
主要要注意学习的地方就是:kube-apiserver
的server
证书地址需要把nginx
的服务器ip
写进hosts
参数。
否则会报无权限错误。
部署 HA
高可用
1.k8s
的 HA
[!NOTE]
k8s
中master
的三大组件,其中kube-controller-manager
与kube-scheduler
有提供高可用机制。
kube-apiserver
没有,需要自己实现。
1-1.kube-controlle
与 kube-scheduler
的 HA
master
中的 kube-apiserver
, kube-controller-manager
, kube-scheduler
这三大组件中。
kube-controller-manager
与 kube-scheduler
有自带的 leader
选举机制。
通过部署的时候设置参数:--leader-elect=true
启动 leader
自选举。
在部署完三台 master
服务器,可以在任意一台 master
输入以下命令查看 leader
kubectl get leases -n kube-system
显示如下
可以看出,kube-controller-manager
和 kube-scheduler
的 leader
是在 master-01
服务器上
NAME HOLDER AGE
kube-controller-manager k8s-master01_e0f4cfd5-1190-4f79-9ee5-a2063eb3ca16 156m
kube-scheduler k8s-master01_54254610-53a8-4c3a-b3ea-a4fa5f549119 99s
在三台 master
任意一台停止这个三个组件,然后再次查看。
在 master-01
服务器停止三个组件的服务
systemctl stop kube-scheduler && \
systemctl stop kube-controller-manager && \
systemctl stop kube-apiserver
到 master-02
服务器查看 leader
信息
kubectl get leases -n kube-system
显示如下
可以看出,leader
的 HOLDER
服务器已经改变了
NAME HOLDER AGE
kube-controller-manager k8s-master02_e0f4cfd5-1190-4f79-9ee5-a2063eb3ca16 3h5m
kube-scheduler k8s-master03_e350060d-68ad-4f59-82a8-456f835b7f3d 30m
1-2.kube-apiserver
的 HA
k8s
没有提供 kube-apiserver
的 HA
,需要手动实现。
因为 kube-apiserver
是无状态的应用,并且对外提供 http/https
的接口调用方式提供服务,所以可以用 nginx
来做负载均衡达到高可用。
2.初始化系统环境
[!NOTE]
不需要像master
节点和node
节点那样初始化。
2-1.安装 epel
以及依赖软件
dnf install epel-release vim iptables jq ipvsadm ipset curl net-tools rsyslog -y
2-2.关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
2-3.清空 iptables
规则链
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat
2-4.关闭 swap
分区
swapoff -a && \
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
2-5.关闭 selinux
setenforce 0 && \
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
2-6.设置时间同步
设置时区
timedatectl set-timezone Asia/Shanghai
同步时区