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

最簡單的 Kubernetes 高可用安裝方式!

云計(jì)算
本文教你如何用一條命令構(gòu)建 Kubernetes 高可用集群且不依賴 HAProxy 和 Keepalived,也無需 Ansible。通過內(nèi)核 IPVS 對(duì) apiserver 進(jìn)行負(fù)載均衡,并且?guī)?apiserver 健康檢測。

本文教你如何用一條命令構(gòu)建 Kubernetes 高可用集群且不依賴 HAProxy 和 Keepalived,也無需 Ansible。通過內(nèi)核 IPVS 對(duì) apiserver 進(jìn)行負(fù)載均衡,并且?guī)?apiserver 健康檢測。架構(gòu)如下圖所示:

最簡單的 Kubernetes 高可用安裝方式!

本項(xiàng)目名叫 sealos,旨在做一個(gè)簡單干凈輕量級(jí)穩(wěn)定的 Kubernetes 安裝工具,能很好的支持高可用安裝。其實(shí)把一個(gè)東西做的功能強(qiáng)大并不難,但是做到極簡且靈活可擴(kuò)展就比較難。所以在實(shí)現(xiàn)時(shí)就必須要遵循這些原則。

設(shè)計(jì)原則

sealos 特性與優(yōu)勢:

  • 支持離線安裝,工具與資源包(二進(jìn)制程序、配置文件、鏡像 yaml 文件等)分離,這樣不同版本替換不同離線包即可
  • 證書延期
  • 使用簡單
  • 支持自定義配置
  • 內(nèi)核負(fù)載,極其穩(wěn)定,因?yàn)楹唵嗡耘挪閱栴}也極其簡單

為什么不用 Ansible?

1.0 版本確實(shí)是用 Ansible 實(shí)現(xiàn),但是用戶還是需要先裝 Ansible,裝 Ansible 又需要裝 Python 和一些依賴等,為了不讓用戶那么麻煩把 Ansible 放到了容器里供用戶使用。如果不想配置免密鑰使用用戶名密碼時(shí)又需要 ssh-pass 等,總之不能讓我滿意,不是我想的極簡。

所以我想就來一個(gè)二進(jìn)制文件工具,沒有任何依賴,文件分發(fā)與遠(yuǎn)程命令都通過調(diào)用 SDK 實(shí)現(xiàn)所以不依賴其它任何東西,總算讓我這個(gè)有潔癖的人滿意了。

為什么不用 Keepalived 和 HAProxy?

HAProxy 用 static pod 跑沒有太大問題,還算好管理,Keepalived 現(xiàn)在大部分開源 Ansible 腳本都用 yum 或者 apt 等裝,這樣非常的不可控,有如下劣勢:

  • 源不一致可能導(dǎo)致版本不一致,版本不一致連配置文件都不一樣,我曾經(jīng)檢測腳本不生效一直找不到原因,后來才知道是版本原因。
  • 系統(tǒng)原因安裝不上,依賴庫問題某些環(huán)境就直接裝不上了。
  • 看了網(wǎng)上很多安裝腳本,很多檢測腳本與權(quán)重調(diào)節(jié)方式都不對(duì),直接去檢測 HAProxy 進(jìn)程在不在,其實(shí)是應(yīng)該去檢測 apiserver 是不是 healthz 的,如果 apiserver 掛了,即使 HAProxy 進(jìn)程存在,集群也會(huì)不正常了,就是偽高可用了。
  • 管理不方便,通過 Prometheus 對(duì)集群進(jìn)行監(jiān)控,是能直接監(jiān)控到 static pod 的,但是用 systemd 跑又需要單獨(dú)設(shè)置監(jiān)控,且重啟還需要單獨(dú)拉起。不如 kubelet 統(tǒng)一管理來的干凈簡潔。
  • 我們還出現(xiàn)過 Keepalived 把 CPU 占滿的情況。

所以為了解決這個(gè)問題,我把 Keepalived 跑在了容器中(社區(qū)提供的鏡像基本是不可用的),改造中間也是發(fā)生過很多問題,最終好在解決了。

總而言之,累覺不愛,所以在想能不能甩開 HAProxy 和 Keepalived 做出更簡單更可靠的方案出來,還真找到了。

本地負(fù)載為什么不使用 Envoy 或者 Nginx?

我們通過本地負(fù)載解決高可用問題。

解釋一下本地負(fù)載,就是在每個(gè) Node 節(jié)點(diǎn)上都啟動(dòng)一個(gè)負(fù)載均衡,上游就是三個(gè) Master。負(fù)載方式有很多 IPVS、Envoy、Nginx 等,我們最終使用內(nèi)核 IPVS。

如果使用 Envoy 之類的負(fù)載均衡器,則需要在每個(gè)節(jié)點(diǎn)上都跑一個(gè)進(jìn)程,消耗的資源更多,這是我不希望的。IPVS 實(shí)際也多跑了一個(gè)進(jìn)程 LVScare,但是 LVScare 只是負(fù)責(zé)管理 IPVS 規(guī)則,和 kube-proxy 類似,真正的流量還是從很穩(wěn)定的內(nèi)核走的,不需要再把包丟到用戶態(tài)中去處理。

在架構(gòu)實(shí)現(xiàn)上有個(gè)問題會(huì)讓使用 Envoy 等變得非常尷尬,就是 join 時(shí)如果負(fù)載均衡沒有建立那是會(huì)卡住的,kubelet 就不會(huì)起來,所以為此你需要先啟動(dòng) Envoy,意味著你又不能用 static pod 去管理它,同上面 Keepalived 宿主機(jī)部署一樣的問題,用 static pod 就會(huì)相互依賴,邏輯死鎖,雞說要先有蛋,蛋說要先有雞,最后誰都沒有。

使用 IPVS 就不一樣,我可以在 join 之前先把 IPVS 規(guī)則建立好,再去 join 就可以了,然后對(duì)規(guī)則進(jìn)行守護(hù)即可。一旦 apiserver 不可訪問了,會(huì)自動(dòng)清理掉所有 Node 上對(duì)應(yīng)的 IPVS 規(guī)則, 等到 Master 恢復(fù)正常時(shí)添加回來。

為什么要定制 kubeadm?

首先是由于 kubeadm 把證書過期時(shí)間寫死了,所以需要定制把它改成 99 年,雖然大部分人可以自己去簽個(gè)新證書,但是我們還是不想再依賴個(gè)別的工具,就直接改源碼了。

其次就是做本地負(fù)載時(shí)修改 kubeadm 代碼是最方便的,因?yàn)樵?join 時(shí)我們需要做兩個(gè)事,第一是 join 之前先創(chuàng)建好 IPVS 規(guī)則,第二是創(chuàng)建 static pod。如果這塊不去定制 kubeadm 就報(bào)靜態(tài) Pod 目錄已存在的錯(cuò)誤,忽略這個(gè)錯(cuò)誤很不優(yōu)雅。而且 kubeadm 中已經(jīng)提供了一些很好用的 SDK 供我們?nèi)?shí)現(xiàn)這個(gè)功能。

且這樣做之后最核心的功能都集成到 kubeadm 中了,sealos 就單單變成分發(fā)和執(zhí)行上層命令的輕量級(jí)工具了,增加節(jié)點(diǎn)時(shí)我們也就可以直接用 kubeadm 了。

使用教程

安裝依賴

  1. 安裝并啟動(dòng) Docker
  2. 下載 Kubernetes 離線安裝包
  3. 下載最新版本 sealos
  4. 支持 Kubernetes 1.14.0+
  5. 務(wù)必同步服務(wù)器時(shí)間

安裝

多 Master HA 只需執(zhí)行以下命令: 

  1. $ sealos init --master 192.168.0.2 \ 
  2. --master 192.168.0.3 \ 
  3. --master 192.168.0.4 \ 
  4. --node 192.168.0.5 \ 
  5. --user root \ 
  6. --passwd your-server-password \ 
  7. --version v1.14.1 \ 
  8. --pkg-url /root/kube1.14.1.tar.gz 

然后,就沒有然后了……沒錯(cuò),你的高可用集群已經(jīng)裝好了,是不是覺得一臉懵逼?就是這么簡單快捷!

單 Master 多 Node: 

  1. $ sealos init --master 192.168.0.2 \ 
  2. --node 192.168.0.5 \  
  3. --user root \ 
  4. --passwd your-server-password \ 
  5. --version v1.14.1 \ 
  6. --pkg-url /root/kube1.14.1.tar.gz  

使用免密鑰或者密鑰對(duì): 

  1. $ sealos init --master 172.16.198.83 \ 
  2. --node 172.16.198.84 \ 
  3. --pkg-url https://sealyun.oss-cn-beijing.aliyuncs.com/free/kube1.15.0.tar.gz \ 
  4. --pk /root/kubernetes.pem # this is your ssh private key file \ 
  5. --version v1.15.0 

參數(shù)解釋: 

  1. --master   master服務(wù)器地址列表 
  2. --node     node服務(wù)器地址列表 
  3. --user     服務(wù)器ssh用戶名 
  4. --passwd   服務(wù)器ssh用戶密碼 
  5. --pkg-url  離線包位置,可以放在本地目錄,也可以放在一個(gè) http 服務(wù)器上,sealos 會(huì) wget 到安裝目標(biāo)機(jī) 
  6. --version  kubernetes 版本 
  7. --pk       ssh 私鑰地址,配置免密鑰默認(rèn)就是 /root/.ssh/id_rsa 

其他參數(shù): 

  1. --kubeadm-config string kubeadm-config.yaml kubeadm 配置文件,可自定義 kubeadm 配置文件  
  2. --vip string virtual ip(default "10.103.97.2")本地負(fù)載時(shí)虛擬 IP,不推薦修改,集群外不可訪問 

檢查安裝是否正常: 

  1. $ kubectl get node 
  2. NAME                      STATUS   ROLES    AGE     VERSION 
  3. izj6cdqfqw4o4o9tc0q44rz   Ready    master   2m25s   v1.14.1 
  4. izj6cdqfqw4o4o9tc0q44sz   Ready    master   119s    v1.14.1 
  5. izj6cdqfqw4o4o9tc0q44tz   Ready    master   63s     v1.14.1 
  6. izj6cdqfqw4o4o9tc0q44uz   Ready    <none>   38s     v1.14.1 
  7.  
  8. $ kubectl get pod --all-namespaces 
  9. NAMESPACE     NAME                                              READY   STATUS    RESTARTS   AGE 
  10. kube-system   calico-kube-controllers-5cbcccc885-9n2p8          1/1     Running   0          3m1s 
  11. kube-system   calico-node-656zn                                 1/1     Running   0          93s 
  12. kube-system   calico-node-bv5hn                                 1/1     Running   0          2m54s 
  13. kube-system   calico-node-f2vmd                                 1/1     Running   0          3m1s 
  14. kube-system   calico-node-tbd5l                                 1/1     Running   0          118s 
  15. kube-system   coredns-fb8b8dccf-8bnkv                           1/1     Running   0          3m1s 
  16. kube-system   coredns-fb8b8dccf-spq7r                           1/1     Running   0          3m1s 
  17. kube-system   etcd-izj6cdqfqw4o4o9tc0q44rz                      1/1     Running   0          2m25s 
  18. kube-system   etcd-izj6cdqfqw4o4o9tc0q44sz                      1/1     Running   0          2m53s 
  19. kube-system   etcd-izj6cdqfqw4o4o9tc0q44tz                      1/1     Running   0          118s 
  20. kube-system   kube-apiserver-izj6cdqfqw4o4o9tc0q44rz            1/1     Running   0          2m15s 
  21. kube-system   kube-apiserver-izj6cdqfqw4o4o9tc0q44sz            1/1     Running   0          2m54s 
  22. kube-system   kube-apiserver-izj6cdqfqw4o4o9tc0q44tz            1/1     Running   1          47s 
  23. kube-system   kube-controller-manager-izj6cdqfqw4o4o9tc0q44rz   1/1     Running   1          2m43s 
  24. kube-system   kube-controller-manager-izj6cdqfqw4o4o9tc0q44sz   1/1     Running   0          2m54s 
  25. kube-system   kube-controller-manager-izj6cdqfqw4o4o9tc0q44tz   1/1     Running   0          63s 
  26. kube-system   kube-proxy-b9b9z                                  1/1     Running   0          2m54s 
  27. kube-system   kube-proxy-nf66n                                  1/1     Running   0          3m1s 
  28. kube-system   kube-proxy-q2bqp                                  1/1     Running   0          118s 
  29. kube-system   kube-proxy-s5g2k                                  1/1     Running   0          93s 
  30. kube-system   kube-scheduler-izj6cdqfqw4o4o9tc0q44rz            1/1     Running   1          2m43s 
  31. kube-system   kube-scheduler-izj6cdqfqw4o4o9tc0q44sz            1/1     Running   0          2m54s 
  32. kube-system   kube-scheduler-izj6cdqfqw4o4o9tc0q44tz            1/1     Running   0          61s 
  33. kube-system   kube-sealyun-lvscare-izj6cdqfqw4o4o9tc0q44uz      1/1     Running   0  

增加節(jié)點(diǎn)

先獲取 join command,在 Master 上執(zhí)行:

  1. $ kubeadm token create --print-join-command 

可以使用超級(jí) kubeadm,但是 join 時(shí)需要增加一個(gè) --master 參數(shù): 

  1. $ cd kube/shell && init.sh  
  2. $ echo "10.103.97.2 apiserver.cluster.local" >> /etc/hosts # using vip  
  3. $ kubeadm join 10.103.97.2:6443 --token 9vr73a.a8uxyaju799qwdjv \  
  4. --master 10.103.97.100:6443 \  
  5. --master 10.103.97.101:6443 \  
  6. --master 10.103.97.102:6443 \  
  7. --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866 

也可以用 sealos join 命令: 

  1. $ sealos join --master 192.168.0.2 \ 
  2. --master 192.168.0.3 \ 
  3. --master 192.168.0.4 \ 
  4. --vip 10.103.97.2 \ 
  5. --node 192.168.0.5 \ 
  6. --user root \ 
  7. --passwd your-server-password \ 
  8. --pkg-url /root/kube1.15.0.tar.gz 

使用自定義 kubeadm 配置文件

有時(shí)你可能需要自定義 kubeadm 的配置文件,比如要在證書里加入域名 sealyun.com。

首先需要獲取配置文件模板:

  1. $ sealos config -t kubeadm >> kubeadm-config.yaml.tmpl 

然后修改 kubeadm-config.yaml.tmpl 即可,將 sealyun.com 添加到配置中: 

  1. apiVersion: kubeadm.k8s.io/v1beta1 
  2. kind: ClusterConfiguration 
  3. kubernetesVersion: {{.Version}} 
  4. controlPlaneEndpoint: "apiserver.cluster.local:6443" 
  5. networking: 
  6. podSubnet: 100.64.0.0/10 
  7. apiServer: 
  8.     certSANs: 
  9.     - sealyun.com # this is what I added 
  10.     - 127.0.0.1 
  11.     - apiserver.cluster.local 
  12.     {{range .Masters -}} 
  13.     - {{.}} 
  14.     {{end -}} 
  15.     - {{.VIP}} 
  16. --- 
  17. apiVersion: kubeproxy.config.k8s.io/v1alpha1 
  18. kind: KubeProxyConfiguration 
  19. mode: "ipvs" 
  20. ipvs: 
  21.     excludeCIDRs:  
  22.     - "{{.VIP}}/32" 

注意:其它部分不用修改,sealos 會(huì)自動(dòng)填充模板里面的內(nèi)容。

最后在部署時(shí)使用 --kubeadm-config 指定配置文件模板即可: 

  1. $ sealos init --kubeadm-config kubeadm-config.yaml.tmpl \ 
  2. --master 192.168.0.2 \ 
  3. --master 192.168.0.3 \ 
  4. --master 192.168.0.4 \ 
  5. --node 192.168.0.5 \ 
  6. --user root \ 
  7. --passwd your-server-password \ 
  8. --version v1.14.1 \ 
  9. --pkg-url /root/kube1.14.1.tar.gz  

版本升級(jí)

本教程以 1.14 版本升級(jí)到 1.15 為例,其它版本原理類似,懂了這個(gè)其它的參考官方教程即可。

升級(jí)過程

  1. 升級(jí) kubeadm,所有節(jié)點(diǎn)導(dǎo)入鏡像
  2. 升級(jí)控制節(jié)點(diǎn)
  3. 升級(jí) Master(控制節(jié)點(diǎn))上的 kubelet
  4. 升級(jí)其它 Master(控制節(jié)點(diǎn))
  5. 升級(jí) Node
  6. 驗(yàn)證集群狀態(tài)

升級(jí) kubeadm

把離線包拷貝到所有節(jié)點(diǎn)執(zhí)行 cd kube/shell && sh init.sh。這里會(huì)把 kubeadm、kubectl、kubelet 的二進(jìn)制文件都更新掉,而且會(huì)導(dǎo)入高版本鏡像。

升級(jí)控制節(jié)點(diǎn) 

  1. $ kubeadm upgrade plan  
  2. $ kubeadm upgrade apply v1.15.0 

重啟 kubelet:

  1. $ systemctl restart kubelet 

其實(shí) kubelet 升級(jí)很簡單粗暴,我們只需要把新版本的 kubelet 拷貝到 /usr/bin 下面,重啟 kubelet service 即可,如果程序正在使用不讓覆蓋那么就停一下 kubelet 再進(jìn)行拷貝,kubelet bin 文件在 conf/bin 目錄下。

升級(jí)其它控制節(jié)點(diǎn):

  1. $ kubeadm upgrade apply 

升級(jí) Node

驅(qū)逐節(jié)點(diǎn)(要不要驅(qū)逐看情況, 喜歡粗暴的直接來也沒啥):

  1. $ kubectl drain $NODE --ignore-daemonsets 

更新 kubelet 配置:

  1. $ kubeadm upgrade node config --kubelet-version v1.15.0 

然后升級(jí) kubelet。同樣是替換二進(jìn)制再重啟 kubelet service。

  1. $ systemctl restart kubelet 

召回失去的愛情:

  1. $ kubectl uncordon $NODE 

驗(yàn)證

  1. $ kubectl get nodes 

如果版本信息都對(duì)的話基本就升級(jí)成功了。

kubeadm upgrade apply 干了啥?

  1. 檢查集群是否可升級(jí)
  2. 執(zhí)行版本升級(jí)策略 哪些版本之間可以升級(jí)
  3. 確認(rèn)鏡像是否存在
  4. 執(zhí)行控制組件升級(jí),如果失敗就回滾,其實(shí)就是 apiserver、controller manager、scheduler 等這些容器
  5. 升級(jí) kube-dns 和 kube-proxy
  6. 創(chuàng)建新的證書文件,備份老的如果其超過 180 天

源碼編譯

因?yàn)槭褂昧?netlink 庫,所以推薦在容器內(nèi)進(jìn)行編譯,只需一條命令:

  1. $ docker run --rm -v $GOPATH/src/github.com/fanux/sealos:/go/src/github.com/fanux/sealos -w /go/src/github.com/fanux/sealos -it golang:1.12.7 go build 

如果你使用的是 go mod,則需要指定通過 vendor 編譯:

  1. $ go build -mod vendor 

卸載 

  1. $ sealos clean \ 
  2. --master 192.168.0.2 \ 
  3. --master 192.168.0.3 \ 
  4. --master 192.168.0.4 \ 
  5. --node 192.168.0.5 \ 
  6. --user root \ 
  7. --passwd your-server-password 

sealos 實(shí)現(xiàn)原理

執(zhí)行流程

  • 通過 sftp 或者 wget 把離線安裝包拷貝到目標(biāo)機(jī)器上(masters 和 nodes)。
  • 在 master0 上執(zhí)行 kubeadm init。
  • 在其它 Master 上執(zhí)行 kubeadm join 并設(shè)置控制面,這個(gè)過程會(huì)在其它 Master 上起動(dòng) etcd 并與 master0 的 etcd 組成集群,并啟動(dòng)控制平面的組件(apiserver、controller 等)。
  • join node 節(jié)點(diǎn),會(huì)在 Node 上配置 IPVS 規(guī)則,配置 /etc/hosts 等。

所有對(duì) apiserver 的請(qǐng)求都是通過域名進(jìn)行訪問,因?yàn)?Node 需要通過虛擬 IP 連接多個(gè) Master,每個(gè)節(jié)點(diǎn)的 kubelet 與 kube-proxy 訪問 apiserver 的虛擬地址是不一樣的,而 kubeadm 又只能在配置文件中指定一個(gè)地址,所以使用一個(gè)域名但是每個(gè)節(jié)點(diǎn)解析的 IP 不同。當(dāng) IP 地址發(fā)生變化時(shí)僅需要修改解析地址即可。

本地內(nèi)核負(fù)載

通過這樣的方式實(shí)現(xiàn)每個(gè) Node 上通過本地內(nèi)核負(fù)載均衡訪問 masters: 

  1. +----------+                       +---------------+  virturl server: 127.0.0.1:6443 
  2. | mater0   |<----------------------| ipvs nodes    |    real servers: 
  3. +----------+                      |+---------------+            10.103.97.200:6443 
  4.                                 |                             10.103.97.201:6443 
  5. +----------+                      |                             10.103.97.202:6443 
  6. | mater1   |<---------------------+ 
  7. +----------+                      | 
  8.                                 | 
  9. +----------+                      | 
  10. | mater2   |<---------------------+ 
  11. +----------+ 

在 Node 上起了一個(gè) LVScare 的 static pod 去守護(hù)這個(gè) IPVS,一旦 apiserver 不可訪問了,會(huì)自動(dòng)清理掉所有 Node 上對(duì)應(yīng)的 IPVS 規(guī)則, Master 恢復(fù)正常時(shí)添加回來。

所以在你的 Node 上加了三個(gè)東西,可以直觀的看到: 

  1. $ cat /etc/kubernetes/manifests   # 這下面增加了 LVScare 的 static pod 
  2. $ ipvsadm -Ln                     # 可以看到創(chuàng)建的 IPVS 規(guī)則 
  3. $ cat /etc/hosts                  # 增加了虛擬IP的地址解析 

定制 kubeadm

sealos 對(duì) kubeadm 改動(dòng)非常少,主要是延長了證書過期時(shí)間和擴(kuò)展了 join 命令。下面主要講講對(duì) join 命令的改造。

首先 join 命令增加 --master 參數(shù)用于指定 Master 地址列表: 

  1. lagSet.StringSliceVar( 
  2. &locallb.LVScare.Masters, "master", []string{}, 
  3. "A list of ha masters, --master 192.168.0.2:6443  --master 192.168.0.2:6443  --master 192.168.0.2:6443"

這樣就可以拿到 Master 地址列表去做 IPVS 負(fù)載均衡了。

如果不是控制節(jié)點(diǎn)且不是單 Master,那么就只創(chuàng)建一條 IPVS 規(guī)則,控制節(jié)點(diǎn)上不需要?jiǎng)?chuàng)建,連自己的 apiserver 即可: 

  1. if data.cfg.ControlPlane == nil { 
  2.         fmt.Println("This is not a control plan"
  3.         if len(locallb.LVScare.Masters) != 0 { 
  4.             locallb.CreateLocalLB(args[0]) 
  5.         } 
  6.     }  

然后再去創(chuàng)建 lvscare static pod 來守護(hù) IPVS: 

  1. if len(locallb.LVScare.Masters) != 0 { 
  2.             locallb.LVScareStaticPodToDisk("/etc/kubernetes/manifests"
  3.         }  

所以哪怕你不使用 sealos,也可以直接用定制過的 kubeadm 去部署集群,只是麻煩一些。下面給出安裝步驟。

kubeadm 配置文件: 

  1. apiVersion: kubeadm.k8s.io/v1beta1 
  2. kind: ClusterConfiguration 
  3. kubernetesVersion: v1.14.0 
  4. controlPlaneEndpoint: "apiserver.cluster.local:6443" # apiserver DNS name 
  5. apiServer: 
  6.     certSANs: 
  7.     - 127.0.0.1 
  8.     - apiserver.cluster.local 
  9.     - 172.20.241.205 
  10.     - 172.20.241.206 
  11.     - 172.20.241.207 
  12.     - 172.20.241.208 
  13.     - 10.103.97.1          # virturl ip 
  14. --- 
  15. apiVersion: kubeproxy.config.k8s.io/v1alpha1 
  16. kind: KubeProxyConfiguration 
  17. mode: "ipvs" 
  18. ipvs: 
  19.     excludeCIDRs:  
  20.     - "10.103.97.1/32" # 注意不加這個(gè)kube-proxy會(huì)清理你的規(guī)則 

在 master0(假設(shè) vip 地址為 10.103.97.100)上執(zhí)行以下命令: 

  1. $ echo "10.103.97.100 apiserver.cluster.local" >> /etc/hosts # 解析的是 master0 的地址  
  2. $ kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs  
  3. $ mkdir ~/.kube && cp /etc/kubernetes/admin.conf ~/.kube/config  
  4. $ kubectl apply -f https://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml 

在 master1(假設(shè) vip 地址為 10.103.97.101)上執(zhí)行以下命令: 

  1. $ echo "10.103.97.100 apiserver.cluster.local" >> /etc/hosts #解析的是 master0 的地址,為了能正常 join 進(jìn)去 
  2. $ kubeadm join 10.103.97.100:6443 --token 9vr73a.a8uxyaju799qwdjv \ 
  3. --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866 \ 
  4. --experimental-control-plane \ 
  5. --certificate-key f8902e114ef118304e561c3ecd4d0b543adc226b7a07f675f56564185ffe0c07  
  6.  
  7. $ sed "s/10.103.97.100/10.103.97.101/g" -i /etc/hosts  # 解析再換成自己的地址,否則就都依賴 ma 

在 master2(假設(shè) vip 地址為 10.103.97.102)上執(zhí)行以下命令: 

  1. $ echo "10.103.97.100 apiserver.cluster.local" >> /etc/hosts 
  2. $ kubeadm join 10.103.97.100:6443 --token 9vr73a.a8uxyaju799qwdjv \ 
  3. --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866 \ 
  4. --experimental-control-plane \ 
  5. --certificate-key f8902e114ef118304e561c3ecd4d0b543adc226b7a07f675f56564185ffe0c07   
  6.  
  7. $ sed "s/10.103.97.100/10.103.97.102/g" -i /etc/hosts 

在 node 上 join 時(shí)加上 --master 參數(shù)指定 master 地址列表: 

  1. $ echo "10.103.97.1 apiserver.cluster.local" >> /etc/hosts   # 需要解析成虛擬 ip 
  2. $ kubeadm join 10.103.97.1:6443 --token 9vr73a.a8uxyaju799qwdjv \ 
  3. --master 10.103.97.100:6443 \ 
  4. --master 10.103.97.101:6443 \ 
  5. --master 10.103.97.102:6443 \ 
  6. --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720 

離線包結(jié)構(gòu)分析 

  1. ├── bin  # 指定版本的bin文件,只需要這三個(gè),其它組件跑容器里 
  2. │   ├── kubeadm 
  3. │   ├── kubectl 
  4. │   └── kubelet 
  5. ├── conf 
  6. │   ├── 10-kubeadm.conf  # 這個(gè)文件新版本沒用到,我在shell里直接生成,這樣可以檢測cgroup driver 
  7. │   ├── dashboard 
  8. │   │   ├── dashboard-admin.yaml 
  9. │   │   └── kubernetes-dashboard.yaml 
  10. │   ├── heapster 
  11. │   │   ├── grafana.yaml 
  12. │   │   ├── heapster.yaml 
  13. │   │   ├── influxdb.yaml 
  14. │   │   └── rbac 
  15. │   │       └── heapster-rbac.yaml 
  16. │   ├── kubeadm.yaml # kubeadm的配置文件 
  17. │   ├── kubelet.service  # kubelet systemd配置文件 
  18. │   ├── net 
  19. │   │   └── calico.yaml 
  20. │   └── promethus 
  21. ├── images  # 所有鏡像包 
  22. │   └── images.tar 
  23. └── shell 
  24. ├── init.sh  # 初始化腳本 
  25. └── master.sh # 運(yùn)行master腳本 
  • init.sh 腳本會(huì)將 bin 目錄下的二進(jìn)制文件拷貝到 $PATH 下面,并配置好 systemd,關(guān)閉 swap 和防火墻等等,然后導(dǎo)入集群所需要的鏡像。
  • master.sh 主要執(zhí)行了 kubeadm init。
  • conf 目錄下面包含了 kubeadm 的配置文件,calico yaml 文件等等。
  • sealos 會(huì)調(diào)用上面的兩個(gè)腳本,所以大部分兼容。不同版本都可以通過微調(diào)腳本來保持兼容。

 

 

責(zé)任編輯:未麗燕 來源: Dockone.in
相關(guān)推薦

2024-12-09 00:00:09

2022-07-08 14:17:18

Kubernetes集群高可用Linux

2021-05-14 07:02:00

Python方式應(yīng)用

2011-02-17 11:19:24

Linux Live

2023-08-21 15:28:36

云原生Kubernetes

2023-12-18 09:37:37

2021-06-17 06:29:16

kube-vip Kubernetes開源項(xiàng)目

2021-03-17 10:05:42

KubernetesRedis數(shù)據(jù)庫

2021-11-02 17:27:40

部署高可用Kubernetes

2013-07-02 15:23:08

MySQL MHA故障轉(zhuǎn)移

2009-12-02 15:32:51

路由器怎樣安裝

2022-09-02 16:59:13

Kubernetes高可用Linux

2020-06-02 10:43:54

Kubernetes容器服務(wù)

2021-09-09 07:45:25

kube-vip Kuberneteshostname

2022-03-01 23:27:08

開發(fā)架構(gòu)服務(wù)端

2024-07-25 08:39:48

2010-12-30 10:10:06

NetLinux學(xué)習(xí)

2021-03-04 13:10:32

KubernetesRedisLinux

2019-02-19 10:30:29

VirtualBoxKali Linux虛擬機(jī)

2020-09-18 10:31:47

LRU算法數(shù)組
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久久久久久久久影视 | 97精品超碰一区二区三区 | 中文字幕亚洲国产 | 涩爱av一区二区三区 | 国产一区亚洲二区三区 | 亚洲国产一区二区三区四区 | 久久综合一区 | 国产成人精品一区二区三区在线 | 麻豆国产一区二区三区四区 | 久久蜜桃资源一区二区老牛 | wwwsihu| 国产精品久久久久久久久久久免费看 | 亚洲精品资源 | 免费黄网站在线观看 | 久久国产精品免费 | 国产一区二区自拍 | 免费观看av网站 | 欧美激情国产日韩精品一区18 | 久久免费视频2 | 国产日韩精品视频 | 精品一区二区三区不卡 | 国产精品有限公司 | 亚洲精品一区久久久久久 | 亚洲 欧美 日韩 在线 | 久久久久久久久久久久久久久久久久久久 | 欧美日韩久久 | 四虎在线视频 | 亚洲在线一区 | 福利片在线观看 | 欧美综合在线观看 | 国产一级在线观看 | 亚洲一区精品在线 | 午夜精品一区二区三区在线播放 | 丁香久久| 欧美激情 亚洲 | 久久com | 免费高清av | av大片| 天天天天操 | 91五月天| 日韩国产在线观看 |