Coder Social home page Coder Social logo

terraform-eks's Introduction

Terraform + AWS EKS

  • Status: Ainda em desenvolvimento.

Descrição do projeto

  • 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 o auto scaling groups que possue uma solução alternativa.

Mais sobre default tags.

Abaixo segue a tabela de requerimentos de versões, módulos, recursos, inputs e outputs.

Requirements

Name Version
terraform >= 0.15.4
aws >= 3.0

Providers

Name Version
local 2.1.0

Modules

Name Source Version
cluster ./cluster n/a
network ./network n/a
security_group ./security_group n/a
worknodes ./worknodes n/a

Resources

Name Type
local_file.kubeconfig resource

Inputs

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

Outputs

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

Como usar.

  • 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ável key 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 e AWS_SECRET_ACCESS_KEY.

Comandos

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.

Aguarde a criação do cluster EKS, após concluir execute os comandos abaixo:

  • 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.

terraform-eks's People

Contributors

marcio-machado76 avatar

Forkers

mbaetaoliveira

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.