k8s-multicluster-cli

command module
v1.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 6, 2024 License: MIT Imports: 2 Imported by: 0

README

Multicluster CLI

Visão Geral

O Multicluster CLI é uma ferramenta desenvolvida para gerenciar múltiplos clusters Kubernetes simultaneamente. Ela oferece uma gama de comandos para interagir com recursos Kubernetes em diferentes clusters, como listar pods, nodes, ConfigMaps, Secrets, Ingressos, e mais. A CLI foi construída com escalabilidade e performance em mente, utilizando concorrência, caching e design modular para lidar eficientemente com operações em grande escala.

Funcionalidades

  • Gerenciamento de Múltiplos Clusters: Execute comandos em múltiplos clusters Kubernetes de forma concorrente.
  • Gerenciamento de Pods: Liste pods em vários clusters com opções de filtro.
  • Gerenciamento de Nodes: Liste e exiba o status de nodes, incluindo papéis e condições.
  • ConfigMaps e Secrets: Liste e recupere ConfigMaps e Secrets, com a possibilidade de exibir o conteúdo.
  • Gerenciamento de Ingressos: Recupere e exiba recursos de Ingress em vários clusters.
  • Logs: Obtenha logs de pods, com opções para logs específicos de containers e streaming em tempo real (modo follow).
  • Operações com Manifestos: Aplique e delete manifestos Kubernetes em múltiplos clusters.
  • Configurações Personalizáveis: Suporte para arquivos de configuração personalizados e caminhos de kubeconfig.

Instalação

Pré-requisitos
  • Go 1.22 ou superior
  • Clusters Kubernetes configurados e acessíveis via kubeconfig
Compilação da CLI

Clone o repositório e navegue até o diretório do projeto:

git clone https://github.com/seu-repositorio/multicluster-cli.git
cd multicluster-cli

Compile a CLI:

go build -o multicluster

Uso

Sintaxe Geral
./multicluster-cli [comando] [flags]
Comandos
  • get pods: Liste pods em múltiplos clusters.

    ./multicluster-cli get pods --config /caminho/para/config.json --kubeconfig /caminho/para/kubeconfig --namespaces default --status Running --cluster eks-cluster-1
    
  • get nodes: Liste nodes em múltiplos clusters.

    ./multicluster-cli get nodes --config /caminho/para/config.json --kubeconfig /caminho/para/kubeconfig --cluster eks-cluster-1
    
  • get configmaps: Liste ConfigMaps em múltiplos clusters.

    ./multicluster-cli get configmaps --config /caminho/para/config.json --kubeconfig /caminho/para/kubeconfig --namespaces default --name meu-configmap --cluster eks-cluster-1
    
  • get secrets: Liste Secrets em múltiplos clusters.

    ./multicluster-cli get secrets --config /caminho/para/config.json --kubeconfig /caminho/para/kubeconfig --namespaces default --name meu-secret --cluster eks-cluster-1
    
  • get ingress: Liste Ingresses em múltiplos clusters.

    ./multicluster-cli get ingress --config /caminho/para/config.json --kubeconfig /caminho/para/kubeconfig --namespaces default --cluster eks-cluster-1
    
  • get logs: Obtenha logs de um pod específico.

    ./multicluster-cli get logs --config /caminho/para/config.json --kubeconfig /caminho/para/kubeconfig --namespace default --pod meu-pod --container meu-container --cluster eks-cluster-1 --follow
    
Flags
  • --config, -c: Caminho para o arquivo de configuração dos clusters (padrão: config.json ou valor de MC_CONFIG).
  • --kubeconfig, -k: Caminho para o arquivo kubeconfig (padrão: ~/.kube/config).
  • --namespaces, -n: Lista de namespaces separada por vírgulas para filtrar (padrão: todos os namespaces).
  • --status, -s: Status para filtrar pods (ex.: Running, Pending).
  • --cluster, -l: Nome do cluster (se vazio, o comando se aplica a todos os clusters).

para mais comandos e flags tem o --help e o para atribuição curta -h

Configuração

A CLI utiliza um arquivo de configuração JSON para definir clusters e contextos:

{
  "clusters": [
    {
      "name": "eks-cluster-1",
      "context": "arn:aws:eks:region:id-conta:cluster/eks-cluster-1"
    },
    {
      "name": "eks-cluster-2",
      "context": "arn:aws:eks:region:id-conta:cluster/eks-cluster-2"
    }
  ]
}
Caching

A CLI faz cache de dados de configuração e contexto para melhorar a performance. O cache expira após 5 minutos por padrão.

Tratamento de Erros

A CLI utiliza logrus para logging estruturado e fornece mensagens detalhadas de erro. Se uma operação falhar em um cluster específico, a CLI continua processando os demais clusters.

Exemplo de ouputs:
Exemplos de Output para Comandos Comuns da Multicluster CLI
Comando: multicluster get nodes
Cluster: dev-cluster
+---------------+----------+---------------+--------+------------+
|     Name      |  Status  |     Roles     |  Age   |  Version   |
+---------------+----------+---------------+--------+------------+
| node-01       | Ready    | master        | 15d    | v1.22.0    |
| node-02       | Ready    | worker        | 15d    | v1.22.0    |
| node-03       | NotReady | worker        | 14d    | v1.22.0    |
| node-04       | Ready    | worker        | 13d    | v1.22.0    |
+---------------+----------+---------------+--------+------------+

Cluster: prod-cluster
+---------------+----------+---------------+--------+------------+
|     Name      |  Status  |     Roles     |  Age   |  Version   |
+---------------+----------+---------------+--------+------------+
| node-01       | Ready    | master        | 15d    | v1.22.0    |
| node-02       | Ready    | worker        | 15d    | v1.22.0    |
| node-03       | NotReady | worker        | 14d    | v1.22.0    |
| node-04       | Ready    | worker        | 13d    | v1.22.0    |
+---------------+----------+---------------+--------+------------+
Comando: multicluster get pods --namespaces default,kube-system
Cluster: staging-cluster
+------------+-------------------------+-----------------+---------+-------------+
| Namespace  |        Pod Name          | READY | Status  |   Node      |
+------------+-------------------------+-----------------+---------+-------------+
| default    | frontend-deployment-1234 | 3/3   | Running | node-01     |
| default    | backend-deployment-5678  | 2/2   | Running | node-02     |
| kube-system| coredns-78fcdcb99c-kmdjl | 1/1   | Running | node-03     |
+------------+-------------------------+-----------------+---------+-------------+

Cluster: prod-cluster
+------------+-------------------------+-----------------+---------+-------------+
| Namespace  |        Pod Name          | READY | Status  |   Node      |
+------------+-------------------------+-----------------+---------+-------------+
| default    | frontend-deployment-1234 | 3/3   | Running | node-01     |
| default    | backend-deployment-5678  | 2/2   | Running | node-02     |
| kube-system| coredns-78fcdcb99c-kmdjl | 1/1   | Running | node-03     |
+------------+-------------------------+-----------------+---------+-------------+
Comando: get configmaps --cluster prod-cluster
Cluster: prod-cluster
+-------------+-------------------+-------------------------+
| Namespace   |    ConfigMap Name |           Data          |
+-------------+-------------------+-------------------------+
| default     | app-config         | key1: value1            |
| kube-system | coredns            | Corefile: .:53...       |
+-------------+-------------------+-------------------------+
Comando: multicluster get secrets --namespace default
Cluster: dev-cluster
+-------------+-------------------+-----------+---------------------------------+
| Namespace   |    Secret Name    |   Type    |            Data Keys            |
+-------------+-------------------+-----------+---------------------------------+
| default     | db-password       | Opaque    | password: 16 bytes              |
| default     | api-key           | Opaque    | key: 32 bytes                   |
+-------------+-------------------+-----------+---------------------------------+

Cluster: prod-cluster
+-------------+-------------------+-----------+---------------------------------+
| Namespace   |    Secret Name    |   Type    |            Data Keys            |
+-------------+-------------------+-----------+---------------------------------+
| default     | db-password       | Opaque    | password: 16 bytes              |
| default     | api-key           | Opaque    | key: 32 bytes                   |
+-------------+-------------------+-----------+---------------------------------+
Comando: multicluster get logs --namespace default --pod frontend-deployment-1234
Cluster: dev-cluster
--- Logs for pod frontend-deployment-1234 in namespace default ---
2024-08-26 10:30:01 Starting application...
2024-08-26 10:30:02 Connecting to database...
2024-08-26 10:30:03 Application started on port 8080.

Esses exemplos mostram como a Multicluster CLI fornece informações detalhadas e organizadas para facilitar o gerenciamento de recursos Kubernetes em múltiplos clusters.

Contribuição

Contribuições são bem-vindas! Por favor, faça um fork do repositório, crie um branch de feature e envie um pull request.

Licença

Este projeto é licenciado sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL