- Status: Ainda em desenvolvimento.
- Este projeto tem como objetivo automatizar a criação de um cluster kubernetes na AWS utilizando o terraform.
- O Amazon Elastic Kubernetes Service (Amazon EKS) é um serviço de contêiner gerenciado para executar e escalar aplicações do Kubernetes.
- Este projeto tem uma estrutura separada por módulos e para que fique mais dinâmico e fácil fazer alterações, todas as variáveis estão concentradas no
módulo root no arquivo
terraform.tfvars
. - Para facilitar a identificação dos recursos criados neste projeto foi utilizado uma opção de tags conhecida como
default tags
, que tem a capacidade de definir tags padrão no nível do provedor, simplificando o gerenciamento de tags. Com este recurso podemos definir tags padrão no bloco do provedor na configuração do terraform e todas as tags definidas ali também serão herdadas por módulos dependentes do terraform, exceto oauto scaling groups
que possue uma solução alternativa.
- Default tags é uma maneira fácil de padronizar sua configuração do Terraform de acordo com as práticas recomendadas da AWS.
Name | Version |
---|---|
terraform | >= 0.15.4 |
aws | >= 3.0 |
Name | Version |
---|---|
local | 2.1.0 |
Name | Source | Version |
---|---|---|
cluster | ./cluster | n/a |
network | ./network | n/a |
security_group | ./security_group | n/a |
worknodes | ./worknodes | n/a |
Name | Type |
---|---|
local_file.kubeconfig | resource |
Name | Description | Type | Default | Required |
---|---|---|---|---|
auto_scale_options | Opções mínima, máxima e desejada de auto scaling do cluster | map(any) |
n/a | yes |
cidr | CIDR da VPC | string |
n/a | yes |
count_available | Numero de Zonas de disponibilidade | number |
n/a | yes |
file | Local e nome do arquivo para armazenar o output do kubeconfig-certificate | string |
n/a | yes |
key | Nome da key pair | string |
n/a | yes |
nacl | Regras de Network Acls AWS | map(any) |
n/a | yes |
node_instances_type | tipo das instancias | string |
n/a | yes |
region | Região na AWS | string |
n/a | yes |
sg-cidr | Mapa de portas de serviços | map(any) |
n/a | yes |
tag-sg | Tag name do security group | string |
n/a | yes |
tag_igw | Tag Name do internet gateway | string |
n/a | yes |
tag_rtable | Tag Name das route tables | string |
n/a | yes |
tag_vpc | Tag Name da VPC | string |
n/a | yes |
tagcluster | Tag name do cluster | string |
n/a | yes |
tagworknodes | Tag name do worker node | string |
n/a | yes |
Name | Description |
---|---|
aws_nat_gateway | nat gateway id |
cluster_name | Nome do cluster |
eks-cluster | id name do EKS |
eks_node_groups | Id do node group |
endpoint | Endpoint do cluster |
igw | id do internet Gateway |
kubeconfig-certificate-authority-data | C.A do Cluster |
private_subnet | Subnet private |
public_subnet | Subnet public |
region | AWS region |
security_group_id | Security group id |
vpc | Idendificador da VPC |
- Para utilizar localmente , baixe o repositório e altere as variáveis localizadas no arquivo
terraform.tfvars
de acordo com a necessidade. - A variável
count_available
define o quantidade de zonas de disponibilidade, públicas e privadas que seram criadas, a variávelkey
especifíca o nome da key pair existente na AWS, certifique-se que ja possua uma ou então à crie e utilize na variável. - Este projeto possue um módulo de security group adicional, as regras de ingress listadas ali são somente exemplos, então gerencie conforme necessitar
editando seus valores no arquivo
terraform.tfvars
. - Certifique-se que possua as credenciais da AWS -
AWS_ACCESS_KEY_ID
eAWS_SECRET_ACCESS_KEY
.
Para executar comandos no cluster é necessário ter o docker e o kubectl instalados.
Para utilizar os módulos deste repositório é necessário ter o terraform instalado ou utilizar o container do terraform dentro da pasta do seu projeto da seguinte forma:
docker run -it --rm -v $PWD:/app -w /app --entrypoint "" hashicorp/terraform:light sh
Em seguida exporte as credenciais da AWS:
export AWS_ACCESS_KEY_ID=sua_access_key_id
export AWS_SECRET_ACCESS_KEY=sua_secret_access_key
Agora é só executar os comandos do terraform:
terraform init
- Comando irá baixar todos os modulos e plugins necessários.terraform plan
- Para criar um plano de todos os recursos que serão utilizados.terraform apply
- Para aplicar a criação/alteração dos recursos.
-
Conectar ao cluster.
$ aws eks --region $(terraform output -raw region) update-kubeconfig --name $(terraform output -raw cluster_name)
-
Pegar o kubeconfig.
aws sts get-caller-identity
-
Preencha o espaço abaixo com o nome do cluster e execute o comando.
aws eks --region us-east-1 update-kubeconfig --name <NOME_CLUSTER>
-
Verificar o kubeconfig.
cat ~/.kube/config
-
Verificar os nós do cluster.
kubectl get nodes
-
Para destruir toda a estrutura criada execute o comando abaixo.
-
terraform destroy
- Para destruir todos os recursos que foram criados pelo terraform.