Objetos de Recursos en Kubernetes y Operaciones Fundamentales con kubectl

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 edit o kubectl 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

Etiquetas: Kubernetes kubectl namespaces labels annotations

Publicado el 6-8 02:48