DaemonSet 主要用于部署常驻集群内的后台程序,例如节点的日志采集。DaemonSet 保证在所有或部分节点上均运行指定的 Pod。 新节点添加到集群内时,也会有自动部署 Pod;节点被移除集群后,Pod 将自动回收。
若配置了 Pod 的 nodeSelector 或 affinity 参数,DaemonSet 管理的 Pod 将按照指定的调度规则调度。若未配置 Pod 的 nodeSelector 或 affinity 参数,则将在所有的节点上部署 Pod。
latest
时,使用 Always 策略,否则使用 IfNotPresent 策略。说明:仅在 Kubernetes 1.6或更高版本中支持 DaemonSet 滚动更新功能。
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 的组成。
更多可查看 Kubernetes DaemonSet 官方文档。
kubectl create -f DaemonSet YAML 文件名称
例如,创建一个文件名为 fluentd-elasticsearch.yaml 的 StatefulSet YAML 文件,则执行以下命令:
kubectl create -f fluentd-elasticsearch.yaml
kubectl get DaemonSet
返回类似以下信息,即表示创建成功。
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
frontend 0 0 0 0 0 app=frontend-node 16d
执行以下命令,查看 DaemonSet 的更新策略类型。
kubectl get ds/<daemonset-name> -o go-template='{{.spec.updateStrategy.type}}{{"\n"}}'
DaemonSet 有以下两种更新策略类型:
执行以下命令,更新 DaemonSet。
kubectl edit DaemonSet/[name]
此方法适用于简单的调试验证,不建议在生产环境中直接使用。您可以通过此方法更新任意的 DaemonSet 参数。
执行以下命令,更新指定容器的镜像。
kubectl set image ds/[daemonset-name][container-name]=[container-new-image]
建议保持 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]
执行以下命令,删除 DaemonSet。
kubectl delete DaemonSet [NAME]
本页内容是否解决了您的问题?