Kubernetes DaemonSet的滾動升級

DaemonSet比如Kubernetes集羣Node的守護進程,能夠保證在每一個Node上(或者一部分Node上)都運行同一個Pod。 目前咱們的線上環境主要用到如下兩個DaemonSet:node

  • kube-flannel-ds 這個是部署Kubernetes集羣時選用的是flannel network add-on
  • fluent-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的升級策略

DaemonSet目前有兩種升級策略,能夠經過.spec.updateStrategy.type指定:學習

  • OnDelete: 該策略表示當更新了DaemonSet的模板後,只有手動刪除舊的DaemonSet Pod纔會建立新的DaemonSet Pod
  • RollingUpdate: 該策略表示當更新DaemonSet模板後會自動刪除舊的DaemonSet Pod並建立新的DaemonSetPod

體驗DaemonSet的滾動升級

要使用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
相關文章
相關標籤/搜索