1. 程式人生 > 其它 >RKE 叢集配置升級策略

RKE 叢集配置升級策略

配置最大不可用節點數量

升級叢集前,您可以編輯cluster.yml檔案對應的引數,調整最大不可用節點的數量。

  • max_unavailable_controlplane: 升級叢集時,RKE 可以容忍的無響應 controlplane 節點數量,預設值為 1,表示如果有 1 個節點在升級 RK 叢集的過程中沒有響應,不會導致叢集升級失敗;在同一個升級過程中出現 2 個或多節點失敗時,則會導致升級叢集失敗。

  • max_unavailable_worker: 升級叢集時,RKE 可以容忍的無響應 worker 節點數量,預設值為 10%。這個引數的取值範圍可以使用正整數或百分比表示。使用百分比時,如果得出的結果是大於 1 的小數,則會向下取整,如果得出的結果小於或等於 1,則會取 1 這個值。若該值為小數時,會向下取整至最接近的整數。例如,執行升級的叢集中有 11 個 worker 節點,11x10%=1.1,向下取整,最終的結果是 1。如果有 1 個節點在升級 RK 叢集的過程中沒有響應,不會導致叢集升級失敗;在同一個升級過程中出現 2 個或多節點失敗時,則會導致升級叢集失敗。

以下程式碼示例展示瞭如何使用百分比指定失效 worker 節點數量和使用數字指定失效 controlplane 節點數量:

upgrade_strategy:
  max_unavailable_worker: 10%
  max_unavailable_controlplane: 1

驅逐節點

預設情況下,升級節點前需要使用kubectl cordon命令將節點標記為“不可用”,這個標記的目的是防止在節點在升級的過程中因為被分配到新的 pods 或者流量而中斷。完成升級後,您需要使用kubectl uncordon命令將節點重新標記為“可用”,此時可以將 pods 和流量分配到該節點上。該操作不會對節點上已有的 pods 造成影響。

除了將節點標記為“不可用”外,您也可以使用kubectl drain命令,在升級節點前將節點內的所有 pod 驅逐到其他節點上,並且將其標記為“不可用”,確保這個節點內在升級完成之前不會有正在執行的 pods。kubectl drain命令會導致節點內所有的 pods 被驅逐。

請參考Kubernetes 官方文件,瞭解驅逐節點的注意事項。

注意:drain的預設值是false,如果將它的值改為true,會導致 worker 節點在升級之前被驅逐,無法升級 worker 節點。

upgrade_strategy:
  max_unavailable_worker: 10%
  max_unavailable_controlplane: 1
  drain: false
  node_drain_input:
    force: false
    ignore_daemonsets: true
    delete_local_data: false
    grace_period: -1 // grace period specified for each pod spec will be used
    timeout: 60

Ingress 和網路外掛的副本

Ingress 和網路外掛的副本通過Kubernetes daemonset的方式執行。如果不指定升級策略,update_strategy的值為空,Kubernetes 會使用預設的RollingUpdate滾動升級策略。同理,如果不指定最大不可用節點的數量,maxUnavailable為空,Kubernetes 會使用預設值1

配置 Ingress 和網路外掛的示例程式碼如下:

ingress:
  provider: nginx
  update_strategy:
    strategy: RollingUpdate
    rollingUpdate:
      maxUnavailable: 5
network:
  plugin: canal
  update_strategy:
    strategy: RollingUpdate
    rollingUpdate:
      maxUnavailable: 6

DNS 和監控外掛的副本

DNS 和監控外掛的副本通過deployments的方式執行。DNS 外掛包括:coredns、kubedns和metrics-server

如果不指定升級策略,update_strategy的值為空,Kubernetes 會使用預設的RollingUpdate滾動升級策略。同理,如果不指定最大不可用節點的數量,maxUnavailable為空,Kubernetes 會使用預設值25%,如果不指定最大增量,maxSurge 為空,則會使用預設值25%

DNS 外掛使用cluster-proportional-autoscaler,一個開源的容器映象 ,監控叢集內可調配的節點和 cores 的數量,以調整資源所需要的副本數量。這個功能非常有用,應用可以根據叢集內的節點自動伸縮。DNS 外掛需要用到的cluster-proportional-autoscaler引數是可以配置的,詳情如下表所示。

cluster-proportional-autoscaler使用這個公式計算實際所需的副本數量:

replicas = max( ceil( cores * 1/coresPerReplica ) , ceil( nodes * 1/nodesPerReplica ) )
replicas = min(replicas, max)
replicas = max(replicas, min)

配置 DNS 和監控外掛的示例程式碼如下:

dns:
  provider: coredns
  update_strategy:
    strategy: RollingUpdate
    rollingUpdate:
      maxUnavailable: 20%
      maxSurge: 15%
  linear_autoscaler_params:
    cores_per_replica: 0.34
    nodes_per_replica: 4
    prevent_single_point_failure: true
    min: 2
    max: 3
monitoring:
  provider: metrics-server
  update_strategy:
    strategy: RollingUpdate
    rollingUpdate:
      maxUnavailable: 8

cluster.yml 示例

# 如果您使用的是離線安裝環境,請參考離線安裝RKE的文件,配置自定義的RKE映象檔案。
nodes:
# 至少需要三個etcd節點、兩個controlplane節點和兩個worker節點。
# 為了簡化案例,本示例只展示了一個節點,其他節點的配置類似,就不一一展示了。
upgrade_strategy:
  max_unavailable_worker: 10%
  max_unavailable_controlplane: 1
  drain: false
  node_drain_input:
    force: false
    ignore_daemonsets: true
    delete_local_data: false
    grace_period: -1 // grace period specified for each pod spec will be used
    timeout: 60
ingress:
  provider: nginx
  update_strategy: # Available in v2.4
    strategy: RollingUpdate
    rollingUpdate:
      maxUnavailable: 5
network:
  plugin: canal
  update_strategy: # Available in v2.4
    strategy: RollingUpdate
    rollingUpdate:
      maxUnavailable: 6
dns:
  provider: coredns
  update_strategy: # Available in v2.4
    strategy: RollingUpdate
    rollingUpdate:
      maxUnavailable: 20%
      maxSurge: 15%
  linear_autoscaler_params:
    cores_per_replica: 0.34
    nodes_per_replica: 4
    prevent_single_point_failure: true
    min: 2
    max: 3
monitoring:
  provider: metrics-server
  update_strategy: # Available in v2.4
    strategy: RollingUpdate
    rollingUpdate:
      maxUnavailable: 8