Criar e implantar no Serviço de Kubernetes do Azure

Azure Pipelines

Serviço de Kubernetes do Azure gerencia seu ambiente hospedado do Kubernetes, tornando mais rápido e fácil para você implantar e gerenciar aplicativos em contêineres. Esse serviço também elimina a carga de operações e manutenção contínuas provisionando, atualizando e dimensionando recursos sob demanda, sem colocar seus aplicativos offline.

Neste guia passo a passo, você aprenderá a criar um pipeline que cria e implanta seu aplicativo continuamente. Sempre que você alterar seu código em um repositório que contém um Dockerfile, as imagens serão enviada por Registro de Contêiner do Azure e os manifestos serão implantados no cluster Serviço de Kubernetes do Azure.

Pré-requisitos

Para garantir que seu projeto Azure DevOps tenha a autorização necessária para acessar sua assinatura do Azure, crie uma conexão de Azure Resource Manager serviço . A conexão de serviço é necessária quando você cria um pipeline no projeto para implantar no Serviço de Kubernetes do Azure. Caso contrário, as listas listadas para o Cluster e o Registro de Contêiner estão vazias.

Verifique se você tem o seguinte:

  • Uma conta do GitHub, na qual você pode criar um repositório. Caso não tenha uma, você pode criá-la gratuitamente.

  • Uma organização do Azure DevOps. Caso não tenha uma, você pode criá-la gratuitamente. (Uma organização do Azure DevOps é diferente da sua organização do GitHub. Você poderá dar à sua organização do DevOps e à sua organização do GitHub o mesmo nome se quiser alinhamento entre elas.)

    Se sua equipe já tiver uma, verifique se você é um administrador do projeto do Azure DevOps que deseja usar.

  • Uma capacidade de executar pipelines em agentes hospedados pela Microsoft. Você pode comprar um trabalho paralelo ou solicitar uma camada gratuita. Para solicitar uma camada gratuita, siga as instruções neste artigo. Observe que pode levar de 2 a 3 dias úteis para concedermos a camada gratuita.

  • Uma conta do Azure. Caso não tenha uma, você pode criá-la gratuitamente.

    Dica

    Se você for novo nisso, a maneira mais fácil de começar é usar o mesmo endereço de email que o proprietário da organização Azure Pipelines e da assinatura do Azure.

Obter o código

Bifurcar o seguinte repositório que contém um aplicativo de exemplo e um Dockerfile:

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Criar os recursos do Azure

Entre no Portal do Azuree selecione o Cloud Shell no canto superior direito.

Criar um registro de contêiner

# Create a resource group
az group create --name myapp-rg --location eastus

# Create a container registry
az acr create --resource-group myapp-rg --name myContainerRegistry --sku Basic

# Create a Kubernetes cluster
az aks create \
    --resource-group myapp-rg \
    --name myapp \
    --node-count 1 \
    --enable-addons monitoring \
    --generate-ssh-keys \
    --kubernetes-version 1.16.10

Entrar no Azure Pipelines

Entre no Azure Pipelines. Depois de entrar, o navegador vai para https://dev.azure.com/my-organization-name e exibe o painel do Azure DevOps.

Na organização selecionada, crie um projeto. Se você não tiver nenhum projeto em sua organização, verá uma tela Criar um projeto para começar. Caso contrário, selecione o botão Criar Projeto no canto superior direito do painel.

Criar o pipeline

Conexão e selecionar repositório

  1. Entre em sua organização Azure DevOps e acesse seu projeto.

  2. Vá para Pipelinese selecione Novo pipeline.

  3. Faça as etapas do assistente selecionando primeiro GitHub como o local do código-fonte.

  4. Você pode ser redirecionado para o GitHub para então entrar. Nesse caso, insira suas credenciais do GitHub.

  5. Quando você vir a lista de repositórios, selecione seu repositório.

  6. Você poderá ser redirecionado ao GitHub para instalar o aplicativo do Azure Pipelines. Em caso afirmado, selecione Aprovar instalação.

Quando a guia Configurar for exibida, selecione Implantar no Serviço de Kubernetes do Azure.

  1. Se for solicitado, selecione a assinatura na qual você criou o registro e o cluster.

  2. Selecione o myapp cluster.

  3. Para Namespace, selecione Existente e,em seguida, selecione padrão.

  4. Selecione o nome do registro de contêiner.

  5. Você pode deixar o nome da imagem e a porta de serviço definidas como os padrões.

  6. Marque a caixa de seleção Habilitar o Aplicativo de Revisão para Solicitações de Pull para que a configuração relacionada ao aplicativo de revisão seja incluída no pipeline gerado automaticamente pelo YAML nas etapas subsequentes.

  7. Selecione Validate and configure.

    Conforme Azure Pipelines o pipeline, ele:

    • Cria uma conexão de serviço do Registro do Docker para habilitar seu pipeline a efetuar push de imagens para o registro de contêiner.

    • Cria um ambiente e um recurso do Kubernetes dentro do ambiente. Para um cluster habilitado para RBAC, o recurso do Kubernetes criado cria implicitamente objetos ServiceAccount e RoleBinding no cluster para que o ServiceAccount criado não possa executar operações fora do namespace escolhido.

    • Gera um arquivo azure-pipelines.yml, que define seu pipeline.

    • Gera arquivos de manifesto do Kubernetes. Esses arquivos são gerados por meio da hidratação dos modelos deployment.yml e service.yml com base nas seleções feitas acima.

  8. Quando o novo pipeline for exibido, examine o YAML para ver o que ele faz. Para obter mais informações, consulte como criar seu pipeline abaixo. Quando estiver pronto, selecione Salvar e executar.

  9. A confirmação que criará o novo pipeline será exibida. Você pode ver os arquivos gerados mencionados acima. Selecione Salvar e executar.

  10. Se quiser, altere a mensagem Commit para algo como Adicionar pipeline ao nosso repositório. Quando você estiver pronto, selecione Salvar e executar para fazer commit do novo pipeline no seu repo e, em seguida, inicie a primeira sequência do novo pipeline!

Confira a executar o pipeline e seu aplicativo implantado

Conforme o pipeline é executado, observe como o estágio de build e, em seguida, o estágio de implantação, vá de azul (em execução) para verde (concluído). Você pode selecionar os estágios e os trabalhos para assistir ao pipeline em ação.

Observação

Se você estiver usando um agente hospedado pela Microsoft, deverá adicionar o intervalo de IP do agente hospedado pela Microsoft ao firewall. Obter a lista semanal de intervalos de IP do arquivo JSON semanal, que é publicado toda quarta-feira. Os novos intervalos de IP se tornam eficazes na segunda-feira seguinte. Para obter mais informações, consulte Agentes hospedados pela Microsoft. Para encontrar os intervalos de IP necessários para sua Azure DevOps, saiba como identificar os possíveis intervalos de IP para agentes hospedados pela Microsoft.

Depois que a sequência de pipelines for concluída, explore o que aconteceu e, em seguida, confira seu aplicativo implantado. No resumo do pipeline:

  1. Selecione a guia Ambientes.

  2. Selecione Exibir ambiente.

  3. Selecione a instância se seu aplicativo para o namespace em que você implantou. Se você tiver os padrões mencionados acima, ele será o aplicativo myapp no namespace padrão.

  4. Selecione a guia Serviços.

  5. Selecione e copie o endereço IP externo para a área de transferência.

  6. Abra uma nova guia ou janela do navegador e insira < o endereço IP > :8080.

Se você estiver criando nosso aplicativo de exemplo, Olá, mundo aparecerá no navegador.

Como criaremos seu pipeline

Quando você concluiu a seleção de opções e, em seguida, passou a validar e configurar o pipeline (veja acima) Azure Pipelines um pipeline para você, usando o modelo Implantar Serviço de Kubernetes do Azure aplicativo.

O estágio de build usa a tarefa do Docker para criar e por push a imagem para o Registro de Contêiner do Azure.

- stage: Build
  displayName: Build stage
  jobs:  
  - job: Build
    displayName: Build job
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)
          
    - task: PublishPipelineArtifact@1
      inputs:
        artifactName: 'manifests'
        path: 'manifests'

O trabalho de implantação usa a tarefa de manifesto do Kubernetes para criar o exigido pelos nós de cluster do Kubernetes para pull do recurso Registro de Contêiner do Azure aplicativo. Os arquivos de manifesto são usados pela tarefa de manifesto do Kubernetes para implantar no cluster do Kubernetes.

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  jobs:
  - deployment: Deploy
    displayName: Deploy job
    pool:
      vmImage: $(vmImageName)
    environment: 'azooinmyluggagepipelinesjavascriptdocker.aksnamespace'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadPipelineArtifact@2
            inputs:
              artifactName: 'manifests'
              downloadPath: '$(System.ArtifactsDirectory)/manifests'

          - task: KubernetesManifest@0
            displayName: Create imagePullSecret
            inputs:
              action: createSecret
              secretName: $(imagePullSecret)
              namespace: $(k8sNamespace)
              dockerRegistryEndpoint: $(dockerRegistryServiceConnection)
              
          - task: KubernetesManifest@0
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: deploy
              namespace: $(k8sNamespace)
              manifests: |
                $(System.ArtifactsDirectory)/manifests/deployment.yml
                $(System.ArtifactsDirectory)/manifests/service.yml
              imagePullSecrets: |
                $(imagePullSecret)
              containers: |
                $(containerRegistry)/$(imageRepository):$(tag)

Limpar recursos

Sempre que terminar de usar os recursos criados, você poderá usar o seguinte comando para excluí-los:

az group delete --name myapp-rg

Insira y quando for solicitado.

az group delete --name MC_myapp-rg_myapp_eastus

Quando solicitado, digite y.

Saiba mais

Convidamos você para saber mais sobre: