暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

青云LB(负载均衡)与k8s实战(一)

架构至美 2022-09-01
537

【摘要】基于青云LB来部署高可用的k8s集群。



 

前言


对于生产环境,需要考虑集群的高可用性。如果关键组件(例如 kube-apiserver、kube-scheduler 和 kube-controller-manager)在相同的主节点上运行,一旦主节点出现故障,Kubernetes
KubeSphere
将不可用。因此,您需要为多个主节点配置负载均衡器,以搭建高可用集群。您可以使用任何云负载均衡器或任何硬件负载均衡器(例如 F5)。此外,您也可以使用 Keepalived+HAproxy
 或 NGINX
搭建高可用集群。


集群架构


2.1 负载均衡器创建高可用集群:




 2.2 使用 Keepalived 和 HAproxy/Nginx 创建高可用 Kubernetes 集群:



高可用方案


通常情况下,我们创建单master的k8s集群是不需要进行高可用配置的,只有在创建高可用的k8s集群时才会采用高可用配置,高可用配置的方案有很多。如下方案:


 3.1 云上:

  • 使用 Keepalived
    HAproxy
    创建高可用 Kubernetes 集群(有些云可能不支持keepalived)

  • 使用 Keepalived
    Nginx
    创建高可用 Kubernetes 集群(有些云可能不支持keepalived)

  • 可以直接使用云上的lb
    ,比如阿里云slb
    ,腾讯云elb
    ,青云lb
    等(推荐)


 3.2 非云上:

  • 使用 Keepalived
    HAproxy
    创建高可用 Kubernetes 集群

  • 使用 Keepalived
    Nginx
    创建高可用 Kubernetes 集群



青云LB负载均衡使用


负载均衡(Load Balancer
,简称LB)提供安全快捷的流量分发服务,来自多个公网地址的访问流量经由 LB 可以自动分配到多台云服务器上,并支持自动检测并隔离故障云服务器,提供业务系统的服务能力和可用性。负载均衡支持千万级别并发访问请求,可轻松应对大流量访问,满足业务需求。

  • 创建负载均衡器,指定ip地址或者自动生成IP

  • 进入负载均衡器,创建监听器

  • 选择TCP,6443
    端口(此端口可调整)

  • 添加master地址与监听 apiserver  6443
    端口

  • 根据集群的部署位置,您可能需要在安全组中打开端口以确保外部流量不被屏蔽

  • 可以同时配置内置负载均衡器和外置负载均衡器。为外置负载均衡器分配公共 IP 地址后,您可以使用该 IP 地址来访问集群,这里我们只用内置负载均衡器,利用青云VPN进行内网访问即可

 4.1 部署k8s之前就是不可用状态,如下图所示:



 4.2 k8s集群初始化:


    kubeadm init --config kubeadm-init.yaml   --upload-certs
    ##说明:upload-certs 标志用来将在所有控制平面实例之间的共享证书上传到集群,若是不加会报错如下:


    不加upload-certs报错如下:



     4.3 kubeadm-init.yaml的内容如下:


      apiVersion: kubeadm.k8s.io/v1beta3
      bootstrapTokens:
      - groups:
      - system:bootstrappers:kubeadm:default-node-token
      token: abcdef.0123456789abcdef
      ttl: 24h0m0s
      usages:
      - signing
      - authentication
      kind: InitConfiguration
      localAPIEndpoint:
      advertiseAddress: 192.168.0.1 #本机ks-m1的ip
      bindPort: 6443
      nodeRegistration:
      criSocket: /var/run/dockershim.sock
      imagePullPolicy: IfNotPresent
      name: ks-m1
      taints:
      - effect: NoSchedule
      key: node-role.kubernetes.io/master
      ---
      apiServer:
      timeoutForControlPlane: 4m0s
      certSANs:
      - "172.17.0.252"
      extraArgs:
      authorization-mode: "Node,RBAC"
      apiVersion: kubeadm.k8s.io/v1beta3
      certificatesDir: /etc/kubernetes/pki
      controlPlaneEndpoint: 172.17.0.252:6443 #此ip和端口是青云负载均衡器生成的内部负载ip+端口
      clusterName: kubernetes
      cgroupDriver: systemd
      controllerManager: {}
      etcd:
      local:
      dataDir: /var/lib/etcd
      imageRepository: registry.aliyuncs.com/google_containers
      kind: ClusterConfiguration
      kubernetesVersion: 1.22.12
      networking:
      dnsDomain: cluster.local
      podSubnet: 10.244.0.0/16
      serviceSubnet: 10.10.0.0/16
      scheduler: {}
      ---
      apiVersion: kubeproxy.config.k8s.io/v1alpha1
      kind: KubeProxyConfiguration
      mode: ipvs


       4.4 master都加入集群后,负载均衡器状态如下:



      文章转载自架构至美,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论