Manipulação de vários clusters Kubernetes usando kubesh

Quando você está trabalhando com vários clusters Kuberenetes, precisa informar às várias ferramentas que usa qual cluster procurar. Existem algumas ferramentas e soluções alternativas para isso, mas eu as considero complicadas e / ou sujeitas a erros. Então, arranhei minha coceira: apresento-lhe kubesh :

Motivação

Eu uso o GKE para o trabalho e para meu projeto builderscon.

Isso significa que tenho duas contas do Google: uma para o trabalho e outra para minhas necessidades particulares. E eu tenho vários clusters em cada um.

Por mais tempo e (embora complicado) me reautenticando e permitindo que o gcloud armazene as credenciais padrão do aplicativo em ~ / .config / gcloud / application_default_credentials.json e ter meu kubeconfig atualizado via gcloud container clusters get-credentials de tempos em tempos fazia o trabalho para mim.

Mas com o tempo, comecei a enfrentar algumas situações problemáticas.

Um problema é que comecei a ter incidentes em que trabalharia em um cluster durante a manhã e, algum tempo depois, decidi trabalhar em outro projeto e percebi que estava trabalhando no cluster do manhã, quando eu realmente queria trabalhar em outro. Ainda não fiz isso, mas estremeço ao pensar no que aconteceria se, de alguma forma, decidisse excluir um recurso do Kubernetes em um cluster não intencional.

Também houve casos em que eu estaria trabalhando em dois clusters que precisavam se comunicar um com o outro. Por exemplo, talvez você tenha um cluster que executa uma instância do Prometheus em toda a organização e deseja monitorar outros clusters do Kubernetes. Nesta situação, gostaria de monitorar os dois clusters ao mesmo tempo.

Artes anteriores

Existem outras ferramentas que fazem coisas semelhantes. Uma ferramenta que me recomendaram foi o kubectx :

Embora isso torne o gerenciamento de contextos muito mais fácil, porque usa kubectl use-context por baixo, os efeitos são globais. Isso significa que, se você usá-lo em um terminal e voltar para outro terminal para usar kubectl, talvez não esteja mais trabalhando no cluster pretendido.

Você também pode criar vários arquivos kubecfg e alternar configurando diferentes variáveis ​​KUBE_CONFIG. Esta parece ser a maneira mais comum, mas acho inaceitável manter as entradas do kubeconfig. Na verdade, acho que certamente posso fazer isso, mas eu gostaria de dizer aos meus colegas para aprenderem a criar e gerenciar esses arquivos? Hmm…

Coçando minha coceira

Então agora eu tenho kubesh . Isso basicamente gera um novo shell, que aponta kubectl , stern e helm em seus respectivos wrappers. Esses wrappers fornecem apenas o contexto de kubernetes que você especificou ao iniciar o kubesh

Os efeitos são locais para sua sessão de shell. Em outro terminal, você está perfeitamente protegido contra seus efeitos e, se estiver trabalhando em um cluster diferente, sua configuração não deve ser alterada.

Se você quiser mais consistência, pode abrir outro novo shell e fazer o seguinte:

E isso forçará chamadas subsequentes para kubectl e amigos se referirem ao cluster especificado apenas por my-other-context .

Você pode até mesmo executar kubectl use-context aleatório em algum outro terminal, e ainda funcionaria (nota: não execute use-context enquanto kubesh está em vigor).

integração peco

Se você se cansar de escrever nomes de contexto longos, apenas integre kubesh com peco (isenção de responsabilidade: eu sou o autor)

Procure no README de kubesh como integrar o peco :

Agora você pode selecionar um contexto interativamente!

Agora você deve conseguir navegar facilmente entre os clusters. Feliz Hacking!