Integreren met Kubernetes-implementatie met Helm

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

Een App Configuration-archief maken

  1. Als u een nieuw App Configuration-archief wilt maken, moet u zich eerst aanmelden bij de Azure-portal. Selecteer in de linkerbovenhoek van de startpagina de optie Een resource maken. Voer in het vak Marketplace doorzoeken App Configuration in en selecteer Invoeren.

    Zoeken naar App Configuration

  2. Selecteer App Configuration in de zoekresultaten en selecteer vervolgens Maken.

    Selecteer Maken

  3. Voer in het deelvenster App Configuration maken de volgende instellingen in:

    Instelling Voorgestelde waarde Beschrijving
    Abonnement Uw abonnement Selecteer het Azure-abonnement dat u wilt gebruiken om App Configuration te testen. Als uw account maar één abonnement heeft, wordt dit automatisch geselecteerd en wordt de lijst Abonnement niet weergegeven.
    Resourcegroep AppConfigTestResources Selecteer of maak een resourcegroep voor de resource van het App Configuration-archief. Deze groep is handig voor het ordenen van meerdere resources die u mogelijk op een bepaald moment wilt verwijderen door resourcegroep te verwijderen. Zie Resourcegroepen gebruiken om Azure-resources te beheren voor meer informatie.
    Resourcenaam Wereldwijd unieke naam Voer een unieke resourcenaam in voor de resource van het App Configuration-archief. De naam moet een tekenreeks zijn van 5 tot 50 tekens en mag alleen cijfers, letters en - bevatten. De naam mag niet beginnen of eindigen met -.
    Locatie US - centraal Gebruik Locatie om de geografische locatie op te geven waar het app-configuratiearchief wordt gehost. Voor de beste prestaties maakt u de resource in dezelfde regio als de andere onderdelen van uw toepassing.
    Prijscategorie Gratis Selecteer de gewenste prijscategorie. Ga voor meer informatie naar de pagina met prijzen voor App Configuration.
  4. Selecteer Beoordelen en maken om de instellingen te valideren.

  5. Selecteer Maken. De implementatie kan enkele minuten duren.

  6. Als de implementatie is voltooid, gaat u naar de resource App Configuration. Selecteer Instellingen > Toegangssleutels. Noteer de verbindingsreeks van de primaire alleen-lezensleutel. U hebt de verbindingsreeks later nodig voor de configuratie van uw toepassing, zodat deze kan communiceren met het App Configuration-archief dat u hebt gemaakt.

  1. Selecteer Configuratieverkenner > Maken om de volgende sleutel-waardeparen toe te voegen:

    Sleutel Waarde
    settings.color Wit
    settings.message Gegevens van Azure App Configuration
  2. Laat Label en Inhoudstype nog even leeg.

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 de waarden in de sleutelkluis die u in de vorige stap hebt gemaakt.
    • Geheim: Selecteer het geheim genaamd 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 de 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 voor het lokaal starten van een app

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

Schermopname met het wachtwoord gemarkeerd in de sectie Data.

Resources opschonen

Als u niet door wilt gaan met de resources die in dit artikel zijn gemaakt, 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.