如何在Kubernetes中停止卡住的Pod



背景

我正在努力学习在我的笔记本电脑上使用Jenkins自动部署。当我部署Jenkins时,我没有检查helm图表中的资源设置,结果我过度配置了内存和cpu请求。

吊舱初始化了几分钟,然后最终进入CrashLoopBackOf状态。

软件和版本

$ minikube start
😄  minikube v1.17.1 on Microsoft Windows 10 Enterprise 10.0.19042 Build 19042
...
...
🐳  Preparing Kubernetes v1.20.2 on Docker 20.10.2
...

请注意,Docker是在启用Docker Desktop和Windows 10 WSL Ubuntu 20.04 LTS的情况下从Visual Studio Code安装的。

$ helm version
version.BuildInfo{Version:"v3.5.2", GitCommit:"167aac70832d3a384f65f9745335e9fb40169dc2", GitTreeState:"dirty", GoVersion:"go1.15.7"}

安装

$ helm repo add stable https://charts.jenkins.io
$ helm repo ls
NAME                    URL
stable                  https://charts.jenkins.io

$ kubectl create namespace devops-cicd
namespace/devops-cicd created
$ helm install jenkins stable/jenkins --namespace devops-cicd
$ kubectl get svc -n devops-cicd -o wide
NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)     AGE    SELECTOR
jenkins         ClusterIP   10.108.169.104   <none>        8080/TCP    7m1s   app.kubernetes.io/component=jenkins-controller,app.kubernetes.io/instance=jenkins
jenkins-agent   ClusterIP   10.103.213.213   <none>        50000/TCP   7m     app.kubernetes.io/component=jenkins-controller,app.kubernetes.io/instance=jenkins

$ kubectl get pod -n devops-cicd --output wide 
NAME        READY   STATUS    RESTARTS   AGE     IP            NODE       NOMINATED NODE   READINESS GATES
jenkins-0   1/2     Running   1          8m13s   172.17.0.10   minikube   <none>           <none>

吊舱最终失败,以CrashLoopBackOff 状态结束

不幸的是,我忘了提取吊舱的日志。

在完全公开的情况下,我通过将图表拉到本地文件系统并将内存和cpu设置的大小减半,成功地部署了它。

问题

我担心有一天生产环境中会出现资源调配过度的情况。那么,如何阻止一个失败的pod重新部署/重新启动和撤消/回滚部署呢?

我尝试将部署副本设置为0,但没有效果。事实上,我能看到的唯一资源是几个服务、Pod本身、一个PersistentVolume和一些秘密。

我不得不删除名称空间来删除pod。这并不理想。那么,解决这种情况的最佳方法是什么(即只处理有问题的吊舱)?

根据我收集的反馈,并确认吊舱由StatefulSet调度。我试图回答我自己的问题,希望它对像我这样的新手有用

我的问题是如何阻止吊舱(重新悬浮)。

所以在这里我得到了StatefulSet:的信息

$ kubectl get statefulsets -n devops-cicd -o wide
NAME      READY   AGE   CONTAINERS              IMAGES
jenkins   0/1     33s   jenkins,config-reload   jenkins/jenkins:2.303.1-jdk11,kiwigrid/k8s-sidecar:1.12.2 

然后放大:

$ kubectl scale statefulset jenkins --replicas=0 -n devops-cicd
statefulset.apps/jenkins scaled

结果:

$ kubectl get statefulsets -n devops-cicd -o wide
NAME      READY   AGE     CONTAINERS              IMAGES
jenkins   0/0     6m35s   jenkins,config-reload   jenkins/jenkins:2.303.1-jdk11,kiwigrid/k8s-sidecar:1.12.2   

相关内容

  • 没有找到相关文章

最新更新