pod调度之DaemonSet
DaemonSet是k8s 1.2版本新增的一种资源对象,用于管理在集群中每个Node上仅运行一份Pod的副本实例。这种用法适合有以下需求的应用:在每个node上都运行一个GlusterFS存储或者Ceph存储的Daemon进程。在每个node上都运行一个日志采集程序,例如Fluentd或者Logstach。在每个node上都运行一个性能监控程序,采集该node的运行性能数据,例如promethe
·
DaemonSet是k8s 1.2版本新增的一种资源对象,用于管理在集群中每个Node上仅运行一份Pod的副本实例。
这种用法适合有以下需求的应用:
- 在每个node上都运行一个GlusterFS存储或者Ceph存储的Daemon进程。
- 在每个node上都运行一个日志采集程序,例如Fluentd或者Logstach。
- 在每个node上都运行一个性能监控程序,采集该node的运行性能数据,例如prometheus node exporter、colletcd、new relic agent,或者ganglia gmond等。
DaemonSet的pod调度策略与rc类似,除了使用系统内置的算法在每个node上进行调度,也可以在pod的定义中使用NodeSelector或NodeAffinity来指定满足条件的node范围进行调度。
下面的例子定义为每个node上都启动一个fluentd容器,配置文件fluentd-ds.yaml的内容如下,其中挂载了物理机的两个目录“/var/log”和“/var/lib/docker/containers”:
vim fluentd-ds.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:
containers:
- name: fluentd-elasticsearch
image: govtechsg/fluentd-elasticsearch
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
查看创建好的DaemonSet 和Pod ,可以看到在每个node上都创建了一个pod
[root@bogon ~]# kubectl get daemonset -A
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kube-system fluentd-elasticsearch 2 2 2 2 2 <none> 17m
[root@bogon ~]# kubectl get pod -o wide --namespace=kube-system
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
fluentd-elasticsearch-758zp 1/1 Running 0 3m52s 172.17.0.6 kafka03 <none> <none>
fluentd-elasticsearch-h4x6m 1/1 Running 0 19m 172.17.0.6 server01 <none> <none>
滚动更新
v1.6 + 支持 DaemonSet 的滚动更新,可以通过 .spec.updateStrategy.type 设置更新策略。目前支持两种策略:
- OnDelete:更新模板后,只有手动删除了旧的 Pod 后才会创建新的 Pod
- RollingUpdate:默认策略。更新 DaemonSet 模版后,自动删除旧的 Pod 并创建新的 Pod
在使用 RollingUpdate 策略时,还可以设置:
- spec.updateStrategy.rollingUpdate.maxUnavailable, 默认 1
- spec.minReadySeconds,默认 0
回滚
v1.7 + 还支持回滚
# 查询历史版本
$ kubectl rollout history daemonset <daemonset-name>
# 查询某个历史版本的详细信息
$ kubectl rollout history daemonset <daemonset-name> --revision=1
# 回滚
$ kubectl rollout undo daemonset <daemonset-name> --to-revision=<revision>
# 查询回滚状态
$ kubectl rollout status ds/<daemonset-name>
更多推荐
已为社区贡献5条内容
所有评论(0)