Início rápido: implantar uma aplicação Web e armazenar dados
Este tutorial de início rápido mostra as etapas para implantar a aplicação de amostra do jogo 2048 e persistir seus dados em um cluster do Amazon EKS usando o eksctl
Neste tutorial
Usando o modelo de cluster eksctl
a seguir, você criará um cluster do Amazon EKS com grupos de nós gerenciados. Ele configura os seguintes componentes:
- Configuração da VPC
-
Ao usar o modelo de cluster do eksctl a seguir, o eksctl cria automaticamente uma nuvem privada virtual (VPC) IPv4 para o cluster. Por padrão, o eksctl configura uma VPC que atende a todos os requisitos de rede, além de criar endpoints públicos e privados.
- Tipo de instância
-
Utilize o tipo de instância t3.medium. Esse tipo de instância oferece uma combinação bem equilibrada de recursos de computação, memória e rede - ideal para aplicações com uso moderado de CPU que podem sofrer picos ocasionais de demanda.
- Autenticação
-
Estabeleça os mapeamentos de IRSA para facilitar a comunicação entre os pods do Kubernetes e serviços da AWS. O modelo é configurado para definir um endpoint OpenID Connect (OIDC) para autenticação e autorização. Ele também estabelece uma conta de serviço para o AWS Load Balancer Controller (LBC)
, um controlador responsável por expor aplicações e gerenciar tráfego. - Persistência de dados
-
Integre o complemento gerenciado do driver CSI do AWS EBS para garantir a persistência dos dados da aplicação, mesmo em cenários que envolvam reinicializações ou falhas de pods. O modelo está configurado para instalar o complemento e estabelecer uma conta de serviço.
- Acesso externo à aplicação
-
Configure e integre com o complemento do AWS Load Balancer Controller (LBC) para expor a aplicação do jogo 2048
, usando o LBC para provisionar dinamicamente um Application Load Balancer (ALB).
Pré-requisitos
Antes de começar, verifique se você tem os seguintes pré-requisitos configurados para usar o Amazon EKS.
Etapa 1: configurar o cluster
Nesta seção, você criará um cluster gerenciado baseado em grupos de nós usando instâncias t3.mediumeksctl
, consulte Discovering addonseksctl
.
-
Crie um arquivo
cluster-config.yaml
e cole o conteúdo a seguir nele. Substituaregion-code
por uma região válida, comous-east-1
O exemplo de saída é o seguinte:
apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: web-quickstart region:
region-code
managedNodeGroups: - name: eks-mng instanceType: t3.medium desiredCapacity: 2 iam: withOIDC: true serviceAccounts: - metadata: name: aws-load-balancer-controller namespace: kube-system wellKnownPolicies: awsLoadBalancerController: true addons: - name: aws-ebs-csi-driver wellKnownPolicies: # Adds an IAM service account ebsCSIController: true cloudWatch: clusterLogging: enableTypes: ["*"] logRetentionInDays: 30
Etapa 2: criar um cluster
Agora, estamos prontos para criar nosso cluster do Amazon EKS. Esse processo leva vários minutos para ser concluído. Se quiser monitorar o status, consulte o console do AWS CloudFormation
-
Crie o cluster do Amazon EKS e especifique o cluster-config.yaml.
eksctl create cluster -f cluster-config.yaml
nota
Caso receba um
Error: checking STS access
na resposta, verifique se você está usando a identidade do usuário correta para a sessão atual do shell. Talvez você também precise especificar um perfil nomeado (por exemplo,--profile clusteradmin
) ou obter um novo token de segurança para a CLI AWS.Após a conclusão, você verá a seguinte saída de resposta:
2024-07-04 21:47:53 [✔] EKS cluster "web-quickstart" in "region-code" region is ready
Etapa 3: configurar o acesso externo às aplicações usando o AWS Load Balancer Controller (LBC)
Com o cluster operacional, nossa próxima etapa é tornar as aplicações em contêineres acessíveis externamente. Essa ação é feita por meio da implantação de um Application Load Balancer (ALB) para direcionar o tráfego fora do cluster para nossos serviços, em outras palavras, nossas aplicações. Quando criamos o cluster, estabelecemos um IAM Roles for Service Accounts (IRSA) para o Load Balancer Controller (LBC
Para configurar variáveis de ambiente
-
Defina a variável de ambiente
CLUSTER_REGION
para o cluster do Amazon EKS. Substitua o valor de amostra pararegion-code
.export CLUSTER_REGION=
region-code
-
Defina a variável de ambiente
CLUSTER_VPC
para o cluster do Amazon EKS.export CLUSTER_VPC=$(aws eks describe-cluster --name web-quickstart --region $CLUSTER_REGION --query "cluster.resourcesVpcConfig.vpcId" --output text)
Para instalar o AWS Load Balancer Controller (LBC)
O AWS Load Balancer Controller (LBC) utiliza definições de recursos personalizados (CRDs) no Kubernetes para gerenciar AWS Elastic Load Balancers (ELBs). Essas CRDs definem recursos personalizados, como balanceadores de carga e TargetGroupBindings, permitindo que o cluster do Kubernetes os reconheça e gerencie.
-
Use o Helm
para adicionar o repositório de gráficos do Amazon EKS ao Helm. helm repo add eks https://aws.github.io/eks-charts
-
Atualize os repositórios para garantir que o Helm esteja ciente das versões mais recentes dos gráficos:
helm repo update eks
-
Execute o comando do Helm
a seguir para instalar simultaneamente as definições de recursos personalizados (CRDs) e o controlador principal do AWS Load Balancer Controller (AWS LBC). Para pular a instalação das CRDs, passe o sinalizador --skip-crds
, que poderá ser útil se as CRDs já estiverem instaladas, se for necessária uma compatibilidade de versão específica ou em ambientes com necessidades rigorosas de controle de acesso e personalização.helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ --namespace kube-system \ --set clusterName=web-quickstart \ --set serviceAccount.create=false \ --set region=${CLUSTER_REGION} \ --set vpcId=${CLUSTER_VPC} \ --set serviceAccount.name=aws-load-balancer-controller
Você verá a seguinte saída de resposta:
NAME: aws-load-balancer-controller LAST DEPLOYED: Wed July 3 19:43:12 2024 NAMESPACE: kube-system STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: AWS Load Balancer controller installed!
Etapa 4: implantar a aplicação de amostra do jogo 2048
Agora que o balanceador de carga está configurado, é hora de habilitar o acesso externo para aplicações em contêineres no cluster. Nesta seção, mostraremos as etapas para implantar o popular “jogo 2048” como uma aplicação de amostra no cluster. O manifesto fornecido inclui anotações personalizadas para o Application Load Balancer (ALB), especificamente a anotação de “scheme”
-
Crie um namespace do Kubernetes denominado
game-2048
com o sinalizador--save-config
.kubectl create namespace game-2048 --save-config
Você verá a seguinte saída de resposta:
namespace/game-2048 created
-
Implante a aplicação de amostra do jogo 2048
. kubectl apply -n game-2048 -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.8.0/docs/examples/2048/2048_full.yaml
Esse manifesto configura uma implantação, um serviço e uma entrada do Kubernetes para o namespace
game-2048
, criando os recursos necessários para implantar e expor a aplicaçãogame-2048
no cluster. Isso inclui a criação de um serviço denominadoservice-2048
que expõe a implantação na porta80
e um recurso de entrada denominadoingress-2048
que define regras de roteamento para tráfego HTTP de entrada e anotações para um Application Load Balancer (ALB) voltado para a internet. Você verá a seguinte saída de resposta:namespace/game-2048 configured deployment.apps/deployment-2048 created service/service-2048 created ingress.networking.k8s.io/ingress-2048 created
-
Execute o comando a seguir para obter o recurso de entrada para o namespace
game-2048
.kubectl get ingress -n game-2048
Você verá a seguinte saída de resposta:
NAME CLASS HOSTS ADDRESS PORTS AGE ingress-2048 alb * k8s-game2048-ingress2-eb379a0f83-378466616.
region-code
.elb.amazonaws.com 80 31sVocê precisará esperar alguns minutos para que o Application Load Balancer (ALB) seja provisionado antes de começar as etapas a seguir.
-
Abra o navegador da Web e digite o
ADDRESS
da etapa anterior para acessar a aplicação Web. Por exemplo:k8s-game2048-ingress2-eb379a0f83-378466616.
region-code
.elb.amazonaws.com.rproxy.goskope.comVocê deve ver o jogo 2048 no seu navegador. Reproduza.
Etapa 5: persistir os dados usando os nós do driver CSI do Amazon EBS
Agora que o jogo 2048 está instalado e em execução no seu cluster do Amazon EKS, é hora de garantir que os dados do jogo sejam persistidos com segurança usando o complemento gerenciado do driver CSI do Amazon EBS. Esse complemento foi instalado no cluster durante o processo de criação. Essa integração é essencial para preservar o progresso e os dados do jogo, mesmo quando os pods ou nós do Kubernetes são reiniciados ou substituídos.
-
Crie uma classe de armazenamento
para o driver CSI do EBS: kubectl apply -n game-2048 -f https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/examples/kubernetes/dynamic-provisioning/manifests/storageclass.yaml
-
Crie uma solicitação de volume persistente (PVC) para solicitar armazenamento para os dados do seu jogo. Crie um arquivo denominado
ebs-pvc.yaml
e adicione o seguinte conteúdo a ele:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: game-data-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: ebs-sc
-
Aplique a PVC ao cluster:
kubectl apply -f ebs-pvc.yaml
Você verá a seguinte saída de resposta:
persistentvolumeclaim/game-data-pvc created
-
Você agora precisa atualizar a implantação do jogo 2048 para usar essa PVC para armazenar dados. A implantação a seguir está configurada para usar a PVC para armazenar dados do jogo. Crie um arquivo denominado
ebs-deployment.yaml
e adicione o seguinte conteúdo a ele:apiVersion: apps/v1 kind: Deployment metadata: namespace: game-2048 name: deployment-2048 spec: replicas: 3 # Adjust the number of replicas as needed selector: matchLabels: app.kubernetes.io/name: app-2048 template: metadata: labels: app.kubernetes.io/name: app-2048 spec: containers: - name: app-2048 image: public.ecr.aws/l6m2t8p7/docker-2048:latest imagePullPolicy: Always ports: - containerPort: 80 volumeMounts: - name: game-data mountPath: /var/lib/2048 volumes: - name: game-data persistentVolumeClaim: claimName: game-data-pvc
-
Aplique a implantação atualizada:
kubectl apply -f ebs-deployment.yaml
Você verá a seguinte saída de resposta:
deployment.apps/deployment-2048 configured
Com essas etapas, seu jogo 2048 no Amazon EKS agora está configurado para persistir os dados usando o driver CSI do Amazon EBS. Isso garante que o progresso e os dados do jogo estejam seguros mesmo no caso de falhas nos pods ou nós.
Caso tenha gostado deste tutorial, deixe seu feedback para que possamos fornecer mais tutoriais de início rápido específicos para casos de uso, como este.
Etapa 6: excluir clusters e nós
Após concluir o cluster e os nós criados para este tutorial, faça uma limpeza excluindo o cluster e os nós usando o comando a seguir. Caso queira realizar outras ações com esse cluster antes de limpá-lo, consulte Próximas etapas.
eksctl delete cluster -f ./cluster-config.yaml
Após a conclusão, você verá a seguinte saída de resposta:
2024-07-05 17:26:44 [✔] all cluster resources were deleted
Próximas etapas
Os seguintes tópicos da documentação ajudam a estender a funcionalidade do cluster:
-
A entidade principal do IAM que criou o cluster é a única entidade que pode fazer chamadas ao servidor da API do Kubernetes usando
kubectl
ou o AWS Management Console. Se quiser que outras entidades principais do IAM tenham acesso ao cluster, será necessário adicioná-los. Para ter mais informações, consulte Conceder aos usuários e perfis do IAM acesso às APIs do Kubernetes e Permissões obrigatórias. -
Antes de implantar um cluster para uso em produção, recomendamos conhecer todas as configurações de clusters e nós. Algumas configurações (como habilitar o acesso SSH aos nós do Amazon EC2) devem ser feitas no momento de criação do cluster.
-
Para aumentar a segurança do cluster, configure o plugin Amazon VPC Container Networking Interface para usar funções do IAM para contas de serviço.
Para explorar formas de criar diferentes tipos de clusters: