Tutorial: Implantar no Amazon EKS com o CodePipeline
Este tutorial ajuda você a criar uma ação de implantação no CodePipeline que implante o código em um cluster configurado por você no Amazon EKS.
A ação do EKS dá suporte a clusters do EKS públicos e privados. Os clusters privados são do tipo recomendado pelo EKS. No entanto, ambos os tipos são compatíveis.
nota
Como parte da criação de um pipeline no console, um bucket de artefatos do S3 será usado pelo CodePipeline para artefatos. (Este bucket não é o mesmo utilizado para uma ação de origem do S3.) Se o bucket de artefatos do S3 estiver em uma conta diferente da conta do pipeline, garanta que o bucket de artefatos do S3 seja de propriedade de Contas da AWS seguras e confiáveis.
nota
Essa ação usa a computação do CodeBuild gerenciada pelo CodePipeline para executar comandos em um ambiente de compilação. A execução da ação Comandos incorrerá em cobranças separadas no AWS CodeBuild.
nota
A ação de implantação EKS só está disponível para pipelines do tipo V2.
Pré-requisitos
Para você usar este tutorial para criar seu pipeline de CD, alguns recursos precisam estar em operação. Veja aqui estão os itens que você precisa para começar:
nota
Todos esses recursos devem ser criados na mesma região da AWS.
-
Um repositório de controle de origem (este tutorial usa o GitHub) no qual você adicionará um arquivo
deployment.yamlde amostra. -
Você deve usar um perfil de serviço do CodePipeline existente que atualizará com as permissões da ação usando Etapa 3: Atualizar a política do perfil de serviço do CodePipeline no IAM abaixo. As permissões necessárias se baseiam no tipo de cluster criado por você. Para obter mais informações, consulte Permissões de política de perfil de serviço.
-
Uma imagem de trabalho e uma tag de repositório enviadas por push por você para o ECR ou o repositório de imagens.
Assim que você atender a esses pré-requisitos, poderá continuar com o tutorial e criar seu pipeline de CD.
Etapa 1: (Opcional) Criar um cluster no Amazon EKS
Você pode optar por criar um cluster do EKS com um endpoint público ou privado.
Nas etapas a seguir, você cria um cluster público ou privado no EKS. Esta etapa será opcional se você já tiver criado o cluster.
Criar um cluster público no Amazon EKS
Nesta etapa, você cria um cluster no EKS.
Criar um cluster público
-
Abra o console do EKS e escolha Criar cluster.
-
Em Nome, nomeie o cluster. Escolha Próximo.
-
Escolha Create (Criar).
Criar um cluster privado no Amazon EKS
Se você optar por criar um cluster com um endpoint privado, não se esqueça de conectar apenas as sub-redes privadas e verificar se elas têm conexão com a Internet.
Siga as próximas cinco sub-etapas para criar um cluster com um endpoint privado.
Criar uma VPC no console
-
Abra o console da VPC e escolha Criar VPC.
-
Em Configurações da VPC, escolha VPC e mais.
-
Opte por criar uma sub-rede pública e 4 privadas. Escolha Criar VPC.
-
Na página de sub-redes, escolha Privada.
Determinar as sub-redes privadas na VPC
-
Navegue até a VPC e escolha a ID da VPC para abrir a página de detalhes da VPC.
-
Na página Detalhes da VPC, escolha a guia Mapa de recursos.
-
Consulte o diagrama e anote as sub-redes privadas. As sub-redes são exibidas com rótulos para indicar o status público ou privado, e cada sub-rede é mapeada para uma tabela de rotas.
Um cluster privado terá todas as sub-redes privadas.
-
Crie uma sub-rede pública para hospedar o gateway NAT. Só é possível anexar um gateway da Internet a uma VPC de cada vez.
Criar um gateway NAT em uma sub-rede pública
-
Na sub-rede pública, crie um gateway NAT. Navegue até o console da VPC e escolha Gateways da Internet. Escolha Criar gateway da Internet.
-
Em Nome, digite um nome para o gateway da internet. Escolha Criar gateway da Internet.
Atualize a tabela de rotas da sub-rede privada a fim de direcionar o tráfego para o gateway NAT.
Adicionar o gateway NAT às tabelas de rotas das sub-redes privadas
-
Navegue até o console da VPC e escolha Sub-redes.
-
Para cada sub-rede privada, escolha-a e, em seguida, escolha a tabela de rotas dessa sub-rede na página de detalhes. Escolha Editar tabela de rotas.
-
Atualize a tabela de rotas da sub-rede privada a fim de direcionar o tráfego de internet para o gateway NAT. Selecione Adicionar rota. Escolha o Gateway NAT dentre as opções a serem adicionadas. Escolha o gateway da internet criado por você.
-
Para a sub-rede pública, crie a tabela de rotas personalizada. Verifique se a lista de controle de acesso (ACL) da rede da sub-rede pública permite o tráfego de entrada vindo da sub-rede privada.
-
Escolha Salvar alterações.
Nesta etapa, você cria um cluster no EKS.
Criar um cluster privado
-
Abra o console do EKS e escolha Criar cluster.
-
Em Nome, nomeie o cluster. Escolha Próximo.
-
Especifique a VPC e as outras informações de configuração. Escolha Criar.
O cluster do EKS pode ser um cluster público ou privado. Esta etapa é para clusters que tenham APENAS um endpoint privado. Verifique se o cluster é privado.
Etapa 2: Configurar o cluster privado no Amazon EKS
Esta etapa só será aplicável se você tiver criado um cluster privado. Esta etapa é para clusters que tenham APENAS um endpoint privado.
Configure seu cluster
-
Só anexe sub-redes privadas no cluster do EKS na guia Redes. Anexe as sub-redes privadas capturadas na seção Determinar as sub-redes privadas na VPC em Etapa 1: (Opcional) Criar um cluster no Amazon EKS.
-
Verifique se as sub-redes privadas têm acesso à Internet, pois o CodePipeline armazena e recupera artefatos do bucket de artefatos do S3 para o pipeline.
Etapa 3: Atualizar a política do perfil de serviço do CodePipeline no IAM
Nesta etapa, você atualizará um perfil de serviço existente do CodePipeline, como cp-service-role, com permissões exigidas pelo CodePipeline para se conectar ao cluster. Se você não tiver uma função existente, crie uma nova.
Atualize o perfil de serviço do CodePipeline com as etapas a seguir.
Para atualizar a política do perfil de serviço do CodePipeline
-
Abra o console do IAM em https://console.aws.amazon.com/iam/.
-
No painel do console, escolha Roles (Funções).
-
Consulte o perfil de serviço do CodePipeline, como
cp-service-role. -
Adicione uma nova política em linha.
-
No Editor de políticas, insira a opção a seguir.
-
Para um cluster público, adicione as permissões a seguir.
-
Para um cluster privado, adicione as permissões a seguir. Os clusters privados exigirão permissões adicionais para a VPC, se aplicável.
-
-
Escolha Atualizar política.
Etapa 4: Criar uma entrada de acesso para o perfil de serviço do CodePipeline
Nesta etapa, você cria uma entrada de acesso no cluster que adicionará o perfil de serviço do CodePipeline atualizado na Etapa 3, com uma política de acesso gerenciado.
-
Abra o console do EKS e navegue até o cluster.
-
Escolha a guia Acesso.
-
Em Entradas de acesso do IAM, escolha Criar entrada de acesso.
-
No ARN da entidade principal do IAM, insira a função recém-atualizada por você para a ação, como
cp-service-role. Escolha Próximo. -
Na página Etapa 2: Adicionar política de acesso, em Nome da política, escolha a política gerenciada para acesso, como
AmazonEKSClusterAdminPolicy. Escolha Add policy. Escolha Próximo.nota
Esta é a política usada pela ação do CodePipeline para conversar com o Kubernetes. Como prática recomendada, para diminuir o escopo das permissões na política com o privilégio mínimo em vez da política administrativa, anexe uma política personalizada.
-
Na página de revisão, escolha Criar.
Etapa 5: Criar um repositório de origem e adicionar os arquivos de configuração helm chart
Nesta etapa, você cria um arquivo de configuração que seja indicado para a ação (arquivos de manifesto do Kubernetes ou chart do Helm) e armazena o arquivo de configuração no repositório de origem. Use o arquivo indicado para a configuração. Para obter mais informações, consulte https://kubernetes.io/docs/reference/kubectl/quick-reference/
-
Para Kubernetes, use um arquivo de manifesto.
-
Para Helm, use um chart do Helm.
-
Crie ou use um repositório do GitHub existente.
-
Crie uma nova estrutura no repositório para os arquivos de chart do Helm, conforme mostrado no exemplo abaixo.
mychart |-- Chart.yaml |-- charts |-- templates | |-- NOTES.txt | |-- _helpers.tpl | |-- deployment.yaml | |-- ingress.yaml | `-- service.yaml `-- values.yaml -
Adicione o arquivo ao nível raiz do repositório.
Etapa 6: Criação do pipeline
Use o assistente do CodePipeline para criar os estágios de pipeline e conectar o repositório de origem.
Para criar o pipeline
Abra o console do CodePipeline em https://console.aws.amazon.com/codesuite/codepipeline/.
-
Na página Welcome (Bem-vindo), Getting started (Conceitos básicos) ou Pipelines, selecione Create pipeline (Criar pipeline).
-
Na página Etapa 1: Escolher opção de criação, em Opções de criação, selecione a opção Criar pipeline personalizado. Escolha Próximo.
-
Em Etapa 2: Escolher as configurações do pipeline, em Nome do pipeline, insira
MyEKSPipeline. -
O CodePipeline disponibiliza pipelines dos tipos V1 e V2, que apresentam características e custos diferentes. O tipo V2 é o único tipo que você pode escolher no console. Para ter mais informações, consulte Pipeline types. Para obter informações sobre preços do CodePipeline, consulte Preços
. -
Em Perfil de serviço, escolha o perfil de serviço atualizado por você na etapa 3.
-
Deixe as configurações em Advanced settings (Configurações avançadas) como padrão e escolha Next (Próximo).
-
Na página Etapa 3: Adicionar etapa de origem, em Provedor de origem, escolha Criar uma conexão o repositório do GitHub.
-
Na página Etapa 4: Adicionar etapa de compilação, escolha Ignorar.
-
Na página Etapa 5: Adicionar etapa de implantação, escolha Amazon EKS.
-
Em Tipo de configuração da implantação, escolha Helm.
-
Em Local de chart do Helm, insira o nome da versão, como
my-release. Para Local de chart do Helm, insira o caminho dos arquivos de chart do Helm, comomychart. -
Escolha Próximo.
-
-
Na página Step 6: Review, revise a configuração do pipeline e escolha Create pipeline para criá-lo.
-
Depois que o pipeline for executado com êxito, escolha Visualizar detalhes para exibir os logs na ação a fim de exibir a saída da ação.