• k8s master 实现高可用


    Kubernetes高可用master架构

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

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

    etcdetcd如果是放在集群内部的,在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
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

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

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

    service keepalived start
    systemctl enable keepalived
    
    • 1
    • 2

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

    vi kubeadm.conf
    apiVersion: kubeadm.k8s.io/v1beta2
    kind: ClusterConfiguration
    kubernetesVersion: v1.23.6
    imageRepository: registry.aliyuncs.com/google_containers 
    controlPlaneEndpoint: 192.168.30.200:6443
    networking:
      podSubnet: 10.244.0.0/16 
      serviceSubnet: 10.96.0.0/12 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    启动初始化
    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

  • 相关阅读:
    scrapy的使用
    【中秋征文】使用Python创意中秋节画月饼《花好月圆》
    LeetCode高频题互联网大厂笔试题:手撕k-means聚类算法:python代码实现
    基于人工智能标记语言 (AIML)和任务型对话系统(Task)的深度智能对话机器人demo
    为什么手动采购管理会危及你的工作流程?
    python图像处理 —— 实现图像滤镜效果
    WindTerm:新一代开源免费的终端工具,GitHub星标6.6k+,太酷了!
    Linux基础-常见问题 添加桌面快捷方式链接shell脚本
    101个CV模型集体开源,魔搭社区视觉AI深度解析
    2.spring框架-----spring framework DI依赖注入
  • 原文地址:https://blog.csdn.net/agonie201218/article/details/127850639