新聞中心
創(chuàng)建靜態(tài) Pod
靜態(tài) Pod 在指定的節(jié)點上由 kubelet 守護進程直接管理,不需要 API 服務(wù)器 監(jiān)管。 與由控制面管理的 Pod(例如,Deployment) 不同;kubelet 監(jiān)視每個靜態(tài) Pod(在它崩潰之后重新啟動)。

創(chuàng)新互聯(lián)主要從事成都網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)淅川,十年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108
靜態(tài) Pod 永遠都會綁定到一個指定節(jié)點上的 Kubelet。
kubelet 會嘗試通過 Kubernetes API 服務(wù)器為每個靜態(tài) Pod 自動創(chuàng)建一個 鏡像 Pod。 這意味著節(jié)點上運行的靜態(tài) Pod 對 API 服務(wù)來說是可見的,但是不能通過 API 服務(wù)器來控制。 Pod 名稱將把以連字符開頭的節(jié)點主機名作為后綴。
Note: 如果你在運行一個 Kubernetes 集群,并且在每個節(jié)點上都運行一個靜態(tài) Pod, 就可能需要考慮使用 DaemonSet 替代這種方式。
Note: 靜態(tài) Pod 的 ?
spec?不能引用其他 API 對象 (如:ServiceAccount、 ConfigMap、 Secret 等)。
在開始之前
你必須擁有一個 Kubernetes 的集群,同時你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個節(jié)點的集群上運行本教程,且這些節(jié)點不作為控制平面主機。 如果你還沒有集群,你可以通過 Minikube 構(gòu)建一個你自己的集群,或者你可以使用下面任意一個 Kubernetes 工具構(gòu)建:
- Katacoda
- 玩轉(zhuǎn) Kubernetes
要檢查版本,請輸入 ?kubectl version?。
本文假定你在使用 Docker 來運行 Pod, 并且你的節(jié)點是運行著 Fedora 操作系統(tǒng)。 其它發(fā)行版或者 Kubernetes 部署版本上操作方式可能不一樣。
創(chuàng)建靜態(tài) Pod
可以通過文件系統(tǒng)上的配置文件 或者 web 網(wǎng)絡(luò)上的配置文件 來配置靜態(tài) Pod。
文件系統(tǒng)上的靜態(tài) Pod 聲明文件
聲明文件是標(biāo)準(zhǔn)的 Pod 定義文件,以 JSON 或者 YAML 格式存儲在指定目錄。路徑設(shè)置在 Kubelet 配置文件 的 ?staticPodPath: <目錄>? 字段,kubelet 會定期的掃描這個文件夾下的 YAML/JSON 文件來創(chuàng)建/刪除靜態(tài) Pod。 注意 kubelet 掃描目錄的時候會忽略以點開頭的文件。
例如:下面是如何以靜態(tài) Pod 的方式啟動一個簡單 web 服務(wù):
- 選擇一個要運行靜態(tài) Pod 的節(jié)點。在這個例子中選擇 ?
my-node1?。 - 選擇一個目錄,比如在 ?
/etc/kubelet.d? 目錄來保存 web 服務(wù) Pod 的定義文件, ?/etc/kubelet.d/static-web.yaml?: - 配置這個節(jié)點上的 kubelet,使用這個參數(shù)執(zhí)行 ?
--pod-manifest-path=/etc/kubelet.d/?。 在 Fedora 上編輯 ?/etc/kubernetes/kubelet? 以包含下行: - 重啟 kubelet。Fedora 上使用下面的命令:
ssh my-node1
# 在 kubelet 運行的節(jié)點上執(zhí)行以下命令
mkdir /etc/kubelet.d/
cat </etc/kubelet.d/static-web.yaml
apiVersion: v1
kind: Pod
metadata:
name: static-web
labels:
role: myrole
spec:
containers:
- name: web
image: nginx
ports:
- name: web
containerPort: 80
protocol: TCP
EOF KUBELET_ARGS="--cluster-dns=10.254.0.10 --cluster-domain=kube.local --pod-manifest-path=/etc/kubelet.d/"
或者在 Kubelet 配置文件 中添加 ?staticPodPath: <目錄>?字段。
# 在 kubelet 運行的節(jié)點上執(zhí)行以下命令
systemctl restart kubeletWeb 網(wǎng)上的靜態(tài) Pod 聲明文件
Kubelet 根據(jù) ?--manifest-url=? 參數(shù)的配置定期的下載指定文件,并且轉(zhuǎn)換成 JSON/YAML 格式的 Pod 定義文件。 與文件系統(tǒng)上的清單文件使用方式類似,kubelet 調(diào)度獲取清單文件。 如果靜態(tài) Pod 的清單文件有改變,kubelet 會應(yīng)用這些改變。
按照下面的方式來:
- 創(chuàng)建一個 YAML 文件,并保存在 web 服務(wù)上,為 kubelet 生成一個 URL。
- 通過在選擇的節(jié)點上使用 ?
--manifest-url=? 配置運行 kubelet。 在 Fedora 添加下面這行到 ?/etc/kubernetes/kubelet? : - 重啟 kubelet。在 Fedora 上運行如下命令:
apiVersion: v1
kind: Pod
metadata:
name: static-web
labels:
role: myrole
spec:
containers:
- name: web
image: nginx
ports:
- name: web
containerPort: 80
protocol: TCPKUBELET_ARGS="--cluster-dns=10.254.0.10 --cluster-domain=kube.local --manifest-url="
# 在 kubelet 運行的節(jié)點上執(zhí)行以下命令
systemctl restart kubelet觀察靜態(tài) pod 的行為
當(dāng) kubelet 啟動時,會自動啟動所有定義的靜態(tài) Pod。 當(dāng)定義了一個靜態(tài) Pod 并重新啟動 kubelet 時,新的靜態(tài) Pod 就應(yīng)該已經(jīng)在運行了。
可以在節(jié)點上運行下面的命令來查看正在運行的容器(包括靜態(tài) Pod):
# 在 kubelet 運行的節(jié)點上執(zhí)行以下命令
crictl ps輸出可能會像這樣:
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
129fd7d382018 docker.io/library/nginx@sha256:... 11 minutes ago Running web 0 34533c6729106Note: ?
crictl?會輸出鏡像 URI 和 SHA-256 校驗和。 ?NAME?看起來像: ?docker.io/library/nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31?。
可以在 API 服務(wù)上看到鏡像 Pod:
kubectl get pods
NAME READY STATUS RESTARTS AGE
static-web 1/1 Running 0 2mNote: 要確保 kubelet 在 API 服務(wù)上有創(chuàng)建鏡像 Pod 的權(quán)限。如果沒有,創(chuàng)建請求會被 API 服務(wù)拒絕。
靜態(tài) Pod 上的標(biāo)簽 被傳到鏡像 Pod。 你可以通過 選擇算符 使用這些標(biāo)簽。
如果你用 ?kubectl ?從 API 服務(wù)上刪除鏡像 Pod,kubelet 不會 移除靜態(tài) Pod:
kubectl delete pod static-web
pod "static-web" deleted
可以看到 Pod 還在運行:
kubectl get pods
NAME READY STATUS RESTARTS AGE
static-web 1/1 Running 0 4s回到 kubelet 運行的節(jié)點上,你可以手動停止容器。 可以看到過了一段時間后 kubelet 會發(fā)現(xiàn)容器停止了并且會自動重啟 Pod:
# 在 kubelet 運行的節(jié)點上執(zhí)行以下命令
# 把 ID 換為你的容器的 ID
crictl stop 129fd7d382018
sleep 20
crictl psCONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
89db4553e1eeb docker.io/library/nginx@sha256:... 19 seconds ago Running web 1 34533c6729106動態(tài)增加和刪除靜態(tài) pod
運行中的 kubelet 會定期掃描配置的目錄(比如例子中的 ?/etc/kubelet.d? 目錄)中的變化, 并且根據(jù)文件中出現(xiàn)/消失的 Pod 來添加/刪除 Pod。
# 前提是你在用主機文件系統(tǒng)上的靜態(tài) Pod 配置文件
# 在 kubelet 運行的節(jié)點上執(zhí)行以下命令
mv /etc/kubelet.d/static-web.yaml /tmp
sleep 20
crictl ps
# 可以看到?jīng)]有 nginx 容器在運行
mv /tmp/static-web.yaml /etc/kubelet.d/
sleep 20
crictl psCONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
f427638871c35 docker.io/library/nginx@sha256:... 19 seconds ago Running web 1 34533c6729106 本文題目:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes 創(chuàng)建靜態(tài)Pod
網(wǎng)站地址:http://www.dlmjj.cn/article/dpioejc.html


咨詢
建站咨詢
