Organizando E Tornando O Kubeconfig Interativo
Aprenda a organizar seu kubeconfig!
Qual a melhor forma de organizar múltiplos clientes e projetos para administrar seus clusters?
Sabemos que o kubectl precisa de um kubeconfig para funcionar, podemos apontar diretamente e executar algo
$ kubectl --kubeconfig=arquivo_de_config get nodes
Podemos usar também a variável kubeconfig
$ export KUBECONFIG=/caminho/para/arquivo/config
$ kubect get nodes
E como eu faço para dar conta de gerenciar dezenas de projetos e clientes?
Eu uso o kubectx + kubens + fzf + kubectl-import, falaremos disso a frente :)
Primeira coisa que você tem que pensar é que um único arquivo de kubeconfig é suficiente para todos os seus projetos, inclusive o arquivo foi pensado para ter diferentes contextos.
Primeiro vamos entender como funciona esse arquivo e seus contextos.
Entendendo contextos
Veja um exemplo simples de arquivo de configuração do kubectl com diferentes contextos
apiVersion: v1
kind: Config
preferences: {}
clusters:
- cluster:
name: prd
- cluster:
name: dev
- cluster:
name: tst
- cluster:
users:
- name: engineers
- name: developers
- name: testers
contexts:
- context:
name: production-cluster
user: name
cluster: prd
- context:
name: dev-cluster
user: name
cluster: dev
- context:
name: test-cluster
user: name
cluster: tst
Agora vamos aprender a criar esse arquivo passo a passo.
Adicionando clusters
Adicionando cluster prd com certificado CA
$ kubectl config --kubeconfig=config set-cluster projeto-prd --server=https://192.168.222.80 --certificate-authority=prd-cert-file
Adicionando cluster dev com certificado CA
$ kubectl config --kubeconfig=config set-cluster projeto-dev --server=https://172.16.31.20 --certificate-authority=dev-cert-file
Adicionando cluster tst e ignorando o certificado
$ kubectl config --kubeconfig=config set-cluster projeto-tst --server=https://10.200.3.90 --certificate-authority=tst-ca-file
Adicionando usuários
Adicionando usuário para engenheiros com certificado
$ kubectl config --kubeconfig=config set-credentials engineers --client-certificate=eng-cert-file --client-key=eng-key-file
Adicionando usuário para desenvolvedores com certificado
$ kubectl config --kubeconfig=config set-credentials developers --client-certificate=dev-cert-file --client-key=dev-key-file
Adicionando usuário para testadores com user/senha
$ kubectl config --kubeconfig=config set-credentials testers --username=admin --password=password
Adicionando contextos
Adicionando contexto para cluster de produção com usuário engineers
$ kubectl config --kubeconfig=config set-context cluster-projeto-prd --cluster=projeto-prd --user=engineers
Adicionando contexto para cluster de desenvolvimento com usuário developer
$ kubectl config --kubeconfig=config set-context cluster-projeto-dev --cluster=projeto-dev --user=developers
Adicionando contexto para cluster de teste com usuário testers
$ kubectl config --kubeconfig=config set-context cluster-projeto-tst --cluster=projeto-tst --user=testers
Verificando arquivo
Leia o arquivo
$ cat config
Agora você provavelmente tem um arquivo como esse, acredito que a única diferença para o seu é que eu coloquei o kind e preferences no topo.
apiVersion: v1
kind: Config
preferences: {}
clusters:
- cluster:
certificate-authority: dev-cert-file
server: https://172.16.31.20
name: projeto-dev
- cluster:
certificate-authority: prd-cert-file
server: https://192.168.222.80
name: projeto-prd
- cluster:
certificate-authority: tst-ca-file
server: https://10.200.3.90
name: projeto-tst
contexts:
- context:
cluster: projeto-dev
user: developers
name: cluster-projeto-dev
- context:
cluster: projeto-prd
user: engineers
name: cluster-projeto-prd
- context:
cluster: projeto-tst
user: testers
name: cluster-projeto-tst
current-context: ""
users:
- name: developers
user:
client-certificate: dev-cert-file
client-key: dev-key-file
- name: engineers
user:
client-certificate: eng-cert-file
client-key: eng-key-file
- name: testers
user:
password: password
username: admin
Agora que os contextos foram configurados, podemos mudar de contexto assim.
$ kubectl config --kubeconfig=config use-context cluster-projeto-prd
E a partir daí qualquer comando do kubectl será realizado no cluster configurado nesse contexto.
$ kubeclt --kubeconfig=config get nodes
Exemplo de saída
k8s-prd-ctl-01 Ready controlplane,etcd 6d1h v1.21.7
k8s-prd-ctl-02 Ready controlplane,etcd 6d1h v1.21.7
k8s-prd-ctl-03 Ready controlplane,etcd 6d1h v1.21.7
k8s-prd-ctl-04 Ready controlplane,etcd 6d1h v1.21.7
k8s-prd-ctl-05 Ready controlplane,etcd 6d1h v1.21.7
k8s-prd-worker-01 Ready worker 6d1h v1.21.7
k8s-prd-worker-02 Ready worker 6d1h v1.21.7
k8s-prd-worker-03 Ready worker 6d1h v1.21.7
k8s-prd-worker-04 Ready worker 6d1h v1.21.7
Verificando a configuração do kubectl
Com o comando abaixo você verá a configuração completa
$ kubectl config --kubeconfig=config view
Verificando apenas do contexto que está configurado
É preciso usar o parâmetro minify para limitar ao contexto escolhido
$ kubectl config --kubeconfig=config view --minify
Saída
apiVersion: v1
clusters:
- cluster:
certificate-authority: prd-cert-file
server: https://192.168.222.80
name: projeto-prd
contexts:
- context:
cluster: projeto-prd
user: engineers
name: cluster-projeto-prd
current-context: cluster-projeto-prd
kind: Config
preferences: {}
users:
- name: engineers
user:
client-certificate: eng-cert-file
client-key: eng-key-file
Observe a linha
current-context: cluster-projeto-prd
Sempre que alteramos de contexto essa linha será modificado no seu arquivo de configuração.
Existe algo mais prático para visualizar e trocar de contextos?
Sim, existe o projeto kubectx
- https://github.com/ahmetb/kubectx
Instalando via brew
$ brew install kubectx
Rodando
$ kubectx
Ele vai te mostrar os contextos disponíveis
cluster-projeto-prd
cluster-projeto-dev
cluster-projeto-tst
Para escolher o contexto basta digitar
$ kubectx cluster-projeto-prd
E pronto!
Existe algo ainda mais fácil?
Sim, você pode utilizar o projeto fzf
- https://github.com/junegunn/fzf
Instalando via brew
$ brew install fzf
Com ele o kubectx fica interativo, abre um menu e você seleciona o contexto.
$ kubectx
Saída
Consigo importar um kubeconfig?
Eu sei que ficar editando isso na mão dá um certo trabalho, mas tem solução. Recentemente eu encontrei o projeto kubectl-import para resolver essa questão.
- https://github.com/bitnami-labs/kubectl-import
Instalando o projeto
$ sudo curl -o kubectl-import https://raw.githubusercontent.com/bitnami-labs/kubectl-import/master/kubectl-import && chmod 0755 kubectl-import
Com ele você consegue pegar um kubeconfig e importar
$ export KUBECONFIG=/caminho/pro/seu/kubeconfig
$ ./kubectl-import kubeconfig-novo
E pronto, o novo cluster/contexto vai aparecer no seu kubectx. Recomendo editar o arquivo antes de importar, setando corretamente os nomes do cluster, user e contexto.
Tem algo parecido como kubectx só que para namespaces?
Tem sim, o projeto kubectx traz junto o kubens, aplicativo similar que serve para trocar de namespaces rapidamente de forma interativa, basta digitar
$ kubens
E escolher o namespace.
Amarrando as pontas
Espero que tenha aprendido a usar contextos do kubeconf, usar o kubectx, fzf, kubectl-import e agilizar a administração de seus clusters.
Esse post é o que eu chamo de DROPS, entenda o modelo aqui.
[s]
Guto
---
Se gostou manda um alo no twitter @gutocarvalho.
Gostou do conteúdo?
Você também me encontra nessas redes!
Mastodon
PixelFed
Lemmy
WriteFreely
@gutocarvalho@bolha.blog @notamental@bolha.blog @poesias@bolha.blog @contos@bolha.blog
Bookwyrm
Peertube
Friendica
Quer saber mais sobre mim?
Visite meus sites!
E meus blogs:
- https://blogs.gutocarvalho.net
- https://blogs.gutocarvalho.net/falagutera
- https://blogs.gutocarvalho.net/infra
- https://blogs.gutocarvalho.net/opiniao
- https://blogs.gutocarvalho.net/contos
- https://blogs.gutocarvalho.net/poesias
- https://blogs.gutocarvalho.net/lives
- https://blogs.gutocarvalho.net/orixas
- https://blogs.gutocarvalho.net/archives
Conhece o Coletivo Bolha?
Então vem conhecer o bolha.io ou bolhaverso!
- fediverso
- mastodon, https://bolha.us
- pixelfed, https://bolha.photos
- lemmy, https://bolha.forum
- bookwyrnm, https://bolha.review
- writefreely, https://bolha.blog
- peertube, https://bolha.tube
- castopod, https://bolha.studio
- owncast, https://bolha.stream
- friendica, https://bolha.network
- chat
- mattermost, https://mattermost.bolha.chat
- zulip, https://zulip.bolha.chat
- vídeo
- jitsi, https://bolha.video
- jitsi, https://bolha.video
- frontends
- lingva, https://translate.bolha.tools
- libremdb, https://libremdb.bolha.tools
- translations
- libretranslate, https://libretranslate.bolha.tools
- editors
- hedgedoc, https://notes.bolha.tools
- draw.io, https://draw.bolha.tools
- excalidraw, https://excalidraw.bolha.tools
- pdf stirling, https://spdf.bolha.tools
- wisemaping, https://mindmap.bolha.tools
- mermaid, https://mermaid.bolha.tools
- cryptpad, https://cryptad.bolha.tools
- secrets sharing
- yopass, https://yopass.bolha.tools
- password pusher, https://pusher.bolha.tools
- pastbin
- yabin, https://yabin.bolha.tools
- terminal recorder
- ascinnema, https://ascinemma.bolha.tools
- anti paywall
- 13ft, https://open.bolha.tools
Nós temos muito mais para compartilhar contigo!
Quer apoiar nosso trabalho? Você pode!
- https://www.patreon.com/bolha
- https://apoia.se/bolha
- pix@bolha.us
Te vejo no mastodon da bolha.us!
[s]