天天看點

青雲LB(負載均衡)與k8s實戰(一)

作者:鍵客小盒子
青雲LB(負載均衡)與k8s實戰(一)

【摘要】基于青雲LB來部署高可用的k8s叢集。

一、前言

對于生産環境,需要考慮叢集的高可用性。如果關鍵元件(例如 kube-apiserver、kube-scheduler 和 kube-controller-manager)在相同的主節點上運作,一旦主節點出現故障,Kubernetes 和 KubeSphere 将不可用。是以,您需要為多個主節點配置負載均衡器,以搭建高可用叢集。您可以使用任何雲負載均衡器或任何硬體負載均衡器(例如 F5)。此外,您也可以使用 Keepalived+HAproxy 或 NGINX 搭建高可用叢集。

二、叢集架構

2.1 負載均衡器建立高可用叢集:

青雲LB(負載均衡)與k8s實戰(一)

2.2 使用 Keepalived 和 HAproxy/Nginx 建立高可用 Kubernetes 叢集:

青雲LB(負載均衡)與k8s實戰(一)

三、高可用方案

通常情況下,我們建立單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之前就是不可用狀态,如下圖所示:

青雲LB(負載均衡)與k8s實戰(一)

4.2 k8s叢集初始化:

kubeadm init --config kubeadm-init.yaml   --upload-certs
##說明:upload-certs 标志用來将在所有控制平面執行個體之間的共享證書上傳到叢集,若是不加會報錯如下:           

不加upload-certs報錯如下:

青雲LB(負載均衡)與k8s實戰(一)

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都加入叢集後,負載均衡器狀态如下:

青雲LB(負載均衡)與k8s實戰(一)

繼續閱讀