Inspecionar Recursos Básicos do Cluster
Nesta etapa, você inspecionará recursos básicos do Kubernetes — como Pods, Deployments e Services — em todos os namespaces. Ao usar a flag -A (ou --all-namespaces), você verá como os recursos são organizados em todo o cluster. Esta é uma excelente oportunidade para apresentar e entender o conceito de Namespaces no Kubernetes.
Namespaces: Isolamento de Recursos
Namespaces são partições lógicas dentro de um cluster Kubernetes que ajudam a organizar e gerenciar recursos. Eles fornecem uma maneira de agrupar objetos relacionados e aplicar políticas, controles de acesso e cotas de recursos em um nível granular. Ao separar os recursos em diferentes namespaces, você pode:
- Melhorar a Organização: Agrupar cargas de trabalho relacionadas (por exemplo, por projeto, equipe ou ambiente — como dev, test e production).
- Aprimorar a Segurança e o Controle de Acesso: Restringir quais usuários ou contas de serviço podem visualizar ou modificar recursos em um namespace específico.
- Simplificar o Gerenciamento de Recursos: Aplicar limites de recursos, políticas de rede e outras configurações em todo o cluster de forma mais eficaz.
Ao listar recursos com a flag -A (ou --all-namespaces), você notará que os componentes pertencentes ao sistema Kubernetes residem no namespace kube-system, que é dedicado à infraestrutura em nível de cluster. Aplicativos criados pelo usuário normalmente residem no namespace default ou em outros namespaces personalizados que você define.
Namespaces e Recursos
flowchart LR
%% User interacts with the cluster via kube-apiserver
User((Developer))
User -->|kubectl get pods -A| API[kube-apiserver]
%% Control Plane Subgraph
subgraph ControlPlane[Control Plane]
API
ETCD[etcd]
SCH[kube-scheduler]
CTLM[kube-controller-manager]
end
API --> ETCD
API --> SCH
API --> CTLM
%% kube-system namespace
subgraph kube-system[Namespace: kube-system]
SysDeployment[Deployment: coredns]
SysPod1[Pod: coredns-xxx]
SysService[Service: kube-dns]
SysDeployment --> SysPod1
SysService --> SysPod1
end
%% default namespace (renamed to avoid parse issues)
subgraph defaultNs[Namespace: default]
DefDeployment[Deployment: my-app]
DefPod1[Pod: my-app-pod1]
DefPod2[Pod: my-app-pod2]
DefService[Service: my-app-service]
DefDeployment --> DefPod1
DefDeployment --> DefPod2
DefService --> DefPod1
DefService --> DefPod2
end
%% dev namespace
subgraph dev[Namespace: dev]
DevDeployment[Deployment: dev-app]
DevPod[Pod: dev-app-pod]
DevService[Service: dev-app-service]
DevDeployment --> DevPod
DevService --> DevPod
end
%% Demonstration of communication
API --> kube-system
API --> defaultNs
API --> dev
No diagrama:
- O Plano de Controle gerencia todo o cluster, comunicando-se com os nós e controlando as cargas de trabalho.
- Namespaces (como
kube-system, default e dev) separam logicamente os recursos dentro do cluster.
kube-system contém componentes em nível de sistema, como CoreDNS e kube-dns.
default é comumente usado para cargas de trabalho gerais, aqui representado por um deployment my-app.
dev pode representar um ambiente de desenvolvimento, isolado das cargas de trabalho de produção.
Ao visualizar os recursos em todos os namespaces, você obtém uma compreensão abrangente de como essas partições lógicas ajudam a manter um cluster organizado e seguro.
Exemplos:
Listar todos os pods em todos os namespaces:
kubectl get pods -A
Exemplo de saída:
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-787d4945fb-j8rhx 1/1 Running 0 20m
kube-system etcd-minikube 1/1 Running 0 20m
kube-system kube-apiserver-minikube 1/1 Running 0 20m
kube-system kube-controller-manager-minikube 1/1 Running 0 20m
kube-system kube-proxy-xb9rz 1/1 Running 0 20m
kube-system kube-scheduler-minikube 1/1 Running 0 20m
kube-system storage-provisioner 1/1 Running 1 (20m ago) 20m
Aqui, você vê todos os pods relacionados ao sistema em execução no namespace kube-system. Se você tivesse outros deployments ou services em namespaces diferentes, eles também apareceriam nesta lista, cada um claramente delimitado por seu namespace.
Listar todos os deployments em todos os namespaces:
kubectl get deployments -A
Exemplo de saída:
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system coredns 1/1 1 1 20m
O deployment coredns reside no namespace kube-system.
Obter uma visão abrangente de todos os recursos em todos os namespaces:
kubectl get all -A
Este comando exibe uma visão geral de pods, services e deployments em diferentes namespaces, ajudando você a entender como esses recursos são distribuídos em todo o cluster.
Principais Conclusões:
- Namespaces fornecem isolamento lógico e organização dentro de um cluster Kubernetes.
- Diferentes componentes e recursos do Kubernetes são organizados em namespaces específicos (por exemplo,
kube-system para serviços principais, default para cargas de trabalho gerais e namespaces adicionais que você cria).
- Ao usar
-A para visualizar recursos em todos os namespaces, você obtém informações sobre como seu cluster é estruturado e como os namespaces servem como limites para a organização de recursos e controle de acesso.
Ao entender como os namespaces funcionam como ambientes lógicos, você pode navegar, isolar e gerenciar melhor suas cargas de trabalho e recursos relacionados ao cluster, especialmente ao dimensionar seus deployments e introduzir mais complexidade em seu ambiente Kubernetes.