Integrera med Kubernetes-distribution med hjälp av Helm

Applikationer som är värda i Kubernetes kan komma åt data i App Configuration genom att använda App Configuration provider-biblioteket. App Configuration Provider har inbyggda cache- och uppdateringsfunktioner, så applikationer kan använda dynamisk konfiguration utan omdistribution. Om du föredrar att inte uppdatera din applikation visar denna guide hur du hämtar data från App Configuration till Kubernetes genom att använda Helm under distributionen. På så sätt kan din applikation fortsätta att komma åt konfiguration från Kubernetes-variabler och hemligheter. Kör en Helm-uppgradering när du vill att din applikation ska upptäcka konfigurationsändringar.

Tips

Se alternativ för arbetsbelastningar som finns i Kubernetes för åtkomst till Azure App Configuration.

Helm är ett sätt att definiera, installera och uppgradera program som körs i Kubernetes. Ett Helm-diagram innehåller den information som krävs för att skapa en instans av ett Kubernetes-program. Konfigurationen lagras utanför själva diagrammet, i en fil med namnet values.yaml.

Under lanseringsprocessen sammanfogar Helm diagrammet med rätt konfiguration för att köra programmet. Variabler som definierats i values.yaml kan till exempel refereras till som miljövariabler i containrarna som körs. Helm stöder också skapande av Kubernetes-hemligheter, som kan monteras som datavolymer eller exponeras som miljövariabler.

Du kan åsidosätta de värden som lagras i values.yaml genom att tillhandahålla ytterligare YAML-baserade konfigurationsfiler på kommandoraden när du kör Helm. Azure App Configuration stöder export av konfigurationsvärden till YAML-filer. Genom att integrera den här exportfunktionen i distributionen kan dina Kubernetes-program använda konfigurationsvärden som lagras i App Configuration.

I den här självstudien får du lära dig att:

  • Använd värden från App Configuration när du distribuerar ett program till Kubernetes med Helm.
  • Skapa en Kubernetes-hemlighet baserat på en Key Vault-referens i App Configuration.

Den här handledningen förutsätter grundläggande kunskaper i att hantera Kubernetes med Helm. Läs mer om att installera program med Helm i Azure Kubernetes Service.

Förutsättningar

Lägga till nyckelvärden

Lägg till följande nyckelvärden i App Configuration Store och lämna Etikett och Innehållstyp med sina standardvärden. Mer information om hur du lägger till nyckelvärden i ett lager med hjälp av Azure-portalen eller CLI:t finns i Skapa ett nyckelvärde.

Tangent Värde
settings.color Vit
settings.message Data från Azure App Configuration

Lägga till en Key Vault-referens till App Configuration

  1. Logga in på Azure Portal och lägg till en hemlighet i Key Vault med namnet Lösenord och värdet myPassword.

  2. Välj den App Configuration Store-instans som du skapade i föregående avsnitt.

  3. Välj Configuration Explorer.

  4. Välj + Skapa>key vault-referens och ange sedan följande värden:

    • Nyckel: Välj secrets.password.
    • Etikett: Lämna det här värdet tomt.
    • Prenumeration, Resursgrupp och Nyckelvalv: Ange de värden som motsvarar värdena i nyckelvalvet som du skapade i föregående steg.
    • Hemlighet: Välj den hemlighet med namnet Lösenord som du skapade i föregående avsnitt.

Skapa Helm-diagram

Skapa först ett Helm-exempeldiagram med följande kommando:

helm create mychart

Helm skapar en ny katalog med namnet mychart med den struktur som visas nedan.

Tips

Följ den här diagramguiden om du vill veta mer.

mychart
|-- Chart.yaml
|-- charts
|-- templates
|   |-- NOTES.txt
|   |-- _helpers.tpl
|   |-- deployment.yaml
|   |-- ingress.yaml
|   `-- service.yaml
`-- values.yaml

Uppdatera sedan avsnittet spec:template:spec:containers i filen deployment.yaml . Följande kodfragment lägger till två miljövariabler i containern. Du anger deras värden dynamiskt vid distributionstillfället.

env:
- name: Color
    value: {{ .Values.settings.color }}
- name: Message
    value: {{ .Values.settings.message }}

Den fullständiga filen deployment.yaml efter uppdateringen bör se ut så här nedan.

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 }}

Om du vill lagra känsliga data som Kubernetes-hemligheter lägger du till en secrets.yaml-fil under mappen templates.

Tips

Läs mer om hur du använder Kubernetes-hemligheter.

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  password: {{ .Values.secrets.password | b64enc }}

Uppdatera slutligen filen values.yaml med följande innehåll för att eventuellt ange standardvärden för konfigurationsinställningarna och hemligheterna som refereras till i filerna deployment.yaml och secrets.yaml. Deras faktiska värden skrivs över av konfigurationen som hämtas från App Configuration.

# settings will be overwritten by App Configuration
settings:
  color: red
  message: myMessage

Skicka konfigurationen från App Configuration i Helm-installationen

Ladda först ned konfigurationen från App Configuration till en myConfig.yaml-fil . Använd ett nyckelfilter om du bara vill ladda ned de nycklar som börjar med inställningar.. Om nyckelfiltret i ditt fall inte räcker för att exkludera nycklar för Key Vault-referenser kan du använda argumentet --skip-keyvault för att exkludera dem.

I följande exempel ersätter du platshållartexten <AppConfigurationStoreName> med namnet på ditt App Configuration-lager.

Tips

Läs mer om exportkommandot.

az appconfig kv export -n <AppConfigurationStoreName> -d file --path myConfig.yaml --key "settings.*"  --separator "." --format yaml

Ladda sedan ned hemligheter till en fil med namnet mySecrets.yaml. Kommandoradsargumentet --resolve-keyvault löser Key Vault-referenserna genom att hämta de faktiska värdena i Key Vault. Du måste köra det här kommandot med autentiseringsuppgifter som har åtkomstbehörighet till motsvarande Key Vault.

Varning

Eftersom den här filen innehåller känslig information bör du hålla filen försiktig och rensa den när den inte behövs längre.

az appconfig kv export -n <AppConfigurationStoreName> -d file --path mySecrets.yaml --key "secrets.*" --separator "." --resolve-keyvault --format yaml

Använd helm-uppgraderingens -f-argument för att skicka in de två konfigurationsfilerna som du har skapat. De åsidosätter de konfigurationsvärden som definierats i values.yaml med de värden som exporteras från App Configuration.

helm upgrade --install -f myConfig.yaml -f mySecrets.yaml "example" ./mychart

Du kan också använda argumentet --set för helm-uppgradering för att skicka literala nyckelvärden. Att använda argumentet --set är ett bra sätt att undvika att bevara känsliga data till disk.

$secrets = az appconfig kv list -n <AppConfigurationStoreName> --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
}

Kontrollera att konfigurationer och hemligheter har angetts genom att komma åt Kubernetes-instrumentpanelen. Du ser att färg- och meddelandevärdena från App Configuration har fyllts i i containerns miljövariabler.

Snabbstart för att köra appen lokalt

En hemlighet, lösenord, som lagras som en Key Vault-referens i App Configuration lades också till i Kubernetes Secrets.

Skärmbild som visar lösenordet i avsnittet Data.

Rensa resurser

Om du inte vill fortsätta använda resurserna som skapas i den här artikeln tar du bort resursgruppen som du skapade här för att undvika avgifter.

Viktigt!

Att ta bort en resursgrupp kan inte ångras. Resursgruppen och alla resurser i den tas bort permanent. Se till att du inte oavsiktligt tar bort fel resursgrupp eller resurser. Om du har skapat resurserna för den här artikeln i en resursgrupp som innehåller andra resurser som du vill behålla tar du bort varje resurs individuellt från respektive fönster i stället för att ta bort resursgruppen.

  1. Logga in på Azure Portal och välj Resursgrupper.
  2. I rutan Filtrera efter namn anger du namnet på resursgruppen.
  3. I resultatlistan väljer du resursgruppens namn för att se en översikt.
  4. Välj Ta bort resursgrupp.
  5. Du blir ombedd att bekräfta borttagningen av resursgruppen. Ange namnet på resursgruppen för att bekräfta och välj Ta bort.

Efter en liten stund tas resursgruppen och alla dess resurser bort.

Nästa steg

I den här självstudien exporterade du data från Azure App Configuration för att användas i en Kubernetes-driftsättning med Helm. Om du vill veta mer om hur du använder App Configuration fortsätter du till Azure CLI-exemplen.