DEV Community

Rodrigo Fernandes
Rodrigo Fernandes

Posted on • Updated on

AWS EKS - Parte IV - Configurando Add-ons gerenciados

Image description

Objetivo geral:

Setup completo de um cluster Kubernetes utilizando AWS EKS e Terraform seguindo as melhores práticas e documentações oficias. Demonstração de atualizações de aplicações e demais recursos

Objetivo da parte IV:
Configurar os Add-ons gerenciados.

Avisos importantes
Leitura das partes 1,2 e 3.
A parte 1 é responsável pelo setup inicial do cluster, clique aqui.
A parte 2 é responsável por habilitar todos os logs do Control Plane.
A parte 3 é responsável restringir o acesso público ao cluster.

A configuração do cluster é exclusiva para laboratório e testes.

Pré requisitos
Todos da parte 1,2 e 3.
Versão do cluster a partir da 1.24.

Entendendo mais sobre os Add-ons
Um Add-on é um software que fornece recursos operacionais de suporte a aplicações do Kubernetes, mas que não é específico da aplicação.
O Amazon EKS instala automaticamente complementos autogerenciados, como o Amazon VPC CNI plugin for Kubernetes, o kube-proxy e o CoreDNS, para cada cluster.
Para ter uma flexibilidade maior na gerencia dos Add-ons, vamos alterar a configuração padrão e gerencia-los.

Para maiores informações sobre os Add-ons, acesse a documentação oficial clicando aqui.

Agora que "os trem" estão mais claros, Let's go to work!

Configurações inicias
No arquivo terraform.tfvars vamos inserir as o valor para as variáveis abaixo:

## Add-ons
version_kube_proxy = "v1.24.10-eksbuild.2"
version_coredns = "v1.9.3-eksbuild.2"
version_vpc-cni =  "v1.12.6-eksbuild.1"
version_ebs-csi = "v1.17.0-eksbuild.1"
Enter fullscreen mode Exit fullscreen mode

Esses valores são as versões de cada add-ons compatíveis com a versão do cluster instalada. As versões de cada um pode ser consultada nos links abaixo:

Vamos criar um novo arquivo na raiz do repositório chamado addons.tf, nesse arquivo vamos configurar todos os add-ons.

Vamos configurar 3 add-ons: kube-proxy, coredns, vpc-cni e ebs-csi.

Para configurar o kube-proxy vamos inserir o trecho do código abaixo:

resource "aws_eks_addon" "kube_proxy" {
  addon_name        = "kube-proxy"
  cluster_name      = var.cluster_name
  addon_version     = var.version_kube_proxy
  resolve_conflicts = "OVERWRITE"  
  tags = merge(
   # var.tags,
    {
      "eks_addon" = "kube-proxy"
    }
  )
}
Enter fullscreen mode Exit fullscreen mode

Para configurar o core-dns vamos inserir o trecho do código abaixo:

resource "aws_eks_addon" "core_dns" {
  addon_name        = "coredns"
  cluster_name      = var.cluster_name
  addon_version     = var.version_coredns 
  resolve_conflicts = "OVERWRITE"
  tags = merge(
   # var.tags,
    {
      "eks_addon" = "coredns"
    }
  )
}
Enter fullscreen mode Exit fullscreen mode

Para configurar o vpc-cni vamos inserir o trecho do código abaixo:

resource "aws_eks_addon" "vpc-cni" {
  addon_name        = "vpc-cni"
  cluster_name      = var.cluster_name
  addon_version     = var.version_vpc-cni
  resolve_conflicts = "OVERWRITE"
  tags = merge(
   # var.tags,
    {
      "eks_addon" = "vpc-cni"
    }
  )
}
Enter fullscreen mode Exit fullscreen mode

Para configurar o ebs-csi vamos inserir o trecho do código abaixo:

# https://aws.amazon.com/blogs/containers/amazon-ebs-csi-driver-is-now-generally-available-in-amazon-eks-add-ons/ 
data "aws_iam_policy" "ebs_csi_policy" {
  arn = "arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy"
}

module "irsa-ebs-csi" {
  source  = "terraform-aws-modules/iam/aws//modules/iam-assumable-role-with-oidc"
  version = "4.7.0"

  create_role                   = true
  role_name                     = "AmazonEKSTFEBSCSIRole-${module.eks.cluster_name}"
  provider_url                  = module.eks.oidc_provider
  role_policy_arns              = [data.aws_iam_policy.ebs_csi_policy.arn]
  oidc_fully_qualified_subjects = ["system:serviceaccount:kube-system:ebs-csi-controller-sa"]
}

resource "aws_eks_addon" "ebs-csi" {
  cluster_name             = var.cluster_name
  addon_name               = "aws-ebs-csi-driver"
  addon_version            = var.version_ebs-csi
  service_account_role_arn = module.irsa-ebs-csi.iam_role_arn
  tags = {
    "eks_addon" = "ebs-csi"
    "terraform" = "true"
  }
}

Para o EBS-CSI temos que criar alguns recursos a mais como uma Policy e uma Service Account. Para maiores informações acesse a documentação oficial [clicando aqui](https://aws.amazon.com/blogs/containers/amazon-ebs-csi-driver-is-now-generally-available-in-amazon-eks-add-ons/).
Enter fullscreen mode Exit fullscreen mode

Por ultimo vamos adicionar as novas variáveis no arquivo variables.tf.

### Add-ons
variable "version_kube_proxy" {
  description = "Versão do Kube-Proxy"
  type        = string
  default     = ""
}

variable "version_coredns" {
  description = "Versão do Coredns"
  type        = string
  default     = ""
}

variable "version_vpc-cni" {
  description = "Versão do VPC-CNI"
  type        = string
  default     = ""
}

variable "version_ebs-csi" {
  description = "Versão do EBS-CSI"
  type        = string
  default     = ""
}
Enter fullscreen mode Exit fullscreen mode

Aplicando as atualizações
Vamos executar o Plan e o Apply para atualizar nosso template com as alterações.

terraform plan && terraform apply -auto-approve

Validações
Através da console de gerenciamento da AWS, procure pelo serviço AWS EKS, localize o cluster e clique no menu Add-ons.
No menu terá os 4 add-ons instalados

Image description

Com isso finalizamos a instalação dos add-ons gerenciados.

Próximas partes

  • AWS EKS - Parte V - Deploy e atualização de uma app (em construção)

Partes Anteriores

Referências

Top comments (0)