如何引起单个kubernetes pod的故意重启



我正在测试日志先前命令,为此我需要一个pod来重新启动。

我可以使用像

这样的命令来获取我的pod
kubectl get pods -n $ns -l $label

,这表明我的豆荚没有重新启动为止。我想测试这个命令:

kubectl logs $podname -n $ns --previous=true

这个命令失败,因为我的pod没有重新启动,使得--previous=true开关没有意义。

我知道这个命令在配置改变时重新启动pod:

kubectl rollout restart deployment myapp -n $ns

这并不启动容器的方式是有意义的对我的日志的命令测试而是终止旧的豆荚和创建新的豆荚(已重新开始计数为0)。

我尝试了各种版本的exec,看看是否可以从内部关闭它们,但我使用的大多数命令都没有在该容器中找到:

kubectl exec $podname -n $ns -- shutdown
kubectl exec $podname -n $ns -- shutdown now
kubectl exec $podname -n $ns -- halt
kubectl exec $podname -n $ns -- poweroff

我如何使用kubectl命令强制重启pod,使其保留其身份,并且重启计数器增加1,以便我的测试日志命令有一个先前的实例来返回日志。

编辑:连接到pod有很好的描述。

kubectl -n $ns exec --stdin --tty $podname -- /bin/bash

进程列表只显示少数正在运行的进程:

ls -1 /proc | grep -Eo "^[0-9]{1,5}$"

进程1似乎是运行pod的进程。kill 1什么也不做,甚至杀死proc pid 1

我还考虑这个。

有不同的方法来实现你的目标。我将在下面描述最有用的选项。

Crictl

最正确和有效的方法-在容器运行时级别重新启动pod。

我在Google Cloud Platform - GKE和minikube上使用docker驱动程序进行了测试。

您需要将ssh放入运行pod的工作节点。然后找到POD ID:

$ crictl ps
CONTAINER           IMAGE               CREATED             STATE           NAME                ATTEMPT             POD ID
9863a993e0396       87a94228f133e       3 minutes ago       Running         nginx-3             2                   6d17dad8111bc

$ crictl pods -s ready
POD ID              CREATED             STATE          NAME                    NAMESPACE       ATTEMPT         RUNTIME
6d17dad8111bc       About an hour ago   Ready          nginx-3                 default         2               (default)

然后停止:

$ crictl stopp 6d17dad8111bc
Stopped sandbox 6d17dad8111bc

一段时间后,kubelet将再次启动这个pod(在CRI中使用不同的pod ID,但kubernetes集群将此pod视为相同):

$ crictl ps
CONTAINER           IMAGE               CREATED             STATE               NAME                        ATTEMPT             POD ID
f5f0442841899       87a94228f133e       41 minutes ago      Running             nginx-3                     3                   b628e1499da41

在集群中是这样的:

$ kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
nginx-3                           1/1     Running   3          48m

获取带有--previous=true标志的日志也确认了kubernetes的POD是相同的。

杀死进程1

它适用于大多数图像,但并非总是如此。

。我测试了一个简单的pod与nginx图像:

$ kubectl get pods
NAME             READY   STATUS    RESTARTS   AGE
nginx            1/1     Running   0          27h
$ kubectl exec -it nginx -- /bin/bash
root@nginx:/# kill 1
root@nginx:/# command terminated with exit code 137
$ kubectl get pods
NAME             READY   STATUS    RESTARTS   AGE
nginx            1/1     Running   1          27h

有用的链接:

  • 使用crictl
  • 调试Kubernetes节点

相关内容

  • 没有找到相关文章

最新更新