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"
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"
}
)
}
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"
}
)
}
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"
}
)
}
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/).
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 = ""
}
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
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
- AWS EKS - Parte I - Setup inicial
- AWS EKS - Parte II - Habilitando logs do Control Plane
- AWS EKS - Parte III - Restringindo acesso ao cluster
Referências
Top comments (0)