W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
kubeadm 不支持自動重新配置部署在托管節(jié)點上的組件的方式。 一種自動化的方法是使用自定義的 operator。
要修改組件配置,你必須手動編輯磁盤上關(guān)聯(lián)的集群對象和文件。 本指南展示了實現(xiàn) kubeadm 集群重新配置所需執(zhí)行的正確步驟順序。
/etc/kubernetes/admin.conf
?) 和從安裝了 kubectl 的主機到集群中正在運行的 kube-apiserver 的網(wǎng)絡(luò)連接
kubeadm 在 ConfigMap 和其他對象中寫入了一組集群范圍的組件配置選項。 這些對象必須手動編輯,可以使用命令 ?kubectl edit
?。
?kubectl edit
? 命令將打開一個文本編輯器,你可以在其中直接編輯和保存對象。 你可以使用環(huán)境變量 ?KUBECONFIG
?和 ?KUBE_EDITOR
?來指定 kubectl 使用的 kubeconfig 文件和首選文本編輯器的位置。
例如:
KUBECONFIG=/etc/kubernetes/admin.conf KUBE_EDITOR=nano kubectl edit <parameters>
Note:
保存對這些集群對象的任何更改后,節(jié)點上運行的組件可能不會自動更新。 以下步驟將指導你如何手動執(zhí)行該操作。
Warning:
ConfigMaps 中的組件配置存儲為非結(jié)構(gòu)化數(shù)據(jù)(YAML 字符串)。 這意味著在更新 ConfigMap 的內(nèi)容時不會執(zhí)行驗證。 你必須小心遵循特定組件配置的文檔化 API 格式, 并避免引入拼寫錯誤和 YAML 縮進錯誤。
在集群創(chuàng)建和升級期間,kubeadm 將其 ?ClusterConfiguration
?寫入 ?kube-system
? 命名空間中名為 ?kubeadm-config
? 的 ConfigMap。
要更改 ?ClusterConfiguration
?中的特定選項,你可以使用以下命令編輯 ConfigMap:
kubectl edit cm -n kube-system kubeadm-config
配置位于 ?data.ClusterConfiguration
? 鍵下。
Note:
?ClusterConfiguration
?包括各種影響單個組件配置的選項, 例如 kube-apiserver、kube-scheduler、kube-controller-manager、 CoreDNS、etcd 和 kube-proxy。 對配置的更改必須手動反映在節(jié)點組件上。
kubeadm 將控制平面組件作為位于 ?/etc/kubernetes/manifests
? 目錄中的靜態(tài) Pod 清單進行管理。 對 ?apiServer
?、?controllerManager
?、?scheduler
?或 ?etcd
?鍵下的 ?ClusterConfiguration
?的任何更改都必須反映在控制平面節(jié)點上清單目錄中的關(guān)聯(lián)文件中。
此類更改可能包括:
extraArgs
?- 需要更新傳遞給組件容器的標志列表
extraMounts
?- 需要更新組件容器的卷掛載
*SANs
? - 需要使用更新的主題備用名稱編寫新證書在繼續(xù)進行這些更改之前,請確保你已備份目錄 ?/etc/kubernetes/
?。
要編寫新證書,你可以使用:
kubeadm init phase certs <component-name> --config <config-file>
要在 ?/etc/kubernetes/manifests
? 中編寫新的清單文件,你可以使用:
kubeadm init phase control-plane <component-name> --config <config-file>
?<config-file>
? 內(nèi)容必須與更新后的 ?ClusterConfiguration
?匹配。 ?<component-name>
? 值必須是組件的名稱。
Note:
更新 ?/etc/kubernetes/manifests
? 中的文件將告訴 kubelet 重新啟動相應(yīng)組件的靜態(tài) Pod。 嘗試一次對一個節(jié)點進行這些更改,以在不停機的情況下離開集群。
在集群創(chuàng)建和升級期間,kubeadm 將其 ?KubeletConfiguration
?寫入 ?kube-system
? 命名空間中名為 ?kubelet-config
? 的 ConfigMap。 你可以使用以下命令編輯 ConfigMap:
kubectl edit cm -n kube-system kubelet-config
配置位于 ?data.kubelet
? 鍵下。
要反映 kubeadm 節(jié)點上的更改,你必須執(zhí)行以下操作:
kubeadm upgrade node phase kubelet-config
? 下載最新的 ?kubelet-config
? ConfigMap 內(nèi)容到本地文件 ?/var/lib/kubelet/config.conf
?/var/lib/kubelet/kubeadm-flags.env
? 以使用標志來應(yīng)用額外的配置
systemctl restart kubelet
? 重啟 kubelet 服務(wù)Note:
一次執(zhí)行一個節(jié)點的這些更改,以允許正確地重新安排工作負載。
Note:
在 ?kubeadm upgrade
? 期間,kubeadm 從 ?kubelet-config
? ConfigMap 下載 ?KubeletConfiguration
?并覆蓋 ?/var/lib/kubelet/config.conf
? 的內(nèi)容。 這意味著節(jié)點本地配置必須通過?/var/lib/kubelet/kubeadm-flags.env
?中的標志或在 kubeadm upgrade 后手動更新/var/lib/kubelet/config.conf`的內(nèi)容來應(yīng)用,然后重新啟動 kubelet。
在集群創(chuàng)建和升級期間,kubeadm 將其寫入 ?KubeProxyConfiguration
?在名為 ?kube-proxy
? 的 ?kube-system
? 命名空間中的 ConfigMap 中。
此 ConfigMap 由 ?kube-system
? 命名空間中的 ?kube-proxy
? DaemonSet 使用。
要更改 ?KubeProxyConfiguration
?中的特定選項,你可以使用以下命令編輯 ConfigMap:
kubectl edit cm -n kube-system kube-proxy
配置位于 ?data.config.conf
? 鍵下。
更新 ?kube-proxy
? ConfigMap 后,你可以重新啟動所有 kube-proxy Pod:
獲取 Pod 名稱:
kubectl get po -n kube-system | grep kube-proxy
使用以下命令刪除 Pod:
kubectl delete po -n kube-system <pod-name>
將創(chuàng)建使用更新的 ConfigMap 的新 Pod。
Note:
由于 kubeadm 將 kube-proxy 部署為 DaemonSet,因此不支持特定于節(jié)點的配置。
kubeadm 將 CoreDNS 部署為名為 ?coredns
?的 Deployment,并使用 Service ?kube-dns
?, 兩者都在 ?kube-system
? 命名空間中。
要更新任何 CoreDNS 設(shè)置,你可以編輯 Deployment 和 Service:
kubectl edit deployment -n kube-system coredns
kubectl edit service -n kube-system kube-dns
應(yīng)用 CoreDNS 更改后,你可以刪除 CoreDNS Pod。
獲取 Pod 名稱:
kubectl get po -n kube-system | grep coredns
使用以下命令刪除 Pod:
kubectl delete po -n kube-system <pod-name>
將創(chuàng)建具有更新的 CoreDNS 配置的新 Pod。
Note:
kubeadm 不允許在集群創(chuàng)建和升級期間配置 CoreDNS。 這意味著如果執(zhí)行了 ?kubeadm upgrade apply
?,你對 CoreDNS 對象的更改將丟失并且必須重新應(yīng)用。
在受管節(jié)點上執(zhí)行 ?kubeadm upgrade
? 期間,kubeadm 可能會覆蓋在創(chuàng)建集群(重新配置)后應(yīng)用的配置。
kubeadm 在特定 Kubernetes 節(jié)點的 Node 對象上寫入標簽、污點、CRI 套接字和其他信息。要更改此 Node 對象的任何內(nèi)容,你可以使用:
kubectl edit no <node-name>
在 ?kubeadm upgrade
? 期間,此類節(jié)點的內(nèi)容可能會被覆蓋。 如果你想在升級后保留對 Node 對象的修改,你可以準備一個 kubectl patch 并將其應(yīng)用到 Node 對象:
kubectl patch no <node-name> --patch-file <patch-file>
控制平面配置的主要來源是存儲在集群中的 ?ClusterConfiguration
?對象。 要擴展靜態(tài) Pod 清單配置,可以使用 patches。
這些補丁文件必須作為文件保留在控制平面節(jié)點上,以確保它們可以被 ?kubeadm upgrade ... --patches <directory>
? 使用。
如果對 ?ClusterConfiguration
?和磁盤上的靜態(tài) Pod 清單進行了重新配置,則必須相應(yīng)地更新節(jié)點特定補丁集。
對存儲在 ?/var/lib/kubelet/config.conf
? 中的 ?KubeletConfiguration
?所做的任何更改都將在 ?kubeadm upgrade
? 時因為下載集群范圍內(nèi)的 ?kubelet-config
? ConfigMap 的內(nèi)容而被覆蓋。 要持久保存 kubelet 節(jié)點特定的配置,文件?/var/lib/kubelet/config.conf
? 必須在升級后手動更新,或者文件?/var/lib/kubelet/kubeadm-flags.env
? 可以包含標志。 kubelet 標志會覆蓋相關(guān)的 ?KubeletConfiguration
?選項,但請注意,有些標志已被棄用。
更改 ?/var/lib/kubelet/config.conf
? 或 ?/var/lib/kubelet/kubeadm-flags.env
? 后需要重啟 kubelet。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: