Inspeccionar recursos básicos del clúster
En este paso, inspeccionarás recursos básicos de Kubernetes, como pods, despliegues (deployments) y servicios, en todos los espacios de nombres (namespaces). Al utilizar la bandera -A
(o --all-namespaces
), verás cómo se organizan los recursos en todo el clúster. Esta es una excelente oportunidad para introducir y comprender el concepto de espacios de nombres (namespaces) en Kubernetes.
Espacios de nombres (Namespaces): Aislamiento de recursos
Los espacios de nombres son particiones lógicas dentro de un clúster de Kubernetes que ayudan a organizar y gestionar recursos. Proporcionan una forma de agrupar objetos relacionados y aplicar políticas, controles de acceso y cuotas de recursos a un nivel granular. Al separar los recursos en diferentes espacios de nombres, puedes:
- Mejorar la organización: Agrupar cargas de trabajo relacionadas (por ejemplo, por proyecto, equipo o entorno, como desarrollo, prueba y producción).
- Mejorar la seguridad y el control de acceso: Restringir qué usuarios o cuentas de servicio pueden ver o modificar recursos en un espacio de nombres en particular.
- Simplificar la gestión de recursos: Aplicar límites de recursos, políticas de red y otras configuraciones a nivel de clúster de manera más efectiva.
Cuando listas recursos con la bandera -A
(o --all-namespaces
), notarás que los componentes pertenecientes al sistema de Kubernetes residen en el espacio de nombres kube-system
, que está dedicado a la infraestructura a nivel de clúster. Las aplicaciones creadas por el usuario generalmente residen en el espacio de nombres default
u otros espacios de nombres personalizados que definas.
Espacios de nombres y 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
En el diagrama:
- El plano de control (Control Plane) gestiona todo el clúster, comunicándose con los nodos y controlando las cargas de trabajo.
- Los espacios de nombres (Namespaces) (como
kube-system
, default
y dev
) separan lógicamente los recursos dentro del clúster.
kube-system
contiene componentes a nivel de sistema como CoreDNS y kube-dns.
default
se utiliza comúnmente para cargas de trabajo generales, aquí representado por un despliegue my-app
.
dev
podría representar un entorno de desarrollo, aislado de las cargas de trabajo de producción.
Al ver los recursos en todos los espacios de nombres, obtienes una comprensión integral de cómo estas particiones lógicas ayudan a mantener un clúster organizado y seguro.
Ejemplos:
Listar todos los pods en todos los espacios de nombres:
kubectl get pods -A
Ejemplo de salida:
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
Aquí, se ven todos los pods relacionados con el sistema que se ejecutan en el espacio de nombres kube-system
. Si tuvieras otros despliegues o servicios en diferentes espacios de nombres, también aparecerían en esta lista, cada uno claramente delimitado por su espacio de nombres.
Listar todos los despliegues en todos los espacios de nombres:
kubectl get deployments -A
Ejemplo de salida:
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system coredns 1/1 1 1 20m
El despliegue coredns
reside en el espacio de nombres kube-system
.
Obtener una vista completa de todos los recursos en todos los espacios de nombres:
kubectl get all -A
Este comando muestra una vista general de pods, servicios y despliegues en diferentes espacios de nombres, lo que te ayuda a entender cómo se distribuyen estos recursos en todo el clúster.
Conclusiones clave:
- Los espacios de nombres (Namespaces) proporcionan aislamiento y organización lógica dentro de un clúster de Kubernetes.
- Diferentes componentes y recursos de Kubernetes se organizan en espacios de nombres específicos (por ejemplo,
kube-system
para servicios principales, default
para cargas de trabajo generales y espacios de nombres adicionales que crees).
- Al utilizar
-A
para ver los recursos en todos los espacios de nombres, obtienes información sobre cómo está estructurado tu clúster y cómo los espacios de nombres actúan como límites para la organización de recursos y el control de acceso.
Al entender cómo los espacios de nombres funcionan como entornos lógicos, puedes navegar, aislar y gestionar mejor tus cargas de trabajo y los recursos relacionados del clúster, especialmente a medida que escales tus despliegues e introduzcas más complejidad en tu entorno de Kubernetes.