【K8s】专题十二:Kubernetes 控制器之 DaemonSet

2024-09-02 12:38:05 浏览数 (2)

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~

基本介绍

DaemonSet 控制器是 Kubernetes 的一个 API 对象,它负责在 Kubernetes 集群中运行和管理一个 Pod 的副本,并确保所有节点或选定节点上都运行着一个 Pod 实例。

DaemonSet 通常用于部署守护进程或系统服务,例如日志收集器、监控代理或存储守护进程。

工作原理

  • 定义对象:用户定义一个 DaemonSet 对象,指定 Pod 模板和其他配置选项,Pod 模板定义了 Pod 的规格,包括容器、存储和网络配置
  • 调度 Pod:当 DaemonSet 控制器接收到创建请求时,它会在每个匹配的节点上创建一个 Pod 实例
  • 监控 Pod:DaemonSet 控制器监视 Pod 的状态,并确保每个节点上都有 Pod 实例。如果节点失败或重启,DaemonSet 控制器会自动在该节点上重新创建 Pod 实例
  • 更新 Pod:如果用户更新了 Pod 模板,DaemonSet 控制器将负责在所有节点上滚动更新 Pod 实例,以应用新的配置
  • 节点选择:DaemonSet 允许用户通过节点标签选择器来指定应在哪些节点上运行 Pod。如果没有指定选择器,Pod 将在所有节点上运行

相关特性

  • 节点覆盖:DaemonSet 确保在集群中的所有节点或选定节点上运行一个 Pod 实例,或者在满足特定条件的节点上运行
  • 自动恢复:如果节点失败或重启,DaemonSet 会自动在该节点上重新创建 Pod,确保服务的连续性
  • 滚动更新:当 Pod 模板更新时,DaemonSet 支持滚动更新,逐步替换旧的 Pod 实例
  • 灵活性:用户可以指定节点标签选择器来控制 Pod 在哪些节点上运行,提供灵活性
  • 资源和调度:DaemonSet 支持资源请求和限制,允许用户为 Pod 指定所需的 CPU 和内存资源
  • 集成:DaemonSet 与 Kubernetes 的其他资源和功能(如服务发现、存储卷和网络策略)紧密集成
  • 可扩展性:DaemonSet 可以轻松扩展到数千个节点,适用于大规模集群

资源清单(示例)

代码语言:javascript复制
# daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: demo-daemonset
spec:
  selector:
    matchLabels:
      app: demo-daemonset
  template:
    metadata:
      labels:
        app: demo-daemonset
    spec:
      containers:
      - name: demo-container
        image: demo-image:latest
        ports:
        - containerPort: 80

上述 daemonset.yaml 文件定义了一个名为 demo-daemonset 的 DaemonSet 对象,每个节点上会创建一个 Pod 副本,每个 Pod 包含一个名为 demo-container 的业务容器,业务容器使用 demo-image:latest 镜像,并指定监听端口为 80。

说明:可以通过以下命令查看 DaemonSet 资源清单支持定义的内容

代码语言:javascript复制
kubectl explain daemonset --recursive

常用操作

1、创建 DaemonSet

代码语言:javascript复制
kubectl create -f daemonset.yaml
或
kubectl apply -f daemonset.yaml

2、更新 DaemonSet

代码语言:javascript复制
# 方式一:更新 daemonset.yaml 内容后执行
kubectl apply -f daemonset.yaml

# 方式二:更新镜像
kubectl set image daemonset demo-daemonset app=demo-image:v1

# 方式三:更新环境变量
kubectl set env daemonset demo-daemonset keyname=keyvalue

3、回滚 DaemonSet

代码语言:javascript复制
# 默认回滚至上一版本
kubectl rollout undo daemonset demo-daemonset

# 回滚至指定版本
kubectl rollout undo daemonset demo-daemonset --to-revision=3

# 查看可回滚版本
kubectl rollout history daemonset demo-daemonset

4、查看 DaemonSet

代码语言:javascript复制
# 查看实例列表
kubetcl get daemonset

# 查看详细信息
kubectl describe daemonset demo-daemonset

5、删除 DaemonSet

代码语言:javascript复制
# 方式一:命令行
kubectl delete daemonset demo-daemonset

# 方式二:资源清单
kubectl delete -f daemonset.yaml

0 人点赞