Cómo reiniciar pods en Kubernetes [Quick K8s Tip]

A veces, es posible que se encuentre en una situación en la que necesite reiniciar su Pod. Para examplesi su Pod está en estado de error.

Dependiendo de la política de reinicio, el mismo Kubernetes intenta reiniciarlo y solucionarlo.

Pero si eso no funciona y no puede encontrar el origen del error, reiniciar Kubernetes Pod manualmente es la forma más rápida de hacer que su aplicación vuelva a funcionar.

Cómo reiniciar Pods en Kubernetes

Desafortunadamente, hay no hay comando de pod de reinicio de kubectl para este propósito. Aquí hay un par de formas en que puede reiniciar sus Pods:

  1. Se reinicia el módulo de implementación
  2. Escalar el número de réplicas

Déjame mostrarte ambos métodos en detalle.

Método 1: se reinicia el módulo de implementación

A partir de la versión 1.15 de Kubernetes, puede realizar un reinicio gradual de sus implementaciones.

El controlador mata un pod a la vez y se basa en el conjunto de réplicas para escalar nuevos Pods hasta que todos los Pods sean más nuevos que el tiempo de reinicio. En mi opinión, esta es la mejor manera de reiniciar sus pods ya que su aplicación no dejará de funcionar.

Nota: Se cambiarán las IP de pod individuales.

tomemos un example. Tiene una implementación llamada my-dep que consta de dos pods (ya que la réplica está configurada en dos).

[email protected]:~# kubectl get deployments
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
my-dep   2/2     2            2           13s

Obtengamos los detalles del pod:

[email protected]:~# kubectl get pod -o wide
NAME                      READY   STATUS    RESTARTS   AGE   IP               NODE          NOMINATED NODE   READINESS GATES
my-dep-6d9f78d6c4-8j5fq   1/1     Running   0          47s   172.16.213.255   kworker-rj2   <none>           <none>
my-dep-6d9f78d6c4-rkhrz   1/1     Running   0          47s   172.16.213.35    kworker-rj1   <none>           <none>

Ahora implementemos el reinicio para la implementación de my-dep con un comando como este:

kubectl rollout restart deployment name_of_deployment

¿Recuerdas el nombre del despliegue de los comandos anteriores? Úsalo aquí:

[email protected]:~# kubectl rollout restart deployment my-dep
deployment.apps/my-dep restarted

Puede ver el proceso de finalización de los pods antiguos y la creación de nuevos usando kubectl get pod -w mando:

[email protected]:~# kubectl get pod -w
NAME                      READY   STATUS              RESTARTS   AGE
my-dep-557548758d-kz6r7   1/1     Running             0          5s
my-dep-557548758d-svg7w   0/1     ContainerCreating   0          1s
my-dep-6d9f78d6c4-8j5fq   1/1     Running             0          69s
my-dep-6d9f78d6c4-rkhrz   1/1     Terminating         0          69s
my-dep-6d9f78d6c4-rkhrz   0/1     Terminating         0          69s
my-dep-557548758d-svg7w   0/1     ContainerCreating   0          1s
my-dep-557548758d-svg7w   1/1     Running             0          3s
my-dep-6d9f78d6c4-8j5fq   1/1     Terminating         0          71s
my-dep-6d9f78d6c4-8j5fq   0/1     Terminating         0          72s
my-dep-6d9f78d6c4-rkhrz   0/1     Terminating         0          74s
my-dep-6d9f78d6c4-rkhrz   0/1     Terminating         0          74s
my-dep-6d9f78d6c4-8j5fq   0/1     Terminating         0          76s
my-dep-6d9f78d6c4-8j5fq   0/1     Terminating         0          76s

Si revisa los Pods ahora, puede ver que los detalles han cambiado aquí:

[email protected]:~# kubectl get pod -o wide
NAME                      READY   STATUS    RESTARTS   AGE   IP               NODE          NOMINATED NODE   READINESS GATES
my-dep-557548758d-kz6r7   1/1     Running   0          42s   172.16.213.43    kworker-rj1   <none>           <none>
my-dep-557548758d-svg7w   1/1     Running   0          38s   172.16.213.251   kworker-rj2   <none>           <none>

Método 2. Escalar el número de réplicas

En un entorno de CI/CD, el proceso para reiniciar sus pods cuando hay un error puede llevar mucho tiempo, ya que tiene que volver a pasar por todo el proceso de compilación.

Una forma más rápida de lograr esto es usar el kubectl scale comando para cambiar el número de réplica a cero y una vez que establece un número mayor que cero, Kubernetes crea nuevas réplicas.

Vamos a intentarlo. Primero revisa tus Pods:

[email protected]:~# kubectl get pod
NAME                      READY   STATUS    RESTARTS   AGE
my-dep-557548758d-kz6r7   1/1     Running   0          11m
my-dep-557548758d-svg7w   1/1     Running   0          11m

Obtenga la información de implementación:

[email protected]:~# kubectl get deployments
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
my-dep   2/2     2            2           12m

Ahora, establezca el número de réplica en cero:

[email protected]:~# kubectl scale deployment --replicas=0 my-dep
deployment.apps/my-dep scaled

Y luego vuelve a ponerlo en dos:

[email protected]:~# kubectscale deployment --replicas=2 my-dep
deployment.apps/my-dep scaled

Compruebe las vainas ahora:

[email protected]:~# kubectl get pod
NAME                      READY   STATUS    RESTARTS   AGE
my-dep-557548758d-d2pmd   1/1     Running   0          10s
my-dep-557548758d-gprnr   1/1     Running   0          10s

Has reiniciado correctamente los pods de Kubernetes.

Utilice cualquiera de los métodos anteriores para hacer que su aplicación funcione de forma rápida y segura sin afectar a los usuarios finales.

Después de hacer este ejercicio, asegúrese de encontrar el problema central y solucionarlo, ya que reiniciar su pod no solucionará el problema subyacente.

Espero que te guste este consejo de Kubernetes. No olvides suscribirte para más.

Rakesh jainista
Profesional DevOps | RHCA | Jenkins | Git | ventana acoplable | Kubernetes | Ansible Prometeo Grafana | AWS Cloud

Related Posts