成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 kube-vip 搭建高可用 Kubernetes 集群

開源
Kube-Vip 最初是為 Kubernetes 控制平面提供 HA 解決方案而創建的,隨著時間的推移,它已經發展為將相同的功能合并到 Kubernetes 的 LoadBalancer 類型的 Service 中了。

[[406052]]

kube-vip 可以在你的控制平面節點上提供一個 Kubernetes 原生的 HA 負載均衡,我們不需要再在外部設置 HAProxy 和 Keepalived 來實現集群的高可用了。

kube-vip 是一個為 Kubernetes 集群內部和外部提供高可用和負載均衡的開源項目,在 Vmware 的 Tanzu 項目中已經使用 kube-vip 替換了用于 vSphere 部署的 HAProxy 負載均衡器,本文我們將先來了解 kube-vip 如何用于 Kubernetes 控制平面的高可用和負載均衡功能。

特點

Kube-Vip 最初是為 Kubernetes 控制平面提供 HA 解決方案而創建的,隨著時間的推移,它已經發展為將相同的功能合并到 Kubernetes 的 LoadBalancer 類型的 Service 中了。

  • VIP 地址可以是 IPv4 或 IPv6
  • 帶有 ARP(第2層)或 BGP(第3層)的控制平面
  • 使用領導選舉或 raft 控制平面
  • 帶有 kubeadm(靜態 Pod)的控制平面 HA
  • 帶有 K3s/和其他(DaemonSets)的控制平面 HA
  • 使用 ARP 領導者選舉的 Service LoadBalancer(第 2 層)
  • 通過 BGP 使用多個節點的 Service LoadBalancer
  • 每個命名空間或全局的 Service LoadBalancer 地址池
  • Service LoadBalancer 地址通過 UPNP 暴露給網關

HAProxy 和 kube-vip 的 HA 集群

在以前我們在私有環境下創建 Kubernetes 集群時,我們需要準備一個硬件/軟件的負載均衡器來創建多控制面集群,更多的情況下我們會選擇使用 HAProxy + Keepalived 來實現這個功能。一般情況下我們創建2個負載均衡器的虛擬機,然后分配一個 VIP,然后使用 VIP 為負載均衡器提供服務,通過 VIP 將流量重定向到后端的某個 Kubernetes 控制器平面節點上。

接下來我們再來看看如果我們使用 kube-vip 的話會怎樣呢?

kube-vip 可以通過靜態 pod 運行在控制平面節點上,這些 pod 通過ARP 對話來識別每個節點上的其他主機,所以需要在 hosts 文件中設置每個節點的 IP 地址,我們可以選擇 BGP 或 ARP 來設置負載平衡器,這與 Metal LB 比較類似。這里我們沒有 BGP 服務,只是想快速測試一下,所以這里我們使用 ARP 與靜態 pod 的方式。

kube-vip 架構

kube-vip 有許多功能設計選擇提供高可用性或網絡功能,作為VIP/負載平衡解決方案的一部分。

Cluster

kube-vip 建立了一個多節點或多模塊的集群來提供高可用性。在 ARP 模式下,會選出一個領導者,這個節點將繼承虛擬 IP 并成為集群內負載均衡的領導者,而在 BGP 模式下,所有節點都會通知 VIP 地址。

當使用 ARP 或 layer2 時,它將使用領導者選舉,當然也可以使用 raft 集群技術,但這種方法在很大程度上已經被領導者選舉所取代,特別是在集群中運行時。

虛擬IP

集群中的領導者將分配 vip,并將其綁定到配置中聲明的選定接口上。當領導者改變時,它將首先撤銷 vip,或者在失敗的情況下,vip 將直接由下一個當選的領導者分配。

當 vip 從一個主機移動到另一個主機時,任何使用 vip 的主機將保留以前的 vip <-> MAC 地址映射,直到 ARP 過期(通常是30秒)并檢索到一個新的 vip <-> MAC 映射,這可以通過使用無償的 ARP 廣播來優化。

ARP

kube-vip可以被配置為廣播一個無償的 arp(可選),通常會立即通知所有本地主機 vip <-> MAC 地址映射已經改變。

下面我們可以看到,當 ARP 廣播被接收時,故障轉移通常在幾秒鐘內完成。

  1. 64 bytes from 192.168.0.75: icmp_seq=146 ttl=64 time=0.258 ms 
  2. 64 bytes from 192.168.0.75: icmp_seq=147 ttl=64 time=0.240 ms 
  3. 92 bytes from 192.168.0.70: Redirect Host(New addr: 192.168.0.75) 
  4. Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst 
  5.  4  5  00 0054 bc98   0 0000  3f  01 3d16 192.168.0.95  192.168.0.75 
  6.  
  7. Request timeout for icmp_seq 148 
  8. 92 bytes from 192.168.0.70: Redirect Host(New addr: 192.168.0.75) 
  9. Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst 
  10.  4  5  00 0054 75ff   0 0000  3f  01 83af 192.168.0.95  192.168.0.75 
  11.  
  12. Request timeout for icmp_seq 149 
  13. 92 bytes from 192.168.0.70: Redirect Host(New addr: 192.168.0.75) 
  14. Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst 
  15.  4  5  00 0054 2890   0 0000  3f  01 d11e 192.168.0.95  192.168.0.75 
  16.  
  17. Request timeout for icmp_seq 150 
  18. 64 bytes from 192.168.0.75: icmp_seq=151 ttl=64 time=0.245 ms 

使用 kube-vip

接下來我們來使用 kube-vip 搭建一個高可用的 Kubernetes 集群。先準備6個節點:

  • 3個控制平面節點
  • 3個 worker 節點

首先在宿主機上面安裝相關依賴,包括 kubeadm、kubelet、kubectl 以及一個容器運行時,這里我們使用的是 containerd。

獲取 kube-vip 的 docker 鏡像,并在 /etc/kuberentes/manifests 中設置靜態 pod 的 yaml 資源清單文件,這樣 Kubernetes 就會自動在每個控制平面節點上部署 kube-vip 的 pod 了。

  1. # 設置VIP地址 
  2. export VIP=192.168.0.100 
  3. export INTERFACE=eth0 
  4. ctr image pull docker.io/plndr/kube-vip:0.3.1 
  5. ctr run --rm --net-host docker.io/plndr/kube-vip:0.3.1 vip \ 
  6. /kube-vip manifest pod \ 
  7. --interface $INTERFACE \ 
  8. --vip $VIP \ 
  9. --controlplane \ 
  10. --services \ 
  11. --arp \ 
  12. --leaderElection | tee  /etc/kubernetes/manifests/kube-vip.yaml 

接下來就可以配置 kubeadm 了,如下所示:

  1. cat > ~/init_kubelet.yaml <<EOF 
  2. apiVersion: kubeadm.k8s.io/v1beta2 
  3. kind: InitConfiguration 
  4. bootstrapTokens: 
  5. - token: "9a08jv.c0izixklcxtmnze7" 
  6. description: "kubeadm bootstrap token" 
  7. ttl: "24h" 
  8. nodeRegistration: 
  9. criSocket: "/var/run/containerd/containerd.sock" 
  10. --- 
  11. apiVersion: kubeadm.k8s.io/v1beta2 
  12. kind: ClusterConfiguration 
  13. controlPlaneEndpoint: "192.168.0.100:6443" 
  14. --- 
  15. apiVersion: kubelet.config.k8s.io/v1beta1 
  16. kind: KubeletConfiguration 
  17. cgroupDriver: "systemd" 
  18. protectKernelDefaults: true 
  19. EOF 
  20. kubeadm init --config init_kubelet.yaml --upload-certs 

 然后安裝 CNI,比如我們選擇使用 Cilium。

  1. curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash 
  2. helm repo add cilium https://helm.cilium.io/ 
  3. helm install cilium cilium/cilium --version 1.9.4 \ 
  4. --namespace kube-system 

在第一個控制平面節點準備好后,讓其他節點加入你的集群。對于其他控制平面節點,運行如下命令:

  1. kubeadm join 192.168.0.100:6443 --token hash.hash\ 
  2.      --discovery-token-ca-cert-hash sha256:hash \ 
  3.      --control-plane --certificate-key key 

對于工作節點,運行類似命令:

  1. kubeadm join 192.168.0.100:6443 --token hash.hash\ 
  2.     --discovery-token-ca-cert-hash sha256:hash 

正常執行完成后集群就可以啟動起來了:

  1. # kubectl get node -o wide 
  2. NAME           STATUS   ROLES                  AGE    VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME 
  3. k8s-master-0   Ready    control-plane,master   121m   v1.20.2   192.168.0.201   <none>        Ubuntu 20.04.2 LTS   5.4.0-45-generic   containerd://1.4.3 
  4. k8s-master-1   Ready    control-plane,master   114m   v1.20.2   192.168.0.202   <none>        Ubuntu 20.04.2 LTS   5.4.0-45-generic   containerd://1.4.3 
  5. k8s-master-2   Ready    control-plane,master   113m   v1.20.2   192.168.0.203   <none>        Ubuntu 20.04.2 LTS   5.4.0-45-generic   containerd://1.4.3 
  6. k8s-worker-0   Ready    <none>                 114m   v1.20.2   192.168.0.204   <none>        Ubuntu 20.04.2 LTS   5.4.0-45-generic   containerd://1.4.3 
  7. k8s-worker-1   Ready    <none>                 114m   v1.20.2   192.168.0.205   <none>        Ubuntu 20.04.2 LTS   5.4.0-45-generic   containerd://1.4.3 
  8. k8s-worker-2   Ready    <none>                 112m   v1.20.2   192.168.0.206   <none>        Ubuntu 20.04.2 LTS   5.4.0-45-generic   containerd://1.4.3 

現在可以看到我們的控制面的端點是 192.168.0.100,沒有其他額外的節點,是不是非常方便。

參考文檔:https://inductor.medium.com/say-good-bye-to-haproxy-and-keepalived-with-kube-vip-on-your-ha-k8s-control-plane-bb7237eca9fc

 

責任編輯:姜華 來源: k8s技術圈
相關推薦

2021-09-09 07:45:25

kube-vip Kuberneteshostname

2023-11-13 09:03:10

2020-10-28 07:10:07

Nginx高可用高并發

2017-11-13 11:07:32

Nginx搭建高可用

2023-10-27 08:03:29

Kubernetes開源工具

2022-07-08 14:17:18

Kubernetes集群高可用Linux

2023-12-18 09:37:37

2014-10-09 10:04:23

CentOS集群

2021-03-17 10:05:42

KubernetesRedis數據庫

2022-03-24 07:44:41

OPA安全策略Rego

2019-10-09 16:02:16

NginxKeepalivedLvs

2022-09-02 16:59:13

Kubernetes高可用Linux

2020-10-28 11:20:18

RabbitMQHAProxy運維

2023-11-07 07:30:18

Hadoop高可用

2012-02-15 22:40:23

heartbeat高可用

2021-03-04 13:10:32

KubernetesRedisLinux

2019-07-02 08:38:45

NginxTomcatKeepalived

2023-11-29 09:29:48

Kuberneteskube

2017-02-06 11:43:57

ZooKeeper集群

2017-02-19 19:57:05

ZooKeeper集群
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久久久冷 | 国产a视频| 国产成人99久久亚洲综合精品 | 99小视频| 久久久女女女女999久久 | 一区二区视频免费观看 | 欧美精品在线播放 | 精品国产乱码久久久久久影片 | 三级黄片毛片 | 韩国精品在线观看 | 成人在线一区二区三区 | av一区二区三区 | 你懂的在线视频播放 | 中文字幕97 | 国产一级片一区二区 | 在线观看黄色电影 | 在线观看日本网站 | 超碰免费在 | 成人在线免费观看 | 中文字幕日韩在线 | 精品久久一区 | 天天看逼 | 亚洲成人网在线播放 | 999精品视频 | 一级在线免费观看 | 国产中文字幕在线 | 国产成人在线播放 | 99re视频在线 | av免费网站在线观看 | 91玖玖| 成人av在线播放 | av影音资源| 精品日韩一区二区三区av动图 | xxx国产精品视频 | 亚洲第一av网站 | 久久激情视频 | 亚洲精品第一 | 欧美成年黄网站色视频 | 欧美成人a∨高清免费观看 91伊人 | 亚洲日韩中文字幕一区 | 999久久久久久久久6666 |