DaemonSet管理
简介
DaemonSet 主要用于部署常驻集群内的后台程序,例如节点的日志采集。DaemonSet 保证在所有或部分节点上均运行指定的 Pod。新节点添加到集群内时,也会有自动部署 Pod;节点被移除集群后,Pod 将自动回收。
调度说明
若配置了 Pod 的 nodeSelector 或 affinity 参数,DaemonSet 管理的 Pod 将按照指定的调度规则调度。若未配置 Pod 的 nodeSelector 或 affinity 参数,则将在所有的节点上部署 Pod。
DaemonSet 控制台操作指引
创建 DaemonSet
-
登录 TKE 控制台。
-
进入集群管理页面:在左侧导航栏中,单击【集群】。
-
选择集群:单击需要创建 DaemonSet 的集群【ID/名称】,进入待创建 DaemonSet 的集群管理页面。
-
选择 DaemonSet:选择【工作负载】 > 【DaemonSet】,进入“DaemonSet”信息页面。
-
新建 Workload:单击【新建】,进入“新建 Workload”页面。
-
设置参数:根据实际需求,设置 DaemonSet 参数。关键参数信息如下:
- 工作负载名:自定义。
- 命名空间:根据实际需求进行选择。
- 类型:选择 “DaemonSet(在每个主机上运行 Pod)”。
- 实例内容器:根据实际需求,为 DaemonSet 的一个 Pod 设置一个或多个不同的容器。
- 名称:自定义。
- 镜像:根据实际需求进行选择。
- 镜像版本:根据实际需求进行填写。
- CPU/内存限制:可根据 Kubernetes 资源限制进行设置 CPU 和内存的限制范围,提高业务的健壮性。
- 高级设置:可设置 “工作目录”,“运行命令”,“运行参数”,“容器健康检查”,“特权级”等参数。
-
完成创建:单击【创建 Workload】,完成创建。
更新 DaemonSet
更新 YAML
- 登录 TKE 控制台。
- 进入集群管理页面:在左侧导航栏中,单击【集群】。
- 选择集群:单击需要更新 YAML 的集群【ID/名称】,进入待更新 YAML 的集群管理页面。
- 选择 DaemonSet:选择【工作负载】 > 【DaemonSet】,进入“DaemonSet”信息页面。
- 编辑 YAML:在需要更新 YAML 的 DaemonSet 行中,单击【编辑 YAML】,进入“更新 DaemonSet”页面。
- 完成更新:在“更新 DaemonSet”页面,编辑 YAML,单击【完成】,即可更新 YAML。
更新镜像
仅在 Kubernetes 1.6 或更高版本中支持 DaemonSet 滚动更新功能。
-
选择集群:在集群管理页面,单击需要更新镜像的 DaemonSet 的集群【ID/名称】,进入待更新镜像的 DaemonSet 的集群管理页面。
-
更新镜像:在需要更新镜像的 DaemonSet 行中,单击【更新镜像】。
-
设置参数:在“滚动更新镜像”页面,根据实际需求修改更新方式,设置参数。
-
完成更新:单击【完成】,即可更新镜像。
更新 Pod 配置
-
登录 TKE 控制台。
-
进入集群管理页面:在左侧导航栏中,单击【集群】。
-
选择集群:在集群管理页面,单击需要更新镜像的 DaemonSet 的集群 ID,进入待更新 Pod 配置的 DaemonSet 的集群管理页面。
-
更新配置:在需要更新镜像的 DaemonSet 行中,单击【更新 Pod 配置】。
-
设置参数:在“更新 Pod 配置”页面,根据实际需求修改更新方式,设置参数。
-
完成更新:单击【完成】,即可更新 Pod 配置。
更新调度策略
- 登录 TKE 控制台。
- 进入集群管理页面:在左侧导航栏中,单击【集群】。
- 选择集群:单击需要更新 DaemonSet 的集群【ID/名称】,进入待更新调度策略 DaemonSet 的集群管理页面。
- 更新策略:在需要更新调度策略的 DaemonSet 行中,单击【更多】 > 【更新调度策略】,弹出“更新调度策略”窗口。
- 完成更新:在“更新调度策略”窗口,更新节点调度策略,单击【完成】。
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
-
准备 YAML 文件:参考 YAML 示例,准备 DaemonSet YAML 文件。
-
安装 Kubectl:安装 Kubectl,并连接集群。操作详情请参考 通过 Kubectl 连接集群。
-
创建 DaemonSet:执行以下命令,创建 DaemonSet YAML 文件。
kubectl create -f DaemonSet YAML 文件名称
例如,创建一个文件名为 fluentd-elasticsearch.yaml 的 DaemonSet YAML 文件,则执行以下命令:
kubectl create -f fluentd-elasticsearch.yaml
-
验证创建:执行以下命令,验证创建是否成功。
返回类似以下信息,即表示创建成功:
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
-
查看更新历史:执行以下命令,查看 DaemonSet 的更新历史。
kubectl rollout history daemonset /[name]
-
查看版本详情:执行以下命令,查看指定版本详情。
kubectl rollout history daemonset /[name] --revision=[REVISION]
-
回滚到前一个版本:执行以下命令,回滚到前一个版本。
kubectl rollout undo daemonset /[name]
如需指定回滚版本号,可执行以下命令。
kubectl rollout undo daemonset /[name] --to-revision=[REVISION]
Kubectl 删除 DaemonSet
执行以下命令,删除 DaemonSet。
kubectl delete DaemonSet [NAME]