W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
本文講述了使用 kubeadm 設(shè)置一個(gè)高可用的 Kubernetes 集群的兩種不同方式:
如果你在安裝 HA 集群時(shí)遇到問(wèn)題,請(qǐng)?jiān)?nbsp;kubeadm 問(wèn)題跟蹤里向我們提供反饋。
Caution: 這篇文檔沒(méi)有講述在云提供商上運(yùn)行集群的問(wèn)題。在云環(huán)境中,此處記錄的方法不適用于類(lèi)型為 LoadBalancer 的服務(wù)對(duì)象,或者具有動(dòng)態(tài)的 PersistentVolumes。
根據(jù)集群控制平面所選擇的拓?fù)浣Y(jié)構(gòu)不同,準(zhǔn)備工作也有所差異:
需要準(zhǔn)備:
sudo
?舉例kubeadm
?和 ?kubelet
?需要準(zhǔn)備:
sudo
?舉例kubeadm
?和 ?kubelet
?還需要準(zhǔn)備:
kubeadm
?和 ?kubelet
?。每臺(tái)主機(jī)需要能夠從 Kubernetes 容器鏡像倉(cāng)庫(kù)( ?k8s.gcr.io
? )讀取和拉取鏡像。 想要在無(wú)法拉取 Kubernetes 倉(cāng)庫(kù)鏡像的機(jī)器上部署高可用集群也是可行的。通過(guò)其他的手段保證主機(jī)上已經(jīng)有對(duì)應(yīng)的容器鏡像即可。
一旦集群創(chuàng)建成功,需要在 PC 上安裝 kubectl 用于管理 Kubernetes。為了方便故障排查,也可以在每個(gè)控制平面節(jié)點(diǎn)上安裝 ?kubectl
?。
Note: 使用負(fù)載均衡器需要許多配置。你的集群搭建可能需要不同的配置。 下面的例子只是其中的一方面配置。
:6443
?) 上進(jìn)行的一個(gè) TCP 檢查。ControlPlaneEndpoint
?地址。nc -v LOAD_BALANCER_IP PORT
由于 apiserver 尚未運(yùn)行,預(yù)期會(huì)出現(xiàn)一個(gè)連接拒絕錯(cuò)誤。 然而超時(shí)意味著負(fù)載均衡器不能和控制平面節(jié)點(diǎn)通信。 如果發(fā)生超時(shí),請(qǐng)重新配置負(fù)載均衡器與控制平面節(jié)點(diǎn)進(jìn)行通信。
sudo kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" --upload-certs
--kubernetes-version
? 標(biāo)志來(lái)設(shè)置要使用的 Kubernetes 版本。 建議將 kubeadm、kebelet、kubectl 和 Kubernetes 的版本匹配。--control-plane-endpoint
? 標(biāo)志應(yīng)該被設(shè)置成負(fù)載均衡器的地址或 DNS 和端口。--upload-certs
? 標(biāo)志用來(lái)將在所有控制平面實(shí)例之間的共享證書(shū)上傳到集群。Note: 標(biāo)志 ?kubeadm init
?、?--config
? 和 ?--certificate-key
? 不能混合使用, 因此如果你要使用 kubeadm 配置,你必須在相應(yīng)的配置結(jié)構(gòu) (位于 ?InitConfiguration
?和 ?JoinConfiguration: controlPlane
?)添加 ?certificateKey
?字段。
Note: 一些 CNI 網(wǎng)絡(luò)插件如 Calico 需要 CIDR 例如 ?192.168.0.0/16
? 和一些像 Weave 沒(méi)有。通過(guò)傳遞 ?--pod-network-cidr
? 標(biāo)志添加 pod CIDR,或者你可以使用 kubeadm 配置文件,在 ?ClusterConfiguration
?的 ?networking
?對(duì)象下設(shè)置 ?podSubnet
?字段。
...
You can now join any number of control-plane node by running the following command on each as a root:
kubeadm join 192.168.0.200:6443 --token 9vr73a.a8uxyaju799qwdjv --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866 --control-plane --certificate-key f8902e114ef118304e561c3ecd4d0b543adc226b7a07f675f56564185ffe0c07
Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use kubeadm init phase upload-certs to reload certs afterward.
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.0.200:6443 --token 9vr73a.a8uxyaju799qwdjv --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866
--upload-certs
? 調(diào)用 ?kubeadm init
? 時(shí),主控制平面的證書(shū)被加密并上傳到 ?kubeadm-certs
? Secret 中。sudo kubeadm init phase upload-certs --upload-certs
init
?期間指定自定義的 ?--certificate-key
?,以后可以由 ?join
?使用。 要生成這樣的密鑰,可以使用以下命令:kubeadm certs certificate-key
Note: ?
kubeadm-certs
? Secret 和解密密鑰會(huì)在兩個(gè)小時(shí)后失效。
Caution: 正如命令輸出中所述,證書(shū)密鑰可訪(fǎng)問(wèn)集群敏感數(shù)據(jù)。請(qǐng)妥善保管!
Note: 在進(jìn)行下一步之前,必須選擇并部署合適的網(wǎng)絡(luò)插件。 否則集群不會(huì)正常運(yùn)行。
kubectl get pod -n kube-system -w
Note: 從 kubeadm 1.15 版本開(kāi)始,你可以并行加入多個(gè)控制平面節(jié)點(diǎn)。 在此版本之前,你必須在第一個(gè)節(jié)點(diǎn)初始化后才能依序的增加新的控制平面節(jié)點(diǎn)。
對(duì)于每個(gè)其他控制平面節(jié)點(diǎn),你應(yīng)該:
kubeadm init
? 輸出提供給你的 join 命令。 它看起來(lái)應(yīng)該像這樣:sudo kubeadm join 192.168.0.200:6443 --token 9vr73a.a8uxyaju799qwdjv --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866 --control-plane --certificate-key f8902e114ef118304e561c3ecd4d0b543adc226b7a07f675f56564185ffe0c07
--control-plane
? 標(biāo)志通知 ?kubeadm join
? 創(chuàng)建一個(gè)新的控制平面。--certificate-key ...
? 將導(dǎo)致從集群中的 ?kubeadm-certs
? Secret 下載控制平面證書(shū)并使用給定的密鑰進(jìn)行解密。使用外部 etcd 節(jié)點(diǎn)設(shè)置集群類(lèi)似于用于堆疊 etcd 的過(guò)程, 不同之處在于你應(yīng)該首先設(shè)置 etcd,并在 kubeadm 配置文件中傳遞 etcd 信息。
export CONTROL_PLANE="ubuntu@10.0.0.7"
scp /etc/kubernetes/pki/etcd/ca.crt "${CONTROL_PLANE}":
scp /etc/kubernetes/pki/apiserver-etcd-client.crt "${CONTROL_PLANE}":
scp /etc/kubernetes/pki/apiserver-etcd-client.key "${CONTROL_PLANE}":
user@host
? 替換 ?CONTROL_PLANE
?的值。kubeadm-config.yaml
? 的文件:---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: stable
controlPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" # change this (see below)
etcd:
external:
endpoints:
- https://ETCD_0_IP:2379 # change ETCD_0_IP appropriately
- https://ETCD_1_IP:2379 # change ETCD_1_IP appropriately
- https://ETCD_2_IP:2379 # change ETCD_2_IP appropriately
caFile: /etc/kubernetes/pki/etcd/ca.crt
certFile: /etc/kubernetes/pki/apiserver-etcd-client.crt
keyFile: /etc/kubernetes/pki/apiserver-etcd-client.key
Note: 這里的堆疊(stacked)etcd 和外部 etcd 之前的區(qū)別在于設(shè)置外部 etcd 需要一個(gè) ?
etcd
?的 ?external
?對(duì)象下帶有 etcd 端點(diǎn)的配置文件。 如果是內(nèi)部 etcd,是自動(dòng)管理的。
LOAD_BALANCER_DNS
?LOAD_BALANCER_PORT
?ETCD_0_IP
?ETCD_1_IP
?ETCD_2_IP
?以下的步驟與設(shè)置內(nèi)置 etcd 的集群是相似的:
sudo kubeadm init --config kubeadm-config.yaml --upload-certs
? 命令。Note: 在進(jìn)行下一步之前,必須選擇并部署合適的網(wǎng)絡(luò)插件。 否則集群不會(huì)正常運(yùn)行。
步驟與設(shè)置內(nèi)置 etcd 相同:
--certificate-key
? 中的解密秘鑰會(huì)在兩個(gè)小時(shí)后過(guò)期。你可以使用之前存儲(chǔ)的 ?kubeadm init
? 命令的輸出將工作節(jié)點(diǎn)加入集群中:
sudo kubeadm join 192.168.0.200:6443 --token 9vr73a.a8uxyaju799qwdjv --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866
如果你選擇不將 ?kubeadm init
? 與 ?--upload-certs
? 命令一起使用, 則意味著你將必須手動(dòng)將證書(shū)從主控制平面節(jié)點(diǎn)復(fù)制到 將要加入的控制平面節(jié)點(diǎn)上。
有許多方法可以實(shí)現(xiàn)這種操作。在下面的例子中我們使用 ?ssh
?和 ?scp
?:
如果要在單獨(dú)的一臺(tái)計(jì)算機(jī)控制所有節(jié)點(diǎn),則需要 SSH。
eval $(ssh-agent)
ssh-add ~/.ssh/path_to_private_key
-A
? 標(biāo)志:ssh -A 10.0.0.7
sudo -E -s
kubeadm init
? 命令的第一個(gè) 控制平面節(jié)點(diǎn)上運(yùn)行以下腳本。 該腳本會(huì)將證書(shū)從第一個(gè)控制平面節(jié)點(diǎn)復(fù)制到另一個(gè)控制平面節(jié)點(diǎn):在以下示例中,用其他控制平面節(jié)點(diǎn)的 IP 地址替換 ?CONTROL_PLANE_IPS
?。
USER=ubuntu # 可定制
CONTROL_PLANE_IPS="10.0.0.7 10.0.0.8"
for host in ${CONTROL_PLANE_IPS}; do
scp /etc/kubernetes/pki/ca.crt "${USER}"@$host:
scp /etc/kubernetes/pki/ca.key "${USER}"@$host:
scp /etc/kubernetes/pki/sa.key "${USER}"@$host:
scp /etc/kubernetes/pki/sa.pub "${USER}"@$host:
scp /etc/kubernetes/pki/front-proxy-ca.crt "${USER}"@$host:
scp /etc/kubernetes/pki/front-proxy-ca.key "${USER}"@$host:
scp /etc/kubernetes/pki/etcd/ca.crt "${USER}"@$host:etcd-ca.crt
scp /etc/kubernetes/pki/etcd/ca.key "${USER}"@$host:etcd-ca.key
done
Caution: 只需要復(fù)制上面列表中的證書(shū)。kubeadm 將負(fù)責(zé)生成其余證書(shū)以及加入控制平面實(shí)例所需的 SAN。 如果你錯(cuò)誤地復(fù)制了所有證書(shū),由于缺少所需的 SAN,創(chuàng)建其他節(jié)點(diǎn)可能會(huì)失敗。
kubeadm join
?。 該腳本會(huì)將先前復(fù)制的證書(shū)從主目錄移動(dòng)到 ?/etc/kubernetes/pki
?:USER=ubuntu # 可定制
mkdir -p /etc/kubernetes/pki/etcd
mv /home/${USER}/ca.crt /etc/kubernetes/pki/
mv /home/${USER}/ca.key /etc/kubernetes/pki/
mv /home/${USER}/sa.pub /etc/kubernetes/pki/
mv /home/${USER}/sa.key /etc/kubernetes/pki/
mv /home/${USER}/front-proxy-ca.crt /etc/kubernetes/pki/
mv /home/${USER}/front-proxy-ca.key /etc/kubernetes/pki/
mv /home/${USER}/etcd-ca.crt /etc/kubernetes/pki/etcd/ca.crt
mv /home/${USER}/etcd-ca.key /etc/kubernetes/pki/etcd/ca.key
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: