Kubernetes (k8s) administra clústeres mediante objetos de recursos. A continuación, se exploran los conceptos esenciales y operaciones típicas.
Listado de Objetos de Recursos
Existen múltiples objetos de recursos en k8s. Para obtener una vista general:
$ kubectl api-resources | wc -l
# Salida: aproximadamente 74 objetos
$ kubectl api-resources | head -n 10
NAME SHORTNAMES APIVERSION NAMESPACED KIND
bindings v1 true Binding
componentstatuses cs v1 false ComponentStatus
configmaps cm v1 true ConfigMap
endpoints ep v1 true Endpoints
events ev v1 true Event
limitranges limits v1 true LimitRange
namespaces ns v1 false Namespace
nodes no false Node
persistentvolumeclaims pvc v1 true PersistentVolumeClaim
Las versiones de API varían (por ejemplo, v1 o beta), y algunos recursos están vinculados a namespaces mientras que otros no.
Operaciones Básicas
Las acciones comunes en objetos de recursos incluyen:
- Crear con
kubectl create - Eliminar con
kubectl delete - Listar con
kubectl get - Inspeccionar con
kubectl describe,kubectl logs, o en formato YAML - Editar con
kubectl editokubectl patch - Etiquetar con
kubectl label - Anotar con
kubectl annotate
Namespaces para Aislamiento
Los namespaces segmentan un clúster físico en entornos virtuales aislados, facilitando la organización de recursos como pods y servicios.
Gestión de Namespaces
Listar namespaces predeterminados:
$ kubectl get ns
NAME STATUS AGE
default Active 6h20m
kube-node-lease Active 6h20m
kube-public Active 6h20m
kube-system Active 6h20m
Crear un nuevo namespace:
$ kubectl create ns entorno-pruebas
namespace/entorno-pruebas created
$ kubectl get ns entorno-pruebas
NAME STATUS AGE
entorno-pruebas Active 15s
Ver detalles de un namespace:
$ kubectl describe ns kube-system
# Incluye información como cuotas y límites de recursos
Establecer el namespace por defecto para comandos kubectl:
$ kubectl config set-context --current --namespace=entorno-pruebas
Context "contexto-actual" modificado.
Eliminar un namespace:
$ kubectl delete ns entorno-pruebas
Etiquetas para Identificación
Las etiquetas son pares clave-valor cruciales para identificar y seleccionar recursos, como pods, nodos y controladores.
Manipulación de Etiquetsa
Mostrar etiquetas de pods:
$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
app-frontend 1/1 Running 0 3m tier=frontend
Agregar una etiqueta a un pod:
$ kubectl label pod app-frontend version=1.0
pod/app-frontend labeled
Actualizar una etiqueta existente:
$ kubectl label pod app-frontend version=1.1 --overwrite
Filtrar pods por etiqueta:
$ kubectl get pods -l version=1.1
NAME READY STATUS RESTARTS AGE
app-frontend 1/1 Running 0 6m
Eliminar una etiqueta:
$ kubectl label pod app-frontend version-
pod/app-frontend unlabeled
Etiquetas en nodos para roles:
$ kubectl get nodes --show-labels
# Muestra etiquetas como kubernetes.io/os y beta.kubernetes.io/arch
$ kubectl label nodes nodo-trabajador rol=compute
node/nodo-trabajador labeled
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
nodo-trabajador Ready compute 12m v1.23.1
Anotaciones para Metadatos
Las anotaciones almacenan pares clave-valor para información no identificadora, como configuraciones o notas.
Uso del Comando describe
El comando describe ofrece información detallada sobre un objeto:
$ kubectl describe pod app-frontend
Name: app-frontend
Namespace: entorno-pruebas
Node: nodo-trabajador/192.168.2.5
Labels: tier=frontend, version=1.1
Annotations: ejemplo.metadato=valor-útil
Status: Running
IP: 10.244.2.10
Containers:
frontend:
Image: node:14-alpine
Port: 3000/TCP
Environment:
API_KEY: clave-secreta
Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-abc (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 8m default-scheduler Successfully assigned entorno-pruebas/app-frontend to nodo-trabajador
Normal Pulling 8m kubelet Pulling image "node:14-alpine"
Normal Pulled 8m kubelet Successfully pulled image "node:14-alpine" en 12s
Normal Created 8m kubelet Created container frontend
Normal Started 8m kubelet Started container frontend