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