Aracılığıyla paylaş


Azure Kubernetes Service'te (AKS) kullanılabilirlik alanlarını yapılandırma

Kullanılabilirlik alanları , uygulamalarınızın ve verilerinizin veri merkezi hatalarından korunmasına yardımcı olur. Bölgeler, bir Azure bölgesi içindeki benzersiz fiziksel konumlardır. Her bölge bağımsız güç, soğutma ve ağ ile donatılmış bir veya daha fazla veri merkezi içerir.

Azure Kubernetes Service'in (AKS) kullanılabilirlik alanlarıyla kullanılması, kaynakları tek bir bölgedeki farklı kullanılabilirlik alanlarına fiziksel olarak dağıtarak güvenilirliği artırır. Düğümleri birden çok bölgeye dağıtmak ekstra maliyet doğurmuyor. Bu makalede AKS kaynaklarını Azure CLI veya Terraform kullanarak kullanılabilirlik alanlarını kullanacak şekilde yapılandırma adımları gösterilmektedir.

Önkoşullar

  • Etkin bir Azure aboneliği. Eğer bir Azure aboneliğiniz yoksa, başlamadan önce ücretsiz bir hesap oluşturun.

  • komutunu kullanarak az account set abonelik bağlamınızı ayarlayın. Örneğin:

    az account set --subscription "00000000-0000-0000-0000-000000000000"
    
  • Azure CLI yüklü ve yapılandırılmış. Yükleme yönergeleri için bkz. Azure CLI'yi yükleme.

  • kubectl yüklendi. komutunu kullanarak az aks install-cli yerel olarak yükleyebilirsiniz.

Sınırlamalar ve Dikkat Edilecek Hususlar

AKS'de kullanılabilirlik alanlarını kullanırken aşağıdaki sınırlamaları ve dikkate alınacak noktaları göz önünde bulundurun:

AKS kümesi bileşenleri

Aşağıdaki diyagramda, Microsoft tarafından barındırılan AKS bileşenleri ve Azure aboneliğinizdeki AKS bileşenleri dahil olmak üzere AKS kümesinin çeşitli bileşenleri gösterilmektedir:

Microsoft tarafından barındırılan AKS bileşenleri ve Azure aboneliğinizdeki AKS bileşenleri de dahil olmak üzere çeşitli AKS bileşenlerini gösteren diyagram.

AKS kontrol düzlemi

Microsoft AKS denetim düzlemini, Kubernetes API sunucusunu ve ve yönetilen hizmetler gibi scheduleretcd hizmetleri barındırmaktadır. Microsoft, denetim düzlemini birden çok bölgede çoğaltır.

Kümenizin diğer kaynakları, Azure aboneliğinizdeki yönetilen bir kaynak grubunda dağıtılır. Varsayılan olarak, bu kaynak grubuna MC_ ( yönetilen küme için) ön eki eklenmiştir ve aşağıdaki bölümlerde açıklanan kaynakları içerir.

Düğüm havuzları

Düğüm havuzları, Azure aboneliğinizde sanal makine ölçek kümeleri olarak oluşturulur.

AKS kümesi oluşturduğunuzda bir sistem düğümü havuzu gerekir. Bu düğüm havuzu otomatik olarak oluşturulur ve CoreDNS ile metrics-server gibi kritik sistem podlarını barındırır. Uygulamalarınızı barındırmak için AKS kümenize daha fazla kullanıcı düğümü havuzu ekleyebilirsiniz.

Düğüm havuzlarını üç yolla dağıtabilirsiniz: bölgeye yayılan, bölgeye hizalanmış veya bölgesel (kullanılabilirlik alanlarını kullanmaz)..

Aşağıdaki diyagramda üç modelin her birinde kullanılabilirlik alanları arasında düğüm dağılımı gösterilmektedir:

Farklı modellerdeki kullanılabilirlik alanları arasında AKS düğümü dağılımını gösteren diyagram.

Sistem düğümü havuz bölgeleri, bir küme veya düğüm havuzu oluşturduğunuzda yapılandırılır.

Bölgeye yayılan düğüm havuzları

Bölgelere yayılan düğüm havuzlarında düğümler tüm seçili bölgelere yayılır. AKS, bölgeler arasındaki düğüm sayısını otomatik olarak dengeler. Bir bölge kesintisi oluşursa, etkilenen bölge içindeki düğümler etkilenebilir, ancak diğer kullanılabilirlik alanlarındaki düğümler etkilenmez.

Bölgeye hizalanmış düğüm havuzları

Uyarı

Düğüm havuzları arasında tek bir iş yükü dağıtılacağında, ölçek artırma işlemlerinde iş yüklerinizin bölgeler arasında dengeli bir şekilde dağıtılması için --balance-similar-node-groups ayarını true olarak ayarlamanızı öneririz.

Bu yapılandırmada, her düğüm belirli bir bölgeye hizalanır (sabitlenir). Düğümler arasında daha düşük gecikme süresine, ölçeklendirme işlemleri üzerinde daha ayrıntılı denetime ihtiyacınız olduğunda veya küme otomatik ölçeklendiricisini kullanırken bu yapılandırmayı kullanabilirsiniz.

Bölgesel düğüm havuzları

Bölgesel mod, dağıtım şablonunda bir bölge ataması ayarlamadığınızda (örneğin, "zones"=[] veya "zones"=null) kullanılır.

Bu yapılandırmada düğüm havuzu bölgesel (bölgeye sabitlenmemiş) örnekler oluşturur ve örnekleri bölge genelinde örtük olarak yerleştirir. Örneklerin dengeli veya farklı bölgelere yayıldığı ya da örneklerin aynı kullanılabilirlik alanında yer alacağı garanti değildir. Nadir durumlarda, bir tam bölge kesintisi meydana geldiğinde, düğüm havuzu içindeki örneklerin herhangi biri veya tümü etkilenebilir.

Dağıtımlar

Azure Kubernetes Service (AKS), uygulamalarınız için yüksek kullanılabilirlik sağlamak için bölgeler arasında podları, depolama birimlerini ve yük dengeleyicileri kullanır.

Kapsül

Kubernetes, Azure kullanılabilirlik alanlarının farkındadır ve farklı bölgelerdeki düğümler arasında podları dengeleyebilir. Bir bölgenin kullanılamaz duruma gelmesi durumunda Kubernetes, podları etkilenen düğümlerden otomatik olarak uzaklaştırır.

Kubernetes referansındaki 'Well-Known Etiketler, Ek Açıklamalar ve Taint'ler' bölümünde belgelenmiş olduğu gibi, Kubernetes topology.kubernetes.io/zone etiketini kullanarak çoğaltma denetleyicisindeki veya hizmetteki podları mevcut çeşitli bölgeler arasında otomatik olarak dağıtır.

parametresi, maxSkew podların eşit olmayan bir şekilde dağıtılma derecesini açıklar. Üç bölge ve üç çoğaltma varsayarsak, her bölgede en az bir pod çalıştığına emin olmak için bu değeri 1 olarak ayarlayın. Örneğin:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      topologySpreadConstraints:
      - maxSkew: 1
        topologyKey: topology.kubernetes.io/zone
        whenUnsatisfiable: DoNotSchedule
        labelSelector:
          matchLabels:
            app: my-app
      containers:
      - name: my-container
        image: my-image

Depolama ve birimler

Varsayılan olarak Kubernetes sürüm 1.29 ve üzeri, Kalıcı Birim Talepleri (PVC) için alanlar arası yedekli depolama kullanarak Azure Yönetilen Diskleri kullanır. Bu diskler, uygulamalarınızın dayanıklılığını artırmak için bölgeler arasında çoğaltılır.

Aşağıdaki örnekte, alanlar arası yedekli depolamada Azure Standart SSD kullanan bir PVC gösterilmektedir:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: azure-managed-disk
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: managed-csi
  #storageClassName: managed-csi-premium
  resources:
    requests:
      storage: 5Gi

Bölgeyle hizalanmış dağıtımlar için skuname parametresi LRS (yerel olarak yedekli depolama) olarak ayarlanmış yeni bir depolama sınıfı oluşturabilirsiniz. Ardından PVC'nizde yeni depolama sınıfını kullanabilirsiniz.

Yerel olarak yedekli depolama diskleri daha ucuz olsa da alanlar arası yedekli değildir ve farklı bir bölgedeki bir düğüme disk iliştirmek desteklenmez.

Aşağıdaki örnekte yerel olarak yedekli depolama Standart SSD depolama sınıfı gösterilmektedir:

kind: StorageClass
metadata:
  name: azuredisk-csi-standard-lrs
provisioner: disk.csi.azure.com
parameters:
  skuname: StandardSSD_LRS
  #skuname: PremiumV2_LRS

Yük dengeleyiciler

Önemli

Azure Kubernetes Service (AKS), 30 Eylül 2025'den itibaren Temel Yük Dengeleyici'yi desteklememektedir. Olası hizmet kesintilerini önlemek için yeni dağıtımlar için Standart Load Balancer kullanmanızı ve mevcut dağıtımları Standart Load Balancer'a yükseltmenizi öneririz. Bu kullanımdan kaldırma hakkında daha fazla bilgi için GitHub Kullanımdan Kaldırma Sorunu ve Azure Güncelleştirmeleri kullanımdan kaldırma duyurusu başlıklarına bakın. Duyurular ve güncelleştirmeler hakkında bilgi sahibi olmak için AKS sürüm notlarını izleyin.

Kubernetes, bir bölgedeki tüm bölgelerde gelen trafiği dengeleyen Azure Standart Load Balancer'ı varsayılan olarak dağıtır. Bir düğüm kullanılamaz duruma gelirse yük dengeleyici trafiği iyi durumdaki düğümlere yeniden yönlendirir.

Aşağıdaki örnekte Azure Load Balancer kullanan bir hizmet gösterilmektedir:

apiVersion: v1
kind: Service
metadata:
  name: example
spec:
  type: LoadBalancer
  selector:
    app: myapp
  ports:
    - port: 80
      targetPort: 8080

Azure CLI ile düğüm havuzları oluşturma

Bölgelere yayılan ve kullanılabilirlik alanları içeren düğüm havuzları ile bölgeye hizalanmış kullanılabilirlik alanlarına sahip düğüm havuzları içeren bir AKS kümesi oluşturmak için Azure CLI'yi kullanın.

Bölgeye yayılan düğüm havuzları oluşturma

AKS kümesi oluştururken --zones komutunu kullanarak veya düğüm havuzu oluştururken az aks create komutunu kullanarak bölgeleri az aks nodepool add parametresi ile belirtebilirsiniz. Örneğin:

# Create an AKS cluster with a zone-spanning system node pool in all three availability zones with one node in each availability zone
az aks create \
  --resource-group example-rg \
  --name example-cluster \
  --node-count 3 \
  --zones 1 2 3

# Add one new zone-spanning user node pool with two nodes in each availability zone
az aks nodepool add \
  --resource-group example-rg \
  --cluster-name example-cluster \
  --name userpoola  \
  --node-count 6 \
  --zones 1 2 3

Bölgeye hizalanmış düğüm havuzları oluşturma

Aşağıdaki komutlar, az aks nodepool add komutunu ve --zones parametresini kullanarak, üç kullanılabilirlik alanına sahip bir bölge için üç düğüm havuzu oluşturur ve her düğüm havuzu için alanı belirtir.

# Add three new zone-aligned user node pools with two nodes in each
az aks nodepool add \
  --resource-group example-rg \
  --cluster-name example-cluster \
  --name userpoolx  \
  --node-count 2 \
  --zones 1

az aks nodepool add \
  --resource-group example-rg \
  --cluster-name example-cluster \
  --name userpooly  \
  --node-count 2 \
  --zones 2

az aks nodepool add \
  --resource-group example-rg \
  --cluster-name example-cluster \
  --name userpoolz  \
  --node-count 2 \
  --zones 3

Terraform yapılandırma dosyasını oluşturma

Terraform yapılandırma dosyaları, Terraform'un oluşturduğu ve yönettiği altyapıyı tanımlar.

  1. adlı main.tf bir dosya oluşturun ve Terraform sürümünü tanımlamak ve Azure sağlayıcısını belirtmek için aşağıdaki kodu ekleyin:

    terraform {
    required_version = ">= 1.0"
    required_providers {
      azurerm = {
        source  = "hashicorp/azurerm"
        version = "~> 4.0"
      }
     }
    }
    provider "azurerm" {
     features {}
    }
    
  2. Azure kaynak grubu oluşturmak için aşağıdaki kodu main.tf ekleyin. Kaynak grubunun adını ve konumunu gerektiği gibi değiştirebilirsiniz.

    resource "azurerm_resource_group" "example" {
     name     = "aks-rg"
     location = "East US"
    }
    

Bölge genelinde yayılan bir sistem düğümü havuzuyla AKS kümesi oluşturma

Üç kullanılabilirlik alanının her birinde bir düğüm bulunan ve bu alanların tümünü kapsayan bir sistem düğümü havuzuna sahip bir AKS kümesi oluşturmak için aşağıdaki kodu main.tf ekleyin.

resource "azurerm_kubernetes_cluster" "example" {
  name                = "aks-zones"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  dns_prefix          = "akszones"
  default_node_pool {
    name       = "system"
    node_count = 1
    vm_size    = "Standard_DS2_v2"
    zones      = ["1", "2", "3"]
  }
  identity {
    type = "SystemAssigned"
  }
}

AKS kümesine bölgeye yayılan kullanıcı düğümü havuzları ekleme

Her kullanılabilirlik alanında iki düğüm içeren yeni bir bölgeye yayılan kullanıcı düğümü havuzu oluşturmak için aşağıdaki kodu main.tf ekleyin:

resource "azurerm_kubernetes_cluster_node_pool" "zonespan" {
  name                  = "userpool"
  kubernetes_cluster_id = azurerm_kubernetes_cluster.example.id
  vm_size               = "Standard_DS2_v2"
  node_count            = 2
  zones                 = ["1", "2", "3"]
}

AKS kümesine bölgeyle hizalanmış kullanıcı düğümü havuzları ekleme

Her kullanılabilirlik alanında iki düğüm içeren üç yeni bölgeye hizalanmış kullanıcı düğümü havuzu oluşturmak için aşağıdaki kodu main.tf ekleyin:

resource "azurerm_kubernetes_cluster_node_pool" "zone1" {
  name                  = "userpool1"
  kubernetes_cluster_id = azurerm_kubernetes_cluster.example.id
  vm_size               = "Standard_DS2_v2"
  node_count            = 1
  zones                 = ["1"]
}
resource "azurerm_kubernetes_cluster_node_pool" "zone2" {
  name                  = "userpool2"
  kubernetes_cluster_id = azurerm_kubernetes_cluster.example.id
  vm_size               = "Standard_DS2_v2"
  node_count            = 1
  zones                 = ["2"]
}
resource "azurerm_kubernetes_cluster_node_pool" "zone3" {
  name                  = "userpool3"
  kubernetes_cluster_id = azurerm_kubernetes_cluster.example.id
  vm_size               = "Standard_DS2_v2"
  node_count            = 1
  zones                 = ["3"]
}

Terraform'u başlatma

terraform init komutunu kullanarak main.tf dosyanızın bulunduğu dizinde Terraform'u başlatın. Bu komut Terraform ile Azure kaynaklarını yönetmek için gereken Azure sağlayıcısını indirir.

terraform init

Terraform için bir yürütme planı oluşturun

terraform plan komutunu kullanarak bir Terraform yürütme planı oluşturun. Bu komut, Terraform'un Azure aboneliğinizde oluşturacağı veya değiştireceği kaynakları gösterir.

terraform plan

Terraform yapılandırmasını uygulama

Yürütme planını gözden geçirip onayladıktan sonra komutunu kullanarak terraform apply Terraform yapılandırmasını uygulayın. Bu komut, Azure aboneliğinizdeki dosyanızda main.tf tanımlanan kaynakları oluşturur veya değiştirir.

terraform apply

Kullanılabilirlik alanı yapılandırmasını doğrulama

AKS kümenizi ve düğüm havuzlarınızı oluşturduktan sonra, çıktıyı filtrelemek için parametresiyle az aks show komutunu kullanarak --query düğümlerinizin kullanılabilirlik alanları arasında dağıtıldığını doğrulayabilirsiniz. Örneğin:

az aks show \
 --name example-cluster \
 --resource-group example-rg \
 --query agentPoolProfiles[].availabilityZones \
 --output tsv

Düğüm konumlarını doğrulayın

Aşağıdaki kubectl get nodes komutu kullanarak kullanılabilirlik alanları arasında düğüm dağıtımını doğrulayın:

kubectl get nodes -o custom-columns='NAME:metadata.name, REGION:metadata.labels.topology\.kubernetes\.io/region, ZONE:metadata.labels.topology\.kubernetes\.io/zone'

Örnek çıkış:

NAME                                REGION   ZONE
aks-nodepool1-12345678-vmss000000   eastus   eastus-1
aks-nodepool1-12345678-vmss000001   eastus   eastus-2
aks-nodepool1-12345678-vmss000002   eastus   eastus-3

Çalışan podları ve düğümleri listele

komutunu kullanarak kubectl describe hangi podların ve düğümlerin çalıştığını denetleyin. Örneğin:

kubectl describe pod | grep -e "^Name:" -e "^Node:"

AKS'de güvenilirlik hakkında daha fazla bilgi edinmek için aşağıdaki makalelere bakın: