您的位置:首页 > 其它

pod调度之DaemonSet

2020-07-18 09:07 113 查看

DaemonSet是k8s 1.2版本新增的一种资源对象,用于管理在集群中每个Node上仅运行一份Pod的副本实例。

这种用法适合有以下需求的应用:

  1. 在每个node上都运行一个GlusterFS存储或者Ceph存储的Daemon进程。
  2. 在每个node上都运行一个日志采集程序,例如Fluentd或者Logstach。
  3. 在每个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 设置更新策略。目前支持两种策略:

  1. OnDelete:更新模板后,只有手动删除了旧的 Pod 后才会创建新的 Pod
  2. 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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: