O jeito mais simples de aprender Kubernetes é com a sua API
Tags: kubernetes, containers, development
Published: 2021-05-27 15:06:44

---
title: O jeito mais simples de aprender Kubernetes é com a sua API
published: true
date: 2021-05-06 18:50:34 UTC
tags: kubernetes,containers,development
canonical_url: https://blog.lsantos.dev/drop-o-jeito-mais-simples-de-aprender-kubernetes/
cover_image: https://images.unsplash.com/photo-1558234336-b5379131bf43?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDN8fGhlbG18ZW58MHx8fHwxNjIwMzE4MDc3&ixlib=rb-1.2.1&q=80&w=2000
---

> **NOVIDADE!**  
> Este é o primeiro artigo de um novo tipo de conteúdo que estou chamando de [_drop_](https://blog.lsantos.dev/tag/drop/)_. Drops são pequenos textos (com até 5 minutos de leitura) que mostram aspectos interessantes de algum assunto. No geral, serão pequenos tutoriais ou dicas interessantes._  
>   
> O objetivo destes drops são para que eu possa criar conteúdo mais frequentemente, ao invés de criar semanalmente um conteúdo longo, que estava ficando bastante pesado para mim, como único escritor/editor do blog.  
>   
> Espero que gostem :)

* * *

Um dos pontos que quase todo dev concorda é que o Kubernetes é bastante complicado. Principalmente para quem está aprendendo e quem está entrando agora no mundo de aplicações distribuídas e containers.

Apesar de existirem [excelentes livros](https://amzn.to/3tksp5H) sobre o assunto, o conteúdo ainda é complexo e exige que as pessoas pensem um pouco fora do que estamos acostumados a ver em um ambiente de deploy tradicional. Em parte, isto vem porque precisamos configurar muitas extensões e o Kubernetes é [absurdamente extensível](https://amzn.to/3b9EELZ), e assim pensamos que o Kubernetes é um único grande sistema, mas na verdade ele é composto de diversas pequenas APIs que manipulam arquivos.

## A grande ideia

A grande ideia por trás do Kubernetes é que tudo é um pequeno arquivo, assim como o unix já nos mostrou antes, essa é uma excelente ideia para quando trabalhamos com configurações extensíveis.

Simplificando MUITO o fluxo. Quando criamos um Deployment, um Pod, um Service, o que estamos fazendo é, na verdade, adicionando um item em um banco de dados (etcd) que, por sua vez, é monitorado por uma série de _control loops_ que chamamos de _controllers_. E são estes controllers que, de fato, fazem o trabalho de sincronizar os estados desejados e existentes deste cluster.

O mais legal de tudo isso é que o Kubernetes possui uma API muito boa para podermos obter estes recursos.

## Entendendo a API

Toda a API do Kubernetes segue à risca a ideia do ReST. Então sempre vamos ter um recurso que começa desta forma:

```
http://<dns do control plane>/api/<versão>/namespaces/<namespace>/<recurso>/[nome][?opções]
```

Primeiramente precisamos obter o endereço do nosso control plane. Isso é super simples, podemos somente executar o comando `kubectl cluster-info --context <nome do context>`.

> O contexto pode ser omitido se você quiser a informação do cluster que está no contexto atual.

Isso vai nos dar uma saída como esta:

```
Kubernetes control plane is running at https://algundns.subdominio.tld:443
CoreDNS is running at https://algundns.subdominio.tld:443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://algundns.subdominio.tld:443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
```

Lembrando que esta saída pode variar dependendo de onde você está hospedando seu cluster.

### Segurança

A API do Kubernetes é um servidor ReST simples, porém as características de segurança utilizadas para poder manter seu cluster seguro, já que esta API tem total controle dentro do control plane, são bem elaboradas.

O uso de certificados digitais atrelados a objetos de [usuário](https://dev.to/azure/criando-e-gerenciando-usuarios-no-kubernetes-ege) e [RBAC](https://dev.to/azure/dando-permissoes-a-usuarios-com-kubernetes-16pn) do sistema (ou até mesmo usando técnicas mais avançadas [como AD](https://dev.to/azure/integrando-o-azure-active-directory-no-aks-48pa)) são empregadas para proteger a informação.

Como estamos fazendo apenas uma demonstração, podemos utilizar o próprio `kubectl` para gerenciar este acesso para nós, já que ele tem todos os dados de acesso de todos os clusters. Basta executarmos `kubectl proxy &` para rodar um processo em segundo plano que vai fazer um port forwarding da API do kubernetes para uma porta local, assim poderemos acessar os dados da api sem precisar nos preocupar com configurações de permissão.

```
$ kubectl proxy &
[1] 5705
Starting to serve on 127.0.0.1:8001
```

## Manipulando a API

Agora que temos o cluster rodando localmente, você pode usar o gerenciador de requests de sua preferência, como o cURL, wget, [postman](https://www.postman.com/). Eu estou usando o [insomnia](https://dev.to/scottw/insomnia-rest-client-578d-temp-slug-9682618).

Vamos obter a lista de pods do meu cluster usando a api com a request `GET http://localhost:8001/api/v1/namespaces/default/pods`:

![](https://raw.githubusercontent.com/khaosdoctor/blog-assets/master/images/2021/05/image.png)<figcaption>Gerenciador Insomnia mostrando a saída da request para obter os pods do Kubernetes</figcaption>

Alguns recursos, como os deployments, não estão no que chamamos de "core API" do Kubernetes. A core API é quando não precisamos especificar nada no campo `apiVersion` do recurso, como nos Pods, que é `apiVersion: v1`, isso significa que podemos acessar com `/api/v1`.

Os deployments fazem parte de `apps/v1`, para isso temos um novo recurso base chamado `apis`, então podemos obter a lista de deployments com `http://localhost:8001/apis/apps/v1/namespaces/default/deployments`:

![](https://raw.githubusercontent.com/khaosdoctor/blog-assets/master/images/2021/05/image-1.png)<figcaption>Insomnia com a resposta para a lista de deployments do kubernetes</figcaption>

O mesmo vale para os ingresses que estão em `networking.k8s.io/v1beta1` (ou em `v1` dependendo da versão do seu cluster). Desta forma o endereço é `http://localhost:8001/apis/networking.k8s.io/v1/namespaces/default/ingresses`

![](https://raw.githubusercontent.com/khaosdoctor/blog-assets/master/images/2021/05/image-2.png)<figcaption>Insomnia mostrando a saída da requisição para a lista de ingresses</figcaption>

> Quando estamos tratando com o namespace `default`, que é o padrão, podemos omitir completamente a parte `/namespaces/default`, ficando somente `http://localhost:8001/api/v1/pods`.

## Quer saber mais?

Dê uma olhada na [documentação da API do Kubernetes](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/), ou também passe a flag `-v6` para qualquer comando `kubectl` para ver o caminho que ele está chamando (se você passar `-v8` vai ver também o body de resposta):

```
 $ kubectl get pods -v6
I0506 15:28:38.203647 6011 loader.go:379] Config loaded from file: /home/khaosdoctor/.kube/config
I0506 15:28:38.796623 6011 round_trippers.go:445] GET https://dominio.subdominio.tld:443/api/v1/namespaces/default/pods?limit=500 200 OK in 580 milliseconds
```

E aqui está uma lista de livros sensacionais sobre Kubernetes que você pode utilizar para aprender mais!

[

Kubernetes: Tudo sobre orquestração de contêineres eBook: Santos, Lucas: Amazon.com.br: Loja Kindle

Kubernetes: Tudo sobre orquestração de contêineres eBook: Santos, Lucas: Amazon.com.br: Loja Kindle

Lucas Santos

 ![](https://fls-na.amazon.com.br/1/batch/1/OP/A2Q3Y263D00KWC:137-4932049-7672642:ERZK7PPGK9CZDA6D0FG5%24uedata=s:%2Frd%2Fuedata%3Fstaticb%26id%3DERZK7PPGK9CZDA6D0FG5%26pty%3DShoppingCart%26spty%3DCart%26pti%3D:1000)
](https://www.amazon.com.br/gp/product/B07X2MQL1Q/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=lsantosdev0e-20&creative=9325&linkCode=as2&creativeASIN=B07X2MQL1Q&linkId=c7a24400879d4b0f6d8a253d384c82f3)

[

Kubernetes Básico: Mergulhe no futuro da infraestrutura eBook: Burns, Brendan, Beda, Joe, Hightower, Kelsey: Amazon.com.br: Loja Kindle

Kubernetes Básico: Mergulhe no futuro da infraestrutura eBook: Burns, Brendan, Beda, Joe, Hightower, Kelsey: Amazon.com.br: Loja Kindle

Brendan Burns

 ![](https://fls-na.amazon.com.br/1/batch/1/OP/A2Q3Y263D00KWC:137-5539732-4517028:T6J8988986KND970ZF5X%24uedata=s:%2Frd%2Fuedata%3Fstaticb%26id%3DT6J8988986KND970ZF5X%26pty%3DShoppingCart%26spty%3DNewHUC%26pti%3DB07F2QXJQL:1000)
](https://www.amazon.com.br/gp/product/B08455LHMY/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=lsantosdev0e-20&creative=9325&linkCode=as2&creativeASIN=B08455LHMY&linkId=d14f51aed9a0a71eb8c2e832a51b5f71)

[

DevOps Nativo de Nuvem com Kubernetes: Como Construir, Implantar e Escalar Aplicações Modernas na Nuvem | Amazon.com.br

Compre online DevOps Nativo de Nuvem com Kubernetes: Como Construir, Implantar e Escalar Aplicações Modernas na Nuvem, de Arundel, John, Domingus, Justin na Amazon. Frete GRÁTIS em milhares de produtos com o Amazon Prime. Encontre diversos livros escritos por Arundel, John, Domingus, Justin com ótim…

John ArundelAmazon.com.br

 ![](https://fls-na.amazon.com.br/1/batch/1/OP/A2Q3Y263D00KWC:143-4904604-8785066:HJMEDYQ8D3H1MAS1XEJQ%24uedata=s:%2Frd%2Fuedata%3Fstaticb%26id%3DHJMEDYQ8D3H1MAS1XEJQ%26pty%3DShoppingCartWebview%26spty%3DiPhoneApp%26pti%3D:1000)
](https://www.amazon.com.br/gp/product/8575227785/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=lsantosdev0e-20&creative=9325&linkCode=as2&creativeASIN=8575227785&linkId=b39929203ebd04959db95912ff457c26)

[

KUBERNETES: A Simple Guide to Master Kubernetes for Beginners and Advanced Users (2020 Edition) (English Edition) - eBooks em Inglês na Amazon.com.br

Compre KUBERNETES: A Simple Guide to Master Kubernetes for Beginners and Advanced Users (2020 Edition) (English Edition) de Docker, Brian na Amazon.com.br. Confira também os eBooks mais vendidos, lançamentos e livros digitais exclusivos.

Brian DockereBooks em Inglês na Amazon.com.br

 ![](https://fls-na.amazon.com.br/1/batch/1/OP/A2Q3Y263D00KWC:136-4201502-7290410:QJW5YPD2CFTHRPZF128N%24uedata=s:%2Frd%2Fuedata%3Fstaticb%26id%3DQJW5YPD2CFTHRPZF128N%26pty%3DCheckoutPrefetchSPP%26spty%3Dprefetch-assets%26pti%3D:1000)
](https://www.amazon.com.br/gp/product/B088Q38BCR/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=lsantosdev0e-20&creative=9325&linkCode=as2&creativeASIN=B088Q38BCR&linkId=2d0a398b3f5b0c6a290ab240b8af0736)

[

Quick Start Kubernetes (English Edition) eBook: Poulton, Nigel: Amazon.com.br: Loja Kindle

Quick Start Kubernetes (English Edition) eBook: Poulton, Nigel: Amazon.com.br: Loja Kindle

Nigel Poulton

 ![](https://fls-na.amazon.com.br/1/batch/1/OP/A2Q3Y263D00KWC:141-0877456-5740744:GGD37XSJN1RWSSVFBSA0%24uedata=s:%2Frd%2Fuedata%3Fstaticb%26id%3DGGD37XSJN1RWSSVFBSA0%26pty%3DCheckoutPaymentAW%26spty%3D/x70/x69/x70/x65/x6c/x69/x6e/x65/x3a/x68/x74/x6d/x6c%26pti%3DC703-7264508-2814666:1000)
](https://www.amazon.com.br/gp/product/B08T21NW4Z/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=lsantosdev0e-20&creative=9325&linkCode=as2&creativeASIN=B08T21NW4Z&linkId=80120ba132817865bb9b7c36e81033b3)