W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
Note: Dockershim 自 1.24 版起已從 Kubernetes 項目中刪除。
FEATURE STATE: Kubernetes v1.11 [stable]
kubeadm CLI 工具的生命周期與 kubelet 解耦;kubelet 是一個守護程序,在 Kubernetes 集群中的每個節(jié)點上運行。 當 Kubernetes 初始化或升級時,kubeadm CLI 工具由用戶執(zhí)行,而 kubelet 始終在后臺運行。
由于kubelet是守護程序,因此需要通過某種初始化系統(tǒng)或服務管理器進行維護。 當使用 DEB 或 RPM 安裝 kubelet 時,配置系統(tǒng)去管理 kubelet。 你可以改用其他服務管理器,但需要手動地配置。
集群中涉及的所有 kubelet 的一些配置細節(jié)都必須相同, 而其他配置方面則需要基于每個 kubelet 進行設置,以適應給定機器的不同特性(例如操作系統(tǒng)、存儲和網絡)。 你可以手動地管理 kubelet 的配置,但是 kubeadm 現(xiàn)在提供一種 ?KubeletConfiguration
?API 類型 用于集中管理 kubelet 的配置。
以下各節(jié)講述了通過使用 kubeadm 簡化 kubelet 配置模式,而不是在每個節(jié)點上手動地管理 kubelet 配置。
你可以通過 ?kubeadm init
? 和 ?kubeadm join
? 命令為 kubelet 提供默認值。 有趣的示例包括使用其他容器運行時或通過服務器設置不同的默認子網。
如果你想使用子網 ?10.96.0.0/12
? 作為服務的默認網段,你可以給 kubeadm 傳遞 ?--service-cidr
? 參數(shù):
kubeadm init --service-cidr 10.96.0.0/12
現(xiàn)在,可以從該子網分配服務的虛擬 IP。 你還需要通過 kubelet 使用 ?--cluster-dns
? 標志設置 DNS 地址。 在集群中的每個管理器和節(jié)點上的 kubelet 的設置需要相同。 kubelet 提供了一個版本化的結構化 API 對象,該對象可以配置 kubelet 中的大多數(shù)參數(shù),并將此配置推送到集群中正在運行的每個 kubelet 上。 此對象被稱為 ?KubeletConfiguration
?。 ?KubeletConfiguration
?允許用戶指定標志,例如用駱峰值代表集群的 DNS IP 地址,如下所示:
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
clusterDNS:
- 10.96.0.10
由于硬件、操作系統(tǒng)、網絡或者其他主機特定參數(shù)的差異。某些主機需要特定的 kubelet 配置。 以下列表提供了一些示例。
--resolv-conf
? 指定的 DNS 解析文件的路徑在操作系統(tǒng)之間可能有所不同, 它取決于你是否使用 ?systemd-resolved
?。 如果此路徑錯誤,則在其 kubelet 配置錯誤的節(jié)點上 DNS 解析也將失敗。.metadata.name
? 會被設置為計算機的主機名。 如果你需要指定一個與機器的主機名不同的節(jié)點名稱,你可以使用 ?--hostname-override
? 標志覆蓋默認值。--cgroup-driver
? 必須與容器運行時使用的 cgroup 驅動程序匹配,以確保 kubelet 的健康運行狀況。--container-runtime-endpoint=<path>
? 標志來指定端點。你可以在服務管理器(例如 systemd)中設定某個 kubelet 的配置來指定這些參數(shù)。
如果自定義的 ?KubeletConfiguration
?API 對象使用像 ?kubeadm ... --config some-config-file.yaml
? 這樣的配置文件進行傳遞,則可以配置 kubeadm 啟動的 kubelet。
通過調用 ?kubeadm config print init-defaults --component-configs KubeletConfiguration
?, 你可以看到此結構中的所有默認值。
當調用 ?kubeadm init
? 時,kubelet 的配置會被寫入磁盤 ?/var/lib/kubelet/config.yaml
?, 并上傳到集群 ?kube-system
? 命名空間的 ?kubelet-config
? ConfigMap。 kubelet 配置信息也被寫入 ?/etc/kubernetes/kubelet.conf
?,其中包含集群內所有 kubelet 的基線配置。 此配置文件指向允許 kubelet 與 API 服務器通信的客戶端證書。 這解決了將集群級配置傳播到每個 kubelet 的需求。
針對為特定實例提供配置細節(jié)的第二種模式, kubeadm 的解決方法是將環(huán)境文件寫入 ?/var/lib/kubelet/kubeadm-flags.env
?,其中包含了一個標志列表, 當 kubelet 啟動時,該標志列表會傳遞給 kubelet 標志在文件中的顯示方式如下:
KUBELET_KUBEADM_ARGS="--flag1=value1 --flag2=value2 ..."
除了啟動 kubelet 時所使用的標志外,該文件還包含動態(tài)參數(shù),例如 cgroup 驅動程序以及是否使用其他容器運行時套接字(?--cri-socket
?)。
將這兩個文件編組到磁盤后,如果使用 systemd,則 kubeadm 嘗試運行以下兩個命令:
systemctl daemon-reload && systemctl restart kubelet
如果重新加載和重新啟動成功,則正常的 ?kubeadm init
? 工作流程將繼續(xù)。
當運行 ?kubeadm join
? 時,kubeadm 使用 Bootstrap Token 證書執(zhí)行 TLS 引導,該引導會獲取一份證書, 該證書需要下載 ?kubelet-config
? ConfigMap 并把它寫入 ?/var/lib/kubelet/config.yaml
? 中。 動態(tài)環(huán)境文件的生成方式恰好與 ?kubeadm init
? 完全相同。
接下來,?kubeadm
?運行以下兩個命令將新配置加載到 kubelet 中:
systemctl daemon-reload && systemctl restart kubelet
在 kubelet 加載新配置后,kubeadm 將寫入 ?/etc/kubernetes/bootstrap-kubelet.conf
? KubeConfig 文件中, 該文件包含 CA 證書和引導程序令牌。 kubelet 使用這些證書執(zhí)行 TLS 引導程序并獲取唯一的憑據,該憑據被存儲在 ?/etc/kubernetes/kubelet.conf
? 中。
當 ?/etc/kubernetes/kubelet.conf
? 文件被寫入后,kubelet 就完成了 TLS 引導過程。 Kubeadm 在完成 TLS 引導過程后將刪除 ?/etc/kubernetes/bootstrap-kubelet.conf
? 文件。
?kubeadm
?中附帶了有關系統(tǒng)如何運行 kubelet 的 systemd 配置文件。 請注意 kubeadm CLI 命令不會修改此文件。
通過 ?kubeadm
?DEB 包 或者 RPM 包 安裝的配置文件被寫入 ?/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
? 并由 systemd 使用。 它對原來的 RPM 版本 ?kubelet.service
? 或者 DEB 版本 ?kubelet.service
? 作了增強:
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# 這是 "kubeadm init" 和 "kubeadm join" 運行時生成的文件,動態(tài)地填充 KUBELET_KUBEADM_ARGS 變量
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# 這是一個文件,用戶在不得已下可以將其用作替代 kubelet args。
# 用戶最好使用 .NodeRegistration.KubeletExtraArgs 對象在配置文件中替代。
# KUBELET_EXTRA_ARGS 應該從此文件中獲取。
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
此文件指定由 kubeadm 為 kubelet 管理的所有文件的默認位置。
/etc/kubernetes/bootstrap-kubelet.conf
?, 但僅當 ?/etc/kubernetes/kubelet.conf
? 不存在時才能使用。/etc/kubernetes/kubelet.conf
?。/var/lib/kubelet/config.yaml
?。KUBELET_KUBEADM_ARGS
? 是來源于 ?/var/lib/kubelet/kubeadm-flags.env
?。KUBELET_EXTRA_ARGS
?是來源于 ?/etc/default/kubelet
?(對于 DEB),或者 ?/etc/sysconfig/kubelet
?(對于 RPM)。 ?KUBELET_EXTRA_ARGS
?在標志鏈中排在最后,并且在設置沖突時具有最高優(yōu)先級。Kubernetes 版本對應的 DEB 和 RPM 軟件包是:
軟件包名稱 | 描述 |
---|---|
kubeadm
|
給 kubelet 安裝 /usr/bin/kubeadm CLI 工具和 kubelet 的 systemd drop-in 文件。 |
kubelet
|
安裝 /usr/bin/kubelet 可執(zhí)行文件。 |
kubectl
|
安裝 /usr/bin/kubectl 可執(zhí)行文件。 |
cri-tools
|
從 cri-tools git 倉庫中安裝 /usr/bin/crictl 可執(zhí)行文件。 |
kubernetes-cni
|
從 plugins git 倉庫中安裝 /opt/cni/bin 可執(zhí)行文件。 |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: