【简洁、实用】轻松学会k8s的pod控制器DaemonSet(DS)

本文介绍了DaemonSet控制器的功能和用途,它确保每个节点上都运行一个Pod副本,常用于日志收集和节点监控。当节点加入或离开集群,Pod会自动增删。文中通过创建yaml文件并应用到集群来展示如何部署DaemonSet。

理论

请添加图片描述

功能:DaemonSet类型的pod控制器在每一台(或指定)节点上都运行一个副本。

用途:一般适用于日志收集、节点监控等场景。

特点:每当向集群中添加一个节点时,指定的 Pod 副本也将添加到该节点上
当节点从集群中移除时,Pod 也就被垃圾回收了


示例

场景:需要为监控的微服务创建一个pod,根据需求分析创建此类型pod控制器

步骤:

  1. 创建yaml文件
apiVersion: apps/v1 # 版本号
kind: DaemonSet # 类型       
metadata: # 元数据
  name: journal # rs名称 
  namespace: default # 所属命名空间 
#  la
### Kubernetes Pod 控制器概述 #### 定义与作用 Kubernetes 中的 Pod 控制器是一种用于管理一组具有相同配置和功能的 Pod 的抽象机制。这些控制器通过定义期望状态来确保集群中的实际状态与此保持一致。常见的 Pod 控制器包括 Deployment、StatefulSet 和 DaemonSet。 #### 类型介绍 ##### 1. **Deployment** 负责无状态应用的工作负载部署,支持滚动更新和回滚操作。当创建一个 Deployment 后,系统会自动启动所需数量的 Pod 实例,并监控其健康状况以维持指定副本数。 ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: example-deployment spec: replicas: 3 selector: matchLabels: app: webserver template: metadata: labels: app: webserver spec: containers: - name: nginx-container image: nginx:latest ``` ##### 2. **StatefulSet** 适用于有状态应用程序,能够为每个实例分配唯一的标识符并保证顺序启动/关闭行为。此外还提供了持久化存储卷声明的能力,使得即使 Pod 被重新调度也能恢复之前的数据。 ```yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql-statefulset spec: serviceName: "mysql" replicas: 2 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 volumeMounts: - mountPath: /var/lib/mysql name: storage-volume volumeClaimTemplates: - metadata: name: storage-volume spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 1Gi ``` ##### 3. **DaemonSet** 确保所有(或某些特定)节点上都运行着某个容器化的守护进程。这对于日志收集服务、监控代理等功能特别有用。 ```yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd-elasticsearch spec: selector: matchLabels: name: fluentd-elasticsearch template: metadata: labels: name: fluentd-elasticsearch spec: tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule containers: - name: fluentd-elasticsearch image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2 resources: limits: memory: 200Mi requests: cpu: 100m memory: 200Mi volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: "/var/lib/docker/containers" readOnly: true terminationGracePeriodSeconds: 30 volumes: - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers ``` #### 使用场景举例 对于希望实现高可用性的微服务体系结构而言,可以利用上述提到的不同类型的控制器组合起来构建复杂的应用程序栈。例如,在生产环境中通常会选择使用 Deployment 来托管前端 Web 应用;而对于数据库层则更适合采用 StatefulSet 方式来进行管理和维护[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术职场教练

您的是我坚持原创免费作品的不懈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值