Este consejo rápido de Kubernetes lo ayuda a obtener detalles sobre un nodo trabajador de Kubernetes y cómo leer y comprender su salida.
¿Qué es un nodo de Kubernetes?
Un nodo es una máquina de trabajo (virtual/física) en Kubernetes donde se ejecutan los pods que transportan sus aplicaciones. Los servicios que se ejecutan en un nodo incluyen Estibador, kubelet y kube-proxy.
Listado de nodos disponibles en su clúster de Kubernetes
La forma más sencilla de ver los nodos disponibles es usando el comando kubectl de esta manera:
kubectl get nodes
Debería mostrarle todos los nodos en su clúster de un vistazo. Puede ver el estado, el rol, la antigüedad y la versión de cada nodo.
[email protected]:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kmaster-rj Ready master 39d v1.18.8
kworker-rj1 Ready <none> 39d v1.18.8
kworker-rj2 Ready <none> 39d v1.18.8
[email protected]:~#
Como puede ver, ambos nodos trabajadores están listos.
Para ver una salida más detallada ejecute el siguiente comando, puede agregar el -o wide
opción como esta:
kubectl get nodes -o wide
Ahora verá detalles adicionales como la IP interna y externa, la imagen del contenedor, la versión del kernel y el tiempo de ejecución del contenedor.
[email protected]:~# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
kmaster-rj Ready master 39d v1.18.8 172.42.42.200 <none> Ubuntu 18.04.5 LTS 4.15.0-101-generic docker://19.3.6
kworker-rj1 Ready <none> 39d v1.18.8 172.42.42.201 <none> Ubuntu 18.04.4 LTS 4.15.0-101-generic docker://19.3.6
kworker-rj2 Ready <none> 39d v1.18.8 172.42.42.202 <none> Ubuntu 18.04.5 LTS 4.15.0-101-generic docker://19.3.6
Profundicemos y sepamos más sobre un nodo específico.
Describiendo un nodo para más detalles
Si desea información detallada sobre un nodo específico, puede utilizar el kubectl describe
comando con el nombre de nodo:
kubectl describe nodes worker-node-name
Aquí hay una salida de muestra:
[email protected]:~# kubectl describe nodes kworker-rj1
Name: kworker-rj1
Roles: <none>
Labels: app=front-end
beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/arch=amd64
kubernetes.io/hostname=kworker-rj1
kubernetes.io/os=linux
size=medium
Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
node.alpha.kubernetes.io/ttl: 0
projectcalico.org/IPv4Address: 172.42.42.201/24
projectcalico.org/IPv4IPIPTunnelAddr: 172.16.213.0
volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp: Sun, 02 Aug 2020 15:42:32 +0000
Taints: app=front-end:NoExecute
Unschedulable: false
Lease:
HolderIdentity: kworker-rj1
AcquireTime: <unset>
RenewTime: Fri, 11 Sep 2020 07:09:51 +0000
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
NetworkUnavailable False Fri, 11 Sep 2020 02:57:12 +0000 Fri, 11 Sep 2020 02:57:12 +0000 CalicoIsUp Calico is running on this node
MemoryPressure False Fri, 11 Sep 2020 07:06:56 +0000 Fri, 28 Aug 2020 06:33:29 +0000 KubeletHasSufficientMemory kubelet has sufficient memory available
DiskPressure False Fri, 11 Sep 2020 07:06:56 +0000 Fri, 28 Aug 2020 06:33:29 +0000 KubeletHasNoDiskPressure kubelet has no disk pressure
PIDPressure False Fri, 11 Sep 2020 07:06:56 +0000 Fri, 28 Aug 2020 06:33:29 +0000 KubeletHasSufficientPID kubelet has sufficient PID available
Ready True Fri, 11 Sep 2020 07:06:56 +0000 Fri, 11 Sep 2020 02:56:03 +0000 KubeletReady kubelet is posting ready status. AppArmor enabled
Addresses:
InternalIP: 172.42.42.201
Hostname: kworker-rj1
Capacity:
cpu: 2
ephemeral-storage: 64800356Ki
hugepages-2Mi: 0
memory: 2040812Ki
pods: 110
Allocatable:
cpu: 2
ephemeral-storage: 59720007991
hugepages-2Mi: 0
memory: 1938412Ki
pods: 110
System Info:
Machine ID: c7dbeba40d7b45a387082c96df6cc554
System UUID: 595C28CA-DBBF-304D-8C5A-7862AA0A60E5
Boot ID: 306f36e0-ded3-4b45-946a-89509f845c21
Kernel Version: 4.15.0-101-generic
OS Image: Ubuntu 18.04.4 LTS
Operating System: linux
Architecture: amd64
Container Runtime Version: docker://19.3.6
Kubelet Version: v1.18.8
Kube-Proxy Version: v1.18.8
Non-terminated Pods: (5 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
default toleration-demo-dep-54f9ff64b9-7zcrn 0 (0%) 0 (0%) 0 (0%) 0 (0%) 4h9m
default toleration-demo-dep-54f9ff64b9-9sldm 0 (0%) 0 (0%) 0 (0%) 0 (0%) 4h9m
default toleration-demo-dep-54f9ff64b9-rgh7z 0 (0%) 0 (0%) 0 (0%) 0 (0%) 4h9m
kube-system calico-node-2jlhm 250m (12%) 0 (0%) 0 (0%) 0 (0%) 39d
kube-system kube-proxy-54894 0 (0%) 0 (0%) 0 (0%) 0 (0%) 22d
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 250m (12%) 0 (0%)
memory 0 (0%) 0 (0%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
Events: <none>
Esa es mucha información. ¿Qué es importante para ti?
- La mayor parte de la información es informativa sobre la IP del sistema, el nombre de host, los recursos (CPU, GPU, memoria) y la información de la versión (SO, Docker, Kubernetes).
- servicio kubelet estado.
- no programable parámetro.
- los Condiciones La sección puede indicar si hay problemas de recursos del sistema que afectarán el funcionamiento de la aplicación. Para examplesi alguno de los fuera del disco, MemoriaPresióno Presión de disco las condiciones son verdaderas, no hay suficientes recursos del sistema para atender más cargas de trabajo.
- los Eventos La sección por fin también tendrá mensajes que pueden indicar si hay problemas con el medio ambiente.
Espero que les guste este rápido consejo de Kubernetes. Estén atentos y no olviden suscribirse para más.
Rakesh jainista
Profesional DevOps | RHCA | Jenkins | Git | ventana acoplable | Kubernetes | Ansible Prometeo Grafana | AWS Cloud