二进制搭建Kubernetes集群----部署多master

228 阅读3分钟

本文将完成多master集群的部署,即部署master02,以及nginx负载均衡、keepalived高可用。

1.多master集群架构图

image.png

架构说明:

  • 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/

image.png

image.png

image.png

image.png

2.master02节点,修改配置文件并启动相关服务修改配置文件kube-apiserver中的IP

cd /opt/kubernetes/cfg

vim /opt/kubernetes/cfg/kube-apiserver

image.png

3.启动我们的master组件

systemctl enable --now kube-apiserver.service

systemctl enable --now kube-controller-manager.service

systemctl enable --now kube-scheduler.service

image.png

4.将可执行文件创建软连接,方便系统识别

ln -s /opt/kubernetes/bin/* /usr/local/bin/

image.png

5.查看node节点状态

kubectl get nodes

kubectl get nodes -o wide
#-o=wide:输出额外信息;对于Pod,将输出Pod所在的Node名

#此时在master02节点查到的node节点状态仅是从etcd查询到的信息,而此时node节点实际上并未与master02节点建立通信连接,因此需要使用一个VIP把node节点与master节点都关联起来

image.png

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

image.png

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;

  }
}

image.png

3.我们启动nginx

nginx -t

systemctl enable --now nginx

ss -natp | grep nginx

image.png

4.两台负载均衡器配置keepalived

yum install keepalived -y 

image.png

5.修改/etc/keepalived/keepalived.conf配置文件

image.png

image.png

6.添加防止脑裂的脚本文件

cd /etc/nginx/
vim check_nginx.sh

#!/bin/bash
if ! killall -0 nginx
then
  systemctl stop keepalived
fi

chmod +x check_nginx.sh

image.png

7.测试我们的keepalived是否正常

image.png

image.png

image.png

2.2 修改node节点上的配置

1.修改kubelet与kube-proxy的引导文件

cd /opt/kubernetes/cfg/
vim bootstrap.kubeconfig

vim kubelet.kubeconfig

vim kube-proxy.kubeconfig

image.png

image.png

2.3 修改我们master02服务器

1.在master02上面操作,修改配置文件

cd /opt/kubernetes/cfg/

vim kube-controller-manager.kubeconfig

vim kube-scheduler.kubeconfig

image.png

image.png

2.然后重启master组件服务

systemctl restart kube-apiserver kube-controller-manager kube-scheduler

image.png

3.我们在master01上面进行测试查看是否有问题,先创建一个pod容器,查看是否能通过负载均衡在node节点上创建

kubectl create deployment yhy-nginx --image=nginx --port=80 --replicas=4

kubectl get pods -o wide

image.png

image.png