4 Kubernetes資源-Pod控制器(2)
4.3 DaemonSet
DaemonSet確保Pod在所有Node節(jié)點(diǎn)運(yùn)行一個副本,當(dāng)有Node節(jié)點(diǎn)添加時會自動在新的節(jié)點(diǎn)創(chuàng)建Pod。常用于每個Node上的日志收集、監(jiān)控、集群存儲管理等。
編寫YAML文件,通過app: tomcat 標(biāo)簽將DaemonSet與Pod資源關(guān)聯(lián):
[root@k8smaster43-11 CSDN]# cat daemonset.yaml
apiVersion: apps/v1 # API版本
kind: DaemonSet # 資源類型
metadata: name: tomcat-daemons # DS資源名稱
spec: selector: matchLabels: app: tomcat # 關(guān)聯(lián)Pod標(biāo)簽template:metadata: name: tomcat-pod # Pod資源名稱labels: app: tomcat # Pod資源標(biāo)簽 spec: containers: - name: demo-tomcat # Pod容器名稱image: tomcat:8.0 # Pod容器鏡像imagePullPolicy: Never # 容器下載模式
[root@k8smaster43-11 CSDN]#
創(chuàng)建DaemonSet資源:
[root@k8smaster43-11 CSDN]# kubectl create -f daemonset.yaml
daemonset.apps/tomcat-daemons created
[root@k8smaster43-11 CSDN]#
[root@k8smaster43-11 CSDN]# kubectl get ds,pod -o wide --show-labels
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR LABELS
daemonset.apps/tomcat-daemons 2 2 2 2 2 <none> 39s demo-tomcat tomcat:8.0 app=tomcat <none>NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
pod/tomcat-daemons-dqfn4 1/1 Running 0 39s 10.244.2.81 k8sworker43-22 <none> <none> app=tomcat,controller-revision-hash=7f5c98c9cc,pod-template-generation=1
pod/tomcat-daemons-tpz7z 1/1 Running 0 39s 10.244.1.98 k8sworker43-21 <none> <none> app=tomcat,controller-revision-hash=7f5c98c9cc,pod-template-generation=1
[root@k8smaster43-11 CSDN]#
將1臺工作節(jié)點(diǎn)從Kubernetes集群中剔除,則DaemonSet的Pod會從該節(jié)點(diǎn)刪除:
[root@k8smaster43-11 CSDN]# kubectl delete nodes/k8sworker43-21
node "k8sworker43-21" deleted
[root@k8smaster43-11 CSDN]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8smaster43-11 Ready master 107d v1.19.4
k8sworker43-22 Ready <none> 107d v1.19.4
[root@k8smaster43-11 CSDN]#
[root@k8smaster43-11 CSDN]# kubectl get ds,pod -o wide --show-labels
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR LABELS
daemonset.apps/tomcat-daemons 1 1 1 1 1 <none> 8m19s demo-tomcat tomcat:8.0 app=tomcat <none>NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
pod/tomcat-daemons-dqfn4 1/1 Running 0 8m19s 10.244.2.81 k8sworker43-22 <none> <none> app=tomcat,controller-revision-hash=7f5c98c9cc,pod-template-generation=1
[root@k8smaster43-11 CSDN]#
將1臺工作節(jié)點(diǎn)加入Kubernetes集群中,則DaemonSet會自動從該節(jié)點(diǎn)啟動Pod:
# 在工作節(jié)點(diǎn)執(zhí)行kubeadm join命令加入集群
[root@k8sworker43-21 ~]# kubeadm join 192.168.43.11:6443 --token d1ncs0.we7r79976ndaf3k4 --discovery-token-ca-cert-hash sha256:28d33e6003840de19700fbba569f32557c57841ff94516720eadc072e4b3a099
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
[root@k8sworker43-21 ~]# #在Master節(jié)點(diǎn)查看DaemonSet資源情況
[root@k8smaster43-11 CSDN]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8smaster43-11 Ready master 107d v1.19.4
k8sworker43-21 Ready <none> 12s v1.19.4
k8sworker43-22 Ready <none> 107d v1.19.4
[root@k8smaster43-11 CSDN]#
[root@k8smaster43-11 CSDN]# kubectl get ds,pod -o wide --show-labels
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR LABELS
daemonset.apps/tomcat-daemons 2 2 2 2 2 <none> 20m demo-tomcat tomcat:8.0 app=tomcat <none>NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
pod/tomcat-daemons-cvxrb 1/1 Running 0 10s 10.244.1.2 k8sworker43-21 <none> <none> app=tomcat,controller-revision-hash=7f5c98c9cc,pod-template-generation=1
pod/tomcat-daemons-dqfn4 1/1 Running 0 20m 10.244.2.81 k8sworker43-22 <none> <none> app=tomcat,controller-revision-hash=7f5c98c9cc,pod-template-generation=1
[root@k8smaster43-11 CSDN]#
刪除DaemonSet和對應(yīng)Pod的資源:
[root@k8smaster43-11 CSDN]# kubectl delete -f daemonset.yaml
daemonset.apps "tomcat-daemons" deleted
[root@k8smaster43-11 CSDN]#
4.4 Job/CronJob
Job負(fù)責(zé)批處理任務(wù),即僅執(zhí)行一次的任務(wù),它保證批處理的一個或多個Pod成功結(jié)束。
編寫YAML文件,設(shè)置任務(wù)的執(zhí)行次數(shù) completions為4次、同時執(zhí)行的任務(wù)數(shù)量parallelism為2個,因為任務(wù)是執(zhí)行完就結(jié)束所以Pod的重啟策略restartPolicy:為Never:
[root@k8smaster43-11 CSDN]# cat job.yaml
apiVersion: batch/v1 # API版本
kind: Job # 資源類型
metadata: name: perl-job # Job資源名稱
spec:completions: 4 # Job執(zhí)行次數(shù)parallelism: 2 # Job并發(fā)數(shù)量template: metadata: name: perl-pod # Pod資源標(biāo)簽spec: containers: - name: perl # Pod容器名稱image: perl # Pod容器鏡像command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]restartPolicy: Never # Pod重啟策略
[root@k8smaster43-11 CSDN]#
創(chuàng)建Job資源并查看任務(wù)執(zhí)行狀態(tài),Pod為Running表示正在執(zhí)行、Completed表示執(zhí)行結(jié)束:
[root@k8smaster43-11 CSDN]# kubectl create -f job.yaml
job.batch/perl-job created
[root@k8smaster43-11 CSDN]# kubectl get job,pod -o wide
NAME COMPLETIONS DURATION AGE CONTAINERS IMAGES SELECTOR
job.batch/perl-job 0/4 19s 19s perl perl controller-uid=517a4293-107a-4c05-8480-611b63dc8de5NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/perl-job-ggspc 1/1 Running 0 19s 10.244.2.86 k8sworker43-22 <none> <none>
pod/perl-job-p796m 1/1 Running 0 19s 10.244.2.87 k8sworker43-22 <none> <none># 有2個任務(wù)同時執(zhí)行,任務(wù)執(zhí)行結(jié)束Pod狀態(tài)變?yōu)镃ompleted
[root@k8smaster43-11 CSDN]# kubectl get job,pod -o wide
NAME COMPLETIONS DURATION AGE CONTAINERS IMAGES SELECTOR
job.batch/perl-job 2/4 30s 30s perl perl controller-uid=517a4293-107a-4c05-8480-611b63dc8de5NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/perl-job-ggspc 0/1 Completed 0 30s 10.244.2.86 k8sworker43-22 <none> <none>
pod/perl-job-gkrsf 1/1 Running 0 2s 10.244.2.89 k8sworker43-22 <none> <none>
pod/perl-job-p796m 0/1 Completed 0 30s 10.244.2.87 k8sworker43-22 <none> <none>
pod/perl-job-slr82 1/1 Running 0 4s 10.244.2.88 k8sworker43-22 <none> <none>
刪除Job和對應(yīng)Pod的資源:
[root@k8smaster43-11 CSDN]# kubectl delete -f job.yaml
job.batch "perl-job" deleted
[root@k8smaster43-11 CSDN]#
CronJob負(fù)責(zé)在給定時間調(diào)度Job,或者按照周期運(yùn)行Job。常用于定時任務(wù)腳本、數(shù)據(jù)庫備份、定時郵件發(fā)送等。
編寫YAML文件,通過schedule字段設(shè)置定時任務(wù)的時間間隔:
[root@k8smaster43-11 CSDN]# cat cronjob.yaml
apiVersion: batch/v1beta1 # API版本
kind: CronJob # 資源類型
metadata: name: busybox-cronjob # CronJob資源名稱
spec:schedule: "*/1 * * * *" # 批處理時間間隔60sjobTemplate: spec: completions: 1 # Job執(zhí)行次數(shù)parallelism: 1 # Job并發(fā)數(shù)量template: metadata: app: busybox # Pod資源標(biāo)簽spec: containers: - name: busybox # Pod容器名稱image: busybox # Pod容器鏡像command: ["sh", "-c", "date; echo Hello from the kubernetes cluster"]restartPolicy: Never # Pod重啟策略
[root@k8smaster43-11 CSDN]#
創(chuàng)建CronJob資源并觀察執(zhí)行過程,通過successfulJobsHistoryLimit字段可以設(shè)置需要保留的成功完成任務(wù)的Job個數(shù),超過該數(shù)值的Job會被刪除:
[root@k8smaster43-11 CSDN]# kubectl get cronjob,job,pod -o wide
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE CONTAINERS IMAGES SELECTOR
cronjob.batch/busybox-cronjob */1 * * * * False 0 31s 9m21s busybox busybox <none>NAME COMPLETIONS DURATION AGE CONTAINERS IMAGES SELECTOR
job.batch/busybox-cronjob-1658563620 1/1 18s 2m30s busybox busybox controller-uid=87d090c6-bbe4-48ca-8849-fc3a941d7bf4
job.batch/busybox-cronjob-1658563680 1/1 19s 90s busybox busybox controller-uid=673942e5-18fc-445e-b203-a264d271d5cb
job.batch/busybox-cronjob-1658563740 1/1 17s 29s busybox busybox controller-uid=c54ceea2-93e8-4b7e-83a3-b40e29113005NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/busybox-cronjob-1658563620-7d88g 0/1 Completed 0 2m30s 10.244.2.93 k8sworker43-22 <none> <none>
pod/busybox-cronjob-1658563680-528dd 0/1 Completed 0 90s 10.244.1.10 k8sworker43-21 <none> <none>
pod/busybox-cronjob-1658563740-h25ff 0/1 Completed 0 29s 10.244.2.94 k8sworker43-22 <none> <none>
[root@k8smaster43-11 CSDN]#
刪除CornJob和對應(yīng)Job、Pod的資源:
[root@k8smaster43-11 CSDN]# kubectl delete -f cronjob.yaml
cronjob.batch "busybox-cronjob" deleted
[root@k8smaster43-11 CSDN]#
4.5 StatefulSet
StatefulSet負(fù)責(zé)有狀態(tài)服務(wù)問題,為每個Pod提供唯一的標(biāo)識{StatefulSetName}-{0-N},保證部署和擴(kuò)容的有序性,而其他控制器生成的Pod標(biāo)識符存在隨機(jī)值。
應(yīng)用場景(案例在后續(xù)Service和PV/PVC部分):
穩(wěn)定持久化存儲,Pod重新調(diào)度后還能訪問到相同的持久化數(shù)據(jù),基于PVC實現(xiàn)的為每個Pod匹配一個PVC; 穩(wěn)定的網(wǎng)絡(luò)標(biāo)志,Pod重新調(diào)度后其PodName和HostName不變,基于Headless Service實現(xiàn)的可以在容器內(nèi)部ping PodName.HeadlessServiceName,而其他類型的Service只能ping ServiceName; 有序部署有序擴(kuò)展,在部署和擴(kuò)展的時候要依據(jù)定義的順序依次運(yùn)行,在下一個Pod運(yùn)行之前所有前序Pod必須都是Running和Ready狀態(tài),基于init container實現(xiàn); 有序收縮有序刪除。
總結(jié)
以上是生活随笔 為你收集整理的4 Kubernetes资源-Pod控制器(2) 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔 推薦給好友。