Kubernetes - 通过 Terraform 升级 Kubernetes 集群版本

aau*_*and 6 kubernetes terraform azure-aks

我认为没有愚蠢的问题,所以这是一个我找不到直接答案的问题。

\n

情况

\n

我目前有一个在 AKS 上运行 1.15.x 的 Kubernetes 集群,通过 Terraform 进行部署和管理。AKS 最近 Azure 宣布他们将停用 AKS 上的 Kubernetes 1.15 版本,我需要将集群升级到 1.16 或更高版本。现在,据我了解情况,直接在 Azure 中升级集群不会对集群的内容、IE 节点、pod、秘密以及当前存在的其他所有内容产生任何影响,但我找不到任何正确的答案来说明会发生什么如果我通过 Terraform 升级集群。

\n

潜在问题

\n

那么会出现什么问题呢?在我看来,最糟糕的结果是整个集群被摧毁,然后创建一个新的集群。没有豆荚,没有秘密,什么都没有。由于那里的信息太少,我在这里询问是否有人在 Terraform 和 Kubernetes 方面拥有更多经验,可以帮助我。

\n

总结一下:

\n

地形版本

\n
Terraform v0.12.17\n+ provider.azuread v0.7.0\n+ provider.azurerm v1.37.0\n+ provider.random v2.2.1\n
Run Code Online (Sandbox Code Playgroud)\n

我在做什么

\n
\xc2\xa7 terraform init \n\n//running terrafrom plan with new Kubernetes version declared for AKS\n\n\xc2\xa7 terraform plan \n\n//Following changes are announced by Terraform:\n\n\n\nAn execution plan has been generated and is shown below.\nResource actions are indicated with the following symbols:\n  ~ update in-place\n\nTerraform will perform the following actions:\n\n  #module.mycluster.azurerm_kubernetes_cluster.default will be updated in-place...\n\n         ...\n         ~ kubernetes_version              = "1.15.5" -> "1.16.13"\n         ...\n\n\nPlan: 0 to add, 1 to change, 0 to destroy.\n
Run Code Online (Sandbox Code Playgroud)\n

我想要发生什么

\n

Terraform 将告诉 Azure 升级现有的 AKS 服务,而不是在创建新服务之前销毁。我认为这将会发生,因为 Terraform 宣布它将“就地更新”,而不是添加新的和/或销毁现有的集群。

\n

Hea*_*ync 7

我今天发现了这个问题,我想我也应该补充一下我的经验。我做了以下更改:

  1. kubernetes_version以下内容azurerm_kubernetes_cluster从“1.16.15”更改为“1.17.16”
  2. orchestrator_version以下内容default_node_pool从“1.16.15”更改为“1.17.16”
  3. 增加了node_count下边default_node_pool从 1 -> 2

Aterraform plan显示它将就地更新。然后我执行了一个terraform apply成功完成的操作。kubectl get nodes显示创建了一个额外的节点,但池中的两个节点仍然是旧版本。在Azure Portal中进一步检查发现只升级了k8s集群版本,并没有升级节点池的版本。然后我terraform plan一次又一次地执行它表明orchestrator_version下面default_node_pool将被就地更新。然后我执行了terraform apply该操作,然后继续升级节点池的版本。它完成了整个过程,在池中创建了一个附加节点(使用新版本)并将状态设置为 ,NodeSchedulable同时将池中的现有节点设置为NodeNotSchedulable。然后该NodeNotSchedulable节点将被新的 k8s 版本的新节点替换,并最终设置为NodeSchedulable. 它对两个节点都执行了此操作。随后所有节点都进行了升级,没有出现任何明显的停机情况。


T.H*_*.H. 3

我想说这表明 Terraform 方法是非破坏性的,即使在升级过程中有时会出现疏忽(但在本例中仍然是非破坏性的): https: //github.com/terraform-providers/ terraform-provider-azurerm/问题/5541

如果您对此更改需要更高的信心,那么您可以考虑使用基于 Azure 的升级方法,将更改刷新回您的状态,并调整代码,直到计划生成不会显示任何无法容忍的内容。处理版本的两个 azurerm_kubernetes_cluster 参数可能就是您需要调整的全部内容。