GitHub acties voor het implementeren van de Kubernetes-serviceGitHub Actions for deploying to Kubernetes service

Github-acties bieden u de flexibiliteit om een geautomatiseerde werk stroom voor de levens cyclus van software ontwikkeling te bouwen.GitHub Actions gives you the flexibility to build an automated software development lifecycle workflow. U kunt meerdere Kubernetes-acties gebruiken om te implementeren in containers van Azure Container Registry naar Azure Kubernetes service met GitHub-acties.You can use multiple Kubernetes actions to deploy to containers from Azure Container Registry to Azure Kubernetes Service with GitHub Actions.

VereistenPrerequisites

Overzicht van werkstroom bestandWorkflow file overview

Een werkstroom wordt gedefinieerd door een YAML-bestand (.yml) in het pad /.github/workflows/ in uw opslagplaats.A workflow is defined by a YAML (.yml) file in the /.github/workflows/ path in your repository. Deze definitie bevat de verschillende stappen en parameters die deel uitmaken van de werkstroom.This definition contains the various steps and parameters that make up the workflow.

Voor een werk stroom gericht AKS heeft het bestand drie secties:For a workflow targeting AKS, the file has three sections:

SectieSection TakenTasks
VerificatieAuthentication Aanmelden bij een persoonlijk container register (ACR)Login to a private container registry (ACR)
OntwikkelenBuild De container installatie kopie bouwen & pushenBuild & push the container image
ImplementerenDeploy 1. Stel het doel-AKS-cluster in1. Set the target AKS cluster
2. Maak een algemeen/docker-register geheim in het Kubernetes-cluster2. Create a generic/docker-registry secret in Kubernetes cluster
3. implementeren naar het Kubernetes-cluster3. Deploy to the Kubernetes cluster

Een service-principal makenCreate a service principal

U kunt een Service-Principal maken met behulp van de opdracht AZ AD SP create-for-RBAC in de Azure cli.You can create a service principal by using the az ad sp create-for-rbac command in the Azure CLI. U kunt deze opdracht uitvoeren met behulp van Azure Cloud shell in het Azure portal of door de knop try it te selecteren.You can run this command using Azure Cloud Shell in the Azure portal or by selecting the Try it button.

az ad sp create-for-rbac --name "myApp" --role contributor --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> --sdk-auth

Vervang in de bovenstaande opdracht de tijdelijke aanduidingen door de abonnements-ID en de resource groep.In the above command, replace the placeholders with your subscription ID, and resource group. De uitvoer is de roltoewijzings referenties die toegang bieden tot uw resource.The output is the role assignment credentials that provide access to your resource. De opdracht moet een JSON-object uitvoeren dat er ongeveer als volgt uitziet.The command should output a JSON object similar to this.

  {
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    (...)
  }

Kopieer dit JSON-object, dat u kunt gebruiken om te verifiëren vanuit GitHub.Copy this JSON object, which you can use to authenticate from GitHub.

De GitHub-geheimen configurerenConfigure the GitHub secrets

Volg de stappen voor het configureren van de geheimen:Follow the steps to configure the secrets:

  1. Blader in githubnaar uw opslag plaats, selecteer instellingen > geheimen > een nieuw geheim toe te voegen.In GitHub, browse to your repository, select Settings > Secrets > Add a new secret.

    Scherm afbeelding toont de koppeling een nieuwe geheime verbinding toevoegen voor een opslag plaats.

  2. Plak de inhoud van de bovenstaande az cli opdracht als de waarde van de geheime variabele.Paste the contents of the above az cli command as the value of secret variable. Bijvoorbeeld AZURE_CREDENTIALS.For example, AZURE_CREDENTIALS.

  3. U kunt ook de volgende extra geheimen voor de container register referenties definiëren en instellen in de aanmeldings actie voor docker.Similarly, define the following additional secrets for the container registry credentials and set them in Docker login action.

    • REGISTRY_USERNAMEREGISTRY_USERNAME
    • REGISTRY_PASSWORDREGISTRY_PASSWORD
  4. De geheimen worden weer gegeven, zoals hieronder is gedefinieerd.You will see the secrets as shown below once defined.

    Scherm opname toont de bestaande geheimen voor een opslag plaats.

Een container installatie kopie bouwen en implementeren in azure Kubernetes service-clusterBuild a container image and deploy to Azure Kubernetes Service cluster

Het bouwen en pushen van de container installatie kopieën wordt uitgevoerd met behulp van Azure/docker-login@v1 actie.The build and push of the container images is done using Azure/docker-login@v1 action.

env:
  REGISTRY_NAME: {registry-name}
  CLUSTER_NAME: {cluster-name}
  CLUSTER_RESOURCE_GROUP: {resource-group-name}
  NAMESPACE: {namespace-name}
  APP_NAME: {app-name}
  
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@main
    
    # Connect to Azure Container registry (ACR)
    - uses: azure/docker-login@v1
      with:
        login-server: ${{ env.REGISTRY_NAME }}.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }} 
        password: ${{ secrets.REGISTRY_PASSWORD }}
    
    # Container build and push to a Azure Container registry (ACR)
    - run: |
        docker build . -t ${{ env.REGISTRY_NAME }}.azurecr.io/${{ env.APP_NAME }}:${{ github.sha }}
        docker push ${{ env.REGISTRY_NAME }}.azurecr.io/${{ env.APP_NAME }}:${{ github.sha }}

Implementeren naar Azure Kubernetes service-clusterDeploy to Azure Kubernetes Service cluster

Als u een container installatie kopie wilt implementeren in AKS, moet u de Azure/k8s-deploy@v1 actie gebruiken.To deploy a container image to AKS, you will need to use the Azure/k8s-deploy@v1 action. Deze actie heeft vijf para meters:This action has five parameters:

ParameterParameter UitlegExplanation
naam ruimtenamespace Beschrijving Kies de doel-Kubernetes naam ruimte.(Optional) Choose the target Kubernetes namespace. Als de naam ruimte niet wordt gegeven, worden de opdrachten uitgevoerd in de standaard naam ruimteIf the namespace is not provided, the commands will run in the default namespace
manifestenmanifests Lang Pad naar de manifest bestanden die worden gebruikt voor implementatie(Required) Path to the manifest files, that will be used for deployment
installatie kopieënimages Beschrijving Volledig gekwalificeerde resource-URL van de afbeelding (en) die moet worden gebruikt voor vervangingen in de manifest bestanden(Optional) Fully qualified resource URL of the image(s) to be used for substitutions on the manifest files
imagepullsecretsimagepullsecrets Beschrijving Naam van een docker-REGI ster dat al in het cluster is ingesteld.(Optional) Name of a docker-registry secret that has already been set up within the cluster. Elk van deze geheime namen wordt toegevoegd onder het veld imagePullSecrets voor de werk belastingen die zijn gevonden in de invoer manifest bestandenEach of these secret names is added under imagePullSecrets field for the workloads found in the input manifest files
kubectl-versiekubectl-version Beschrijving Hiermee wordt een specifieke versie van kubectl binary geïnstalleerd(Optional) Installs a specific version of kubectl binary

Voordat u kunt implementeren naar AKS, moet u de doel-Kubernetes-naam ruimte instellen en een installatie kopie pull Secret maken.Before you can deploy to AKS, you'll need to set target Kubernetes namespace and create an image pull secret. Zie pull-installatie kopieën van een Azure container Registry naar een Kubernetes-clustervoor meer informatie over hoe pull-installatie kopieën werken.See Pull images from an Azure container registry to a Kubernetes cluster, to learn more about how pulling images works.

  # Create namespace if doesn't exist
  - run: |
      kubectl create namespace ${{ env.NAMESPACE }} --dry-run -o json | kubectl apply -f -
  
  # Create image pull secret for ACR
  - uses: azure/k8s-create-secret@v1
    with:
      container-registry-url: ${{ env.REGISTRY_NAME }}.azurecr.io
      container-registry-username: ${{ secrets.REGISTRY_USERNAME }}
      container-registry-password: ${{ secrets.REGISTRY_PASSWORD }}
      secret-name: ${{ env.SECRET }}
      namespace: ${{ env.NAMESPACE }}
      force: true

Voltooi uw implementatie met de k8s-deploy actie.Complete your deployment with the k8s-deploy action. Vervang de omgevings variabelen door de waarden voor uw toepassing.Replace the environment variables with values for your application.


on: [push]

# Environment variables available to all jobs and steps in this workflow
env:
  REGISTRY_NAME: {registry-name}
  CLUSTER_NAME: {cluster-name}
  CLUSTER_RESOURCE_GROUP: {resource-group-name}
  NAMESPACE: {namespace-name}
  SECRET: {secret-name}
  APP_NAME: {app-name}
  
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@main
    
    # Connect to Azure Container registry (ACR)
    - uses: azure/docker-login@v1
      with:
        login-server: ${{ env.REGISTRY_NAME }}.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }} 
        password: ${{ secrets.REGISTRY_PASSWORD }}
    
    # Container build and push to a Azure Container registry (ACR)
    - run: |
        docker build . -t ${{ env.REGISTRY_NAME }}.azurecr.io/${{ env.APP_NAME }}:${{ github.sha }}
        docker push ${{ env.REGISTRY_NAME }}.azurecr.io/${{ env.APP_NAME }}:${{ github.sha }}
    
    # Set the target Azure Kubernetes Service (AKS) cluster. 
    - uses: azure/aks-set-context@v1
      with:
        creds: '${{ secrets.AZURE_CREDENTIALS }}'
        cluster-name: ${{ env.CLUSTER_NAME }}
        resource-group: ${{ env.CLUSTER_RESOURCE_GROUP }}
    
    # Create namespace if doesn't exist
    - run: |
        kubectl create namespace ${{ env.NAMESPACE }} --dry-run -o json | kubectl apply -f -
    
    # Create image pull secret for ACR
    - uses: azure/k8s-create-secret@v1
      with:
        container-registry-url: ${{ env.REGISTRY_NAME }}.azurecr.io
        container-registry-username: ${{ secrets.REGISTRY_USERNAME }}
        container-registry-password: ${{ secrets.REGISTRY_PASSWORD }}
        secret-name: ${{ env.SECRET }}
        namespace: ${{ env.NAMESPACE }}
        force: true
    
    # Deploy app to AKS
    - uses: azure/k8s-deploy@v1
      with:
        manifests: |
          manifests/deployment.yml
          manifests/service.yml
        images: |
          ${{ env.REGISTRY_NAME }}.azurecr.io/${{ env.APP_NAME }}:${{ github.sha }}
        imagepullsecrets: |
          ${{ env.SECRET }}
        namespace: ${{ env.NAMESPACE }}

Resources opschonenClean up resources

Wanneer uw Kubernetes-cluster, container register en opslag plaats niet meer nodig zijn, moet u de resources opschonen die u hebt geïmplementeerd door de resource groep en uw GitHub-opslag plaats te verwijderen.When your Kubernetes cluster, container registry, and repository are no longer needed, clean up the resources you deployed by deleting the resource group and your GitHub repository.

Volgende stappenNext steps

Meer Kubernetes GitHub-actiesMore Kubernetes GitHub Actions

  • Installatie programma voor het Kubectl-hulp programma ( azure/setup-kubectl ): installeert een specifieke versie van Kubectl op de loper.Kubectl tool installer (azure/setup-kubectl): Installs a specific version of kubectl on the runner.
  • Kubernetes set context ( azure/k8s-set-context ): Stel de cluster context van het doel Kubernetes in dat door andere acties wordt gebruikt, of voer een kubectl-opdracht uit.Kubernetes set context (azure/k8s-set-context): Set the target Kubernetes cluster context which will be used by other actions or run any kubectl commands.
  • AKS set context ( azure/aks-set-context ): Stel de doel context van de Azure Kubernetes-service cluster in.AKS set context (azure/aks-set-context): Set the target Azure Kubernetes Service cluster context.
  • Kubernetes maken geheim ( azure/k8s-create-secret ): Maak een algemeen geheim of docker-REGI ster in het Kubernetes-cluster.Kubernetes create secret (azure/k8s-create-secret): Create a generic secret or docker-registry secret in the Kubernetes cluster.
  • Kubernetes Deploy ( azure/k8s-deploy ): maken en implementeer manifesten op Kubernetes-clusters.Kubernetes deploy (azure/k8s-deploy): Bake and deploy manifests to Kubernetes clusters.
  • Setup-helm ( azure/setup-helm ): Installeer een specifieke versie van helm binary op de loper.Setup Helm (azure/setup-helm): Install a specific version of Helm binary on the runner.
  • Kubernetes maken ( azure/k8s-bake ): maken-manifest bestand dat moet worden gebruikt voor implementaties met behulp van helm2, kustomize of kompose.Kubernetes bake (azure/k8s-bake): Bake manifest file to be used for deployments using helm2, kustomize or kompose.
  • Kubernetes pluis ( azure/k8s-lint ): Valideer/pluis uw manifest bestanden.Kubernetes lint (azure/k8s-lint): Validate/lint your manifest files.