本文将完成多master集群的部署,即部署master02,以及nginx负载均衡、keepalived高可用。
1.多master集群架构图
架构说明:
-
node节点的kubelet只能对接一个master节点的apiserver,不可能同时对接多个master节点的apiserver。简而言之,node节只能有一个master来领导。
-
kubelet和kube-proxy是通过kubelet.kubeconfig和kube-proxy.kubeconfig文件中的server参数进行对接 master节点的。
-
所以在多master节点的环境下,需要有nginx负载均衡器来进行调度,而且需要进行keepalived高可用的构建(主从两个节点) ,防止主节点宕机导致整个k8s集群的不可用。
1.1部署master02节点
1.在master01节点,拷贝文件到master02,各master组件的配置文件和服务管理文件到 master02 节点
scp -r /opt/etcd/ root@192.168.41.20:/opt/
scp -r /opt/kubernetes/ root@192.168.41.20:/opt/
scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service
root@192.168.41.20:/usr/lib/systemd/system/
scp -r /root/.kube/ master02:/root/
2.master02节点,修改配置文件并启动相关服务修改配置文件kube-apiserver中的IP
cd /opt/kubernetes/cfg
vim /opt/kubernetes/cfg/kube-apiserver
3.启动我们的master组件
systemctl enable --now kube-apiserver.service
systemctl enable --now kube-controller-manager.service
systemctl enable --now kube-scheduler.service
4.将可执行文件创建软连接,方便系统识别
ln -s /opt/kubernetes/bin/* /usr/local/bin/
5.查看node节点状态
kubectl get nodes
kubectl get nodes -o wide
#-o=wide:输出额外信息;对于Pod,将输出Pod所在的Node名
#此时在master02节点查到的node节点状态仅是从etcd查询到的信息,而此时node节点实际上并未与master02节点建立通信连接,因此需要使用一个VIP把node节点与master节点都关联起来
2.部署负载均衡
配置load balancer集群双机热备负载均衡(nginx实现负载均衡,keepalived实现双机热备)。
load balancer01:192.168.223.104
load balancer02:192.168.105
vip:192.168.223.200
2.1 在lb1、lb2节点上配置nginx与keepalived
1.在两台负载均衡器配置nginx,配置nginx的官方在线yum源,配置本地nginx的yum源
cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
EOF
yum install -y nginx
2.修改nginx配置文件,配置四层反向代理负载均衡,指定k8s群集2台master的节点ip和6443端口
vim /etc/nginx/nginx.conf
stream {
log_format main '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
access_log /var/log/nginx/k8s-access.log main;
upstream k8s-apiserver {
server 192.168.223.100:6443;
server 192.168.223.101:6443;
}
server {
listen 6443;
proxy_pass k8s-apiserver;
}
}
3.我们启动nginx
nginx -t
systemctl enable --now nginx
ss -natp | grep nginx
4.两台负载均衡器配置keepalived
yum install keepalived -y
5.修改/etc/keepalived/keepalived.conf配置文件
6.添加防止脑裂的脚本文件
cd /etc/nginx/
vim check_nginx.sh
#!/bin/bash
if ! killall -0 nginx
then
systemctl stop keepalived
fi
chmod +x check_nginx.sh
7.测试我们的keepalived是否正常
2.2 修改node节点上的配置
1.修改kubelet与kube-proxy的引导文件
cd /opt/kubernetes/cfg/
vim bootstrap.kubeconfig
vim kubelet.kubeconfig
vim kube-proxy.kubeconfig
2.3 修改我们master02服务器
1.在master02上面操作,修改配置文件
cd /opt/kubernetes/cfg/
vim kube-controller-manager.kubeconfig
vim kube-scheduler.kubeconfig
2.然后重启master组件服务
systemctl restart kube-apiserver kube-controller-manager kube-scheduler
3.我们在master01上面进行测试查看是否有问题,先创建一个pod容器,查看是否能通过负载均衡在node节点上创建
kubectl create deployment yhy-nginx --image=nginx --port=80 --replicas=4
kubectl get pods -o wide