这期内容当中小编将会给大家带来有关如何使用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.
上述就是小编为大家分享的如何使用DaemonSet控制器了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。