3.3控制器之DaemonSet

    技术2024-12-16  41

    文章目录

    1、在集群中所有node节点上创建一个pod副本2、在集群中指定的node上创建一个pod副本 DaemonSet可以确保每个node节点或者指定的节点上运行一个Pod副本。当集群中增加node节点时,就会为node节点创建一个副本pod,当节点从集群中移除时,Pod也会被回收。删除DaemonSet会删除他创建的所有DaemonSet。 作用:DaemonSet适合在每个节点上运行一个pod,运行日志收集器或者资源管理器监控的工作。

    1、在集群中所有node节点上创建一个pod副本

    以如下yaml为例,在每个节点上创建一个pod运行mynginx应用

    apiVersion: apps/v1 #版本 kind: DaemonSet #控制器类型 metadata: #DaemonSet的元数据 name: mydaemonset #DaemonSet的名称为mydaemonset labels: #DaemonSet控制器的标签为app: mydaemonset app: mydaemonset spec: #DaemonSet控制器的描述 selector: #DaemonSet控制器的选择器 matchLabels: #DaemonSet控制器pod标签匹配 name: mydaemonset-pod #DaemonSet控制器只管理标签为name: mydaemonset-pod 的pod template: metadata: labels: name: mydaemonset-pod #DaemonSet创建标签为name: mydaemonset-pod的标签 spec: containers: #容器描述 - name: mynginx #容器的名字 image: mynginx:v0.2 #容器中的镜像 #创建mydaemonset [root@k8s-master01 daemonset_work]# kubectl create -f daemonset.yaml daemonset.apps/mydaemonset created #发现分别在k8s-node01和k8s-node02上创建一个pod副本 [root@k8s-master01 daemonset_work]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mydaemonset-5kbcr 1/1 Running 0 9s 10.244.1.94 k8s-node01 <none> <none> mydaemonset-mbjv7 1/1 Running 0 9s 10.244.2.97 k8s-node02 <none> <none>

    2、在集群中指定的node上创建一个pod副本

    可以在集群中node节点上给节点打上不同的标签,然后根据不同的标签选择节点进行部署pod副本。 示例如下,首先在上述yaml中添加选择的节点标签

    apiVersion: apps/v1 kind: DaemonSet metadata: name: mydaemonset labels: app: mydaemonset spec: selector: matchLabels: name: mydaemonset-pod template: metadata: labels: name: mydaemonset-pod spec: nodeSelector: #只在标签为disk=mynginx-node的节点上部署一个pod副本 disk: mynginx-node containers: - name: mynginx image: mynginx:v0.2 #首先创建DeamonSet [root@k8s-master01 daemonset_work]# kubectl create -f daemonset_node.yaml daemonset.apps/mydaemonset created #查看创建的DeamonSet,还没有符合的节点创建pod [root@k8s-master01 daemonset_work]# kubectl get daemonset NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE mydaemonset 0 0 0 0 0 disk=mynginx-node 34s #查看节点 [root@k8s-master01 daemonset_work]# kubectl get node NAME STATUS ROLES AGE VERSION k8s-master01 Ready master 33d v1.15.1 k8s-node01 Ready <none> 33d v1.15.1 k8s-node02 Ready <none> 33d v1.15.1 #给k8s-node01节点打标签disk=mynginx-node [root@k8s-master01 daemonset_work]# kubectl label node k8s-node01 disk=mynginx-node node/k8s-node01 labeled #再次查看pod,发现已经创建了一个pod副本 [root@k8s-master01 daemonset_work]# kubectl get pod NAME READY STATUS RESTARTS AGE mydaemonset-9pt7g 1/1 Running 0 13s #给k8s-node02节点打标签disk=mynginx-node [root@k8s-master01 daemonset_work]# kubectl label node k8s-node02 disk=mynginx-node node/k8s-node02 labeled #再次查看pod,发现已创建两个pod [root@k8s-master01 daemonset_work]# kubectl get pod NAME READY STATUS RESTARTS AGE mydaemonset-9pt7g 1/1 Running 0 2m50s mydaemonset-npbkk 1/1 Running 0 5s #修改k8s-node02节点标签disk=no-mynginx-node [root@k8s-master01 daemonset_work]# kubectl label node k8s-node02 disk=no-mynginx-node --overwrite node/k8s-node02 labeled #由于节点的标签修改了,符合选择器的标签的node节点还一个 [root@k8s-master01 daemonset_work]# kubectl get pod NAME READY STATUS RESTARTS AGE mydaemonset-9pt7g 1/1 Running 0 3m39s

    本文参考《kubenetes in action》

    Processed: 0.010, SQL: 9