Gerenciando APIs obsoletas do Kubernetes com Pluto
Tags: kubernetes, tutorial, k8s, sre
Published: 2023-03-12 20:01:33

## O que é o Pluto

[**Pluto**](https://github.com/FairwindsOps/pluto) é uma ferramenta desenvolvida pela [FairwindsOps](https://www.fairwinds.com/) que ajuda na detecção de [APIs obsoletas do Kubernetes ](https://kubernetes.io/docs/reference/using-api/deprecation-guide/).

Mas antes de falarmos da ferramenta, vamos entender um pouco sobre as [APIs do Kubernetes](https://kubernetes.io/docs/reference/using-api/api-concepts/) e porque devemos nos preocupar com elas.

## As APIs do Kubernetes

As APIs são a forma que podemos interagir com o cluster. Podemos então manipular e consultar os objetos (Pod, deployment...) através delas. Normalmente utilizamos o [kubectl](https://kubernetes.io/docs/reference/kubectl/) para acessar as APIs, mas também é possível através de chamadas REST.

### Substituições ou remoções das APIs do Kubernetes

O Kubernetes está em constante evolução, sendo assim, alguns recursos novos são adicionados e outros precisam ser removidos, o mesmo acontece para as APIs.

Como resultado, as APIs antigas são depreciadas e eventualmente removidas, a depreciação, nesse contexto, significa marcar uma API para eventual remoção.

Para saber mais como o Kubernetes deprecia suas APIs veja na documentação da [política de reprovação do Kubernetes](https://kubernetes.io/docs/reference/using-api/deprecation-policy/).

### Porque me preocupar com APIs obsoletas

Ao definir uma configuração de Deployment, você especifica a versão da API (`apiVersion`) do objeto Kubernetes a ser usado.

Se você atualizar seu cluster, há chances de encontrar APIs do Kubernetes depreciadas se a versão para a qual você atualizou não oferecer suporte a elas.

Nesse caso, provavelmente, seu Deployment pode não funcionar se a API depreciada tiver sido removida na nova versão do cluster.

Para saber todas as APIs depreciadas e/ou removidas veja no [guia de depreciação](https://kubernetes.io/docs/reference/using-api/deprecation-guide/).

Também é possível verificar todos os grupos de API suportados na sua versão através do comando `kubectl api-versions`

O desafio é como verificar quais APIs estão depreciadas e quais, de todos os recursos em execução no cluster, estão sendo utilizadas. **Nesse ponto que o Pluto entra para nos ajudar.**

## Características do Pluto

- Ele lista todas as APIs que foram depreciadas ou removidas, não apenas do Kubernetes, mas também para outras ferramentas como Istio e CertManager.

- Detecta APIs depreciadas a partir de arquivos de configuração, helm instalados e/ou em todos os resources do cluster.

- Também é possível utilizar num Workflow do Github Actions.

### Como instalar

Você pode instalar em sua estação [baixando a versão apropriada](https://github.com/FairwindsOps/pluto/releases) para seu sistema.

O Pluto possui versão para Windows, Linux e MacOs.

Exemplo de instalação no MacOs:

`wget https://github.com/FairwindsOps/pluto/releases/download/v5.15.1/pluto_5.15.1_darwin_amd64.tar.gz -O /tmp/pluto_5.15.1_darwin_amd64.tar.gz
tar -zxvf /tmp/pluto_5.15.1_darwin_amd64.tar.gz
chmod +x /tmp/pluto
cp /tmp/pluto /usr/local/bin`

### Exemplo de uso

Usando o comando `pluto detect-all-in-cluster` em um cluster que roda na versão 1.21 do Kubernetes, podemos ver que temos o recurso `HPA Operator` em uma versão que será removida na próxima versão do Kubernetes.

![saida do comando detect all](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vxi7s4v5s9uexcwhbo22.png)

Como a instalação dele foi através de um Helm, vemos o mesmo através do comando `pluto detect-helm`.

![saida do comando detect helm](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8zctfufzj1qypj0grqa1.png)

O comando `pluto -h` lista todos os comando disponíveis.