Implantação no Amazon EKS
Um exemplo de implantação local no Amazon EKS é fornecido aqui. Clone este repositório e modifique os arquivos conforme sua conveniência. No repositório, como em um módulo Terraform padrão, você encontrará os seguintes arquivos:
-
terraform.tf
- declaração dos provedores Terraform utilizados neste projeto; -
locals.tf
- variáveis locais usadas pelos módulos Modern Gitops Stack; -
main.tf
- definição de todos os módulos implantados; -
s3_loki.tf
- criação da política IAM, função assumida e bucket utilizado pelo Loki; -
s3_thanos.tf
- criação da política IAM, função assumida e bucket usado pelo Thanos; -
csi_drivers.tf
- criação dos recursos necessários, bem como dos módulos Modern Gitops Stack necessários para os drivers CSI do cluster; -
outputs.tf
- as variáveis de saída do Modern Gitops Stack;
Requisitos
Na sua máquina local, você precisa ter as seguintes ferramentas instaladas:
-
Terraform para provisionar toda a pilha;
-
AWS CLI para interagir com sua conta AWS;
-
gopass
esummon
para passar facilmente os segredos do IAM como variáveis de ambiente ao executar `terraform `comandos;
Fora isso, você precisará do seguinte:
-
uma conta AWS;
-
uma chave AWS IAM com pelo menos … … …
-
uma zona da Rota 53;
Especificidades e explicações
segredos.yml
DICA: Verifique esta postagem do blog para obter mais informações sobre como configurar gopass
e summon
para trabalhar juntos.
Para simplicidade e facilidade de uso, bem como segurança, o exemplo usa gopass
e summon
para passar as credenciais do IAM para os comandos do Terraform. O arquivo secrets.yml
contém o caminho para os valores secretos no armazenamento de senhas gopass
. Na execução, o comando summon
lerá o arquivo secrets.yml
e passará as credenciais como variáveis de ambiente para os comandos do Terraform.
Todos os comandos apresentados neste tutorial usam o comando summon
.
IMPORTANTE: A variável de ambiente AWS_DEFAULT_REGION
define onde residirão todos os recursos AWS criados pelo Terraform, incluindo o cluster EKS.
Estado remoto do Terraform
Se não quiser configurar o back-end de estado remoto do Terraform, você pode simplesmente remover o bloco backend
do arquivo terraform.tf
.
NOTA: Mais informações sobre backends remotos estão disponíveis em documentação oficial.
Autenticação OIDC
IMPORTANTE: Os módulos Modern Gitops Stack são desenvolvidos com o OIDC em mente. Na produção, você deve ter um provedor de identidade que suporte OIDC e usá-lo para autenticar os aplicativos Modern Gitops Stack.
Neste exemplo, usamos o provedor OIDC Amazon EKS. Fornecemos um module que usa um ID de pool Cognito e seu domínio para fornecer a configuração necessária para implantar os aplicativos Modern Gitops Stack.
Isso pressupõe que você mesmo criou um pool do Cognito, mas você pode usar nosso módulo para também criar o pool e preenchê-lo com usuários, conforme mostrado no exemplo.
NOTA: Verifique a documentação de uso AWS Cognito OIDC para obter mais informações sobre como usá-lo.
A variável user_map
desse módulo permite criar usuários OIDC usados para autenticar nos aplicativos Modern Gitops Stack. Você deverá receber um e-mail da AWS com uma senha temporária para fazer login pela primeira vez.
Vamos criptografar certificados SSL
Por padrão, para evitar a limitação de taxa do seu domínio pelo Let’s Encrypt, o exemplo usa a configuração letsencrypt-staging
do módulo cert-manager para gerar certificados. Isso usa o ambiente de teste Let’s Encrypt que possui um certificado CA inválido.
Se você se sentir pronto para testar com certificados de produção, você pode simplesmente editar o arquivo locals.tf
e alterar a variável cluster_issuer
para letsencrypt-prod
.
Implantação
-
Clone o repositório e
cd
na pastaexamples/eks
; -
Adapte o arquivo
secrets.yml
para apontar para o caminho correto em seu armazenamento de senhasgopass
; -
Confira os módulos que deseja implantar no arquivo
main.tf
e comente os demais;DICA: Você também pode adicionar seus próprios módulos Terraform neste arquivo ou em qualquer outro arquivo na pasta raiz. Um bom lugar para começar a escrever seu próprio módulo é clonar o repositório modern-gitops-stack-module-template e adaptá-lo ao seu precisa.
-
No módulo
oidc
, adapte a variáveluser_map
como desejar (por favor verifique a seção OIDC para mais informações). -
Na origem da implantação de exemplo, inicialize os módulos e provedores do Terraform:
summon terraform init
-
Configure as variáveis em
locals.tf
de acordo com sua preferência:IMPORTANTE:
cluster_name
evpc_cidr
devem ser exclusivos para cada implantação do Modern Gitops Stack em uma única conta da AWS e obase_domain
deve corresponder a uma zona do Route 53 nessa mesma conta.DICA: O documentação do módulo cluster pode ajudá-lo a saber o que colocar em
kubernetes_version
, por exemplo.Unresolved include directive in modules/ROOT/pages/tutorials/deploy_eks.adoc - include::examples$deploy_examples/eks/locals.tf[]
-
Por fim, execute
terraform apply
e aceite as alterações propostas para criar os nós Kubernetes no Amazon EKS e preenchê-los com nossos serviços;summon terraform apply
-
Após a primeira implantação (observe a etapa de solução de problemas relacionada ao CD Argo), você pode ir para
locals.tf
e habilitar o booleano ServiceMonitor para ativar os exportadores do Prometheus que enviarão métricas para o Prometheus;IMPORTANTE: Este sinalizador precisa ser definido como
false
para a primeira inicialização do cluster, caso contrário, os aplicativos falharão na implantação enquanto as definições de recursos personalizados do kube-prometheus-stack ainda não foram criadas.NOTA: Você pode definir o sinalizador como
true
no arquivolocals.tf
ou pode simplesmente deletar a linha nas declarações dos módulos, já que esta variável é definida comotrue
por padrão em cada módulo.DICA: Anote o local chamado
app_autosync
. Se você definir a condição do operador ternário comofalse
você desabilitará a sincronização automática para todos os módulos Modern Gitops Stack. Isso permite que você escolha quando sincronizar manualmente o módulo na interface do Argo CD e é útil para fins de solução de problemas.
Acesse o cluster e os aplicativos Modern Gitops Stack
Para acessar seu cluster, você precisa usar a AWS CLI para recuperar um Kubeconfig que você pode usar:
summon aws eks update-kubeconfig --name YOUR_CLUSTER_NAME --region YOUR_CLUSTER_ZONE --kubeconfig ~/.kube/NAME_TO_GIVE_YOUR_CONFIG.config
Então você pode usar o comando kubectl
ou k9s
para interagir com o cluster:
k9s --kubeconfig ~/.kube/NAME_TO_GIVE_YOUR_CONFIG.config
Quanto aos aplicativos Modern Gitops Stack, você pode acessá-los através do domínio de entrada que pode ser encontrado na saída ingress_domain
. Se você usou o código do exemplo sem modificar as saídas, você verá algo assim em seu terminal depois que terraform apply
tiver feito seu trabalho:
Outputs:
modern_gitops_admins = <sensitive>
ingress_domain = "your.domain.here"
Ou você pode usar kubectl
para obter todas as entradas e seus respectivos URLs:
kubectl get ingress --all-namespaces --kubeconfig ~/.kube/NAME_TO_GIVE_YOUR_CONFIG.config
A saída modern_gitops_admins
lista todos os usuários e respectivos e-mails que foram configurados usando o módulo OIDC:
summon terraform output modern_gitops_admins
Esses usuários deveriam ter recebido um e-mail com uma senha temporária para fazer login nos aplicativos Modern Gitops Stack pela primeira vez.
Pare o cluster
Para parar definitivamente o cluster com um único comando (é por isso que excluímos alguns recursos do arquivo de estado), você pode usar o seguinte comando:
summon terraform state rm $(summon terraform state list | grep "argocd_application\|argocd_project\|kubernetes_\|helm_") && summon terraform destroy
Conclusão
É isso, agora você tem um cluster Kubernetes totalmente funcional no Amazon EKS com os aplicativos Modern Gitops Stack implantados nele. Para mais informações, continue lendo documentation. Você pode explorar as possibilidades de cada módulo e obter o link para o código-fonte nas respectivas páginas de documentação.
Solução de problemas
connection_error
durante a primeira implantação
Em alguns casos, você pode encontrar um erro como estes na primeira implantação:
╷
│ Error: error while waiting for application argocd to be created
│
│ with module.argocd.argocd_application.this,
│ on .terraform/modules/argocd/main.tf line 55, in resource "argocd_application" "this":
│ 55: resource "argocd_application" "this" {
│
│ error while waiting for application argocd to be synced and healthy: rpc error: code = Unavailable desc = error reading from server: EOF
╵
O erro se deve à forma como provisionamos o Argo CD nas etapas finais da implantação. Usamos o bootstrap Argo CD para implantar o módulo Argo CD final, o que causa uma reimplantação do Argo CD e consequentemente uma perda momentânea de conexão entre o provedor Argo CD Terraform e o servidor Argo CD.
Você pode simplesmente executar novamente o comando summon terraform apply
para finalizar a inicialização do cluster sempre que encontrar esse erro.
Loop de recarga da interface Argo CD ao clicar no login
Se você encontrar um loop ao clicar no botão de login na interface do Argo CD, você pode tentar excluir o pod do servidor Argo CD e deixá-lo ser recriado.
Para obter mais informações sobre o módulo Argo CD, consulte respectiva página de documentação. |