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 |