DaemonSet管理

最近更新时间: 2024-06-12 15:06:00

简介

DaemonSet 主要用于部署常驻集群内的后台程序,例如节点的日志采集。DaemonSet 保证在所有或部分节点上均运行指定的 Pod。 新节点添加到集群内时,也会有自动部署 Pod;节点被移除集群后,Pod 将自动回收。

调度说明

若配置了 Pod 的 nodeSelector 或 affinity 参数,DaemonSet 管理的 Pod 将按照指定的调度规则调度。若未配置 Pod 的 nodeSelector 或 affinity 参数,则将在所有的节点上部署 Pod。

DaemonSet 控制台操作指引

创建 DaemonSet

  1. 登录 TKE 控制台。

  2. 在左侧导航栏中,单击【集群】,进入“集群管理”页面。

  3. 单击需要创建 DaemonSet 的集群【ID/名称】,进入待创建 DaemonSet 的集群管理页面。

  4. 选择【工作负载】 > 【DaemonSet】,进入“DaemonSet”信息页面。

  5. 单击【新建】,进入“新建Workload”页面。

  6. 根据实际需求,设置 DaemonSet 参数。关键参数信息如下:

    • 工作负载名:自定义。

    • 命名空间:根据实际需求进行选择。

    • 类型:选择 “DaemonSet(在每个主机上运行Pod)”。

    • 实例内容器:根据实际需求,为 DaemonSet 的一个 Pod 设置一个或多个不同的容器。

    • 名称:自定义。

    • 镜像:根据实际需求进行选择。

    • 镜像版本:根据实际需求进行填写。

    • CPU/内存限制:可根据 Kubernetes 资源限制 进行设置 CPU 和内存的限制范围,提高业务的健壮性。

    • 高级设置:可设置 “工作目录”,“运行命令”,“运行参数”,“容器健康检查”,“特权级”等参数。

  7. 单击【创建Workload】,完成创建。

更新 DaemonSet

更新 YAML

  1. 登录 TKE 控制台。

  2. 在左侧导航栏中,单击【集群】,进入“集群管理”页面。

  3. 单击需要更新 YAML 的集群【ID/名称】,进入待更新 YAML 的集群管理页面。

  4. 选择【工作负载】 > 【DaemonSet】,进入“DaemonSet”信息页面。

  5. 在需要更新 YAML 的 DaemonSet 行中,单击【编辑YAML】,进入“更新DaemonSet”页面。

  6. 在“更新DaemonSet”页面,编辑 YAML,单击【完成】,即可更新 YAML。

更新镜像

仅在 Kubernetes 1.6或更高版本中支持 DaemonSet 滚动更新功能。

  1. 在集群管理页面,单击需要更新镜像的 DaemonSet 的集群【ID/名称】,进入待更新镜像的 DaemonSet 的集群管理页面。

  2. 在需要更新镜像的 DaemonSet 行中,单击【更新镜像】。

  3. 在 “滚动更新镜像” 页面,根据实际需求修改更新方式,设置参数。

  4. 单击【完成】,即可更新镜像。

更新Pod配置

  1. 登录 TKE 控制台。

  2. 在左侧导航栏中,单击【集群】,进入“集群管理”页面。

  3. 在集群管理页面,单击需要更新镜像的 DaemonSet 的集群 ID,进入待更新Pod配置的 DaemonSet 的集群管理页面。

  4. 在需要更新镜像的 DaemonSet 行中,单击【更新Pod配置】。

  5. 在“更新Pod配置”页面,根据实际需求修改更新方式,设置参数。

  6. 单击【完成】,即可更新 Pod 配置。

更新调度策略

  1. 登录 TKE 控制台。

  2. 在左侧导航栏中,单击【集群】,进入“集群管理”页面。

  3. 单击需要更新 DaemonSet 的集群【ID/名称】,进入待更新调度策略 DaemonSet 的集群管理页面。

  4. 在需要更新调度策略 的 DaemonSet 行中,单击【更多】>【更新调度策略】,弹出“更新调度策略”窗口。

  5. 在“更新调度策略”窗口,更新节点调度策略,单击【完成】。

Kubectl 操作 DaemonSet 指引

YAML 示例

apiVersion: apps/v1  
kind: DaemonSet  
metadata:  
  name: fluentd-elasticsearch  
  namespace: kube-system  
  labels:  
    k8s-app: fluentd-logging  
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: k8s.gcr.io/fluentd-elasticsearch:1.20  
        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  

注:以上YAML示例引用于 https://kubernetes.io/docs/concepts/workloads/controllers/daemonset, 创建时可能存在容器镜像拉取不成功的情况,仅供于本文介绍DaemonSet的组成。

  • kind:标识 DaemonSet 资源类型。

  • metadata:DaemonSet 的名称、Label等基本信息。

  • metadata.annotations:DaemonSet 的额外说明,可通过该参数设置腾讯云金融专区 TKE 的额外增强能力。

  • spec.template:DaemonSet 管理的 Pod 的详细模板配置。

    更多可查看 Kubernetes DaemonSet 官方文档

Kubectl 创建 DaemonSet

  1. 参考 YAML 示例,准备 StatefulSet YAML 文件。

  2. 安装 Kubectl,并连接集群。操作详情请参考 通过 Kubectl 连接集群。

  3. 执行以下命令,创建 DaemonSet YAML 文件。

    kubectl create -f DaemonSet YAML 文件名称  

    例如,创建一个文件名为 fluentd-elasticsearch.yaml 的 StatefulSet YAML 文件,则执行以下命令:

    kubectl create -f fluentd-elasticsearch.yaml  
  4. 执行以下命令,验证创建是否成功。

    kubectl get DaemonSet  

    返回类似以下信息,即表示创建成功。

    NAME       DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR       AGE  
    frontend   0         0         0         0            0           app=frontend-node   16d  

Kubectl 更新 DaemonSet

执行以下命令,查看 DaemonSet 的更新策略类型。

kubectl get ds/<daemonset-name> -o go-template='{{.spec.updateStrategy.type}}{{"\n"}}'  

DaemonSet 有以下两种更新策略类型:

  • OnDelete:默认更新策略。该更新策略在更新 DaemonSet 后,需手动删除旧的 DaemonSet Pod 才会创建新的DaemonSet Pod。

  • RollingUpdate:支持 Kubernetes 1.6或更高版本。该更新策略在更新 DaemonSet 模板后,旧的 DaemonSet Pod 将被终止,并且以滚动更新方式创建新的 DaemonSet Pod。

方法一

执行以下命令,更新 DaemonSet。

kubectl edit DaemonSet/[name]  

此方法适用于简单的调试验证,不建议在生产环境中直接使用。您可以通过此方法更新任意的 DaemonSet 参数。

方法二

执行以下命令,更新指定容器的镜像。

kubectl set image ds/[daemonset-name][container-name]=[container-new-image]  

建议保持 DaemonSet 的其他参数不变,业务更新时,仅更新容器镜像。

Kubectl 回滚 DaemonSet

  1. 执行以下命令,查看 DaemonSet 的更新历史。

    kubectl rollout history daemonset /[name]  
  2. 执行以下命令,查看指定版本详情。

    kubectl rollout history daemonset /[name] --revision=[REVISION]  
  3. 执行以下命令,回滚到前一个版本。

    kubectl rollout undo daemonset /[name]

    如需指定回滚版本号,可执行以下命令。

    kubectl rollout undo daemonset /[name] --to-revision=[REVISION]

Kubectl 删除 DaemonSet

执行以下命令,删除 DaemonSet。

kubectl delete  DaemonSet [NAME]