Integrera med Kubernetes-distribution med Hjälp av Helm

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 definieras i values.yaml kan till exempel refereras till som miljövariabler i containrarna som körs. Helm stöder också skapandet 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 ange ytterligare YAML-baserade konfigurationsfiler på kommandoraden när du kör Helm. Azure App Configuration stöd för export av konfigurationsvärden till YAML-filer. Genom att integrera den här exportkapaciteten i din distribution kan Kubernetes-program utnyttja konfigurationsvärden som lagras i App Configuration.

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

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

Den här självstudien förutsätter grundläggande kunskaper om att hantera Kubernetes med Helm. Läs mer om hur du installerar program med Helm i Azure Kubernetes Service.

Förutsättningar

Skapa ett App Configuration butik

  1. Om du vill skapa ett nytt konfigurations Arkiv för appen loggar du in på Azure Portal. I det övre vänstra hörnet på Start sidan väljer du skapa en resurs. I rutan Sök på Marketplace anger du app-konfiguration och väljer RETUR.

    Sök efter App Configuration

  2. Välj app-konfiguration från Sök resultaten och välj sedan skapa.

    Välj Skapa

  3. I fönstret skapa app-konfiguration anger du följande inställningar:

    Inställning Föreslaget värde Beskrivning
    Prenumeration Din prenumeration Välj den Azure-prenumeration du vill använda för att testa App Configuration. Om ditt konto bara har en prenumeration väljs den automatiskt och ingen prenumerations lista visas.
    Resursgrupp AppConfigTestResources Välj eller skapa en resurs grupp för din app Configuration Store-resurs. Den här gruppen är användbar för att organisera flera resurser som du kanske vill ta bort samtidigt genom att ta bort resurs gruppen. Mer information finns i använda resurs grupper för att hantera dina Azure-resurser.
    Resurs namn Globalt unikt namn Ange ett unikt resurs namn som ska användas för appens konfigurations Arkiv resurs. Namnet måste vara en sträng mellan 5 och 50 tecken och får bara innehålla siffror, bokstäver och - tecknet. Namnet får inte börja eller sluta med - specialtecknet.
    Plats USA, centrala Använd Plats till att ange den geografiska plats där appkonfigurationsarkivets resurs finns. För bästa prestanda skapar du resursen i samma region som andra komponenter i ditt program.
    Prisnivå Kostnadsfri Välj önskad pris nivå. Mer information finns på sidan med prissättning för app-konfiguration.
  4. Välj Granska + skapa för att validera inställningarna.

  5. Välj Skapa. Distributionen kan ta några minuter.

  6. När distributionen är klar går du till appen konfigurations resurs. Välj Inställningar > Åtkomstnycklar. Anteckna den primära skrivskyddade nyckel anslutnings strängen. Du kommer att använda den här anslutnings strängen senare för att konfigurera programmet för att kommunicera med det app-konfigurations lager som du har skapat.

  1. Välj Configuration Explorer > Skapa för att lägga till följande nyckel/värde-par:

    Tangent Värde
    settings.color Vit
    settings.message Data från Azure App Configuration
  2. Lämna Etikett och Innehållstyp tomma för tillfället.

Lägga till en Key Vault-referens för 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 > nyckelvalvsreferens 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 de i nyckelvalvet som du skapade i föregående steg.
    • Hemlighet: Välj hemligheten 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 strukturen 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 tidpunkten för distributionen.

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 som 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 Secrets lägger du till en secrets.yaml-fil under mappen templates.

Tips

Läs mer om hur du använder Kubernetes Secrets.

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

Slutligen uppdaterar du filen values.yaml med följande innehåll för att eventuellt ange standardvärden för de konfigurationsinställningar och hemligheter som refereras 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 konfiguration från App Configuration Helm-installation

Först laddar du ned konfigurationen från App Configuration till en myConfig.yaml-fil. Använd ett nyckelfilter för att bara ladda ned de nycklar som börjar med inställningarna.. Om nyckelfiltret inte är tillräckligt för att undanta nycklar Key Vault referenser kan du använda argumentet --skip-keyvault för att exkludera dem.

Tips

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 matchar Key Vault referenser 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 med försiktighet och rensa när den inte längre behövs.

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

Använd helm upgrade-argumentet -f för att skicka de två konfigurationsfilerna som du har skapat. De åsidosätter konfigurationsvärdena som definieras 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 Upgrade för att skicka literalnyckelvä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 öppna Kubernetes-instrumentpanelen. Du ser att färg- och meddelandevärdena från App Configuration har fyllts i containerns miljövariabler.

Snabbstart av lokal app

En hemlighet, lösenord, lagrar som Key Vault referens i App Configuration har också lagts 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 skapats i den här artikeln tar du bort resurs gruppen som du skapade här för att undvika avgifter.

Viktigt

Att ta bort en resursgrupp kan inte ångras. Resurs gruppen och alla resurser i den tas bort permanent. Var noga så att du inte tar bort fel resursgrupp eller resurser av misstag. Om du har skapat resurserna för den här artikeln i en resurs grupp som innehåller andra resurser som du vill behålla, tar du bort varje resurs separat från dess respektive fönster i stället för att ta bort resurs gruppen.

  1. Logga in på Azure Portaloch välj resurs grupper.
  2. I rutan Filtrera efter namn anger du namnet på din resurs grupp.
  3. I listan resultat väljer du resurs gruppens 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å resurs gruppen som ska bekräftas och välj ta bort.

Efter en liten stund tas resurs gruppen 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 App Configuration kan du fortsätta till Azure CLI-exemplen.