|
Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado. |
Kubernetes Resources
Los comandos/pasos listados en esta página pueden utilizarse para comprobar los recursos de Kubernetes más importantes y aplicarse a Rancher Launched Kubernetes clústeres.
Asegúrate de haber configurado el kubeconfig correcto (por ejemplo, export KUBECONFIG=$PWD/kube_config_cluster.yml para Rancher HA) o de estar utilizando el kubectl integrado a través de la interfaz de usuario.
Nodos
Obtener nodos
Ejecuta el comando a continuación y comprueba lo siguiente:
-
Todos los nodos en tu clúster deberían estar listados, asegúrate de que no falte ninguno.
-
Todos los nodos deberían tener el estado Ready (si no está en estado Ready, comprueba los registros del contenedor
kubeleten ese nodo utilizandodocker logs kubelet) -
Verifica si todos los nodos informan la versión correcta.
-
Verifica si los valores del sistema operativo, del núcleo de Linux y de Docker se muestran como se espera (posiblemente puedas relacionar problemas debido a que se ha actualizado la versión del sistema operativo, del núcleo de Linux o de Docker).
kubectl get nodes -o wide
Resultado de ejemplo:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME controlplane-0 Ready controlplane 31m v1.13.5 138.68.188.91 <none> Ubuntu 18.04.2 LTS 4.15.0-47-generic docker://18.9.5 etcd-0 Ready etcd 31m v1.13.5 138.68.180.33 <none> Ubuntu 18.04.2 LTS 4.15.0-47-generic docker://18.9.5 worker-0 Ready worker 30m v1.13.5 139.59.179.88 <none> Ubuntu 18.04.2 LTS 4.15.0-47-generic docker://18.9.5
Obtener condiciones del nodo
Ejecuta el comando a continuación para listar nodos con Condiciones del nodo
kubectl get nodes -o go-template='{{range .items}}{{$node := .}}{{range .status.conditions}}{{$node.metadata.name}}{{": "}}{{.type}}{{":"}}{{.status}}{{"\n"}}{{end}}{{end}}'
Ejecuta el comando a continuación para listar nodos con Condiciones del nodo que están activos y que podrían prevenir un funcionamiento normal.
kubectl get nodes -o go-template='{{range .items}}{{$node := .}}{{range .status.conditions}}{{if ne .type "Ready"}}{{if eq .status "True"}}{{$node.metadata.name}}{{": "}}{{.type}}{{":"}}{{.status}}{{"\n"}}{{end}}{{else}}{{if ne .status "True"}}{{$node.metadata.name}}{{": "}}{{.type}}{{": "}}{{.status}}{{"\n"}}{{end}}{{end}}{{end}}{{end}}'
Resultado de ejemplo:
worker-0: DiskPressure:True
Elección de líder de Kubernetes
Líder del Administrador de Controladores de Kubernetes
El líder se determina mediante un proceso de elección de líder. Una vez que se ha determinado el líder, el líder (holderIdentity) se guarda en el endpoint kube-controller-manager (en este ejemplo, controlplane-0).
kubectl -n kube-system get endpoints kube-controller-manager -o jsonpath='{.metadata.annotations.control-plane\.alpha\.kubernetes\.io/leader}'
{"holderIdentity":"controlplane-0_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","leaseDurationSeconds":15,"acquireTime":"2018-12-27T08:59:45Z","renewTime":"2018-12-27T09:44:57Z","leaderTransitions":0}>
Planificador de Kubernetes
El líder se determina mediante un proceso de elección de líder. Una vez que se ha determinado el líder, el líder (holderIdentity) se guarda en el endpoint kube-scheduler (en este ejemplo, controlplane-0).
kubectl -n kube-system get endpoints kube-scheduler -o jsonpath='{.metadata.annotations.control-plane\.alpha\.kubernetes\.io/leader}'
{"holderIdentity":"controlplane-0_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","leaseDurationSeconds":15,"acquireTime":"2018-12-27T08:59:45Z","renewTime":"2018-12-27T09:44:57Z","leaderTransitions":0}>
Controlador de Ingress
El Controlador de Ingress por defecto es Traefik y se despliega como un DaemonSet en el espacio de nombres traefik. Los pods solo se programan en nodos con el rol worker.
Verifica si los pods están en ejecución en todos los nodos:
kubectl -n traefik get pods -o wide
Resultado de ejemplo:
kubectl -n traefik get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE default-http-backend-797c5bc547-kwwlq 1/1 Running 0 17m x.x.x.x worker-1 traefik-4qd64 1/1 Running 0 14m x.x.x.x worker-1 traefik-8wxhm 1/1 Running 0 13m x.x.x.x worker-0
Si un pod no puede ejecutarse (el estado no es Running, el estado de disponibilidad no muestra 1/1 o ves un alto número de reinicios), comprueba los detalles del pod, los registros y los eventos del espacio de nombres.
Registros del Contenedor del Pod
El siguiente comando puede mostrar los registros de todos los pods etiquetados como "app=traefik", pero solo mostrará 10 líneas de registro debido a las restricciones del comando kubectl logs. Consulte --tail de kubectl logs -h para obtener más información.
kubectl -n traefik logs -l app=traefik
Si se necesita el registro completo, especifique el nombre del pod en el comando final:
kubectl -n traefik logs <pod name>
Agentes de Rancher
La comunicación con el clúster (API de Kubernetes a través de cattle-cluster-agent) y la comunicación con los nodos (provisión del clúster a través de cattle-node-agent) se realiza a través de los agentes de Rancher.
cattle-node-agent
Verifica si los pods de cattle-node-agent están presentes en cada nodo, tienen estado Ejecutándose y no tienen un alto número de reinicios:
kubectl -n cattle-system get pods -l app=cattle-agent -o wide
Resultado de ejemplo:
NAME READY STATUS RESTARTS AGE IP NODE cattle-node-agent-4gc2p 1/1 Running 0 2h x.x.x.x worker-1 cattle-node-agent-8cxkk 1/1 Running 0 2h x.x.x.x etcd-1 cattle-node-agent-kzrlg 1/1 Running 0 2h x.x.x.x etcd-0 cattle-node-agent-nclz9 1/1 Running 0 2h x.x.x.x controlplane-0 cattle-node-agent-pwxp7 1/1 Running 0 2h x.x.x.x worker-0 cattle-node-agent-t5484 1/1 Running 0 2h x.x.x.x controlplane-1 cattle-node-agent-t8mtz 1/1 Running 0 2h x.x.x.x etcd-2
Verifica los registros de un pod específico de cattle-node-agent o de todos los pods de cattle-node-agent:
kubectl -n cattle-system logs -l app=cattle-agent
cattle-cluster-agent
Verifica si el pod de cattle-cluster-agent está presente en el clúster, tiene estado Ejecutándose y no tiene un alto número de reinicios:
kubectl -n cattle-system get pods -l app=cattle-cluster-agent -o wide
Resultado de ejemplo:
NAME READY STATUS RESTARTS AGE IP NODE cattle-cluster-agent-54d7c6c54d-ht9h4 1/1 Running 0 2h x.x.x.x worker-1
Verifica los registros del pod de cattle-cluster-agent:
kubectl -n cattle-system logs -l app=cattle-cluster-agent
Trabajos y Pods
Verifica que los pods o trabajos tengan el estado Running/Completed
Para comprobar, ejecuta el comando:
kubectl get pods --all-namespaces
Si un pod no está en estado Running, puedes investigar la causa raíz ejecutando:
Registros del Contenedor del Pod
kubectl logs POD_NAME -n NAMESPACE
Si un trabajo no está en estado Completed, puedes investigar la causa raíz ejecutando:
Registros de los contenedores de los pods del trabajo
kubectl logs -l job-name=JOB_NAME -n NAMESPACE
Pods desalojados
Los pods pueden ser desalojados en función de señales de desalojo.
Recupera una lista de pods desalojados (nombre del pod y espacio de nombres):
kubectl get pods --all-namespaces -o go-template='{{range .items}}{{if eq .status.phase "Failed"}}{{if eq .status.reason "Evicted"}}{{.metadata.name}}{{" "}}{{.metadata.namespace}}{{"\n"}}{{end}}{{end}}{{end}}'
Para eliminar todos los pods desalojados:
kubectl get pods --all-namespaces -o go-template='{{range .items}}{{if eq .status.phase "Failed"}}{{if eq .status.reason "Evicted"}}{{.metadata.name}}{{" "}}{{.metadata.namespace}}{{"\n"}}{{end}}{{end}}{{end}}' | while read epod enamespace; do kubectl -n $enamespace delete pod $epod; done
Recupera una lista de pods desalojados, nodo programado y la razón:
kubectl get pods --all-namespaces -o go-template='{{range .items}}{{if eq .status.phase "Failed"}}{{if eq .status.reason "Evicted"}}{{.metadata.name}}{{" "}}{{.metadata.namespace}}{{"\n"}}{{end}}{{end}}{{end}}' | while read epod enamespace; do kubectl -n $enamespace get pod $epod -o=custom-columns=NAME:.metadata.name,NODE:.spec.nodeName,MSG:.status.message; done
El trabajo no se completa
Si has habilitado Istio y tienes problemas con un trabajo que has desplegado que no se completa, necesitarás añadir una anotación a tu pod utilizando estos pasos.
Dado que los sidecars de Istio se ejecutan indefinidamente, un Job no puede considerarse completo incluso después de que su tarea se haya completado. Esta es una solución temporal y desactivará Istio para cualquier tráfico hacia/desde el Pod anotado. Ten en cuenta que esto puede no permitirte seguir utilizando un trabajo para pruebas de integración, ya que el trabajo no tendrá acceso a la malla de servicios.