K8s新手系列之DaemonSet资源

打印 上一主题 下一主题

主题 2075|帖子 2075|积分 6225

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
概述

官网文档:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/daemonset/
DaemonSet简称ds
DaemonSet 在不思量污点的环境下会确保全部(或者某些)节点上运行一个 Pod 的副本。 当有节点加入集群时, 也会为他们新增一个 Pod 。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
使用场景:


  • 在每个节点上运行集群守护进程

    • 比如:kube-proxy

  • 在每个节点上运行日志网络守护进程

    • 比如:filebeat

  • 在每个节点上运行监控守护进程

    • 比如:zabbix-agent2

资源清单文件详解
  1. apiVersion: apps/v1       # API 版本,当前稳定版本为 apps/v1
  2. kind: DaemonSet          # 资源类型为 DaemonSet
  3. metadata:
  4.   name: example-daemonset # DaemonSet 名称,需在命名空间内唯一
  5.   namespace: default      # 所属命名空间,默认值为 default
  6.   labels:                 # 标签,用于关联 Pod/Selector 等
  7.     app: monitoring
  8. spec:
  9.   selector:               # 标签选择器,用于匹配受控的 Pod
  10.     matchLabels:
  11.       app: monitoring
  12.   template:               # Pod 模板,定义 Pod 的具体配置
  13.     metadata:
  14.       labels:
  15.         app: monitoring  # 需与 selector.matchLabels 一致
  16.     spec:
  17.       containers:
  18.       - name: agent       # 容器名称
  19.         image: agent:v1   # 镜像地址
  20.         resources:        # 资源限制(可选)
  21.           requests:
  22.             cpu: 100m
  23.             memory: 100Mi
  24.           limits:
  25.             cpu: 200m
  26.             memory: 200Mi
  27.       nodeSelector:       # 节点选择器(可选),指定 Pod 调度到符合条件的节点
  28.         disk: ssd
  29.       tolerations:        # 污点容忍(可选),允许 Pod 调度到带有特定污点的节点
  30.       - key: "node-role.kubernetes.io/master"
  31.         operator: "Exists"
  32.         effect: "NoSchedule"
  33.   updateStrategy:         # 更新策略(可选,默认 RollingUpdate)
  34.     type: RollingUpdate
  35.     rollingUpdate:
  36.       maxUnavailable: 1   # 滚动更新时允许的最大不可用 Pod 数
  37.   minReadySeconds: 30     # 等待 Pod 就绪的最短时间(可选)
复制代码
DaemonSet实战
  1. # 定义资源清单文件
  2. [root@master01 ~/daemonset]# cat daemonset-nginx.yaml
  3. apiVersion: apps/v1
  4. kind: DaemonSet
  5. metadata:
  6.   name: nginx-daemonset
  7.   namespace: default
  8.   labels:
  9.     app: nginx
  10. spec:
  11.   selector:
  12.     matchLabels:
  13.       app: nginx
  14.   template:
  15.     metadata:
  16.       labels:
  17.         app: nginx
  18.     spec:
  19.       containers:
  20.       - name: nginx
  21.         image: nginx:latest
  22.         ports:
  23.         - containerPort: 80
  24.           hostPort: 30280
  25. # 创建daemonset资源
  26. [root@master01 ~/daemonset]# kubectl apply -f daemonset-nginx.yaml
  27. daemonset.apps/nginx-daemonset created
复制代码
查看daemonset资源
  1. # 查看daemonset资源
  2. [root@master01 ~/daemonset]# kubectl get ds
  3. NAME              DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
  4. nginx-daemonset   2         2         0       2            0           <none>          5s
  5. # 查看pod,发现调度到node01和node02节点上
  6. [root@master01 ~/daemonset]# kubectl get po -o wide
  7. NAME                                 READY   STATUS             RESTARTS          AGE     IP                NODE     NOMINATED NODE   READINESS GATES
  8. nginx-daemonset-bwgdw                1/1     Running            0                 115s    100.95.185.254    node02   <none>           <none>
  9. nginx-daemonset-dtpw2                1/1     Running            0                 115s    100.117.144.153   node01   <none>           <none>
复制代码
为什么master节点上没有调度?

因为master节点上默认存在一个污点,而上面的案例中没有设置污点容忍,所以没有调度已往
  1. # 查看污点
  2. [root@master01 ~/daemonset]# kubectl describe node master01 | grep -i taint
  3. Taints:             node-role.kubernetes.io/control-plane:NoSchedule
复制代码
如果必要调度到master节点,必要做污点容忍。
关于污点和污点容忍学习可以阅读这篇文章:K8s中的污点和容忍
示例:
  1. [root@master01 ~/daemonset]# cat daemonset-nginx.yaml
  2. apiVersion: apps/v1
  3. kind: DaemonSet
  4. metadata:
  5.   name: nginx-daemonset
  6.   namespace: default
  7.   labels:
  8.     app: nginx
  9. spec:
  10.   selector:
  11.     matchLabels:
  12.       app: nginx
  13.   template:
  14.     metadata:
  15.       labels:
  16.         app: nginx
  17.     spec:
  18.       # 污点容忍
  19.       tolerations:
  20.       - key: "node-role.kubernetes.io/control-plane"
  21.         operator: "Exists"
  22.         effect: "NoSchedule"
  23.       containers:
  24.       - name: nginx
  25.         image: nginx:1.25.3
  26.         ports:
  27.         - containerPort: 80
  28.           hostPort: 30280
  29. # 创建daemonset资源
  30. [root@master01 ~/daemonset]# kubectl apply -f daemonset-nginx.yaml
  31. daemonset.apps/nginx-daemonset configured
复制代码
查看一下
  1. [root@master01 ~/daemonset]# kubectl get ds
  2. NAME              DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
  3. nginx-daemonset   3         3         2       1            2           <none>          9m58s
  4. # 查看pod,发现master节点也已经调度上了
  5. [root@master01 ~/daemonset]# kubectl get po -o wide
  6. NAME                                 READY   STATUS              RESTARTS          AGE     IP                NODE       NOMINATED NODE   READINESS GATES
  7. nginx-daemonset-2pzdk                1/1     Running             0                 102s    100.85.170.132    master01   <none>           <none>
  8. nginx-daemonset-dtpw2                1/1     Running             0                 11m     100.117.144.153   node01     <none>           <none>
  9. nginx-daemonset-fr4dr                0/1     ContainerCreating   0                 88s     <none>            node02     <none>           <none>
复制代码
daemonset资源的管理

查看DaemonSet

语法:
  1. kubectl get daemonset <daemonset-name>
复制代码
删除DaemonSet
  1. kubectl delete daemonset <daemonset-name>
复制代码
更新DaemonSet

Damonset资源的更新、回滚策略和Deployment是一样的,可以参考这篇文章:K8s进阶之Deployment的更新&回滚
1、使用kubectl edit下令更新
2、使用对应的资源清单文件进行更新
3、快速更新镜像:
  1. # 语法
  2. kubectl set image daemonset <daemonset资源> <pod-名称>=<镜像>:<镜像tag>
  3. # 示例
  4. kubectl set image daemonset/example-daemonset agent=agent:v2
复制代码
4、快速回滚到上一个版本:
  1. kubectl rollout undo daemonset/example-daemonset
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

石小疯

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表