• 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

  • 相关阅读:
    QTday02(常用类、UI界面下的开发、信号与槽)
    如何用 JMeter 编写性能测试脚本?
    算法|每日一题|同积元组|哈希统计
    dreamweaver作业静态HTML网页设计——家乡海南旅游网站
    CCS3.3烧写说明
    代码随想录算法训练营第13天|● 239. 滑动窗口最大值 ● 347.前 K 个高频元素 ● 总结
    ffmpeg.dll在哪个文件夹?怎么快速的修复ffmpeg.dll文件的丢失
    测试域: 流量回放-介绍篇
    学习Java的第六天
    移动文件路径却不破坏org file link的方法
  • 原文地址:https://blog.csdn.net/agonie201218/article/details/127850639