Integrare la distribuzione di Kubernetes con Helm
Le applicazioni ospitate in Kubernetes possono accedere ai dati in Configurazione app usando la libreria del provider di Configurazione app. Il provider di Configurazione app include funzionalità predefinite di memorizzazione nella cache e aggiornamento, in modo che le applicazioni possano avere una configurazione dinamica senza ridistribuzione. Se si preferisce non aggiornare l'applicazione, questa esercitazione illustra come trasferire i dati da Configurazione app a Kubernetes, usando Helm tramite distribuzione. In questo modo, l'applicazione può continuare ad accedere alla configurazione dalle variabili e dai segreti di Kubernetes. Eseguire aggiornamento Helm quando si vuole che l'applicazione rilevi nuove modifiche di configurazione.
Suggerimento
Vedere le opzioni per i carichi di lavoro ospitati in Kubernetes per accedere a Configurazione app di Azure.
Helm consente di definire, installare e aggiornare le applicazioni in esecuzione in Kubernetes. Un grafico Helm contiene le informazioni necessarie per creare un'istanza di un'applicazione Kubernetes. La configurazione viene archiviata all'esterno del grafico stesso, in un file denominato values.yaml.
Durante il processo di rilascio, Helm unisce il grafico alla configurazione corretta per l'esecuzione dell'applicazione. È ad esempio possibile fare riferimento alle variabili definite in values.yaml come variabili di ambiente all'interno dei contenitori in esecuzione. Helm supporta anche la creazione di segreti Kubernetes, che possono essere montati come volumi di dati o esposti come variabili di ambiente.
È possibile eseguire l'override dei valori archiviati in values.yaml specificando altri file di configurazione basati su YAML sulla riga di comando durante l'esecuzione di Helm. Configurazione app di Azure supporta l'esportazione di valori di configurazione in file YAML. L'integrazione di questa funzionalità di esportazione nella distribuzione consente alle applicazioni Kubernetes di sfruttare i valori di configurazione archiviati in Configurazione app.
In questa esercitazione apprenderai a:
- Usare i valori di Configurazione app quando si distribuisce un'applicazione in Kubernetes con Helm.
- Creare un segreto Kubernetes in base a un riferimento a Key Vault in Configurazione app.
Questa esercitazione presuppone una conoscenza di base della gestione di Kubernetes con Helm. Per altre informazioni sull'installazione di applicazioni con Helm, vedere Servizio Azure Kubernetes.
Prerequisiti
- Un account Azure con una sottoscrizione attiva. Crearne una gratuitamente.
- Installare l'interfaccia della riga di comando di Azure (2.4.0 o versioni successive)
- Installare Helm (2.14.0 o versioni successive)
- Un Archivio di configurazione app. Creare un archivio.
- Un cluster Kubernetes.
Aggiungere coppie chiave-valore
Aggiungere il valore chiave seguente all'archivio di Configurazione app e lasciare Etichetta e Tipo di contenuto con i valori predefiniti. Per altre informazioni su come aggiungere valori chiave a un archivio usando il portale di Azure o l’interfaccia della riga di comando, andare a Creare un valore chiave.
Chiave | valore |
---|---|
settings.color | Bianco |
settings.message | Dati di Configurazione app di Azure |
Aggiungere a Configurazione app un riferimento a Key Vault
Accedere al portale di Azure e aggiungere un segreto a Key Vault con nome Password e valore myPassword.
Selezionare l'istanza dell'archivio di Configurazione app creata nella sezione precedente.
Selezionare Esplora configurazioni.
Selezionare + Crea>Riferimento all'insieme di credenziali delle chiavi e quindi specificare i valori seguenti:
- Chiave: selezionare secrets.password.
- Etichetta: lasciare vuoto questo valore.
- Sottoscrizione, Gruppo di risorse e Insieme di credenziali delle chiavi: immettere i valori corrispondenti a quelli presenti nell'insieme di credenziali delle chiavi creato nel passaggio precedente.
- Segreto: selezionare il segreto denominato Password creato nella sezione precedente.
Creare il grafico Helm
Per prima cosa, creare un grafico Helm di esempio con il comando seguente:
helm create mychart
Helm crea una nuova directory denominata mychart con la struttura illustrata di seguito.
Suggerimento
Per altre informazioni, vedere questa guida ai grafici.
mychart
|-- Chart.yaml
|-- charts
|-- templates
| |-- NOTES.txt
| |-- _helpers.tpl
| |-- deployment.yaml
| |-- ingress.yaml
| `-- service.yaml
`-- values.yaml
Aggiornare quindi la sezione spec:template:spec:containers del file deployment.yaml. Il frammento di codice seguente aggiunge due variabili di ambiente al contenitore. I valori verranno impostati dinamicamente in fase di distribuzione.
env:
- name: Color
value: {{ .Values.settings.color }}
- name: Message
value: {{ .Values.settings.message }}
Il file deployment.yaml dopo l'aggiornamento dovrebbe essere simile al seguente.
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: {{ include "mychart.fullname" . }}
labels:
app.kubernetes.io/name: {{ include "mychart.name" . }}
helm.sh/chart: {{ include "mychart.chart" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app.kubernetes.io/name: {{ include "mychart.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
template:
metadata:
labels:
app.kubernetes.io/name: {{ include "mychart.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:
- name: Color
value: {{ .Values.settings.color }}
- name: Message
value: {{ .Values.settings.message }}
ports:
- name: http
containerPort: 80
protocol: TCP
livenessProbe:
httpGet:
path: /
port: http
readinessProbe:
httpGet:
path: /
port: http
resources:
{{ toYaml .Values.resources | indent 12 }}
{{- with .Values.nodeSelector }}
nodeSelector:
{{ toYaml . | indent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity:
{{ toYaml . | indent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{ toYaml . | indent 8 }}
{{- end }}
Per archiviare dati sensibili come segreti Kubernetes, aggiungere un file secrets.yaml nella cartella templates.
Suggerimento
Per altre informazioni, vedere l'articolo su come usare i segreti Kubernetes.
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: {{ .Values.secrets.password | b64enc }}
Aggiornare infine il file values.yaml con il contenuto seguente per fornire facoltativamente i valori predefiniti delle impostazioni di configurazione e dei segreti a cui viene fatto riferimento nei file deployment.yaml e secrets.yaml. I valori effettivi verranno sovrascritti dalla configurazione di cui è stato eseguito il pull da Configurazione app.
# settings will be overwritten by App Configuration
settings:
color: red
message: myMessage
Passare la configurazione da Configurazione app all'installazione di Helm
Per prima cosa, scaricare la configurazione da Configurazione app a un file myConfig.yaml. Usare un filtro per scaricare solo le chiavi che iniziano con settings.. Se in questo caso il filtro non è sufficiente a escludere le chiavi dei riferimenti a Key Vault, è possibile usare l'argomento --skip-keyvault per escluderli.
Suggerimento
Altre informazioni sul comando export.
az appconfig kv export -n myAppConfiguration -d file --path myConfig.yaml --key "settings.*" --separator "." --format yaml
Scaricare quindi i segreti in un file denominato secrets.yaml. L'argomento della riga di comando --resolve-vault risolve i riferimenti a Key Vault recuperando i valori effettivi in Key Vault. È necessario eseguire questo comando con credenziali che hanno autorizzazioni di accesso per il Key Vault corrispondente.
Avviso
Dal momento che questo file contiene informazioni riservate, conservarlo in modo sicuro e pulirlo quando non è più necessario.
az appconfig kv export -n myAppConfiguration -d file --path mySecrets.yaml --key "secrets.*" --separator "." --resolve-keyvault --format yaml
Usare l'argomento -f di helm upgrade per passare i due file di configurazione creati. Tali file eseguiranno l'override dei valori di configurazione definiti in values.yaml con i valori esportati da Configurazione app.
helm upgrade --install -f myConfig.yaml -f mySecrets.yaml "example" ./mychart
È anche possibile usare l'argomento --set di aggiornamento Helm per passare valori di chiave letterali. L'argomento --set è utile per evitare il salvataggio permanente di dati sensibili sul disco.
$secrets = az appconfig kv list -n myAppConfiguration --key "secrets.*" --resolve-keyvault --query "[*].{name:key, value:value}" | ConvertFrom-Json
foreach ($secret in $secrets) {
$keyvalues += $secret.name + "=" + $secret.value + ","
}
if ($keyvalues){
$keyvalues = $keyvalues.TrimEnd(',')
helm upgrade --install --set $keyvalues "example" ./mychart
}
else{
helm upgrade --install "example" ./mychart
}
Verificare che configurazioni e segreti siano stati impostati correttamente accedendo al dashboard di Kubernetes. Si noterà che i valori di color e message di Configurazione app sono stati popolati nelle variabili di ambiente del contenitore.
Un segreto, password, archiviato come riferimento a Key Vault in Configurazione app, è stato aggiunto anche nei segreti Kubernetes.
Pulire le risorse
Se non si vuole continuare a usare le risorse create in questo articolo, eliminare il gruppo di risorse creato qui per evitare addebiti.
Importante
L'eliminazione di un gruppo di risorse è irreversibile. Il gruppo di risorse e tutte le risorse in esso contenute vengono eliminati in modo permanente. Assicurarsi di non eliminare accidentalmente il gruppo di risorse o le risorse sbagliate. Se le risorse per questo articolo sono state create in un gruppo di risorse che contiene altre risorse che si vogliono mantenere, eliminare ogni risorsa singolarmente dal rispettivo riquadro anziché eliminare il gruppo di risorse.
- Accedere al portale di Azure e selezionare Gruppi di risorse.
- Nella casella Filtra per nome immettere il nome del gruppo di risorse.
- Nell'elenco dei risultati selezionare il nome del gruppo di risorse per visualizzare una panoramica.
- Selezionare Elimina gruppo di risorse.
- Verrà chiesto di confermare l'eliminazione del gruppo di risorse. Immettere il nome del gruppo di risorse per confermare e selezionare Elimina.
Dopo qualche istante, il gruppo di risorse e tutte le risorse che contiene vengono eliminati.
Passaggi successivi
In questa esercitazione sono stati esportati i dati di Configurazione app di Azure da usare in una distribuzione di Kubernetes con Helm. Per altre informazioni sull'uso di Configurazione app, passare agli esempi dell'interfaccia della riga di comando di Azure.