Esercizio - Configurare Criteri di Azure per Kubernetes in un cluster del servizio Azure Kubernetes
Criteri di Azure per Kubernetes aiuta le organizzazioni a soddisfare i requisiti di governance e legali, implementare procedure consigliate e stabilire convenzioni organizzative per gli ambienti cloud.
I team di sviluppo dell'azienda stanno adottando il servizio Azure Kubernetes (AKS) come piattaforma di sviluppo. Ci si rende conto che il modo migliore per gestire i costi è imporre regole business che definiscono i limiti di risorse dei carichi di lavoro. Si vuole fare in modo che gli sviluppatori possano distribuire i carichi di lavoro solo entro limiti specifici di allocazione della memoria e della CPU. Il sistema deve impedire i carichi di lavoro che superano tali limiti.
In questo esercizio si abiliterà Criteri di Azure per il servizio Azure Kubernetes nel cluster e si aggiungeranno i limiti di CPU e risorse di memoria dei contenitori del cluster Kubernetes non devono superare i criteri specificati. Si verificherà quindi se il criterio nega la pianificazione dei carichi di lavoro che superano i parametri delle risorse dei criteri.
Abilitare i provider di risorse ContainerService e PolicyInsights
Accedere ad Azure Cloud Shell usando il proprio account Azure. Selezionare la versione Bash di Cloud Shell.
Per Criteri di Azure per il servizio Azure Kubernetes è necessaria la versione del cluster 1.14 o successiva. Eseguire lo script seguente per verificare la versione del cluster del servizio Azure Kubernetes:
az aks list
Assicurarsi che la versione del cluster restituita sia 1.14 o successiva.
Registrare il provider del servizio Azure Kubernetes eseguendo il comando
az provider register
:az provider register --namespace Microsoft.ContainerService
Registrare il provider di Criteri di Azure eseguendo il comando
az provider register
:az provider register --namespace Microsoft.PolicyInsights
Abilitare l'installazione del componente aggiuntivo eseguendo il
az feature register
comando :az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
Verificare che la registrazione abbia avuto esito positivo eseguendo una query sulla tabella feature-list. Usare il comando
az feature list
per eseguire la query. Per il completamento della registrazione della funzionalità sono necessari alcuni minuti, quindi è necessario controllare periodicamente il risultato.az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AKS-AzurePolicyAutoApprove')]. {Name:name,State:properties.state}"
Se si verifica il timeout della sessione di Cloud Shell, è possibile monitorare il processo di registrazione tramite il portale di Azure usando il riquadro di onboarding di anteprima.
Eseguire il comando
az provider register
per propagare l'aggiornamento dopo aver verificato che il comando di query per l'elenco delle funzionalità restituisca "Registered":az provider register -n Microsoft.ContainerService
Abilitare Criteri di Azure nel cluster
Eseguire il comando
az aks enable-addons
per abilitare il componente aggiuntivoazure-policy
per il cluster:az aks enable-addons \ --addons azure-policy \ --name $AKS_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP
Verificare che il pod dei criteri di Azure sia installato nello spazio dei nomi
kube-system
e che il pod gatekeeper sia installato nello spazio dei nomigatekeeper-system
. A tale scopo, eseguire i comandikubectl get pods
seguenti:kubectl get pods -n kube-system
L'output dovrebbe essere simile al seguente:
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
L'output dovrebbe essere simile al seguente:
NAME READY STATUS RESTARTS AGE gatekeeper-controller-manager-d5cd87796-5tmhq 1/1 Running 0 15m ...
Infine, verificare che sia installato il componente aggiuntivo più recente eseguendo il comando
az aks show
. Questo comando recupera le informazioni di configurazione per il cluster.az aks show \ --resource-group $RESOURCE_GROUP\ --name $AKS_CLUSTER_NAME \ -o table --query "addonProfiles.azurepolicy"
L'output dovrebbe essere simile al seguente:
{ "config": null, "enabled": true, "identity": null }
A questo punto è possibile passare al portale di Azure per configurare il criterio denominato Le risorse CPU e memoria dei contenitori nel cluster Kubernetes non devono superare i limiti specificati.
Assegnare una definizione dei criteri predefinita
Per configurare i nuovi criteri di Azure, usare il servizio Criteri nel portale di Azure.
Accedi al portale di Azure.
Individuare il servizio Criteri nel portale di Azure. A questo scopo, nella barra di ricerca in alto nel portale cercare e selezionare Criteri.
Selezionare il servizio Criteri nell'elenco di servizi, come illustrato di seguito:
Verrà visualizzato il dashboard Criteri con una panoramica che mostra tutti i criteri assegnati, lo stato delle risorse e il modo in cui i criteri influiscono su di esse. Se non sono stati assegnati criteri, il dashboard sarà vuoto.
Nel riquadro dei menu a sinistra, in Creazione selezionare Assegnazioni:
Si ricordi dalla descrizione precedente che sono disponibili due opzioni per creare un'assegnazione di criteri: si assegna un'iniziativa o un criterio. Nella barra dei menu superiore selezionare Assegna criterio:
Viene visualizzato il riquadro Assegna criterio.
Nella scheda Informazioni di base immettere i valori seguenti per ogni impostazione per creare il criterio.
Impostazione Valore Scope Ambito Selezionare il pulsante con i puntini di sospensione. Viene visualizzato il riquadro Ambito. In Sottoscrizione selezionare la sottoscrizione contenente il gruppo di risorse. Per Gruppo di risorse selezionare rg-akscostsaving e quindi selezionare il pulsante Seleziona . Esclusioni Lasciare vuoto. Nozioni di base Definizione di criteri Selezionare il pulsante con i puntini di sospensione. Viene visualizzato il riquadro Definizioni disponibili. Nella casella Cerca filtrare la selezione immettendo CPU. Nella scheda Definizioni dei criteri selezionare i limiti di CPU e risorse di memoria per i contenitori del cluster Kubernetes, quindi selezionare Aggiungi. Nome dell'assegnazione Accettare l'impostazione predefinita. Descrizione Lasciare vuoto. Applicazione dei criteri Assicurarsi che questa opzione sia impostata su Abilitato. Assegnato da Accettare l'impostazione predefinita. Di seguito è illustrato un esempio di scheda Informazioni di base completata:
Selezionare la scheda Parametri per specificare i parametri per il criterio.
Immettere i valori seguenti per ogni opzione delle impostazioni dei parametri:
Impostazione Valore Numero massimo di unità CPU consentite Impostare il valore su 200m. Il criterio imposta questo valore in base alle richieste di risorse dei carichi di lavoro e al valore limite per i carichi di lavoro specificato nel file manifesto del carico di lavoro. Numero massimo di byte di memoria consentiti Impostare il valore su 256Mi. Il criterio imposta questo valore in base alle richieste di risorse dei carichi di lavoro e al valore limite per i carichi di lavoro specificato nel file manifesto del carico di lavoro. Di seguito è illustrato un esempio di scheda Parametri completata:
Selezionare la scheda Correzione . In questa scheda si selezionerà il modo in cui il nuovo criterio influisce sulle risorse già esistenti. Per impostazione predefinita, il nuovo criterio controlla solo le risorse appena create. Mantenere la configurazione predefinita standard.
Di seguito è illustrato un esempio di scheda Correzione completata:
Selezionare la scheda Rivedi e crea . Esaminare i valori scelti e quindi selezionare Crea.
Importante
Se si usa un cluster del servizio Azure Kubernetes esistente, l'assegnazione dei criteri potrebbe richiedere circa 15 minuti.
Testare le richieste di risorse
Il passaggio finale consiste nel testare il nuovo criterio. Distribuire il carico di lavoro di test con richieste di risorse e i limiti che violano il nuovo criterio. Se tutto funziona correttamente, il server restituisce un errore che indica che è stato negato dai criteri.
Aprire Azure Cloud Shell e assicurarsi di selezionare la versione Bash di Cloud Shell.
Creare un file manifesto per la distribuzione Kubernetes denominato usando l'editor integrato. Chiamare il file
test-policy.yaml
:code test-policy.yaml
Suggerimento
Cloud Shell include un editor di file integrato. L'editor di Cloud Shell supporta funzionalità quali l'evidenziazione del linguaggio, il riquadro comandi e uno strumento per l'esplorazione dei file. Per la creazione e la modifica di file semplici, avviare l'editor eseguendo
code .
nel terminale di Cloud Shell. Questa azione consente di aprire l'editor con la directory di lavoro attiva impostata nel terminale. Per aprire direttamente il file manifesto per la modifica rapida, eseguirecode test-policy.yaml
. Questo comando apre l'editor senza Esplora file.Incollare il testo seguente nel file:
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
Premere CTRL+S per salvare il file, quindi premere CTRL+Q per chiudere l'editor.
Eseguire il comando
kubectl apply
per applicare la configurazione e distribuire l'applicazione nello spazio dei nomicostsavings
:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
L'output dovrebbe essere simile al seguente:
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>
Si noti che il webhook di ammissione,
validation.gatekeeper.sh
, ha negato la richiesta di pianificazione del pod.Aprire il file manifesto e correggere la richiesta di risorse:
code test-policy.yaml
Sostituire il testo con il testo seguente:
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
Premere CTRL+S per salvare il file, quindi premere CTRL+Q per chiudere l'editor.
Eseguire il comando
kubectl apply
per applicare la configurazione e distribuire l'applicazione nello spazio dei nomicostsavings
:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Si otterrà l'output seguente:
pod/nginx created
Recuperare i pod dei pod appena creati nello spazio dei nomi
costsavings
.kubectl get pods --namespace costsavings
Entro pochi secondi si noterà che i pod passano allo stato
Running
.NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 50s
Premere CTRL+C per interrompere il controllo dopo aver visualizzato i pod in esecuzione.