靜態(tài)pod 創(chuàng)建使用示例詳解
一.系統(tǒng)環(huán)境
服務(wù)器版本 | docker軟件版本 | Kubernetes(k8s)集群版本 | CPU架構(gòu) |
---|---|---|---|
CentOS Linux release 7.4.1708 (Core) | Docker version 20.10.12 | v1.21.9 | x86_64 |
Kubernetes集群架構(gòu):k8scloude1作為master節(jié)點(diǎn),k8scloude2,k8scloude3作為worker節(jié)點(diǎn)
服務(wù)器 | 操作系統(tǒng)版本 | CPU架構(gòu) | 進(jìn)程 | 功能描述 |
---|---|---|---|---|
k8scloude1/192.168.110.130 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico | k8s master節(jié)點(diǎn) |
k8scloude2/192.168.110.129 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kubelet,kube-proxy,calico | k8s worker節(jié)點(diǎn) |
k8scloude3/192.168.110.128 | CentOS Linux release 7.4.1708 (Core) | x86_64 | docker,kubelet,kube-proxy,calico | k8s worker節(jié)點(diǎn) |
二.前言
本文介紹靜態(tài) Pod,靜態(tài) Pod 在指定的節(jié)點(diǎn)上由 kubelet 守護(hù)進(jìn)程直接管理,不需要 API 服務(wù)器監(jiān)管。
創(chuàng)建靜態(tài)pod的前提是已經(jīng)有一套可以正常運(yùn)行的Kubernetes集群,關(guān)于Kubernetes(k8s)集群的安裝部署,可以查看博客《Centos7 安裝部署Kubernetes(k8s)集群》http://chabaoo.cn/article/266741.htm
三.靜態(tài)pod
3.1 何為靜態(tài)pod
靜態(tài) Pod 在指定的節(jié)點(diǎn)上由 kubelet 守護(hù)進(jìn)程直接管理,不需要 API 服務(wù)器監(jiān)管。 與由控制面管理的 Pod(例如,Deployment) 不同;kubelet 監(jiān)視每個(gè)靜態(tài) Pod(在它失敗之后重新啟動(dòng))。靜態(tài) Pod 始終都會(huì)綁定到特定節(jié)點(diǎn)的 Kubelet 上。
kubelet 會(huì)嘗試通過 Kubernetes API 服務(wù)器為每個(gè)靜態(tài) Pod 自動(dòng)創(chuàng)建一個(gè)鏡像 Pod。 這意味著節(jié)點(diǎn)上運(yùn)行的靜態(tài) Pod 對(duì) API 服務(wù)來說是可見的,但是不能通過 API 服務(wù)器來控制。 Pod 名稱將把以連字符開頭的節(jié)點(diǎn)主機(jī)名作為后綴。
說明:如果你在運(yùn)行一個(gè) Kubernetes 集群,并且在每個(gè)節(jié)點(diǎn)上都運(yùn)行一個(gè)靜態(tài) Pod, 就可能需要考慮使用 DaemonSet 替代這種方式。靜態(tài) Pod 的 spec 不能引用其他 API 對(duì)象 (如:ServiceAccount、 ConfigMap、 Secret 等)。
3.2 創(chuàng)建靜態(tài)pod
靜態(tài)pod的應(yīng)用場(chǎng)景為:1.使master能正常啟動(dòng) 2.如果某天我們的master崩潰了,如何讓別人知道我們的服務(wù)器在維護(hù)?
目前該命名空間是沒有pod運(yùn)行的
[root@k8scloude1 pod]# kubectl get pods No resources found in pod namespace.
靜態(tài)pod的創(chuàng)建方法為:寫一個(gè)yaml文件,然后把yaml文件放在指定目錄,會(huì)自動(dòng)根據(jù)yaml文件創(chuàng)建pod。有兩種方法來指定這個(gè)目錄:
--pod-manifest-path
/etc/kubernetes/manifests
3.2.1 使用--pod-manifest-path指定靜態(tài)pod目錄
查看kubelet的配置文件位置,可以看到kubelet的配置文件在/usr/lib/systemd/system/kubelet.service
注意:我們是在k8s集群的worker節(jié)點(diǎn)k8scloude2上創(chuàng)建靜態(tài)pod的
[root@k8scloude2 ~]# systemctl status kubelet ● kubelet.service - kubelet: The Kubernetes Node Agent Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/kubelet.service.d └─10-kubeadm.conf Active: active (running) since 六 2022-01-15 12:27:34 CST; 5h 30min ago Docs: https://kubernetes.io/docs/ Main PID: 947 (kubelet) Memory: 122.6M CGroup: /system.slice/kubelet.service └─947 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --network-plugin=cni --pod-infr...
修改kubelet的配置文件/usr/lib/systemd/system/kubelet.service,使用--pod-manifest-path=/etc/kubernetes/kubelet.d指定靜態(tài)pod目錄。
[root@k8scloude2 ~]# vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf #--pod-manifest-path=/etc/kubernetes/kubelet.d表示靜態(tài)pod的目錄為/etc/kubernetes/kubelet.d [root@k8scloude2 ~]# cat /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf # Note: This dropin only works with kubeadm and kubelet v1.11+ [Service] Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --pod-manifest-path=/etc/kubernetes/kubelet.d" Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml" # This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env # This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use # the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file. EnvironmentFile=-/etc/sysconfig/kubelet ExecStart= ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
創(chuàng)建靜態(tài)pod目錄,并使kubelet配置文件生效
[root@k8scloude2 ~]# mkdir /etc/kubernetes/kubelet.d [root@k8scloude2 ~]# systemctl daemon-reload [root@k8scloude2 ~]# systemctl restart kubelet [root@k8scloude2 ~]# systemctl status kubelet ● kubelet.service - kubelet: The Kubernetes Node Agent Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/kubelet.service.d └─10-kubeadm.conf Active: active (running) since 六 2022-01-15 18:02:15 CST; 6s ago Docs: https://kubernetes.io/docs/ Main PID: 108844 (kubelet) Memory: 30.7M CGroup: /system.slice/kubelet.service ├─108844 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --pod-manifest-path=/etc/kubernetes/kubelet.d --config=/var/lib/ku... └─108999 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --pod-manifest-path=/etc/kubernetes/kubelet.d --config=/var/lib/ku...
進(jìn)入靜態(tài)pod的目錄,然后創(chuàng)建pod yaml文件
[root@k8scloude2 ~]# cd /etc/kubernetes/kubelet.d/ [root@k8scloude2 kubelet.d]# ls [root@k8scloude2 kubelet.d]# vim pod.yaml [root@k8scloude2 kubelet.d]# cat pod.yaml apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: pod name: pod spec: containers: - image: nginx imagePullPolicy: IfNotPresent name: pod resources: {} ports: - name: http containerPort: 80 protocol: TCP dnsPolicy: ClusterFirst restartPolicy: Always status: {}
在k8s集群的master節(jié)點(diǎn)上查看pod,在master上可以看到該pod,由于pod.yaml沒有指定namespace,默認(rèn)在default下,可以看到Pod 名稱(pod-k8scloude2)是以連字符開頭的節(jié)點(diǎn)主機(jī)名作為后綴。
[root@k8scloude1 pod]# kubectl get pods -n default -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-k8scloude2 1/1 Running 0 109s 10.244.112.153 k8scloude2 <none> <none>
當(dāng)把這個(gè)pod.yaml文件從靜態(tài)pod目錄移走,pod就消失了
[root@k8scloude2 kubelet.d]# mv pod.yaml ~/ [root@k8scloude2 kubelet.d]# ls #當(dāng)把這個(gè)yaml文件移走,pod消失 [root@k8scloude1 pod]# kubectl get pods -n default -o wide No resources found in default namespace.
現(xiàn)在指定靜態(tài)pod的namespace為pod
[root@k8scloude2 kubelet.d]# vim pod.yaml #namespace: pod:指定pod的命名空間 [root@k8scloude2 kubelet.d]# cat pod.yaml apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: pod name: pod namespace: pod spec: containers: - image: nginx imagePullPolicy: IfNotPresent name: pod resources: {} ports: - name: http containerPort: 80 protocol: TCP dnsPolicy: ClusterFirst restartPolicy: Always status: {} [root@k8scloude2 kubelet.d]# ls pod.yaml
查看pod
[root@k8scloude1 pod]# kubectl get pods -n pod NAME READY STATUS RESTARTS AGE pod-k8scloude2 1/1 Running 0 6s
3.2.2 靜態(tài)pod默認(rèn)目錄/etc/kubernetes/manifests
注意:進(jìn)行這一步的時(shí)候,先還原kubelet配置文件/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
查看配置文件,可以發(fā)現(xiàn)靜態(tài)pod默認(rèn)目錄為/etc/kubernetes/manifests
[root@k8scloude2 kubelet.d]# cat /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf # Note: This dropin only works with kubeadm and kubelet v1.11+ [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" # This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env # This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use # the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file. EnvironmentFile=-/etc/sysconfig/kubelet ExecStart= ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS [root@k8scloude2 kubelet.d]# ls /var/lib/kubelet/config.yaml /var/lib/kubelet/config.yaml [root@k8scloude2 kubelet.d]# cat /var/lib/kubelet/config.yaml | grep manifest staticPodPath: /etc/kubernetes/manifests #默認(rèn)的靜態(tài)pod的目錄為 ls /etc/kubernetes/manifests [root@k8scloude2 kubelet.d]# ls /etc/kubernetes/manifests
在默認(rèn)的靜態(tài)pod目錄/etc/kubernetes/manifests/下創(chuàng)建pod yaml文件
#namespace: pod:指定pod的命名空間 [root@k8scloude2 kubelet.d]# vim ~/pod.yaml [root@k8scloude2 kubelet.d]# cat ~/pod.yaml apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: pod name: pod namespace: pod spec: containers: - image: nginx imagePullPolicy: IfNotPresent name: pod resources: {} ports: - name: http containerPort: 80 protocol: TCP dnsPolicy: ClusterFirst restartPolicy: Always status: {} [root@k8scloude2 kubelet.d]# cp ~/pod.yaml /etc/kubernetes/manifests/
可以發(fā)現(xiàn),靜態(tài)pod已經(jīng)創(chuàng)建了
[root@k8scloude1 pod]# kubectl get pods -n pod NAME READY STATUS RESTARTS AGE pod-k8scloude2 1/1 Running 0 6s
刪除yaml文件,靜態(tài)pod消失
#刪除yaml文件 [root@k8scloude2 kubelet.d]# rm -rf /etc/kubernetes/manifests/pod.yaml #pod消失 [root@k8scloude1 pod]# kubectl get pods -n pod No resources found in pod namespace.
前面幾步,靜態(tài)pod是在k8s集群的worker節(jié)點(diǎn)上做的,現(xiàn)在在k8s集群的master節(jié)點(diǎn)上做。
注意:如果在/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf里添加了--pod-manifest-path=/etc/kubernetes/kubelet.d,則相應(yīng)的/etc/kubernetes/manifests/下的yaml文件也要移動(dòng)到/etc/kubernetes/kubelet.d目錄下,不然k8s集群的master節(jié)點(diǎn)啟動(dòng)不起來。
可以看到k8s集群的master節(jié)點(diǎn)有很多靜態(tài)pod。
[root@k8scloude1 pod]# ls /etc/kubernetes/manifests/ etcd.yaml kube-apiserver.yaml kube-controller-manager.yaml kube-scheduler.yaml
以上就是靜態(tài)pod 創(chuàng)建使用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于靜態(tài)pod創(chuàng)建使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
docker安裝fastdfs鏡像的一些注意事項(xiàng)
在安裝docker fastdfs鏡像時(shí)大家需要注意如果是云服務(wù)器則需要在云服務(wù)器后臺(tái)的安全組入口方向放開22122、23000以及8888端口,并且在云服務(wù)器防火墻配置放開以上三個(gè)端口,具體內(nèi)容詳情大家跟隨小編一起看看吧2021-05-05Docker創(chuàng)建鏡像、怎么修改、上傳鏡像等詳細(xì)介紹
這篇文章主要介紹了Docker創(chuàng)建鏡像、怎么修改、上傳鏡像等詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-12-12主機(jī)Nginx + Docker WordPress Mysql搭建的詳細(xì)步驟
這篇文章主要介紹了主機(jī)Nginx + Docker WordPress Mysql搭建的詳細(xì)步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11docker安裝elasticsearch和kibana的方法步驟
這篇文章主要介紹了docker安裝elasticsearch和kibana的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Docker容器的網(wǎng)絡(luò)管理和網(wǎng)絡(luò)隔離的實(shí)現(xiàn)
這篇文章主要介紹了Docker容器的網(wǎng)絡(luò)管理和網(wǎng)絡(luò)隔離的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05docker安裝influxdb的詳細(xì)教程(性能測(cè)試)
這篇文章主要介紹了docker安裝influxdb的詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07