在不间断的情况下,通过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。更改此选项会强制创建新的资源。
根据这里所写的,如果更改尺寸,将创建新的资源。如果直接执行更改,节点将被重建,这期间将会有停机时间。在生产环境中,这是不可接受的。
您可以按照以下方法实现无需停机即可更改默认节点池。
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的大小,因此这是一种非常有效的方法。