[x] Instale o eksctl, que será utilizado para realizar a atualização dos clusters
[x] Obtenha a credencial de acesso de um usuário IAM que tenha permissões suficientes para realizar a atualização dos clusters. A credencial possui uma Access Key e Secret Key.
[x] Instale e utilize a ferramenta Pluto para obter um relatório de APIs Kubernetes que estão depreciadas:
# Obtém um relatório completo do cluster, incluindo helm charts
pluto detect-all-in-cluster -o wide 2>/dev/null > pluto-output.txt
Caso queira um relatório apenas sobre os charts helm instalados:
pluto detect-helm -o wide 2>/dev/null > pluto-output.txt
O output é algo como:
NAME NAMESPACE KIND VERSION REPLACEMENT DEPRECATED DEPRECATED IN REMOVED REMOVED IN REPL AVAIL REPL AVAIL IN
rancher-alerting-drivers/rancher-alerting-drivers-prom2teams-psp cattle-monitoring-system PodSecurityPolicy policy/v1beta1 true v1.21.0 true v1.25.0 true
rancher-monitoring-crd/rancher-monitoring-crd-manager cattle-monitoring-system PodSecurityPolicy policy/v1beta1 true v1.21.0 true v1.25.0 true
rancher-monitoring/rancher-monitoring-grafana cattle-monitoring-system PodSecurityPolicy policy/v1beta1 true v1.21.0 true v1.25.0 true
rancher-monitoring/rancher-monitoring-kube-state-metrics cattle-monitoring-system PodSecurityPolicy policy/v1beta1 true v1.21.0 true v1.25.0 true
rancher-monitoring/rancher-monitoring-prometheus-adapter cattle-monitoring-system PodSecurityPolicy policy/v1beta1 true v1.21.0 true v1.25.0 true
rancher-monitoring/rancher-monitoring-prometheus-node-exporter cattle-monitoring-system PodSecurityPolicy policy/v1beta1 true v1.21.0 true v1.25.0 true
rancher-monitoring/rancher-monitoring-alertmanager cattle-monitoring-system PodSecurityPolicy policy/v1beta1 true v1.21.0 true v1.25.0 true
rancher-monitoring/rancher-monitoring-operator cattle-monitoring-system PodSecurityPolicy policy/v1beta1 true v1.21.0 true v1.25.0 true
rancher-monitoring/rancher-monitoring-prometheus cattle-monitoring-system PodSecurityPolicy policy/v1beta1 true v1.21.0 true v1.25.0 true
rancher-monitoring/rancher-monitoring-patch-sa cattle-monitoring-system PodSecurityPolicy policy/v1beta1 true v1.21.0 true v1.25.0 true
ala-hub/ala-hub default Ingress networking.k8s.io/v1beta1 networking.k8s.io/v1 true v1.19.0 true v1.22.0 true v1.19.0
cas/cas default Deployment extensions/v1beta1 apps/v1 true v1.9.0 true v1.16.0 true v1.9.0
cas/userdetails default Deployment extensions/v1beta1 apps/v1 true v1.9.0 true v1.16.0 true v1.9.0
cas/cas default Ingress extensions/v1beta1 networking.k8s.io/v1 true v1.14.0 true v1.22.0 true v1.19.0
cas5/cas5 default Ingress extensions/v1beta1 networking.k8s.io/v1 true v1.14.0 true v1.22.0 true v1.19.0
dashboard/dashboard default Ingress networking.k8s.io/v1beta1 networking.k8s.io/v1 true v1.19.0 true v1.22.0 true v1.19.0
elastic/elasticsearch-master-pdb default PodDisruptionBudget policy/v1beta1 policy/v1 true v1.21.0 true v1.25.0 true v1.21.0
regions/regions default Ingress networking.k8s.io/v1beta1 networking.k8s.io/v1 true v1.19.0 true v1.22.0 true v1.19.0
loki/loki log-stack PodSecurityPolicy policy/v1beta1 true v1.21.0 true v1.25.0 true
loki/loki-promtail log-stack PodSecurityPolicy policy/v1beta1 true v1.21.0 true v1.25.0 true
pinpoint/pinpoint-hdfs-datanode pinpoint PodDisruptionBudget policy/v1beta1 policy/v1 true v1.21.0 true v1.25.0 true v1.21.0
pinpoint/pinpoint-hdfs-namenode pinpoint PodDisruptionBudget policy/v1beta1 policy/v1 true v1.21.0 true v1.25.0 true v1.21.0
pinpoint/pinpoint-zookeeper pinpoint PodDisruptionBudget policy/v1beta1 policy/v1 true v1.21.0 true v1.25.0 true v1.21.0
ecr-cred-helper default CronJob batch/v1beta1 batch/v1 true v1.21.0 true v1.25.0 true v1.21.0
sib-access-biocache-backend default Role rbac.authorization.k8s.io/v1beta1 rbac.authorization.k8s.io/v1 true v1.17.0 true v1.22.0 true
pod-identity-webhook <UNKNOWN> MutatingWebhookConfiguration admissionregistration.k8s.io/v1beta1 admissionregistration.k8s.io/v1 true v1.16.0 true v1.22.0 true v1.16.0
eniconfigs.crd.k8s.amazonaws.com <UNKNOWN> CustomResourceDefinition apiextensions.k8s.io/v1beta1 apiextensions.k8s.io/v1 true v1.16.0 true v1.22.0 true v1.16.0
Após a obtenção do relatório, é interessante realizar um double check nos recursos listados para confirmar que o Kind utilizado no YAML é o mesmo que está presente na coluna REPLACEMENT do relatório. Caso não esteja, será necessária intervenção direta, atualizando o YAML em si ou o helm chart.
[x] Verifique a versão atual do Kubernetes presente no EKS, através do console AWS:

[x] Verifique quais os node groups existentes e a sua versão. Caso sua versão seja diferente da versão do Kubernetes obtida no passo anterior, será necessário atualizá-los para que fiquem em paridade com a versão do Kubernetes, antes de prosseguir com a atualização de fato.

Para atualizar os node groups, execute os seguintes comandos:
Exporte as credenciais obtidas anteriormente para variáveis de ambiente no seu terminal:
export AWS_ACCESS_KEY_ID=[Sua Access Key. Ex: AKIA3OXJ65HD9NJE36AU]
export AWS_SECRET_ACCESS_KEY=[Sua Secret Key. Ex: Xt2X1LOX7c9EFTyVvIsZ7C9DfunOKUoKCh+S0HZ9]
export AWS_DEFAULT_REGION=[Região onde está presente o cluster EKS/Node Group. Ex: us-east-1]
OBS: Valores de exemplo são fictícios.
Execute o comando eksctl upgrade nodegroup para cada node group que seja deseja atualizar para a versão desejada. Como temos quatro node groups desatualizados, vamos executar o comando quatro vezes, alterando o node group a ser utilizado:
<aside> 📌 OBS: Caso a versão do node group esteja mais de uma versão atrás da versão do Kubernetes (Ex: node group na 1.25, e Kubernetes na 1.27), é necessario atualizar os node groups primeiro para a versão 1.26, e após isso para a 1.27.
Fluxo correto de atualização dos node groups: 1.25 → 1.26 →1.27
Fluxo incorreto de atualização dos node groups: 1.25 → 1.27
O mesmo vale para atualizações da versão do Kubernetes (API server/Control plane) do cluster.
</aside>
# Template
eksctl upgrade nodegroup [Nome do node group 1] --cluster [Nome do cluster EKS] --kubernetes-version [Versão do kubernetes desejada]
eksctl upgrade nodegroup [Nome do node group 2] --cluster [Nome do cluster EKS] --kubernetes-version [Versão do kubernetes desejada]
eksctl upgrade nodegroup [Nome do node group 3] --cluster [Nome do cluster EKS] --kubernetes-version [Versão do kubernetes desejada]
eksctl upgrade nodegroup [Nome do node group 4] --cluster [Nome do cluster EKS] --kubernetes-version [Versão do kubernetes desejada]
# Exemplo preenchido
eksctl upgrade nodegroup ng-m6-large-sibbr-default --cluster eks-sibbr-hml --kubernetes-version 1.26
eksctl upgrade nodegroup ng-m6-xlarge-sibbr-cassandra --cluster eks-sibbr-hml --kubernetes-version 1.26
eksctl upgrade nodegroup ng-m6-xlarge-sibbr-solr --cluster eks-sibbr-hml --kubernetes-version 1.26
eksctl upgrade nodegroup ng-sibbr-m6-spot --cluster eks-sibbr-hml --kubernetes-version 1.26
Faça o acompanhamento do update através dos logs do terminal e através do Rancher. Será possível ver os nodes com a versão antiga caindo e nodes com a versão nova surgindo. Após isso, verifique se as aplicações que estava executando antes subiram corretamente e estão em pleno funcionamento.
[x] Após a equalização das versões do API Server e dos node groups, faça o update do cluster (API Sever), seguido do update dos node groups, todos para a mesma versão:
# Template
eksctl upgrade cluster --region [Região AWS] --name [Nome do cluster] --version [Versão do kubernetes desejada] --approve
eksctl upgrade nodegroup [Nome do node group 1] --cluster [Nome do cluster EKS] --kubernetes-version [Versão do kubernetes desejada]
eksctl upgrade nodegroup [Nome do node group 2] --cluster [Nome do cluster EKS] --kubernetes-version [Versão do kubernetes desejada]
eksctl upgrade nodegroup [Nome do node group 3] --cluster [Nome do cluster EKS] --kubernetes-version [Versão do kubernetes desejada]
eksctl upgrade nodegroup [Nome do node group 4] --cluster [Nome do cluster EKS] --kubernetes-version [Versão do kubernetes desejada]
# Exemplo preenchido
eksctl upgrade cluster --region us-east-1 --name eks-sibbr-hml --version 1.27 --approve
eksctl upgrade nodegroup ng-m6-large-sibbr-default --cluster eks-sibbr-hml --kubernetes-version 1.27
eksctl upgrade nodegroup ng-m6-xlarge-sibbr-cassandra --cluster eks-sibbr-hml --kubernetes-version 1.27
eksctl upgrade nodegroup ng-m6-xlarge-sibbr-solr --cluster eks-sibbr-hml --kubernetes-version 1.27
eksctl upgrade nodegroup ng-sibbr-m6-spot --cluster eks-sibbr-hml --kubernetes-version 1.27
[x] Realizar acompanhamento do processo através dos logs do eksctl, Rancher e console AWS no EKS, verificando em caso de erros ou apps que não subiram