簡體   English   中英

Kubernetes - 通過 Terraform 升級 Kubernetes 集群版本

[英]Kubernetes - Upgrading Kubernetes-cluster version through Terraform

我認為沒有愚蠢的問題,所以這里有一個我找不到直接答案的問題。

情況

我目前有一個在 AKS 上運行 1.15.x 的 Kubernetes 集群,通過 Terraform 進行部署和管理。 AKS 最近 Azure 宣布他們將在 AKS 上淘汰 Kubernetes 的 1.15 版本,我需要將集群升級到 1.16 或更高版本。 現在,據我所知,直接在 Azure 中升級集群不會對集群的內容、IE 節點、pod、機密以及當前存在的所有其他內容產生任何影響,但我找不到任何正確的答案來說明會發生什么如果我通過 Terraform 升級集群。

潛在問題

那么會出現什么問題呢? 在我看來,最壞的結果是整個集群都將被破壞,並創建一個新集群。 沒有豆莢,沒有秘密,什么都沒有。 由於那里的信息太少,我在這里問一下,看看是否有在 Terraform 和 Kubernetes 方面有更多經驗的人可以幫助我。

總結:

Terraform 版本

Terraform v0.12.17
+ provider.azuread v0.7.0
+ provider.azurerm v1.37.0
+ provider.random v2.2.1

我在做什么

§ terraform init 

//running terrafrom plan with new Kubernetes version declared for AKS

§ terraform plan 

//Following changes are announced by Terraform:



An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  #module.mycluster.azurerm_kubernetes_cluster.default will be updated in-place...

         ...
         ~ kubernetes_version              = "1.15.5" -> "1.16.13"
         ...


Plan: 0 to add, 1 to change, 0 to destroy.

我想要發生的事情

Terraform 會告訴 Azure 升級現有的 AKS 服務,而不是在創建新服務之前銷毀。 我認為這會發生,因為 Terraform 宣布它將“就地更新”,而不是添加新集群和/或破壞現有集群。

我會說這表明 Terraform 方法是非破壞性的,即使在升級過程中有時會出現疏忽(但在本例中仍然是非破壞性的): https : //github.com/terraform-providers/ terraform-provider-azurerm/issues/5541

如果您需要對此更改有更高的信心,那么您可以替代地考慮使用基於 Azure 的升級方法,將更改刷新回您的狀態,並調整代碼直到計划生成沒有顯示任何無法忍受的內容。 處理版本的兩個 azurerm_kubernetes_cluster 參數可能就是您需要調整的全部內容。

我今天發現了這個問題,並認為我也會添加我的經驗。 我做了以下更改:

  1. kubernetes_version下的azurerm_kubernetes_cluster從“1.16.15”更改為“1.17.16”
  2. default_node_pool下的orchestrator_version從“1.16.15”更改為“1.17.16”
  3. default_node_pool下的node_count從 1 -> 2 增加

terraform plan表明它將就地更新 然后我執行了一個成功完成的terraform apply kubectl get nodes顯示創建了一個額外的節點,但池中的兩個節點仍然是舊版本。 在Azure Portal中進一步檢查發現只有k8s集群版本升級,節點池版本沒有升級。 然后我一次又一次地執行terraform plan它顯示default_node_pool下的orchestrator_version就地更新 然后我執行了terraform apply ,然后繼續升級節點池的版本。 它完成了整個事情,它在池中創建了一個額外的節點(使用新版本)並將狀態設置為NodeSchedulable同時將池中的現有節點設置為NodeNotSchedulable 然后NodeNotSchedulable節點被具有新 k8s 版本的新節點替換,並最終設置為NodeSchedulable 它對兩個節點都這樣做了。 之后所有節點都升級了,沒有任何明顯的停機時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM