在不间断的情况下,通过Terraform设置更改AKS的VM大小的方法

在使用Terraform设置AKS时,必须设置默认的节点池。开始运营系统后,可能需要调整虚拟机的大小。

resource "azurerm_kubernetes_cluster" "example" {
  name                = "example-aks1"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  dns_prefix          = "exampleaks1"

  default_node_pool {
    name       = "default"
    node_count = 1
    vm_size    = "Standard_D2_v2"
    os_disk_size_gb = 
  }
...
}

 

vm_size – (必需) 虚拟机的大小,例如Standard_DS2_v2。更改此选项会强制创建新的资源。

根据这里所写的,如果更改尺寸,将创建新的资源。如果直接执行更改,节点将被重建,这期间将会有停机时间。在生产环境中,这是不可接受的。

您可以按照以下方法实现无需停机即可更改默认节点池。

image.png
kubectl -n my-app rollout restart deployment my-app
kubectl -n my-app get pod -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP              NODE                          NOMINATED NODE   READINESS GATES
my-app-e4dfd   1/1     Running   0          1d    172.40.6.11     aks-default-1111-vmss000000   <none>           <none>
my-app-se15b   1/1     Running   0          1h    172.40.6.12     aks-newpool-1111-vmss000001   <none>           <none>

这样一来,应用程序将部署到新创建的节点池中。

古いノードをDrainする
kubectl drain aks-default-1111-vmss000000 –ignore-daemonsets –delete-emptydir-data

古いノードプールを削除
Drainが完了すれは、ノードプールを削除します。ポータルからもできますし、コマンドで行う場合は以下のような感じです。
az aks nodepool delete –name <ノードプール名> –cluster-name <クラスター名> –resource-group <リソースグループ>

Terraformの編集
最後にTerraformの編集です。
terraform planで変更箇所を確認して、Terrformのコードに変更をかけます。サイズだけ変更した場合は、nameとvm_sizeだけかもしくは、os_disk_size_gbを設定していた場合はそれも変更がかかる可能性があります。

resource "azurerm_kubernetes_cluster" "example" {
  name                = "example-aks1"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  dns_prefix          = "exampleaks1"

  default_node_pool {
    name       = "newpool" # <=====
    node_count = 2
    vm_size    = "Standard_D2_v3" # <=====
  }
...
}

如果再次运行terraform plan时没有出现任何变更,请完成。

通过这种方法,您可以在避免系统停机的同时继续使用Terraform进行管理。
实际上,节点池的更换是手工操作,但由于不太可能频繁更改VM的大小,因此这是一种非常有效的方法。

广告
将在 10 秒后关闭
bannerAds