久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何使用DaemonSet控制器

152次閱讀
沒有評論

共計 4057 個字符,預計需要花費 11 分鐘才能閱讀完成。

這期內容當中丸趣 TV 小編將會給大家帶來有關如何使用 DaemonSet 控制器,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

我們通過幾個簡單的例子來快速體驗 DaemonSet 控制器。

環境準備

我們使用 Kind 工具來創建一個包含三個節點的集群,使用的配置如下所示:

[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

然后,創建一 個 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

集群創建完成后,檢查各節點是否已正常工作:

[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

可以看到所有節點都已處于 Ready 狀態,接下來我們就創建一個 DaemonSet 對象,它可以保證在每個工作節點上創建一個 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

該份配置將創建一個 DaemonSet 對象,然后 DaemonSet 控制器會根據該對象信息分別在每個節點上創建一個 Pod 副本。

接下來使用 kubectl create 命令將該配置提次給 kube-apiserver,如下所示:

[root@ecs-d8b6 manifests]# kubectl create -f daemonset.yaml 
daemonset.apps/nginx-daemonset created

查看

首先查看剛剛創建的 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:需求副本個數,由于沒有刻意篩選節點,所以副本個數等同于節點個數;

CURRENT:當前已創建的副本個數;

READY:處于 Ready 狀態的副本個數;

UP-TO-DATE:已按最新 Pod 模版創建的 Pod 個數;

AVAILABLE:可用的副本個數;

NODE SELECTOR:節點選擇器,本例中我們沒有選擇,值為空;

AGE:創建至今經歷的時間。

上面的字段中,除了 NODE SELECTOR 以外,我們已在前面的章節中介紹過。其實 Node Selector 并不是 DaemonSet 對象特有的配置,它是 Pod 模版中用于為 Pod 匹配節點的配置,DaemonSet 控制器使用該 Node Selector 來篩選需要創建副本的節點,如果沒有指定,則默認選擇全部節點。

接著,查看 DaemonSet 控制器所創建的 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

可以看到,每個節點上均創建了一個副本,符合預期。

更新

接下來我們試圖調整 Pod 部署策略,我們只希望 Pod 運行在名為 kind-worker 的節點上,這樣我們只需要配置 DaemonSet 對象的 spec.template.spec.nodeSelector 來選擇節點即可。

在 kind-worker 的節點中存在一個標識節點的 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

可以發現 DaemonSet 狀態中,NODE SELECTOR 正確地體現了我們的修改,而且需求的 Pod 副本數也變成了 1 個,符合預期。原來運行的 3 個 Pod 副本減少到 1 個,而且只在我們選定的節點上運行。

刪除

像其他 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.

上述就是丸趣 TV 小編為大家分享的如何使用 DaemonSet 控制器了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-17發表,共計4057字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 遂宁市| 辽源市| 萍乡市| 宽城| 扶余县| 东丰县| 呼和浩特市| 兴仁县| 剑川县| 龙山县| 肥西县| 什邡市| 马鞍山市| 香港 | 桃源县| 兴仁县| 垦利县| 龙州县| 常山县| 乐昌市| 和政县| 独山县| 来凤县| 于田县| 涟源市| 武山县| 石城县| 汕尾市| 沁阳市| 荥阳市| 乐山市| 巩义市| 明光市| 东阳市| 阿荣旗| 资阳市| 樟树市| 灵武市| 民县| 巨鹿县| 沂南县|