Alıştırma - AKS kümesinde Kubernetes için Azure İlkesi yapılandırma

Tamamlandı

Kubernetes için Azure İlkesi, kuruluşların bulut ortamları için idare gereksinimlerine ve yasal gereksinimlere uygun hareket etmesini, en iyi yöntemleri ve kuruluş kurallarını uygulamasını sağlar.

Şirketinizdeki geliştirme ekipleri geliştirme platformu olarak Azure Kubernetes Service (AKS) hizmetini kullanmaya başladı. Maliyetleri yönetmenin en iyi yolunun iş yükü kaynak sınırlarını tanımlayan iş kuralları uygulamak olduğunu fark ediyorsunuz. Geliştiricilerin yalnızca belirli CPU ve bellek ayırma sınırları içindeki iş yüklerini dağıtmalarını sağlamak istiyorsunuz. Sistemin bu sınırları aşan iş yüklerini engellemesi gerekiyor.

Bu alıştırmada, kümenizde AKS için Azure İlkesi etkinleştirip Kubernetes küme kapsayıcıları CPU ve bellek kaynak sınırlarının belirtilen sınır ilkesini aşmaması gerektiğini ekleyeceksiniz. Ardından, ilkenin ilkenin kaynak parametrelerini aşan iş yüklerini zamanlamayı reddedip atmadığını test edersiniz.

ContainerService ve PolicyInsights kaynak sağlayıcılarını etkinleştirme

  1. Azure hesabınızı kullanarak Azure Cloud Shell’de oturum açın. Cloud Shell’in Bash sürümünü seçin.

  2. AKS için Azure İlkesi'ni kullanabilmek için küme sürümünün 1.14 veya üzeri olması gerekir. AKS kümenizin sürümünü doğrulamak için aşağıdaki betiği çalıştırın:

    az aks list
    

    Bildirilen küme sürümünün 1.14 ve üzeri olduğundan emin olun.

  3. az provider register komutunu çalıştırarak Azure Kubernetes Service sağlayıcısını kaydedin:

    az provider register --namespace Microsoft.ContainerService
    
  4. az provider register komutunu çalıştırarak Azure İlkesi sağlayıcısını kaydedin:

    az provider register --namespace Microsoft.PolicyInsights
    
  5. komutunu çalıştırarak eklenti yüklemesini az feature register etkinleştirin:

    az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
    
  6. Özellik listesi tablosunu sorgulayarak kaydın başarılı olup olmadığını denetleyin. Sorguyu çalıştırmak için az feature list komutunu kullanın. Özelliğin kaydının tamamlanması birkaç dakika sürebilir, bu nedenle sonucu düzenli aralıklarla denetlemeniz gerekir.

    az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AKS-AzurePolicyAutoApprove')].   {Name:name,State:properties.state}"
    

    Cloud Shell oturumu zaman aşımına uğrarsa kayıt işlemini Azure portalında önizleme ekleme sayfasını kullanarak izleyebilirsiniz.

  7. Özellik listesi sorgu komutunun az provider register 'Kayıtlı' olarak gösterildiğini onayladıktan sonra güncelleştirmeyi yaymak için komutunu çalıştırın:

    az provider register -n Microsoft.ContainerService
    

Kümenizde Azure İlkesi etkinleştirme

  1. az aks enable-addons komutunu çalıştırarak azure-policy eklentisini kümeniz için etkinleştirebilirsiniz:

    az aks enable-addons \
        --addons azure-policy \
        --name $AKS_CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP
    
  2. "azure-policy" podunun kube-system ad alanına, "gatekeeper" podunun da gatekeeper-system ad alanına yüklendiğini doğrulayın. Bunun için aşağıdaki kubectl get pods komutlarını çalıştırın:

    kubectl get pods -n kube-system
    

    Çıkışınız aşağıdakine benzer görünmelidir:

    NAME                                    READY   STATUS    RESTARTS   AGE
    azure-policy-78c8d74cd4-7fqn2           1/1     Running   0          12m
    azure-policy-webhook-545c898766-gsjrc   1/1     Running   0          12m
    ...
    
    kubectl get pods -n gatekeeper-system
    

    Çıkışınız aşağıdakine benzer görünmelidir:

    NAME                                            READY   STATUS    RESTARTS   AGE
    gatekeeper-controller-manager-d5cd87796-5tmhq   1/1     Running   0          15m
    ...
    
  3. Son olarak az aks show komutunu çalıştırarak en son güncel eklentinin yüklendiğini doğrulayın. Bu komut kümenizin yapılandırma bilgilerini alır.

    az aks show \
     --resource-group $RESOURCE_GROUP\
     --name $AKS_CLUSTER_NAME \
     -o table --query "addonProfiles.azurepolicy"
    

    Çıkışınız aşağıdakine benzer görünmelidir:

    {
        "config": null,
        "enabled": true,
        "identity": null
    }
    

    Artık Kubernetes küme kapsayıcıları cpu ve bellek kaynak sınırları belirtilen sınırları aşmamalıdır adlı ilkeyi yapılandırmak için Azure portalına geçmeye hazırsınız.

Yerleşik ilke tanımı atama

Yeni Azure İlkesini yapılandırmak için Azure portalından Azure İlkesi hizmetini kullanın.

  1. Azure Portal oturum açın.

  2. Azure portalında İlke hizmetini başlatın. Bunu yapmak için portalın üst kısmındaki arama çubuğunda İlke'yi arayın ve seçin.

  3. Burada gösterildiği gibi hizmet listesinden İlke hizmetini seçin:

    Screenshot of the general Azure portal search box with a result that shows the Azure Policy service.

    İlke panosu açılır ve genel bakış sayfasında atanmış olan ilkeleriniz, kaynaklarınızın durumu ve ilkelerin kaynakları nasıl etkilediği gösterilir. Herhangi bir ilke atamadıysanız pano boş olur.

  4. Sol menü bölmesinde, Yazma'nın altında Atamalar'ı seçin:

    Screenshot of the Policy service navigation panel that shows the location of the Assignments option.

  5. Önceki açıklamamızdan hatırlayacağınız üzere, ilke ataması oluşturmak için iki seçeneğiniz vardır: bir girişim veya ilke atarsınız. Üst menü çubuğunda İlke ata'yı seçin:

    Screenshot that shows the new policy assignment option.

    İlke ata bölmesi görüntülenir.

  6. temel bilgiler sekmesinde, ilkenizi oluşturmak için her ayar için aşağıdaki değerleri girin.

    Ayar Değer
    Scope
    Kapsam Üç nokta düğmesini seçin. Kapsam bölmesi görüntülenir. Abonelik bölümünde kaynak grubunuzu barındıran aboneliği seçin. Kaynak Grubu için rg-akscostsaving öğesini ve ardından Seç düğmesini seçin.
    Hariç tutulanlar Boş bırakın.
    Temel Bilgiler
    İlke tanımı Üç nokta düğmesini seçin. Kullanılabilir Tanımlar bölmesi görüntülenir. Arama kutusuna CPU girerek seçimi filtreleyin. İlke Tanımları sekmesinde Kubernetes küme kapsayıcıları CPU ve bellek kaynak sınırları belirtilen sınırları aşmamalıdır'ı seçin, ardından Ekle'yi seçin.
    Atama adı Varsayılanı kabul et.
    Açıklama Boş bırakın.
    İlke uygulama Bu seçeneğin Etkin olarak ayarlandığından emin olun.
    Atayan Varsayılanı kabul et.

    Aşağıda tamamlanmış Temel sekmesinin örneği verilmiştir:

    Screenshot that shows the information captured in the Basics tab.

  7. İlke parametrelerini belirtmek için Parametreler sekmesini seçin.

  8. Parametre ayarlarının her biri için aşağıdaki değerleri ayarlayın:

    Ayar Değer
    İzin verilen en yüksek CPU birimi Değeri 200m olarak ayarlayın. İlke, bu değeri hem iş yükü kaynak isteği değeriyle hem de iş yükü bildirim dosyasında belirtilen iş yükü sınırı değeriyle eşleştirir.
    İzin verilen en fazla bellek baytı Değeri 256 Mi olarak ayarlayın. İlke, bu değeri hem iş yükü kaynak isteği değeriyle hem de iş yükü bildirim dosyasında belirtilen iş yükü sınırı değeriyle eşleştirir.

    Aşağıda tamamlanmış Parametreler sekmesinin örneği verilmiştir:

    Screenshot that shows the information captured in the Parameters tab.

  9. Düzeltme sekmesini seçin. Bu sekmede, yeni ilkenin zaten var olan kaynakları nasıl etkilediğini seçeceksiniz. Varsayılan olarak, yeni ilke yalnızca yeni oluşturulan kaynakları denetler. Standart varsayılan yapılandırmayı koruyun.

    Aşağıda tamamlanmış Düzeltme sekmesinin örneği verilmiştir:

    Screenshot that shows the information captured in the Remediation tab.

  10. Gözden geçir ve oluştur sekmesini seçin. Seçtiğiniz değerleri gözden geçirin ve oluştur'u seçin.

Önemli

Mevcut bir AKS kümesi kullanıyorsanız ilke atamasının uygulanması yaklaşık 15 dakika sürebilir.

Kaynak isteklerini test etme

Son adım, yeni ilkeyi test etmek olacak. Test iş yükünüzü yeni ilkeyi ihlal eden kaynak istekleri ve sınırlarıyla dağıtın. Her şey doğru giderse, sunucu ilke tarafından reddedildi hatasını döndürür.

  1. Azure Cloud Shell'i açın ve Cloud Shell'in Bash sürümünün seçili olduğundan emin olun.

  2. Tümleşik düzenleyiciyi kullanarak Kubernetes dağıtımı için bir bildirim dosyası oluşturun. Dosyayı test-policy.yaml olarak adlandırın:

    code test-policy.yaml
    

    Bahşiş

    Cloud Shell, tümleşik dosya düzenleyicisine sahiptir. Cloud Shell düzenleyicisi dil vurgulama, komut paleti ve dosya gezgini gibi özellikleri destekler. Basit dosya oluşturma ve düzenleme için Cloud Shell terminalinde çalıştırarak code . düzenleyiciyi başlatın. Bu eylem, terminalde etkin çalışma dizininiz ayarlanmış bir şekilde eylem düzenleyiciyi açar. Hızlı düzenleme yapmak için bildirim dosyanızı doğrudan açmak isterseniz code test-policy.yaml komutunu çalıştırın. Bu komut, düzenleyiciyi dosya gezgini olmadan açar.

  3. Aşağıdaki metni dosyaya yapıştırın:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        env: test
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 500m
            memory: 256Mi
          limits:
            cpu: 1000m
            memory: 500Mi
    
  4. Dosyayı kaydetmek için Ctrl+S tuşlarına basın, ardından düzenleyiciyi kapatmak için Ctrl+Q tuşlarına basın.

  5. Yapılandırmayı kubectl apply uygulamak ve uygulamayı costsavings ad alanına dağıtmak için komutunu çalıştırın:

    kubectl apply \
    --namespace costsavings \
    -f test-policy.yaml
    

    Çıkışınız aşağıdakine benzer olmalıdır:

    Error from server (
    [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi>
    [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>)
     : error when creating "test-deploy.yml"
     : admission webhook "validation.gatekeeper.sh" denied the request: 
    [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi>
    [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>
    

    validation.gatekeeper.sh erişim web kancasının pod zamanlama isteğini nasıl reddettiğine bakın.

  6. Bildirim dosyasını açın ve kaynak isteğini düzeltin:

    code test-policy.yaml
    

    Metni aşağıdaki metinle değiştirin:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        env: test
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 200m
            memory: 256Mi
          limits:
            cpu: 200m
            memory: 256Mi
    
  7. Dosyayı kaydetmek için Ctrl+S tuşlarına basın, ardından düzenleyiciyi kapatmak için Ctrl+Q tuşlarına basın.

  8. Yapılandırmayı kubectl apply uygulamak ve uygulamayı costsavings ad alanına dağıtmak için komutunu çalıştırın:

    kubectl apply \
    --namespace costsavings \
    -f test-policy.yaml
    

    Aşağıdaki çıkışı alırsınız:

    pod/nginx created
    
  9. Ad alanınızda costsavings yeni oluşturulan podların podlarını alın.

    kubectl get pods --namespace costsavings
    

    Birkaç saniye içinde podlar duruma geçirildi Running .

    NAME    READY   STATUS    RESTARTS   AGE
    nginx   1/1     Running   0          50s
    
  10. Podların çalıştığını gördüğünüzde izlemeyi durdurmak için Ctrl+C tuşlarına basın.