Kubernetes 吊舱卡在终止状态

Kubernetes 吊舱卡在终止状态,kubernetes,Kubernetes,我试图删除一个带有12个pod的ReplicationController,我可以看到一些pod处于终止状态 我的Kubernetes集群由一个控制平面节点和三个安装在Ubuntu虚拟机上的工作节点组成 这个问题的原因可能是什么 NAME READY STATUS RESTARTS AGE pod-186o2 1/1 Terminating 0 2h pod-4b6qc 1/1 Terminating

我试图删除一个带有12个pod的
ReplicationController
,我可以看到一些pod处于
终止
状态

我的Kubernetes集群由一个控制平面节点和三个安装在Ubuntu虚拟机上的工作节点组成

这个问题的原因可能是什么

NAME        READY     STATUS        RESTARTS   AGE
pod-186o2   1/1       Terminating   0          2h
pod-4b6qc   1/1       Terminating   0          2h
pod-8xl86   1/1       Terminating   0          1h
pod-d6htc   1/1       Terminating   0          1h
pod-vlzov   1/1       Terminating   0          1h
实用答案--您始终可以通过运行以下命令删除终止pod:

kubectl delete pod NAME --grace-period=0

历史答案——版本1.1中存在一个问题,如果POD的节点不干净地从集群中删除,则POD有时会陷入终止状态。

您可以使用以下命令强制删除POD

kubectl delete pod <PODNAME> --grace-period=0 --force --namespace <NAMESPACE>
kubectl delete pod--grace period=0--force--namespace
强制删除pod:

kubectl delete pod --grace-period=0 --force --namespace <NAMESPACE> <PODNAME>
kubectl delete pod--grace period=0--force--namespace

--force
标志是必需的。

从资源(pod、部署、ds等)中删除终结器块。yaml:

如果
--宽限期=0
不起作用,则可以执行以下操作:

kubectl delete pods <pod> --grace-period=0 --force
kubectl describe node NODE_NAME
kubectl删除吊舱——宽限期=0——强制

最近在删除rook ceph名称空间时,我偶然发现了这一点——它陷入了终止状态

唯一有帮助的是删除kubernetes终结器,方法是按照建议使用curl直接调用k8s api

  • kubectl get namespace rook ceph-o json>tmp.json
  • 删除
    tmp.json中的kubernetes终结器(保留空数组
    “终结器”:[]
  • 在另一个终端中运行
    kubectl proxy
    ,以进行身份验证,并对返回的端口运行以下curl请求
  • curl-k-H“内容类型:application/json”-X PUT--data binary@tmp.json 127.0.0.1:8001/k8s/clusters/c-mzplp/api/v1/namespace/rook ceph/finalize
  • 名称空间消失了

详细的rook ceph拆卸。

我最近偶然发现了这一点,以释放集群中的资源。下面是删除它们的命令

kubectl get pods --all-namespaces | grep Terminating | while read line; do 
pod_name=$(echo $line | awk '{print $2}' ) name_space=$(echo $line | awk 
'{print $1}' ); kubectl delete pods $pod_name -n $name_space --grace-period=0 --force; 
done

希望这能帮助阅读此

的人我发现此命令更简单:

for p in $(kubectl get pods | grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force;done
它将删除默认名称空间中处于终止状态的所有pod。

在我的例子中,
--force
选项不太起作用。我仍然可以看到吊舱!它卡在终止/未知模式下。那么跑步之后呢

kubectl delete pods <pod> -n redis --grace-period=0 --force
kubectl delete pods-n redis--grace period=0--force
我跑

kubectl补丁盒-p'{“元数据”:{“终结器”:null}
最初的问题是“这个问题的原因是什么?”答案在&&see中讨论

其原因是docker挂载泄漏到其他名称空间

您可以登录到pod主机进行调查

minikube ssh
docker container ps | grep <id>
docker container stop <id> 
minikube-ssh
docker容器ps | grep
码头集装箱站

我不建议强制删除吊舱,除非容器已经退出

  • 验证kubelet日志以查看问题“journalctl-u kubelet”的原因
  • 验证docker日志:journalctl-u docker.service
  • 检查pod的卷装载点是否仍然存在,是否有人锁定了它
  • 验证主机是否内存或磁盘不足

  • 在执行强制删除之前,我首先要做一些检查。 1-节点状态:获取节点正在运行的节点名称,您可以通过以下命令看到:

    "kubectl -n YOUR_NAMESPACE describe pod YOUR_PODNAME"
    
    在“节点”标签下,您将看到节点名称。 有了这些,您可以:

    kubectl delete pods <pod> --grace-period=0 --force
    
    kubectl describe node NODE_NAME
    
    如果您看到任何奇怪的情况,请检查“条件”字段。 如果没有问题,则可以转到步骤,重做:

    "kubectl -n YOUR_NAMESPACE describe pod YOUR_PODNAME"
    
    检查它挂起的原因,您可以在“事件”部分找到它。
    我这样说是因为您可能需要在强制删除pod之前采取初步措施,强制删除pod只会删除pod本身,而不会删除底层资源(例如卡住的docker容器)。

    您可以使用
    awk

    kubectl get pods --all-namespaces | awk '{if ($4=="Terminating") print "oc delete pod " $2 " -n " $1 " --force --grace-period=0 ";}' | sh
    
    请尝试以下命令:
    kubectl补丁pod-p'{“metadata”:{“finalizers”:null}}

    对于我的情况,我不喜欢这种变通方法。 因此,有以下步骤:

    • k get pod-o wide
      ->这将显示哪个节点正在运行pod
    • k获取节点
      ->检查该节点的状态。。。我拿到了
      还没准备好
    我去修理了那个节点。。就我而言,这只是重新启动kubelet:

    • ssh该节点
      ->运行
      swapoff-a&&systemctl restart kubelet

    现在删除pod应该可以在不强制执行差pod的情况下工作。

    发生这种情况的一个原因是关闭节点(而不排空节点)。在这种情况下,修复方法是再次打开节点;然后终止应该成功。

    强制删除命名空间中的所有POD:

    kubectl delete pods --all -n <namespace> --grace-period 0 --force
    
    kubectl删除吊舱--all-n--宽限期0--强制
    
    调度程序和控制器管理器是否正在运行?可能与此有关,我想这就是问题所在。我关闭了一个minion vm,而没有从节点上移除。这是可以接受的行为吗?还是有办法把那些豆荚从kubernetes上移除?是的,直到版本1.2出现之前的解决方法是删除pod。您始终可以使用
    kubectl delete pod NAME--grace period=0来强制删除终止pod。文档在运行
    kubectl delete…
    时说,将向容器发送一个
    SIG_TERM
    请求。但是,如果在宽限期之后,容器仍然在运行呢?我有一堆豆荚卡在
    终止
    ,有些是用go写的,有些是用nodejs写的。replicationController已被删除,而容器仍在运行
    kubectl delete pod PODNAME——宽限期=0
    ,正如Clayton所建议的那样对我有效。但我真正的问题是“为什么我们首先必须求助于此?”在其他正常操作条件下,是什么原因导致POD处于这种停滞状态?好吧,我可以给你举一个例子,我们有一个java容器,它正常关闭,但垃圾收集自己直到死亡,因此对信号没有反应。这很好地证明了