Pod控制器之DaemonSet
简介:
DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本。当有 Node加入集群时,也会为他们新增一个 Pod 。当有 Node 从集群移除时,这些 Pod也会被回收。删除 DaemonSet将会删除它创建的所有 Pod
使用 DaemonSet 的一些典型用法:
运行集群存储 daemon,例如在每个 Node 上运行 glusterd 、 ceph
在每个 Node 上运行日志收集 daemon,例如 fluentd 、 logstash
在每个 Node 上运行监控 daemon,例如 Prometheus Node Exporter、 collectd 、Datadog 代理、New Relic 代理,或 Ganglia gmond
创建一个DaemonSet
vim ds.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-ds
namespace: default
spec:
selector:
matchLabels:
app: nginx
release: stable
template:
metadata:
labels:
app: nginx
release: stable
spec:
containers:
- name: nginx
image: nginx:1.14
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
创建DaemonSet
kubectl apply -f ds.yaml
查看DaemonSet
image.pngDaemonSet创建的pod只会在每个节点运行一个
DaemonSet也支持滚动更新:
image.pngv1.6 + 支持 DaemonSet 的滚动更新,可以通过 .spec.updateStrategy.type 设置更新策略。目前支持两种策略
OnDelete:默认策略,更新模板后,只有手动删除了旧的 Pod 后才会创建新的 Pod
RollingUpdate:更新 DaemonSet 模版后,自动删除旧的 Pod 并创建新的 Pod
在使用 RollingUpdate 策略时,还可以设置
.spec.updateStrategy.rollingUpdate.maxUnavailable, 默认 1
spec.minReadySeconds,默认 0
回滚:
1 查询历史版本
kubectl rollout history daemonset <daemonset-name>
2 查询某个历史版本的详细信息
kubectl rollout history daemonset <daemonset-name> --revision=1
3,回滚
kubectl rollout undo daemonset <daemonset-name> --to-revision=<revision>
4,查询回滚状态
kubectl rollout status ds/<daemonset-name>
指定 Node 节点
DaemonSet 会忽略 Node 的 unschedulable 状态,有两种方式来指定 Pod 只运行在指定的 Node 节点上:
- nodeSelector:只调度到匹配指定 label 的 Node 上
- nodeAffinity:功能更丰富的 Node 选择器,比如支持集合操作
- podAffinity:调度到满足条件的 Pod 所在的 Node 上
nodeSelector 示例
DaemonSet 会忽略 Node 的 unschedulable 状态,有两种方式来指定 Pod 只运行在指定的 Node 节点上:
nodeSelector:只调度到匹配指定 label 的 Node 上
nodeSelector 示例
1,首先给 Node 打上标签
kubectl label nodes node-01 disktype=ssd
2,然后在 daemonset 中指定 nodeSelector 为 disktype=ssd:
spec:
nodeSelector:
disktype: ssd
网友评论