GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo reiniciar pods en Kubernetes [Consejo rápido de K8s]

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

Dependiendo de la política de reinicio, el propio 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, no hay ningún comando kubectl restart pod para este propósito. Aquí hay un par de formas en que puede reiniciar sus Pods:

  1. Se reinicia el pod de implementación
  2. Escalando 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 elimina un pod a la vez y confía en el ReplicaSet 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 ejemplo. 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 comando:

[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 la 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

Revisa los pods 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 lo hará solucionar el problema subyacente.

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

Rakesh Jain
Profesional DevOps | RHCA | Jenkins | Git | ventana acoplable | Kubernetes | Ansible | Prometeo | Grafana | Nube de AWS

Linux
  1. Cómo implementar su primer pod en un clúster de Kubernetes

  2. Cómo instalar Curl en Ubuntu [Consejo rápido]

  3. Cómo eliminar un usuario de un grupo en Linux [Consejo rápido]

  4. Cómo encontrar la longitud de la cadena en Bash [Consejo rápido]

  5. Cómo eliminar pods en Kubernetes [Consejos rápidos de K8s]

Cómo crear un StatefulSet en Kubernetes

Cómo crear y administrar pods de Kubernetes en Linux

Cómo reiniciar una red en Ubuntu [Consejo para principiantes]

Cómo agregar nuevos pinceles en GIMP [Consejo rápido]

Cómo recortar imágenes en GIMP [Consejo rápido]

Cómo agregar un directorio a PATH en Linux [Consejo rápido]