W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
本文講述了使用 kubeadm 設(shè)置一個高可用的 Kubernetes 集群的兩種不同方式:
如果你在安裝 HA 集群時遇到問題,請在 kubeadm 問題跟蹤里向我們提供反饋。
Caution: 這篇文檔沒有講述在云提供商上運行集群的問題。在云環(huán)境中,此處記錄的方法不適用于類型為 LoadBalancer 的服務(wù)對象,或者具有動態(tài)的 PersistentVolumes。
根據(jù)集群控制平面所選擇的拓撲結(jié)構(gòu)不同,準備工作也有所差異:
需要準備:
sudo
?舉例kubeadm
?和 ?kubelet
?需要準備:
sudo
?舉例kubeadm
?和 ?kubelet
?還需要準備:
kubeadm
?和 ?kubelet
?。每臺主機需要能夠從 Kubernetes 容器鏡像倉庫( ?k8s.gcr.io
? )讀取和拉取鏡像。 想要在無法拉取 Kubernetes 倉庫鏡像的機器上部署高可用集群也是可行的。通過其他的手段保證主機上已經(jīng)有對應(yīng)的容器鏡像即可。
一旦集群創(chuàng)建成功,需要在 PC 上安裝 kubectl 用于管理 Kubernetes。為了方便故障排查,也可以在每個控制平面節(jié)點上安裝 ?kubectl
?。
Note: 使用負載均衡器需要許多配置。你的集群搭建可能需要不同的配置。 下面的例子只是其中的一方面配置。
:6443
?) 上進行的一個 TCP 檢查。ControlPlaneEndpoint
?地址。nc -v LOAD_BALANCER_IP PORT
由于 apiserver 尚未運行,預(yù)期會出現(xiàn)一個連接拒絕錯誤。 然而超時意味著負載均衡器不能和控制平面節(jié)點通信。 如果發(fā)生超時,請重新配置負載均衡器與控制平面節(jié)點進行通信。
sudo kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" --upload-certs
--kubernetes-version
? 標志來設(shè)置要使用的 Kubernetes 版本。 建議將 kubeadm、kebelet、kubectl 和 Kubernetes 的版本匹配。--control-plane-endpoint
? 標志應(yīng)該被設(shè)置成負載均衡器的地址或 DNS 和端口。--upload-certs
? 標志用來將在所有控制平面實例之間的共享證書上傳到集群。Note: 標志 ?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 沒有。通過傳遞 ?--pod-network-cidr
? 標志添加 pod CIDR,或者你可以使用 kubeadm 配置文件,在 ?ClusterConfiguration
?的 ?networking
?對象下設(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
? 時,主控制平面的證書被加密并上傳到 ?kubeadm-certs
? Secret 中。sudo kubeadm init phase upload-certs --upload-certs
init
?期間指定自定義的 ?--certificate-key
?,以后可以由 ?join
?使用。 要生成這樣的密鑰,可以使用以下命令:kubeadm certs certificate-key
Note: ?
kubeadm-certs
? Secret 和解密密鑰會在兩個小時后失效。
Caution: 正如命令輸出中所述,證書密鑰可訪問集群敏感數(shù)據(jù)。請妥善保管!
Note: 在進行下一步之前,必須選擇并部署合適的網(wǎng)絡(luò)插件。 否則集群不會正常運行。
kubectl get pod -n kube-system -w
Note: 從 kubeadm 1.15 版本開始,你可以并行加入多個控制平面節(jié)點。 在此版本之前,你必須在第一個節(jié)點初始化后才能依序的增加新的控制平面節(jié)點。
對于每個其他控制平面節(jié)點,你應(yīng)該:
kubeadm init
? 輸出提供給你的 join 命令。 它看起來應(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
? 標志通知 ?kubeadm join
? 創(chuàng)建一個新的控制平面。--certificate-key ...
? 將導(dǎo)致從集群中的 ?kubeadm-certs
? Secret 下載控制平面證書并使用給定的密鑰進行解密。使用外部 etcd 節(jié)點設(shè)置集群類似于用于堆疊 etcd 的過程, 不同之處在于你應(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 需要一個 ?
etcd
?的 ?external
?對象下帶有 etcd 端點的配置文件。 如果是內(nèi)部 etcd,是自動管理的。
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: 在進行下一步之前,必須選擇并部署合適的網(wǎng)絡(luò)插件。 否則集群不會正常運行。
步驟與設(shè)置內(nèi)置 etcd 相同:
--certificate-key
? 中的解密秘鑰會在兩個小時后過期。你可以使用之前存儲的 ?kubeadm init
? 命令的輸出將工作節(jié)點加入集群中:
sudo kubeadm join 192.168.0.200:6443 --token 9vr73a.a8uxyaju799qwdjv --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866
如果你選擇不將 ?kubeadm init
? 與 ?--upload-certs
? 命令一起使用, 則意味著你將必須手動將證書從主控制平面節(jié)點復(fù)制到 將要加入的控制平面節(jié)點上。
有許多方法可以實現(xiàn)這種操作。在下面的例子中我們使用 ?ssh
?和 ?scp
?:
如果要在單獨的一臺計算機控制所有節(jié)點,則需要 SSH。
eval $(ssh-agent)
ssh-add ~/.ssh/path_to_private_key
-A
? 標志:ssh -A 10.0.0.7
sudo -E -s
kubeadm init
? 命令的第一個 控制平面節(jié)點上運行以下腳本。 該腳本會將證書從第一個控制平面節(jié)點復(fù)制到另一個控制平面節(jié)點:在以下示例中,用其他控制平面節(jié)點的 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ù)制上面列表中的證書。kubeadm 將負責(zé)生成其余證書以及加入控制平面實例所需的 SAN。 如果你錯誤地復(fù)制了所有證書,由于缺少所需的 SAN,創(chuàng)建其他節(jié)點可能會失敗。
kubeadm join
?。 該腳本會將先前復(fù)制的證書從主目錄移動到 ?/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號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: