Oefening: een Helm-grafiek maken voor implementatie

Voltooid

In deze eenheid maakt u een Helm-grafiek om te implementeren in Azure Kubernetes Service (AKS) met behulp van GitHub Actions. Als u de Helm-grafiek wilt maken, voert u de volgende taken uit:

  • Controleer de Helm-installatie.
  • Maak een grafiek.
  • Configureer de grafiek.
  • Een implementatie maken.
  • Maak een leeg YAML-bestand.
  • Voeg inhoud toe aan het YAML-bestand.
  • Een service maken.
  • Maak een toegangsbeheerobject.
  • Maak een DNS-zonenaam.

Controleer de Helm-installatie en werk de opslagplaats bij

De Helm CLI is al geïnstalleerd in Azure Cloud Shell. Als u Cloud Shell nog niet hebt geopend, meldt u zich aan bij Cloud Shell en controleert u of Bash is ingesteld als de Cloud Shell-terminal.

  1. Voer helm version deze opdracht uit om ervoor te zorgen dat de weergegeven Helm-versie groter is dan 3.

  2. Schakel over naar uw geforkte opslagplaats voor deze module door deze uit te voeren cd mslearn-aks-deployment-pipeline-github-actions.

  3. Voer uit git pull origin main om uw wijzigingen op te halen uit eerdere eenheden.

Een Helm-grafiek maken

Genereer een Standaard Helm-sjabloon in de kubernetes-map van uw opslagplaats.

  1. Schakel in Cloud Shell over naar de kubernetes-map :

    cd kubernetes
    
  2. Hiermee helm create maakt u een nieuwe map met de naam contoso-website in de kubernetes-directory :

    helm create contoso-website
    
  3. Schakel over naar de nieuwe map met cd.

    cd contoso-website
    
  4. Verwijder de mappen grafieken en sjablonen in deze map.

    rm -r charts templates
    
  5. Maak een nieuwe lege map met sjablonen .

    mkdir templates
    
  6. Als u workloads wilt bouwen in uw lege grafiek, maakt u een nieuwe set YAML-bestanden door de bestaande bestanden in kubernetes te verplaatsen naar de nieuwe map met sjablonen :

    mv ../*.yaml ./templates
    

U hebt nu een nieuwe Helm-grafiek. Configureer vervolgens de grafiek.

De grafiek configureren

  1. Voer deze opdracht uit cd ../.. om over te schakelen naar de hoofdmap van uw opslagplaats.

  2. Voer deze opdracht uit code . om de code-editor in de huidige map te openen.

  3. Vouw in het linkermenu de map kubernetes/contoso-website uit en open het bestand Chart.yaml . Chart.yaml is het bestand dat de grafiek een naam krijgt en waar Helm zoekt naar informatie over de grafiek.

  4. Verwijder alle inhoud van het bestand, met uitzondering van de eerste drie regels en de grafiekversie, en bewerk de beschrijving zodat het bestand er als volgt uitziet:

    apiVersion: v2
    name: contoso-website
    description: Chart for the Contoso company website
    version: 0.1.0
    
  5. Sla het bestand op door de rechterbovenhoek van de editorwerkbalk te selecteren en vervolgens Opslaan te selecteren of door op Ctrl+S te drukken.

Een implementatie maken

Sjablonen voor deze implementatie toevoegen.

  1. Open in het linkermenu het bestand deployment.yaml in de map kubernetes/templates .

  2. Voeg in de hoofdsectie metadata een nieuwe sleutel toe die wordt aangeroepen namespace met de waarde {{ default "staging" .Release.Namespace }}. De metadata sectie moet er als volgt uitzien:

    metadata:
      name: contoso-website
      namespace: {{ default "staging" .Release.Namespace }}
    

    De werkstroom implementeert deze resource standaard in de staging naamruimte, maar als de helm install opdracht een Namespace optie heeft, gebruikt de werkstroom in plaats daarvan die naamruimte.

  3. Vervang onder de template/containersspec/sectie door !IMAGE! de latest of tag versies van uw AKS-cluster.

    Het is raadzaam om de naam imagevan de registryafbeelding op te splitsen en tag delen van de naam van de installatiekopie om er gemakkelijker mee te werken. Voeg drie nieuwe sjabloonvariabelen toe die gebruikmaken van de waarden van Values.image.registry, Values.image.nameen Values.image.tag.

    - image: {{ .Values.image.registry }}.azurecr.io/{{ .Values.image.name }}:{{ default "latest" .Values.image.tag }}
    

    Uw bestand deployment.yaml moet eruitzien als in het volgende voorbeeld:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
      namespace: {{ default "staging" .Release.Namespace }}
    spec:
      selector:
        matchLabels:
          app: contoso-website
      template:
        metadata:
          labels:
            app: contoso-website
        spec:
          containers:
            - image: {{ .Values.image.registry }}.azurecr.io/{{ .Values.image.name }}:{{ default "latest" .Values.image.tag }}
              name: contoso-website
              resources:
                requests:
                  cpu: 100m
                  memory: 128Mi
                limits:
                  cpu: 250m
                  memory: 256Mi
              ports:
                - containerPort: 80
                  name: http
    
  4. Sla het bestand op.

Inhoud toevoegen aan het bestand values.yaml

Eerder hebt u dit gebruikt {{ .Release.Namespace }}, dus Release een variabel bereik. Elk variabele bereik heeft verschillende standaardwaarden en -variabelen. Het bestand values.yaml is een ander variabele bereik. Helm maakt gebruik van het bestand values.yaml om alle sjabloonwaarden op te halen die beginnen met {{ .Values }}.

Dit bestand moet dezelfde structuur hebben als het bestand dat u gebruikt om de variabelen aan te roepen. Bekijk het bewerkte bestand deployment.yaml om de structuur te bekijken. U ziet dat u hebt gebruikt .Values.image.registry, .Values.image.nameen .Values.image.tag in het bestand deployment.yaml .

  1. Open in de hoofdmap van de map contoso-website het bestand values.yaml .

  2. Verwijder alle inhoud in het bestand, zodat u een leeg YAML-bestand hebt.

  3. Voeg de volgende inhoud toe aan het lege bestand, waarbij u de tijdelijke aanduiding vervangt door de <ACR-NAME> naam van uw Azure Container Registry.

    image:
      registry: <ACR-NAME>
      name: contoso-website
      tag: latest
    

    Deze waarden zijn de standaardwaarde als u geen andere waarde als parameter doorgeeft met behulp van de --set optie van de Helm-opdracht.

  4. Sla het bestand op.

Een service maken

  1. Open het bestand service.yaml in de map sjablonen .

  2. Voeg in de metadata sectie van het bestand een nieuwe sleutel toe met de naam namespace die dezelfde waarde gebruikt als in het bestand deployment.yaml .

       namespace: {{ default "staging" .Release.Namespace }}
    

    Het bestand service.yaml moet eruitzien als in het volgende voorbeeld:

    apiVersion: v1
    kind: Service
    metadata:
      name: contoso-website
      namespace: {{ default "staging" .Release.Namespace }}
    spec:
      ports:
        - port: 80
          protocol: TCP
          targetPort: http
          name: http
      selector:
        app: contoso-website
      type: ClusterIP
    
  3. Sla het bestand op.

Een toegangsbeheerobject maken

  1. Open het bestand ingress.yaml .

  2. Voeg in de metadata sectie van het bestand opnieuw de namespace waarde toe die u hebt gebruikt in het bestand deployment.yaml .

  3. Ga naar de sleutel host. U maakt afzonderlijke hosts voor faserings- en productie-implementaties, zodat gebruikers geen toegang hebben tot de staging naamruimte met behulp van productie-URL's. Voeg de naamruimte samen in de hostnaam. De invoegtoepassing voor het routeren van HTTP-toepassingen in de AKS-cluster verwerkt naamomzetting.

           - host: contoso-{{ default "staging" .Release.Namespace }}.!DNS!
    
  4. Vervang door !DNS! een nieuwe sjabloonvariabele voor de naam van uw DNS-zone.

           - host: contoso-{{ default "staging" .Release.Namespace }}.{{ .Values.dns.name }}
    

    Het uiteindelijke ingress.yaml-bestand moet eruitzien als in het volgende voorbeeld:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: contoso-website
      namespace: {{ default "staging" .Release.Namespace }}
      annotations:
        kubernetes.io/ingress.class: addon-http-application-routing
    spec:
      rules:
        - host: contoso-{{ default "staging" .Release.Namespace }}.{{ .Values.dns.name }}
          http:
            paths:
              - backend:
                  service:
                    name: contoso-website
                    port:
                      name: http
                path: /
                pathType: Prefix
    
  5. Sla het bestand op.

Een dns-zonenaamwaarde toevoegen

  1. Open het bestand values.yaml en voeg een dns.name sleutel toe na de image sleutel. Vervang <ACR-NAME> door de naam van uw containerregister en <DNS-NAME> door de DNS-zonenaam van uw AKS uit de uitvoer van het installatiescript. Uw bestand zou er als het volgende voorbeeld moeten uitzien:

    image:
      registry: <ACR-NAME>
      name: contoso-website
      tag: latest
    
    dns:
      name: <DNS-NAME>
    

    Als u de naam van uw DNS-zone niet hebt uit de uitvoer van het oorspronkelijke installatiescript, voert u de volgende Azure CLI-query uit in een ander Cloud Shell-venster om deze op te halen, waarbij u de tijdelijke aanduiding vervangt door de <resource-group-name> naam van uw resourcegroep.

    az aks show -g <resource-group-name> -n contoso-website -o tsv --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName
    
  2. Sla het bestand op.

Uw wijzigingen pushen

Sluit de Cloud Shell-editor door de rechterbovenhoek van de editorwerkbalk te selecteren en vervolgens Editor sluiten te selecteren.

Als u alle wijzigingen naar uw fork wilt pushen, voert u de volgende opdrachten uit in Cloud Shell in volgorde:

git add .
git commit -m "Add helm"
git push -u origin main

Geef de pat op die u eerder hebt gemaakt als het wachtwoord wanneer u hierom wordt gevraagd.

Ga verder met de volgende eenheid om uw Helm-grafiek en -toepassing te implementeren in AKS met behulp van GitHub Actions.