Azure Kubernetes Service (AKS) là managed Kubernetes trên Azure - Microsoft quản lý control plane, bạn chỉ cần quản lý worker nodes. Đây là lựa chọn hàng đầu cho .NET microservices cần container orchestration.
AKS Architecture Overview
Node Pools - System vs User
Đặc điểm
System Node Pool
User Node Pool
Mục đích
Chạy system pods (CoreDNS, kube-proxy)
Chạy application workloads
Bắt buộc
Ít nhất 1 pool
Tùy chọn (nhưng khuyến nghị)
VM SKU khuyến nghị
Standard_D4s_v5 (4 vCPU, 16 GB)
Tùy workload
Taint
CriticalAddonsOnly=true:NoSchedule
Custom taints
Min nodes
>= 2 cho HA
>= 2 cho production
bash
# Tạo AKS cluster với system + user node pools
az aks create \
--resource-group rg-app \
--name aks-myapp-prod \
--location southeastasia \
--node-count 2 \
--node-vm-size Standard_D4s_v5 \
--nodepool-name system \
--network-plugin azure \
--network-policy calico \
--enable-managed-identity \
--attach-acr acrMyApp \
--generate-ssh-keys
# Thêm user node pool cho application
az aks nodepool add \
--resource-group rg-app \
--cluster-name aks-myapp-prod \
--name apppool \
--node-count 3 \
--node-vm-size Standard_D8s_v5 \
--mode User \
--labels workload=api
# KEDA ScaledObject - scale dựa trên Azure Service Bus queue depthapiVersion:keda.sh/v1alpha1kind:ScaledObjectmetadata:name:order-processor-scalerspec:scaleTargetRef:name:order-processorminReplicaCount:1maxReplicaCount:50triggers:-type:azure-servicebusmetadata:queueName:ordersmessageCount:"10"connectionFromEnv:SB_CONNECTION
Cluster Autoscaler
bash
# Enable cluster autoscaler cho user node pool
az aks nodepool update \
--resource-group rg-app \
--cluster-name aks-myapp-prod \
--name apppool \
--enable-cluster-autoscaler \
--min-count 2 \
--max-count 10
# Enable workload identity trên AKS
az aks update \
--resource-group rg-app \
--name aks-myapp-prod \
--enable-oidc-issuer \
--enable-workload-identity
# Tạo managed identity
az identity create \
--resource-group rg-app \
--name id-dotnet-api
# Tạo federated credential
AKS_OIDC=$(az aks show -g rg-app -n aks-myapp-prod \
--query "oidcIssuerProfile.issuerUrl" -o tsv)
az identity federated-credential create \
--name fc-dotnet-api \
--identity-name id-dotnet-api \
--resource-group rg-app \
--issuer $AKS_OIDC \
--subject system:serviceaccount:default:sa-dotnet-api
csharp
// Sử dụng Managed Identity trong .NET
builder.Services.AddAzureClients(clientBuilder =>
{
clientBuilder.AddSecretClient(
new Uri("https://kv-myapp.vault.azure.net/"));
clientBuilder.UseCredential(new DefaultAzureCredential());
});