您好,登錄后才能下訂單哦!
這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)如何使用DaemonSet控制器,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
我們通過幾個簡單的例子來快速體驗DaemonSet
控制器。
我們使用Kind
工具來創(chuàng)建一個包含三個節(jié)點的集群,使用的配置如下所示:
[root@ecs-d8b6 book]# cat config_kind.yaml kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane - role: worker - role: worker - role: worker
然后,創(chuàng)建一 個v1.18.0版本的Kubernetes集群:
[root@ecs-d8b6 book]# kind create cluster --config config_kind.yaml --image=kindest/node:v1.18.0 Creating cluster "kind" ... ? Ensuring node image (kindest/node:v1.18.0) ???? ? Preparing nodes ???? ???? ???? ???? ? Writing configuration ???? ? Starting control-plane ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ? Installing CNI ???? ? Installing StorageClass ???? ? Joining worker nodes ???? Set kubectl context to "kind-kind" You can now use your cluster with: kubectl cluster-info --context kind-kind
集群創(chuàng)建完成后,檢查各節(jié)點是否已正常工作:
[root@ecs-d8b6 book]# kubectl get nodes NAME STATUS ROLES AGE VERSION kind-control-plane Ready master 3m6s v1.18.0 kind-worker Ready <none> 2m30s v1.18.0 kind-worker2 Ready <none> 2m31s v1.18.0 kind-worker3 Ready <none> 2m30s v1.18.0
可以看到所有節(jié)點都已處于Ready
狀態(tài),接下來我們就創(chuàng)建一個DaemonSet
對象,它可以保證在每個工作節(jié)點上創(chuàng)建一個Pod
副本。
首先我們先將以下配置保存到名為daemonset.yaml
的文件中。
[root@ecs-d8b6 manifests]# cat daemonset.yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx-daemonset labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.19.0
該份配置將創(chuàng)建一個DaemonSet
對象,然后DaemonSet
控制器會根據(jù)該對象信息分別在每個節(jié)點上創(chuàng)建一個Pod副本。
接下來使用kubectl create
命令將該配置提次給kube-apiserver
,如下所示:
[root@ecs-d8b6 manifests]# kubectl create -f daemonset.yaml daemonset.apps/nginx-daemonset created
首先查看剛剛創(chuàng)建的DaemonSet
對象:
[root@ecs-d8b6 manifests]# kubectl get daemonset NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE nginx-daemonset 3 3 3 3 3 <none> 5m6s
命令行輸出中各字段含義如下:
NAME: DaemonSet
對象名稱,同配置中的metadata.name
;
DESIRED:需求副本個數(shù),由于沒有刻意篩選節(jié)點,所以副本個數(shù)等同于節(jié)點個數(shù);
CURRENT:當前已創(chuàng)建的副本個數(shù);
READY:處于Ready
狀態(tài)的副本個數(shù);
UP-TO-DATE:已按最新Pod
模版創(chuàng)建的Pod個數(shù);
AVAILABLE:可用的副本個數(shù);
NODE SELECTOR:節(jié)點選擇器,本例中我們沒有選擇,值為空;
AGE:創(chuàng)建至今經(jīng)歷的時間。
上面的字段中,除了NODE SELECTOR
以外,我們已在前面的章節(jié)中介紹過。其實Node Selector
并不是DaemonSet
對象特有的配置,它是Pod
模版中用于為Pod匹配節(jié)點的配置,DaemonSet
控制器使用該Node Selector
來篩選需要創(chuàng)建副本的節(jié)點,如果沒有指定,則默認選擇全部節(jié)點。
接著,查看DaemonSet
控制器所創(chuàng)建的Pod副本信息:
[root@ecs-d8b6 manifests]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-daemonset-78dbc 1/1 Running 0 5m13s 10.244.3.2 kind-worker3 <none> <none> nginx-daemonset-gmpdg 1/1 Running 0 5m13s 10.244.1.2 kind-worker2 <none> <none> nginx-daemonset-l6wn4 1/1 Running 0 5m13s 10.244.2.2 kind-worker <none> <none>
可以看到,每個節(jié)點上均創(chuàng)建了一個副本,符合預期。
接下來我們試圖調(diào)整Pod部署策略,我們只希望Pod運行在名為kind-worker
的節(jié)點上,這樣我們只需要配置DaemonSet
對象的spec.template.spec.nodeSelector
來選擇節(jié)點即可。
在kind-worker
的節(jié)點中存在一個標識節(jié)點的label:
kubernetes.io/hostname: kind-worker
所以DaemonSet
對象的spec.template.spec.nodeSelector
配置如下:
apiVersion: apps/v1 kind: DaemonSet metadata: ... spec: ... template: ... spec: ... nodeSelector: kubernetes.io/hostname: kind-worker
使用kubectl edit
命令修改配置,然后再次觀察DaemonSet
對象和Pod副本:
[root@ecs-d8b6 manifests]# kubectl get daemonsets NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE nginx-daemonset 1 1 1 1 1 kubernetes.io/hostname=kind-worker 37m [root@ecs-d8b6 manifests]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-daemonset-66gk2 1/1 Running 0 10s 10.244.2.3 kind-worker <none> <none>
可以發(fā)現(xiàn)DaemonSet
狀態(tài)中,NODE SELECTOR
正確地體現(xiàn)了我們的修改,而且需求的Pod副本數(shù)也變成了1個,符合預期。 原來運行的3個Pod副本減少到1個,而且只在我們選定的節(jié)點上運行。
像其他Pod控制器一樣,當刪除DaemonSet
對象時,其所管理的Pod默認也會被刪除,操作如下所示:
[root@ecs-d8b6 ~]# kubectl delete daemonsets nginx-daemonset daemonset.apps "nginx-daemonset" deleted [root@ecs-d8b6 ~]# kubectl get pods No resources found in default namespace.
上述就是小編為大家分享的如何使用DaemonSet控制器了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。