当前位置:首页 » 《随便一记》 » 正文

k8s master 实现高可用

18 人参与  2022年11月18日 08:49  分类 : 《随便一记》  评论

点击全文阅读


Kubernetes高可用master架构

k8s的高可用,主要是实现Master节点的高可用。那么我们看看各个组件是如何解决高可用的。

Kubelet、Kube-proxy:只工作在当前Node节点上,无需高可用。

etcd:etcd如果是放在集群内部的,在kubeadm1.5之后,对于多Master集群,一个Master节点加入集群后将自动实现集群化扩展。所以集群已经自动实现高可用,无需再人工干预。

kube-controller-manager:对于多Master集群,这个组件只会有一个正常工作,其它处于休眠挂起状态。当工作节点发生故障时才会唤醒另一个接管。所以集群已经自动实现高可用,无需再人工干预。

kube-scheduler:与kube-controller-manager情况一样,集群已经自动实现高可用,无需再人工干预。

kube-apiserver:每个Master节点的kube-apiserver都是独立的,没有竞争关系,访问哪个节点效果都是一样的。 综上所述,只有kube-apiserver需要人工解决。解决方案也很简单,既然APIServer以HTTP API提供接口服务,就可以使用常规的四层或七层的代理实现高可用和负载均衡,如使用Nigix、HAProxy等代理服务器。并且可以更进一步,使用vip和keepalive实现,代理服务器的高可用。然后将集群的访问地址从APIServer的地址改为vip的地址。

k8s的物理结构是master/node模式,架构图如下所示:

Kubernetes架构

master一般是三个节点或者五个节点做高可用,根据集群规模来定,master高可用指的是对apiserver做高可用或者对master的物理节点做高可用,node可以有多个节点,专门用来部署应用的。

k8s master使用keepalived生产环境下推荐使用高可用模式

登录k8s master1 master2,master3,分别修改/etc/keepalived/keepalived.conf,内容如下:

master-1:global_defs {   router_id master-1}vrrp_instance VI_1 {    state MASTER     interface ens160    virtual_router_id 50    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        192.168.30.200    }}master-2:global_defs {   router_id master-2}vrrp_instance VI_1 {    state BACKUP     interface ens160    virtual_router_id 50    priority 90    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        192.168.30.200    }}master-3:global_defs {   router_id master-3}vrrp_instance VI_1 {    state BACKUP     interface ens160    virtual_router_id 50    priority 80    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        192.168.30.200    }}

以上需要注意的地方是192.168.30.200为虚拟IP,需要和集群处于同一个网段,且没有被配置为其它的物理机的IP,ens160为物理网卡的设备名称。

在三台master上执行以下命令启动keepalived

service keepalived startsystemctl enable keepalived

在master1上编辑初始化配置:keepalived的情况下controlPlaneEndpoint需要制定为虚拟IP地址

vi kubeadm.confapiVersion: kubeadm.k8s.io/v1beta2kind: ClusterConfigurationkubernetesVersion: v1.23.6imageRepository: registry.aliyuncs.com/google_containers controlPlaneEndpoint: 192.168.30.200:6443networking:  podSubnet: 10.244.0.0/16   serviceSubnet: 10.96.0.0/12 

启动初始化
kubeadm init --config kubeadm.conf

加入集群节点

节点加入集群有两种角色

1.control-plane角色 表示的是master的备用节点

2.worker角色 表示的是k8s的node

control-plane节点加入方式

登录master-2和master-3,让它们以control-node的方式加入
kubeadm join 192.168.30.200:6443 --token g55zwf.wu671xiryl2c0k7z --discovery-token-ca-cert-hash sha256:2b6c285bdd34cc5814329d5ba8cec3302d53aa925430330fb35c174565f05ad0 --control-plane

把master-1节点上的/root/.kube/下的所有文件拷贝到master-2和master-3节点的/root/.kube目录下,方便master-2和master-3也可以执行kubectl指令

worker节点加入方式

kubeadm join 192.168.30.99:6443 --token g55zwf.wu671xiryl2c0k7z --discovery-token-ca-cert-hash sha256:2b6c285bdd34cc5814329d5ba8cec3302d53aa925430330fb35c174565f05ad0


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/48883.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1