Projeto para automação do provisionamento e deploy de um cluster Kubernetes com Helm na AWS utilizando Ansible e AWX.
- Acesse sua conta AWS e crie um key_pair: AWS console > Services: EC2 > Network & Security: Key Pairs
- Salve a chave recém criada na pasta
~/.ssh
- Crie um usuário com a policy AdministratorAccess, ou crie uma customizada e associe a este usuário: AWS Console > Services: IAM > Users: Add User
- Baixe o arquivo .csv gerado no final
- Instale o ansible e o pip:
# Debian family sudo apt install -y ansible python-pip ## Ubuntu 20.04 <---- Por algum motivo, sabe-se lá qual, o pacote python-pip não está disponível no repositório padrão curl https://bootstrap.pypa.io/get-pip.py --output get-pip.py && python2 /tmp/get-pip.py # Redhat family sudo yum install -y ansible python-pip # Archlinux family sudo pacman -S --noconfirm ansible python-pip
- Instale o boto3 e awscli:
sudo pip install boto3 sudo pip install awscli
- Configure suas credenciais da AWS no awscli:
# 1. Insira o valor de aws_access_key_id do arquivo .csv baixado durante a criação do seu usuário no IAM # 2. Insira o valor de aws_secret_access_key do arquivo .csv baixado durante a criação do seu usuário no IAM # 3. Informe a região da AWS em que você irá criar os recursos. Região utilizada neste projeto: us-east-1 aws configure --profile default # Verifique se deu tudo certo: Irá retornar um JSON com os dados de acesso do teu usuário. Pressione CTRL+c para sair do comando. aws iam list-access-keys
- Acesse a pasta provisioning, e crie as instâncias EC2:
ansible-playbook -i hosts main.yml
- Acesse a pasta install_k8s, e instale o docker e k8s:
ansible-playbook -i hosts main.yml
- Acesse a pasta deploy_app_v1, e instale o docker e k8s:
ansible-playbook -i hosts main.yml
- Pegue o IP Público de uma das 3 instâncias EC2 criadas e acesse os endereços: IP_DO_SERVER:32222, IP_DO_SERVER:32111 e IP_DO_SERVER:32111/metrics
- Acesse a pasta deploy_app_v2, e instale o docker e k8s:
ansible-playbook -i hosts main.yml
- Pegue o IP Público de uma das 3 instâncias EC2 criadas e acesse os endereços: IP_DO_SERVER:32222, IP_DO_SERVER:32111 e IP_DO_SERVER:32111/metrics
-
provisioning => Criação das instâncias para o cluster
- Criação do Security Group - Criação de 3 instâncias EC2 do tipo t2.medium, com base na AMI ami-0dba2cb6798deb6d8(Ubuntu 20.04) - Arquivo hosts será populado com os IPs públicos e privados das instâncias EC2 criadas
-
install_k8s => Criação do cluster
- Instalação do docker, kubeadm, kubelet e kubeadm nas 3 instâncias EC2 recém criadas - Criação do cluster - Associação dos workers ao nó master - Instalação do Helm - Deploy do Prometheus Operator
-
deploy_app_v1 => Deploy de uma aplicação de exemplo, na versão 1
- Criação da estrutura de diretório do app_v1 - Cópia dos arquivos de deployment e service do app_v1 - Criação do deployment e servido do app_v1
-
deploy_app_v2 => Deploy de uma aplicação de exemplo, na versão 2
- Instalação do pip e dependências do módulo k8s - Cópia dos arquivos de template do deployment do app_v1 e app_v2 - Deploy do app_v2 - Scale down do app_v1 - Pause interativo, de 2 minutos - Remoção do app_v1
-
[] extra => segredo...
-
Desabilitar mensagens de warnings e necessidade de confirmação para adicionar novos servers ao seu
~/.ssh/known_hosts
# Altere os parâmetros do arquivo /etc/ansible/ansible.cfg conforme abaixo host_key_checking = False deprecation_warnings = False
-
Acessando instâncias EC2 via SSH
ssh-agent zsh ssh-add ~/.ssh/ansible_k8s.pem ssh ubuntu@IP_DO_SERVER
-
As instâncias EC2 do tipo t3.medium não fazem parte do "plano gratuito de testes"(free tier) da AWS, portanto não se esqueça de dar um
terminate
nas instâncias e remover o Security Group após terminar os testes neste projeto, caso contrário será cobrado pelo tempo utilizado, cerca de 0.0464 por hora na região da Virgínia. -
Queira ou não, você será cobrado pelo tempo utilizado das instâncias, mas é um valor ínfimo. Durante a implementação deste projeto, pelo meu dashboard de billing, foram computadas 14.307 horas, o que me custo $0.66, pelo menos até hoje: 19/10/2020 às 13:12