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