Alıştırma - AKS kümesinde Kubernetes için Azure İlkesi yapılandırma
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
Azure hesabınızı kullanarak Azure Cloud Shell’de oturum açın. Cloud Shell’in Bash sürümünü seçin.
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.
az provider register
komutunu çalıştırarak Azure Kubernetes Service sağlayıcısını kaydedin:az provider register --namespace Microsoft.ContainerService
az provider register
komutunu çalıştırarak Azure İlkesi sağlayıcısını kaydedin:az provider register --namespace Microsoft.PolicyInsights
komutunu çalıştırarak eklenti yüklemesini
az feature register
etkinleştirin:az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
Ö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.
Ö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
az aks enable-addons
komutunu çalıştırarakazure-policy
eklentisini kümeniz için etkinleştirebilirsiniz:az aks enable-addons \ --addons azure-policy \ --name $AKS_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP
"azure-policy" podunun
kube-system
ad alanına, "gatekeeper" podunun dagatekeeper-system
ad alanına yüklendiğini doğrulayın. Bunun için aşağıdakikubectl 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 ...
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.
Azure Portal oturum açın.
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.
Burada gösterildiği gibi hizmet listesinden İlke hizmetini seçin:
İ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.
Sol menü bölmesinde, Yazma'nın altında Atamalar'ı seçin:
Ö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:
İlke ata bölmesi görüntülenir.
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:
İlke parametrelerini belirtmek için Parametreler sekmesini seçin.
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:
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:
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.
Azure Cloud Shell'i açın ve Cloud Shell'in Bash sürümünün seçili olduğundan emin olun.
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 istersenizcode test-policy.yaml
komutunu çalıştırın. Bu komut, düzenleyiciyi dosya gezgini olmadan açar.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
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.
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.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
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.
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
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
Podların çalıştığını gördüğünüzde izlemeyi durdurmak için Ctrl+C tuşlarına basın.