Azure Kubernetes Service (AKS) ile pod yalıtımı

AKS'de pod yalıtımı, yalıtılmış her podu kendi konuk çekirdeğine sahip hafif bir sanal makinede (VM) çalıştırmak için Kata Containers kullanır. Bu işlem sınırı, iş yükünü konak çekirdeğinden ve diğer pod VM'lerindeki iş yüklerinden ayırır. Mimari, avantajlar ve kullanım örnekleri hakkında bilgi edinmek için bkz. Azure Kubernetes Service (AKS)'da Pod korumalı alanı kullanımına genel bakış.

Bu makalede, Pod korumalı alanını yeni veya mevcut bir Azure Linux AKS kümesinde etkinleştirebilir, Kata çalışma zamanı ile bir uygulama dağıtabilir ve isteğe bağlı olarak çekirdek yalıtımını doğrulayabilirsiniz.

Önkoşullar

  • Azure CLI sürüm 2.80.0 veya üzeri. Azure CLI sürümünüzü bulmak için komutunu az --version çalıştırın ve yükseltmek için komutunu çalıştırın az upgrade . Daha fazla ayrıntı için Bkz. Azure CLI'yı yükleme.
  • AKS, Kubernetes 1.27.0 ve üzeri sürümlerde Pod yalıtımını destekler.
  • Kubernetes kümesini yönetmek için Kubernetes komut satırı istemcisini kubectlkullanın. Azure Cloud Shell ile birlikte kubectl gelir. komutunu kullanarak kubectl yerel olarak yükleyebilirsinizaz aks install-cli.

Sınırlamalar

Pod yalıtımı için aşağıdaki kısıtlamalar geçerlidir:

  • Kata kapsayıcıları, geleneksel kapsayıcıların Azure Dosyalar'da ve yüksek performanslı yerel SSD'de ulaşabileceği IOPS performans sınırlarına ulaşamayabilir.
  • Kapsayıcılar için Microsoft Defender, Kata çalışma zamanı podlarının değerlendirilmesini desteklemez.
  • Kata konak ağı erişimi desteklenmez. Vm'nin içinden konak ağ yapılandırmasına doğrudan erişemezsiniz.
  • Pod korumalı alanında CPU ve bellek ayırma, runc'den farklıdır. Her Kata podu, sabit bellek boyutu pod bellek sınırına dayalı olan veya bir sınır belirtmezseniz varsayılan olarak 512Mi olan bir pod VM'sinde çalışır. CPU sınırları pod VM'sinin vCPU ayırmasını belirler ve kesirli sınırlar bu ayırma için tüm vCPU'ya yuvarlanir. Daha fazla bilgi için Pod korumalı alanına ilişkin dikkat edilmesi gerekenler bölümüne bakın.
  • Pod yalıtımı yalnızca Azure Linux'ta desteklenir. Ubuntu ve Windows desteklenmez. Daha fazla bilgi için bkz. AKS için Azure Linux kapsayıcı ana bilgisayarı.
  • Pod yalıtımı kullanan bir düğüm havuzunda Federal Bilgi İşleme Standardı'nı (FIPS) veya Güvenilir Başlatma'yı etkinleştiremezsiniz. Daha fazla bilgi için Pod korumalı alanına ilişkin dikkat edilmesi gerekenler bölümüne bakın.
  • Pod yalıtımı kullanan bir düğüm havuzunda Arm64 mimarisi desteklenmez.

Nasıl çalışır?

AKS üzerinde pod yalıtımı, açık kaynaklı Kata Containers projesini temel alır. AKS için Azure Linux kapsayıcı konağı üzerinde çalışan Kata Kapsayıcıları, VM tabanlı yalıtım ve her pod için ayrı bir çekirdek sağlar. Pod yalıtımı, her pod için kaynak ayırmanıza olanak tanır ve bu kaynakların aynı ana bilgisayarda çalışan diğer Kata Containers veya ad alanı kapsayıcılarıyla paylaşılmamasını sağlar.

Çözüm mimarisi aşağıdaki ana bileşenleri temel alır:

Kata Containers kullanarak Pod yalıtımı dağıtmak, kapsayıcıları dağıtmaya yönelik standart containerd iş akışına benzer. Pod yalıtımı etkinleştirilmiş kümeler, pod manifestinde başvurabileceğiniz belirli bir çalışma zamanı sınıfıyla birlikte sunulur (runtimeClassName: kata-vm-isolation). Çalışma zamanı sınıfı varsayılanları ve özelleştirme hakkında daha fazla bilgi için bkz. Pod yalıtımı için dikkat edilmesi gerekenler.

Bu özelliği pod ile kullanmak için tek fark runtimeClassNamekata-vm-isolation değerini pod belirtimine eklemektir. Pod runtimeClass'ı kata-vm-isolation kullandığında hiper yönetici, iş yükünün çalışması için kendi çekirdeğine sahip basit bir sanal makine oluşturur.

Pod yalıtımıyla küme oluşturma

Azure CLI kullanarak bir Azure Linux AKS kümesi dağıtmak için aşağıdaki adımları gerçekleştirin.

  1. Komutunu aşağıdaki parametrelerle çalıştırarak az aks create bir AKS kümesi oluşturun:

    Parametre Gerekli değer Notlar
    --workload-runtime KataVmIsolation Düğüm havuzunda Pod yalıtımını etkinleştirir.
    --os-sku AzureLinux Pod yalıtımı yalnızca Azure Linux işletim sistemi SKU'sunu destekler.
    --node-vm-size İç içe sanallaştırmayı destekleyen 2. nesil VM boyutu Örneğin, Dsv3 serisi VM boyutu kullanın.
    --node-count 3 Bu örnek için üç düğüm oluşturur. İş yükünüz için değeri ayarlayın.

    Aşağıdaki örnek, myResourceGroup'ta üç düğüme sahip myAKSCluster adlı bir küme oluşturur:

    az aks create \
        --name myAKSCluster \
        --resource-group myResourceGroup \
        --os-sku AzureLinux \
        --workload-runtime KataVmIsolation \
        --node-vm-size Standard_D4s_v3 \
        --node-count 3 \
        --generate-ssh-keys
    
  2. Kubernetes kümesinin erişim kimlik bilgilerini almak için aşağıdaki komutu çalıştırın. az aks get-credentials komutunu kullanın ve küme adı ve kaynak grubu adı değerlerini değiştirin.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. kubectl get pods komutunu çalıştırarak tüm ad alanlarındaki tüm Pod’ları listeleyin.

    kubectl get pods --all-namespaces
    

Mevcut bir kümede Pod yalıtımını etkinleştirmek

Bu özelliği mevcut bir AKS kümesiyle kullanmak için aşağıdaki gereksinimlerin karşılanması gerekir:

  • Küme, Kubernetes sürüm 1.27.0 veya üzerini çalıştırır.

  • Pod korumalı alanını barındırmak üzere bir düğüm havuzu oluşturarak etkinleştirmek için aşağıdaki komutu kullanın.

  1. Aşağıdaki parametrelerle komutunu kullanarak az aks nodepool add AKS kümenize bir düğüm havuzu ekleyin:

    Parametre Gerekli değer Notlar
    --resource-group Mevcut AKS kümesini içeren kaynak grubu Örneğin, kullanın myResourceGroup.
    --cluster-name Mevcut AKS kümesinin adı Örneğin, kullanın myAKSCluster.
    --name Benzersiz düğüm havuzu adı Örneğin, kullanın nodepool2.
    --workload-runtime KataVmIsolation Düğüm havuzunda Pod yalıtımını etkinleştirir.
    --os-sku AzureLinux Pod yalıtımı yalnızca Azure Linux işletim sistemi SKU'sunu destekler.
    --node-vm-size İç içe sanallaştırmayı destekleyen 2. nesil VM boyutu Örneğin, Dsv3 serisi VM boyutu kullanın.
    --node-count 1 Bu örnek için bir düğüm oluşturur. İş yükünüz için değeri ayarlayın.

    Aşağıdaki örnek, myResourceGroup'ta nodepool2'debir düğümle myAKSCluster'abir düğüm havuzu ekler:

    az aks nodepool add --cluster-name myAKSCluster --resource-group myResourceGroup --name nodepool2 --os-sku AzureLinux --workload-runtime KataVmIsolation --node-vm-size Standard_D4s_v3 --node-count 1
    
  2. Kümenin, KataVmIsolation iş yükü çalışma zamanına sahip yeni düğüm havuzunu tanıması için küme yapılandırmasını uyumlu hale getirmek üzere az aks update komutunu çalıştırın.

    az aks update --name myAKSCluster --resource-group myResourceGroup
    
  3. Küme güncelleştirmesinin başarıyla tamamlandığını ve Pod korumalı alan düğüm havuzunun beklenen iş yükü çalışma zamanı, işletim sistemi SKU'su ve VM boyutunu kullandığını doğrulayın.

    az aks show \
        --name myAKSCluster \
        --resource-group myResourceGroup \
        --query provisioningState \
        --output tsv
    
    az aks nodepool show \
        --cluster-name myAKSCluster \
        --resource-group myResourceGroup \
        --name nodepool2 \
        --query "{workloadRuntime:workloadRuntime, osSKU:osSKU, vmSize:vmSize}" \
        --output table
    

    Küme hazırlama durumu Succeeded olmalıdır. Düğüm havuzu çıktısında AzureLinux, KataVmIsolation ve seçtiğiniz VM boyutu gösterilmelidir.

Pod yalıtımını kullanarak uygulamaları dağıtın

Pod yalıtımını kullanarak, Kata çalışma zamanını kullanmayan standart podları, bu çalışma zamanını kullanan Kata podlarıyla birlikte bir arada dağıtabilirsiniz. Bir Kata pod'u, pod belirtiminde runtimeClassName: kata-vm-isolation belirtir.

RuntimeClass, Kata çalışma zamanını seçer; ancak iş yüklerini belirli bir Pod yalıtımlı düğüm havuzunda çalıştırmanız gerektiğinde zamanlama kısıtlamalarını da tanımlamanız gerekir. Örneğin, bir nodeSelector içinde yerleşik AKS düğüm havuzu etiketini kullanın. nodepool2 öğesini, Pod yalıtımı düğüm havuzunuzun adıyla değiştirin.

spec:
  runtimeClassName: kata-vm-isolation
  nodeSelector:
    kubernetes.azure.com/agentpool: nodepool2

Daha güçlü bir ayrım için Pod korumalı alan düğümü havuzunu taint yapabilir ve Kata iş yüklerine eşleşen bir tolerans ekleyebilirsiniz. Eşleşen toleransı olmayan bir taint, diğer iş yüklerinin bu düğüm havuzunda zamanlanmasını engeller. Daha fazla bilgi için, AKS kümesinde düğüm taint’lerini kullanma bölümüne bakın.

Kata Çalışma Zamanı kullanarak uygulama dağıtımı

AKS kümenizde Kata çalışma zamanı ile bir podyu dağıtmak için aşağıdaki adımları izleyin.

  1. Kata podunuzu açıklamak için kata-app.yaml adlı bir dosya oluşturun ve aşağıdaki bildirimi yapıştırın.

    kind: Pod
    apiVersion: v1
    metadata:
      name: isolated-pod
    spec:
      runtimeClassName: kata-vm-isolation
      containers:
      - name: kata
        image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
        command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
    

    runtimeClassName için pod belirtim değeri kata-vm-isolation şeklindedir.

  2. Komutunu çalıştırarak Kubernetes podunu dağıtın kubectl apply ve kata-app.yaml dosyanızı belirtin:

    kubectl apply -f kata-app.yaml
    

    Komutun çıkışı aşağıdaki örneğe benzer:

    pod/isolated-pod created
    

Çekirdek yalıtımını doğrulama (isteğe bağlı)

  1. Kata ve Kata olmayan podların çekirdeklerini karşılaştırmak için normal-app.yaml adlı bir dosya oluşturun. Aşağıdaki bildirim, Kata çalışma zamanı olmadan standart bir pod tanımlar:
kind: Pod
apiVersion: v1
metadata:
  name: normal-pod
spec:
  containers:
  - name: non-kata
    image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
    command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
  1. Standart podu kubectl apply komutunu kullanarak dağıtın.

    kubectl apply -f normal-app.yaml
    
  2. AKS kümesi içinde bulunan bir kapsayıcıya erişmek için, kubectl exec komutunu çalıştırarak bir kabuk oturumu başlatın. Bu örnekte, yalıtılmış pod içindeki kapsayıcıya erişiyorsunuz.

    kubectl exec -it isolated-pod -- /bin/sh
    

    Kubectl kümenize bağlanır, /bin/sh içinde ilk kapsayıcıda çalışır isolated-pod, ve terminalinizin giriş ve çıkış akışlarını kapsayıcının işlemine iletir. Kata olmayan bir podun barındırıldığı kapsayıcıya bağlanarak bir komut satırı oturumu başlatabilir ve farkları görebilirsiniz.

  3. isolated-pod içinden kapsayıcıya bir shell oturumu başlattıktan sonra, kata kapsayıcısının bir pod sanal alanında çalıştığını doğrulamak için komutları çalıştırın. Korumalı alanın dışındaki Kata dışı kapsayıcıya kıyasla farklı bir çekirdek sürümüne sahiptir.

    Çekirdek sürümünü görmek için aşağıdaki komutu çalıştırın:

    uname -r
    

    Aşağıdaki örnek, pod koruma alanı çekirdeğinden gelen çıkışa benzemektedir.

    [user]/# uname -r
    6.6.96.mshv1
    
  4. Normal pod'dan kapsayıcıya çekirdek çıkışını doğrulamak için bir komut satırı oturumu başlatın.

    kubectl exec -it normal-pod -- /bin/bash
    

    Çekirdek sürümünü görmek için aşağıdaki komutu çalıştırın:

    uname -r
    

    Aşağıdaki örnek, pod sanal alanında çalışan Kata podundan farklı bir çekirdek kullanan normal pod çalıştıran VM'den alınan çıktıya benzer.

    6.6.100.mshv1-1.azl3
    

Kaynakları temizle

  1. Bu özelliği değerlendirmeyi bitirdiğinizde, artık Azure ücretlerden kaçınmanız gerekmeyen kaynakları temizleyin. Değerlendirmenizin veya testinizin bir parçası olarak yeni bir küme dağıttıysanız AKS kümesini silmek için aşağıdaki az aks delete komutu çalıştırın.

    az aks delete --resource-group myResourceGroup --name myAKSCluster
    
  2. Mevcut bir kümede Pod yalıtımını dağıttıysanız, kubectl delete pod komutunu kullanarak pod'ları kaldırabilirsiniz.

    kubectl get pods
    kubectl delete pod <kata-pod-name>
    
  3. Pod yalıtımlı işlem kaynaklarını kaldırmak için az aks nodepool delete komutunu kullanarak Kata düğüm havuzunu da silebilirsiniz. Düğüm havuzunu silmeden önce, korumak istediğiniz hiçbir iş yükünün bu düğüm havuzunda çalışmadığından emin olun.

    az aks nodepool delete \
      --cluster-name myAKSCluster \
      --resource-group myResourceGroup \
      --name nodepool2
    

Sonraki adımlar

  • Azure platformu bakım olayları üzerinde donanım yalıtımı ve kontrol sağlamak amacıyla AKS kümenizin düğümleri için Azure Ayrılmış Konaklar hakkında daha fazla bilgi edinin.
  • Pod yalıtımını daha ayrıntılı incelemek ve iş yükü senaryolarını keşfetmek için Pod yalıtımı laboratuvarlarını deneyebilirsiniz.