Integrera med Kubernetes-distribution med Hjälp av Helm

Program som finns i Kubernetes kan komma åt data i App Configuration med hjälp av appkonfigurationsproviderbiblioteket. Appkonfigurationsprovidern har inbyggda funktioner för cachelagring och uppdatering så att program kan ha dynamisk konfiguration utan omdistribution. Om du föredrar att inte uppdatera ditt program visar den här självstudien hur du tar data från App Configuration till dina Kubernetes med Helm via distribution. På så sätt kan ditt program fortsätta att komma åt konfigurationen från Kubernetes-variabler och hemligheter. Du kör Helm-uppgraderingen när du vill att programmet ska hämta nya konfigurationsändringar.

Dricks

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 lär du 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 självstudien förutsätter grundläggande förståelse för 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 arkiv med hjälp av Azure-portalen eller CLI 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-portalen 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.

Dricks

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.

Dricks

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.

Dricks

Läs mer om exportkommandot.

az appconfig kv export -n myAppConfiguration -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 myAppConfiguration -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 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
}

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.

Quickstart app launch local

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

Screenshot that highlights the password in the Data section.

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-portalen 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 Azure App Configuration-data som ska användas i en Kubernetes-distribution med Helm. Om du vill veta mer om hur du använder App Configuration fortsätter du till Azure CLI-exemplen.