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:
- Se reinicia el pod de implementación
- 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.
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