DaemonSet比如Kubernetes集群Node的守护进程,能够保证在每一个Node上(或者一部分Node上)都运行同一个Pod。 目前咱们的线上环境主要用到如下两个DaemonSet:node
kube-flannel-ds
这个是部署Kubernetes集群时选用的是flannel network add-onfluent-bit
这个是用来在部署在各个Node上,收集各个Node上容器的日志。咱们选用的日志收集方案是EFK(Elasticsearch+Fluent-bit+Kibana),后边有时间再写点fluent-bit的内容咱们目前线上Kubernetes的版本老是落后最新的release版本,例如如今Kubernetes最新是1.7,咱们使用1.6.x。可是咱们注意到Kubernetes 1.7中不少外部组件、Addon都作了更新。咱们在使用1.6.x的过程当中会考虑提早升级这些组件,以便于后续顺利将Kubernetes升级到1.7。DaemonSet的升级就是须要考虑的。api
滚动升级特性是Kubernetes服务发布的一个颇有用的特性,而Kubernetes 1.6+支持DaemonSet的滚动升级,1.7开始支持DaemonSet滚动升级的回滚。下面一块儿来学习一个DaemonSet的滚动升级。app
DaemonSet目前有两种升级策略,能够经过.spec.updateStrategy.type
指定:学习
要使用DaemonSet的滚动升级,须要 .spec.updateStrategy.type
设置为RollingUpdate
。 也能够进一步设置.spec.updateStrategy.rollingUpdate.maxUnavailable
,默认值为1; 设置.spec.minReadySeconds
默认为0,用于指定认为DaemoSet Pod启动可用所需的最小的秒数。测试
下面以咱们测试环境中的flannel DaemonSet为例,体验从0.7.1升级到0.8.0的过程。spa
以前0.7.1的manifest文件没有设置更新策略为滚动升级,首先设置一下,同时注意修改flannel镜像版本为0.8.0:日志
1 2 3 4 5 6 7 8 9 10 11 12 13 |
apiVersion: extensions/v1beta1 kind: DaemonSet metadata: name: kube-flannel-ds namespace: kube-system labels: tier: node app: flannel spec: updateStrategy: type: RollingUpdate template: ...... |
而后执行:code
1 |
kubectl apply -f kube-flannel.yml |
可使用下面的命令查看滚动升级状态:进程
1 2 3 4 5 |
kubectl rollout status ds/kube-flannel-ds -n kube-system Waiting for rollout to finish: 1 out of 4 new pods have been updated... Waiting for rollout to finish: 2 out of 4 new pods have been updated... Waiting for rollout to finish: 3 out of 4 new pods have been updated... daemonset "kube-flannel-ds" successfully rolled out |