Esercizio - Creare un chart Helm per la distribuzione
In questa unità viene creato un grafico Helm da distribuire in servizio Azure Kubernetes (servizio Azure Kubernetes) usando GitHub Actions. Per creare il grafico Helm, completare le attività seguenti:
- Controllare l'installazione di Helm.
- Creare un grafico.
- Configurare il grafico.
- Creare una distribuzione.
- Creare un file YAML vuoto.
- Aggiungere contenuto al file YAML.
- Creare un servizio.
- Creare un ingresso.
- Creare un nome di zona DNS.
Controllare l'installazione di Helm e aggiornare il repository
L'interfaccia della riga di comando Helm è già installata in Azure Cloud Shell. Se Cloud Shell non è già aperto, accedere a Cloud Shell e assicurarsi che Bash sia impostato come terminale di Cloud Shell.
Eseguire
helm version
per assicurarsi che la versione Helm visualizzata sia maggiore di 3.Passare al repository con fork per questo modulo eseguendo
cd mslearn-aks-deployment-pipeline-github-actions
.Eseguire
git pull origin main
per eseguire il pull delle modifiche dalle unità precedenti.
Creare un grafico Helm
Generare un modello Helm boilerplate nella directory kubernetes del repository.
In Cloud Shell passare alla directory kubernetes :
cd kubernetes
Usare
helm create
per creare una nuova directory denominata contoso-website nella directory kubernetes :helm create contoso-website
Passare alla nuova directory con
cd
.cd contoso-website
Eliminare i grafici e le cartelle dei modelli in questa directory.
rm -r charts templates
Creare una nuova cartella modelli vuota.
mkdir templates
Per iniziare a creare carichi di lavoro nel grafico vuoto, creare un nuovo set di file YAML spostando i file esistenti in kubernetes nella nuova cartella templates :
mv ../*.yaml ./templates
È ora disponibile un nuovo grafico Helm. Configurare quindi il grafico.
Configurare il chart
Eseguire
cd ../..
per passare alla radice del repository.Eseguire
code .
per aprire l'editor di codice nella directory corrente.Nel menu a sinistra espandere la cartella kubernetes/contoso-website e aprire il file Chart.yaml . Chart.yaml è il file che denomina il grafico ed è la posizione in cui Helm cerca informazioni sul grafico.
Rimuovere tutto il contenuto del file ad eccezione delle prime tre righe e della versione del grafico e modificare la descrizione in modo che il file sia simile all'esempio seguente:
apiVersion: v2 name: contoso-website description: Chart for the Contoso company website version: 0.1.0
Salvare il file selezionando l'angolo superiore destro della barra degli strumenti dell'editor e quindi selezionando Salva oppure premendo CTRL+S.
Creare una distribuzione
Aggiungere modelli per questa distribuzione.
Dal menu a sinistra aprire il file deployment.yaml nella cartella kubernetes/templates .
Nella sezione principale
metadata
aggiungere una nuova chiave denominatanamespace
con il valore{{ default "staging" .Release.Namespace }}
. La sezione dovrebbe essere simile all'esempiometadata
seguente:metadata: name: contoso-website namespace: {{ default "staging" .Release.Namespace }}
Per impostazione predefinita, il flusso di lavoro distribuisce questa risorsa nello spazio dei
staging
nomi, ma se ilhelm install
comando ha un'opzioneNamespace
, il flusso di lavoro usa invece tale spazio dei nomi.template
/containers
/spec
Nella sezione sostituire!IMAGE!
con lelatest
versioni otag
del cluster del servizio Azure Kubernetes.È consigliabile suddividere le
registry
parti ,image
etag
del nome dell'immagine per usarle più facilmente. Aggiungere tre nuove variabili di modello che usano i valori diValues.image.registry
,Values.image.name
eValues.image.tag
.- image: {{ .Values.image.registry }}.azurecr.io/{{ .Values.image.name }}:{{ default "latest" .Values.image.tag }}
Il file deployment.yaml dovrebbe essere simile all'esempio seguente:
apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website namespace: {{ default "staging" .Release.Namespace }} spec: selector: matchLabels: app: contoso-website template: metadata: labels: app: contoso-website spec: containers: - image: {{ .Values.image.registry }}.azurecr.io/{{ .Values.image.name }}:{{ default "latest" .Values.image.tag }} name: contoso-website resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 80 name: http
Salvare il file.
Aggiungere contenuto al file values.yaml
In precedenza, è stato usato {{ .Release.Namespace }}
, quindi Release
è un ambito di variabile. Ogni ambito variabile ha variabili e valori predefiniti diversi. Il file values.yaml è un altro ambito di variabile. Helm usa il file values.yaml per recuperare tutti i valori del modello che iniziano con {{ .Values }}
.
Questo file deve avere la stessa struttura del file usato per chiamare le variabili. Esaminare rapidamente il file deployment.yaml modificato per visualizzare la struttura. Si noti che è stato usato .Values.image.registry
, .Values.image.name
e .Values.image.tag
nel file deployment.yaml .
Nella radice della directory contoso-website aprire il file values.yaml .
Eliminare tutto il contenuto del file, in modo da avere un file YAML vuoto.
Aggiungere il contenuto seguente al file vuoto, sostituendo il segnaposto con il
<ACR-NAME>
nome Registro Azure Container.image: registry: <ACR-NAME> name: contoso-website tag: latest
Questi valori sono l'impostazione predefinita se non si passa un valore diverso come parametro usando l'opzione
--set
del comando Helm.Salvare il file.
Creare un servizio
Aprire il file service.yaml nella cartella templates .
metadata
Nella sezione del file aggiungere una nuova chiave denominatanamespace
che usa lo stesso valore usato nel file deployment.yaml.namespace: {{ default "staging" .Release.Namespace }}
Il file service.yaml dovrebbe essere simile all'esempio seguente:
apiVersion: v1 kind: Service metadata: name: contoso-website namespace: {{ default "staging" .Release.Namespace }} spec: ports: - port: 80 protocol: TCP targetPort: http name: http selector: app: contoso-website type: ClusterIP
Salvare il file.
Creare un ingresso
Aprire il file ingress.yaml .
metadata
Nella sezione del file aggiungere di nuovo ilnamespace
valore usato nel file deployment.yaml.Passare alla chiave
host
. È possibile creare host separati per le distribuzioni di staging e produzione, in modo che gli utenti non possano accedere allo spazio deistaging
nomi usando gli URL di produzione. Concatenare lo spazio dei nomi nel nome host. Il componente aggiuntivo di routing delle applicazioni HTTP nel cluster AKS gestisce la risoluzione dei nomi.- host: contoso-{{ default "staging" .Release.Namespace }}.!DNS!
Sostituire
!DNS!
con una nuova variabile di modello per il nome della zona DNS.- host: contoso-{{ default "staging" .Release.Namespace }}.{{ .Values.dns.name }}
Il file ingress.yaml finale sarà simile all'esempio seguente:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: contoso-website namespace: {{ default "staging" .Release.Namespace }} annotations: kubernetes.io/ingress.class: addon-http-application-routing spec: rules: - host: contoso-{{ default "staging" .Release.Namespace }}.{{ .Values.dns.name }} http: paths: - backend: service: name: contoso-website port: name: http path: / pathType: Prefix
Salvare il file.
Aggiungere un valore del nome di zona DNS
Aprire il file values.yaml e aggiungere una
dns.name
chiave dopo laimage
chiave. Sostituire<ACR-NAME>
con il nome del Registro Container e<DNS-NAME>
con il nome della zona DNS del servizio Azure Kubernetes dall'output dello script di installazione. Il file sarà simile all'esempio seguente:image: registry: <ACR-NAME> name: contoso-website tag: latest dns: name: <DNS-NAME>
Se non si ha il nome della zona DNS dall'output dello script di installazione originale, eseguire la query seguente dell'interfaccia della riga di comando di Azure in un'altra finestra di Cloud Shell per ottenerla, sostituendo il segnaposto con il
<resource-group-name>
nome del gruppo di risorse.az aks show -g <resource-group-name> -n contoso-website -o tsv --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName
Salvare il file.
Eseguire il push delle modifiche
Chiudere l'editor di Cloud Shell selezionando l'angolo superiore destro della barra degli strumenti dell'editor e quindi selezionando Chiudi editor.
Per eseguire il push di tutte le modifiche apportate al fork, eseguire i comandi seguenti in Cloud Shell in ordine:
git add .
git commit -m "Add helm"
git push -u origin main
Quando richiesto, specificare il pat creato in precedenza come password.
Passare all'unità successiva per distribuire il grafico Helm e l'applicazione nel servizio Azure Kubernetes usando GitHub Actions.