Amazon Elastic Kubernetes Service (EKS) é um serviço gerenciado de Kubernetes que facilita a execução do Kubernetes na AWS sem a necessidade de instalar e operar seu próprio plano de controle do Kubernetes ou nós. Aproveitando o EKS, você se beneficia da escalabilidade, segurança e confiabilidade da AWS, enquanto simplifica suas tarefas de gerenciamento do Kubernetes. Neste guia, vamos percorrer os passos para implantar um site WordPress com estado e seu banco de dados MySQL em um cluster EKS, demonstrando o poder e a facilidade de usar o Kubernetes gerenciado com a AWS.
Pré-requisitos
- Você deve ter uma conta AWS criada: LINK
- Usuário IAM na AWS com poderes de administrador: LINK
- Para acessar a conta AWS pela CLI, você deve ter AWS CLI instalado na sua máquina. Para instalar AWS CLI siga esta documentação: LINK
- Para gerenciar Kubernetes, você precisa do comando
kubectl
: LINK ou LINK - Instale o comando
eksctl
na sua máquina local para gerenciar clusters EKS: LINK - Helm instalado para gerenciamento de pacotes do Kubernetes: LINK ou LINK
Passo 1. Crie cluster EKS 🔗
Crie seu cluster Kubernetes com eksctl
usando os seguintes comandos:
eksctl create cluster \
--name eks-wp \
--region us-east-1 \
--zones us-east-1a,us-east-1b \
--managed
Uma vez que seu cluster esteja implantado, você pode verificar a conectividade com o comando: kubectl cluster-info
Para ver os nós: kubectl get nodes
Para ver os pods que já estão em execução: kubectl get pods -A
Para obter informações detalhadas sobre as instâncias nas quais os pods estão sendo executados: kubectl get pods -o wide -A
Passo 2. Crie um Provedor OIDC IAM para seu cluster 🔗
Primeiro, crie um provedor IAM OIDC para seu cluster EKS para permitir o uso de funções IAM para contas de serviço do Kubernetes. Este recurso permite que contas de serviço do Kubernetes assumam funções IAM, permitindo uma gestão de permissões mais granular para pods em execução no seu cluster.
oidc_id=$(aws eks describe-cluster --name eks-wp --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5)
aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4
eksctl utils associate-iam-oidc-provider --cluster eks-wp --approve
Passo 3. Adicione função IAM usando eksctl
🔗
Crie uma conta de serviço IAM com as políticas necessárias anexadas.
eksctl create iamserviceaccount \
--name ebs-csi-controller-sa \
--namespace kube-system \
--cluster eks-wp \
--attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
--approve \
--role-name AmazonEKS_EBS_CSI_DriverRole
Este comando é essencial para configurar a infraestrutura IAM necessária para permitir que o driver EBS CSI (Elastic Block Store Container Storage Interface) gerencie volumes EBS dentro do seu cluster Kubernetes no AWS EKS. A função IAM (AmazonEKS_EBS_CSI_DriverRole
) criada aqui terá as permissões definidas pela política anexada (AmazonEBSCSIDriverPolicy
), permitindo que o driver CSI realize ações como anexar, desanexar e gerenciar volumes EBS como armazenamento persistente para suas cargas de trabalho Kubernetes.
Passo 4. Instale o driver EBS CSI 🔗
Adicione o driver EBS CSI ao seu cluster EKS usando a função IAM criada.
# Obtenha o ARN da função IAM
role_arn=$(aws iam list-roles --query "Roles[?RoleName=='AmazonEKS_EBS_CSI_DriverRole'].Arn" --output text)
# Instale o driver EBS CSI
eksctl create addon --name aws-ebs-csi-driver --cluster eks-wp --service-account-role-arn $role_arn --force
Passo 5. Implante o driver Amazon EBS CSI no seu cluster Amazon EKS 🔗
Adicione e instale o driver EBS CSI usando Helm.
helm repo add aws-ebs-csi-driver https://kubernetes-sigs.github.io/aws-ebs-csi-driver
helm repo update
helm upgrade --install aws-ebs-csi-driver \
--namespace kube-system \
aws-ebs-csi-driver/aws-ebs-csi-driver
Uma vez que o driver tenha sido implantado, verifique se os pods estão em execução:
kubectl get pods -n kube-system -l app.kubernetes.io/name=aws-ebs-csi-driver
Passo 6. Implante MySQL e WordPress 🔗
Agora, você pode criar os recursos Kubernetes necessários para MySQL e WordPress no cluster. Para isso, você precisa criar dois arquivos. Esses arquivos contêm informações sobre as diferentes configurações a serem aplicadas aos nossos pods MySQL e WordPress, bem como serviços e reivindicações de volumes persistentes.
Baixe os seguintes arquivos de configuração:
- Arquivo de configuração do MySQL: execute o comando
curl -LO https://k8s.io/examples/application/wordpress/mysql-deployment.yaml
Este manifesto descreve uma implantação MySQL de instância única. O contêiner MySQL monta o Volume Persistente em /var/lib/mysql. A variável de ambiente MYSQL_ROOT_PASSWORD
define a senha do banco de dados a partir do Secret.
- Arquivo do WordPress: execute o comando
curl -LO https://k8s.io/examples/application/wordpress/wordpress-deployment.yaml
Este manifesto descreve uma implantação WordPress de instância única. O contêiner WordPress monta o Volume Persistente em /var/www/html para arquivos de dados do site. A variável de ambiente WORDPRESS_DB_HOST
define o nome do Serviço MySQL definido acima, e o WordPress acessará o banco de dados pelo Serviço. A variável de ambiente WORDPRESS_DB_PASSWORD
define a senha do banco de dados a partir do Secret gerado pelo kustomize.
Passo 7. Crie um kustomization.yaml 🔗
Neste arquivo, vamos especificar a ordem de execução dos arquivos baixados acima, junto com a chave secreta.
Um Secret é um objeto que armazena uma informação sensível como uma senha ou chave. Desde a versão 1.14, kubectl
suporta a gestão de objetos Kubernetes usando um arquivo de kustomization. Você pode criar um Secret por geradores em kustomization.yaml
.
Adicione um gerador de Secret em kustomization.yaml
com o seguinte comando (você precisará substituir YOUR_PASSWORD
pela senha que deseja usar)
cat <<EOF >kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
secretGenerator:
- name: mysql-pass
literals:
- password=YOUR_PASSWORD
resources:
- mysql-deployment.yaml
- wordpress-deployment.yaml
EOF
Passo 8. Implante os contêineres 🔗
Agora, implante os dois contêineres no EKS com o seguinte comando:
kubectl apply -k .
Você pode verificar os objetos existentes:
- Pods:
kubectl get pods
- Secrets:
kubectl get secrets
- Persistent Volume Claims:
kubectl get pvc
- Services:
kubectl get services
Uma vez que os contêineres tenham sido criados com sucesso e que os pods estejam exibidos como “Running” no Kubernetes, você pode obter o nome DNS do LoadBalancer ELB digitando o seguinte comando:
kubectl get svc wordpress
Cole no navegador web.
Voilá
Parabéns! Você implantou com sucesso seu site WordPress com estado na AWS no EKS!
Se você estiver se sentindo corajoso, vá para o meu próximo tutorial para aprender a instalar Kasten neste cluster EKS!
Limpe seu ambiente 🔗
Para limpar seu ambiente, siga estas etapas:
- Exclua os recursos do Kubernetes:
kubectl delete -k .
- Use
eksctl
para excluir seu cluster EKS e todas as suas dependências via CloudFormation:
eksctl delete cluster eks-wp
Se você gostou deste artigo, siga-me no Twitter (onde compartilho minha jornada tecnológica) diariamente, conecte-se comigo no LinkedIn, confira meu IG, e certifique-se de se inscrever no meu canal Youtube para mais conteúdo incrível!!