Share via


Integreren met Kubernetes-implementatie met Helm

Toepassingen die worden gehost in Kubernetes, hebben toegang tot gegevens in App Configuration met behulp van de Bibliotheek van de App Configuration-provider. De App Configuration-provider heeft ingebouwde mogelijkheden voor caching en vernieuwen, zodat toepassingen dynamische configuratie kunnen hebben zonder opnieuw te implementeren. Als u uw toepassing liever niet bijwerkt, ziet u in deze zelfstudie hoe u gegevens van App Configuration naar uw Kubernetes kunt overbrengen met behulp van Helm via implementatie. Op deze manier kan uw toepassing toegang blijven krijgen tot de configuratie vanuit Kubernetes-variabelen en -geheimen. U voert de Helm-upgrade uit wanneer u wilt dat uw toepassing nieuwe configuratiewijzigingen ophaalt.

Tip

Zie opties voor workloads die worden gehost in Kubernetes voor toegang tot Azure-app-configuratie.

Helm biedt een manier om toepassingen die in Kubernetes worden uitgevoerd te definiëren, installeren en upgraden. Een Helm-grafiek bevat de informatie die nodig is om een exemplaar van een Kubernetes-toepassing te maken. De configuratie wordt buiten de grafiek zelf opgeslagen, in een bestand genaamd values.yaml.

Tijdens het releaseproces voegt Helm de grafiek samen met de juiste configuratie om de toepassing uit te voeren. Er kan bijvoorbeeld naar variabelen die in values.yaml zijn gedefinieerd, worden verwezen met omgevingsvariabelen in de actieve containers. Helm ondersteunt ook het maken van Kubernetes-geheimen, die als gegevensvolumes kunnen worden gekoppeld of als omgevingsvariabelen kunnen worden weergegeven.

U kunt de waarden die in values.yaml zijn opgeslagen, overschrijven door aanvullende YAML-gebaseerde configuratiebestanden op de opdrachtregel op te geven wanneer Helm wordt uitgevoerd. Azure App Configuration ondersteunt het exporteren van configuratiewaarden naar YAML-bestanden. Door deze exportmogelijkheid in uw implementatie te integreren, kunnen uw Kubernetes-toepassingen configuratiewaarden benutten die in App Configuration zijn opgeslagen.

In deze zelfstudie leert u het volgende:

  • Gebruik waarden uit App Configuration wanneer u een toepassing in Kubernetes implementeert met Helm.
  • Maak een Kubernetes-geheim op basis van een sleutelkluisverwijzing in App Configuration.

In deze zelfstudie wordt ervan uitgegaan dat u basisbegrip hebt van het beheren van Kubernetes met Helm. Meer informatie over het installeren van toepassingen met Helm in Azure Kubernetes Service.

Vereisten

Sleutelwaarden toevoegen

Voeg de volgende sleutelwaarden toe aan het App Configuration-archief en laat label en inhoudstype ongewijzigd met de standaardwaarden. Ga naar Een sleutelwaarde maken voor meer informatie over het toevoegen van sleutelwaarden aan een archief met behulp van Azure Portal of de CLI.

Sleutel Weergegeven als
settings.color Witte
settings.message Gegevens uit Azure-app-configuratie

Een sleutelkluisverwijzing toevoegen aan App Configuration

  1. Meld u aan bij de Azure-portal en voeg een geheim aan Sleutelkluis toe met de naam Wachtwoord en de waarde mijnwachtwoord.

  2. Selecteer het App Configuration-archiefexemplaar dat u in de vorige sectie hebt gemaakt.

  3. Selecteer Configuratieverkenner.

  4. Selecteer + Maken>Sleutelkluisverwijzing en geef de volgende waarden op:

    • Sleutel: selecteer secrets.password.
    • Label: laat deze waarde leeg.
    • Abonnement, resourcegroep en sleutelkluis: voer de waarden in die overeenkomen met die in de sleutelkluis die u in de vorige stap hebt gemaakt.
    • Geheim: Selecteer het geheim met de naam Wachtwoord dat u in de vorige sectie hebt gemaakt.

Helm-grafiek maken

Maak eerst een Helm-voorbeeldgrafiek met de volgende opdracht:

helm create mychart

Helm maakt een nieuwe directory genaamd ‘mychart’ met de structuur die hieronder wordt weergegeven.

Tip

Volg deze grafiekhandleiding voor meer informatie.

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

Werk vervolgens de sectie spec:template:spec:containers van het bestand deployment.yaml bij. Het volgende fragment voegt twee omgevingsvariabelen aan de container toe. U zult de waarden ervan dynamisch instellen tijdens de implementatie.

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

Na de update moet het volledige deployment.yaml-bestand eruitzien zoals hieronder.

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

Als u gevoelige gegevens als Kubernetes-geheimen wilt opslaan, voegt u een secrets.yaml-bestand toe onder de map met sjablonen.

Tip

Meer informatie over het gebruiken van Kubernetes-geheimen.

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

Tot slot werkt u het bestand values.yaml met de volgende inhoud bij om desgewenst standaardwaarden van de configuratie-instellingen en geheimen te bieden waarnaar wordt verwezen in de bestanden deployment.yaml en secrets.yaml. De daadwerkelijke waarden ervan worden overschreven door configuratie die uit App Configuration wordt opgehaald.

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

Configuratie uit App Configuration doorgeven aan Helm-installatie

Download de configuratie uit App Configuration eerst naar een myConfig.yaml-bestand. Gebruik een sleutelfilter om alleen de sleutels te downloaden die met settings. beginnen. Als het sleutelfilter in uw geval niet voldoende is om sleutels uit te sluiten van sleutelkluisverwijzingen, kunt u het argument --skip-keyvault gebruiken om ze uit te sluiten.

Tip

Meer informatie over de exportopdracht.

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

Download vervolgens geheimen naar een bestand genaamd mySecrets.yaml. Het opdrachtregelargument --resolve-keyvault lost de sleutelkluisverwijzingen op door de daadwerkelijke waarden op te halen in Sleutelkluis. U moet deze opdracht uitvoeren met aanmeldingsgegevens die toegangsmachtigingen voor de bijbehorende sleutelkluis hebben.

Waarschuwing

Aangezien dit bestand gevoelige gegevens bevat, moet u het veilig opslaan en moet u het verwijderen wanneer u het niet meer nodig hebt.

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

Gebruik het argument -f van de Helm-upgrade om de twee configuratiebestanden door te geven die u hebt gemaakt. Ze overschrijven de configuratiewaarden die in values.yaml zijn gedefinieerd met de waarden die uit App Configuration zijn geëxporteerd.

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

U kunt ook het argument --set voor helm-upgrade gebruiken om letterlijke sleutelwaarden door te geven. Het gebruik van het argument --set is een goede manier om permanente gevoelige gegevens op schijf te voorkomen.

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

Verifieer dat configuraties en geheimen succesvol zijn ingesteld door het Kubernetes-dashboard te openen. U ziet dat de waarden voor color en message uit App Configuration zijn ingevuld in de omgevingsvariabelen van de container.

Quickstart app launch local

Eén geheim, password, dat als sleutelkluisverwijzing in App Configuration is opgeslagen, is ook toegevoegd aan Kubernetes-geheimen.

Screenshot that highlights the password in the Data section.

Resources opschonen

Als u de resources die in dit artikel zijn gemaakt niet wilt blijven gebruiken, verwijdert u de resourcegroep die u hier hebt gemaakt om kosten te voorkomen.

Belangrijk

Het verwijderen van een resourcegroep kan niet ongedaan worden gemaakt. De resourcegroep en alle resources daarin worden permanent verwijderd. Zorg ervoor dat u niet per ongeluk de verkeerde resourcegroep of resources verwijdert. Als u de resources voor dit artikel in een resourcegroep hebt gemaakt die andere resources bevat die u wilt behouden, moet u elke resource afzonderlijk verwijderen uit het deelvenster in plaats van dat u de resourcegroep verwijdert.

  1. Meld u aan bij de Azure-portal en selecteer Resourcegroepen.
  2. Voer de naam van de resourcegroep in het vak Filteren op naam in.
  3. Selecteer in de resultatenlijst de resourcegroepnaam om een overzicht te bekijken.
  4. Selecteer Resourcegroep verwijderen.
  5. U wordt gevraagd om het verwijderen van de resourcegroep te bevestigen. Voer de naam van de resourcegroep in ter bevestiging en selecteer Verwijderen.

Na enkele ogenblikken worden de resourcegroep en alle bijbehorende resources verwijderd.

Volgende stappen

In deze zelfstudie hebt u Azure App Configuration-gegevens geëxporteerd die moeten worden gebruikt in een Kubernetes-implementatie met Helm. Voor meer informatie over het gebruik van App Configuration gaat u verder naar de Azure CLI-voorbeelden.