[英]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 參數可能就是您需要調整的全部內容。
我今天發現了這個問題,並認為我也會添加我的經驗。 我做了以下更改:
kubernetes_version
下的azurerm_kubernetes_cluster
從“1.16.15”更改為“1.17.16”default_node_pool
下的orchestrator_version
從“1.16.15”更改為“1.17.16”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.