kubernetes 无法删除 pod 问题的解决

[摘要] kubernetes 可能会产生垃圾或者僵尸pod,在删除rc的时候,相应的pod没有被删除,手动删除pod后会自动重新创建,这时一般需要先删除掉相关联的resources,实际中还要具体情况具体分析。

在使用Helm部署gitlab的时候发现有垃圾的pod存在,一直删除不掉

# kubectl get pods -n kube-system
NAME                            READY    STATUS    RESTARTS   AGE
gitlab-migrations.1-2km-4rwnm      1/1   Running       158    21h
gitlab-migrations.1-30d-gx9nz      1/1   Running       164    21h
gitlab-migrations.1-dsw-m5qbc      1/1   Running       167    21h

  

一般来说是要删除pod关联的rc,rs以及deployment等等,可以执行如下命令查询

kubectl get ClusterRole -n kube-system
kubectl get ClusterRoleBinding -n kube-system
kubectl get Deployments -n kube-system
kubectl get Pods -n kube-system
kubectl get ServiceAccounts -n kube-system
kubectl get CustomResourceDefinition -n kube-system
kubectl get replicasets -n kube-system
kubectl get replicationcontrollers -n kube-system
kubectl get services -n kube-system

  

找到对应的标签进行删除,对应的pod一般就会被删除掉,如果pod还在的话再手动删除pod。
实际中我这三个pod还是无法删除掉,删除之后仍然会重新启动,所以仔细看了下pod的具体描述内容。

# kubectl describe pod -n kube-system gitlab-migrations.1-30d-gx9nz
Name:           gitlab-migrations.1-30d-gx9nz
Namespace:      kube-system
Node:           172.30.0.169/172.30.0.169
Start Time:     Mon, 26 Mar 2018 11:53:45 +0800
Labels:         app=migrations
                controller-uid=d0fd1214-30a8-11e8-89a7-525400d81209
                job-name=gitlab-migrations.1-30d
                release=gitlab
Annotations:    <none>
Status:         Running
IP:             172.100.14.7
Controlled By:  Job/gitlab-migrations.1-30d
Init Containers:
  configure:
    Container ID:  docker://a3051d24e65267489aa97ae368bcbe5819e4ae4f3b5ddc4d277b0b25ee585716
    Image:         busybox
    Image ID:      docker-pullable://docker.io/[email protected]:2107a35b58593c58ec5f4e8f2c4a70d195321078aebfadfbfb223a2ff4a4ed21
    Port:          <none>
    Command:
      sh
      /config/configure
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Mon, 26 Mar 2018 11:54:24 +0800
      Finished:     Mon, 26 Mar 2018 11:54:24 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /config from migrations-config (ro)
      /init-config from init-migrations-secrets (ro)
      /init-secrets from migrations-secrets (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-6rdp2 (ro)
Containers:
  migrations:
    Container ID:  docker://c33e809de76ba44da330063d9e3c6f58631b30e3c805ea561dc68af38ffe3926
    Image:         registry.gitlab.com/gitlab-org/build/cng/gitlab-rails:latest
    Image ID:      docker-pullable://registry.gitlab.com/gitlab-org/build/cng/[email protected]:7dca5eb3b686342a9cff798f8349ad07459a1ef1e9d47a23b787b284d874cc17
    Port:          <none>
    Args:
      /scripts/wait-for-deps
      /scripts/db-migrate
    State:          Running
      Started:      Tue, 27 Mar 2018 09:50:09 +0800
    Last State:     Terminated
      Reason:       Error
      Exit Code:    1
      Started:      Tue, 27 Mar 2018 09:41:52 +0800
      Finished:     Tue, 27 Mar 2018 09:45:02 +0800
    Ready:          True
    Restart Count:  164
    Environment:
      CONFIG_TEMPLATE_DIRECTORY:  /var/opt/gitlab/templates
      CONFIG_DIRECTORY:           /var/opt/gitlab/config/gitlab/
      GITLAB_ROOT_PASSWORD:       Vi4ree2R
    Mounts:
      /etc/gitlab from migrations-secrets (ro)
      /home/git/gitlab/config/secrets.yml from migrations-secrets (rw)
      /var/opt/gitlab/templates from migrations-config (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-6rdp2 (ro)
Conditions:
  Type           Status
  Initialized    True
  Ready          True
  PodScheduled   True
Volumes:
  migrations-config:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      gitlab-migrations
    Optional:  false
  init-migrations-secrets:
  <unknown>
  migrations-secrets:
    Type:    EmptyDir (a temporary directory that shares a pod‘s lifetime)
    Medium:  Memory
  default-token-6rdp2:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-6rdp2
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     <none>
Events:
  Type     Reason       Age                  From                   Message
  ----     ------       ----                 ----                   -------
  Warning  FailedMount  6m (x655 over 21h)   kubelet, 172.30.0.169  MountVolume.SetUp failed for volume "migrations-config" : configmaps "gitlab-migrations" not found
  Warning  BackOff      3m (x3516 over 21h)  kubelet, 172.30.0.169  Back-off restarting failed container

  

需要关注的地方是Labels标签

Labels:         app=migrations
                controller-uid=d0fd1214-30a8-11e8-89a7-525400d81209
                job-name=gitlab-migrations.1-30d
                release=gitlab

  

发现有个job-name=gitlab-migrations.xxx
于是继续查看kubernetes是否有job存在

# kubectl get jobs -n kube-system
NAME                      DESIRED   SUCCESSFUL   AGE
gitlab-migrations.1-2km   1         0            23h
gitlab-migrations.1-30d   1         0            23h
gitlab-migrations.1-dsw   1         0            23h

  

先执行删除job看下:

# kubectl delete job gitlab-migrations.1-2km -n kube-system
job "gitlab-migrations.1-2km" deleted
# kubectl delete job gitlab-migrations.1-30d -n kube-system
job "gitlab-migrations.1-30d" deleted
# kubectl delete job gitlab-migrations.1-dsw -n kube-system
job "gitlab-migrations.1-dsw" deleted

  

再看pod情况:

# kubectl get pods -n kube-system
NAME                               READY STATUS     RESTARTS  AGE
gitlab-migrations.1-30d-gx9nz      1/1   Terminating   173    23h
gitlab-migrations.1-dsw-m5qbc      0/1   Terminating   176    23h

  

附图为kubernets 的一些对象资源:

再看pod已经被删除了,还有处于Terminating状态的,一会就会消失掉。至此pod删除成功,所以删除与pods相关联的依赖资源是解决问题的最终方法!

原文地址:https://www.cnblogs.com/weifeng1463/p/9970895.html

时间: 2024-10-04 13:08:16

kubernetes 无法删除 pod 问题的解决的相关文章

Kubernetes中强制删除Pod、namespace

Kubernetes中强制删除Pod.namespace 解决方法 可使用kubectl中的强制删除命令 # 删除POD kubectl delete pod PODNAME --force --grace-period=0 # 删除NAMESPACE kubectl delete namespace NAMESPACENAME --force --grace-period=0 若以上方法无法删除,可使用第二种方法,直接从ETCD中删除源数据 # 删除default namespace下的pod

Kubernetes强制删除一直处于Terminating状态的pod。

在dashboard界面删除容器,发现无法删除.使用命令查看发现该pod一直处于terminating的状态Kubernetes强制删除一直处于Terminating状态的pod. 1.使用命令获取pod的名字kubectl get po -n NAMESPACE |grep Terminating2.使用kubectl中的强制删除命令kubectl delete pod podName -n NAMESPACE --force --grace-period=0 原文地址:https://blo

Kubernetes基础:Pod的详细介绍

本文的演练环境为基于Virtualbox搭建的Kubernetes集群,具体搭建步骤可以参考kubeadm安装kubernetes V1.11.1 集群 1. 基本概念 1.1 Pod是什么 Pod是Kubernetes中能够创建和部署的最小单元,是Kubernetes集群中的一个应用实例,总是部署在同一个节点Node上.Pod中包含了一个或多个容器,还包括了存储.网络等各个容器共享的资源.Pod支持多种容器环境,Docker则是最流行的容器环境. 单容器Pod,最常见的应用方式. 多容器Pod

【Kubernetes】创建Pod并分配到指定节点Node1

一.编译yaml文件 [[email protected] Tools]# cat hello-world-pod.yaml apiVersion: v1 kind: Pod metadata: name: hello-world spec: nodeSelector: type: node1 containers: - name: hello image: "ubuntu:14.04" command: [ "/bin/bash", "-ce"

cocoapods 使用pod install失效解决方法

在使用pod install命令后,一直处于analyzing dependencies的状态,之后出现error: [!] An error occurred while performing `git pull` on repo `master`. [!] /usr/bin/git pull --ff-only From https://github.com/CocoaPods/Specs    81a48d2..2185a7f  master     -> origin/master fa

Kubernetes对象之Pod详解(附安装部署方法)

首先介绍一下K8S是什么:(引用自K8S中文社区) Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署.自动扩缩容.维护等功能. 通过Kubernetes你可以: 快速部署应用 快速扩展应用 无缝对接新的应用功能 节省资源,优化硬件资源的使用 其实K8S能够做的事情有很多,而且操作简单,十分方便,下面先介绍如何安装,然后是对于pod详细介绍,如果你对docker还不怎么了解,可以先参考前面的文章学习一下! 环境介绍: CentOS 7.2 Kubernetes

Docker Kubernetes 创建管理 Pod

Docker Kubernetes 容器扩容与缩容 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 工作节点:192.168.1.78 工作节点:192.168.1.77 管理节点:创建pod yaml文件 vim pod.yaml apiVersion: v1 kind: Pod metadata: name: pod-test labels: os: centos spec: contain

k8s删除pod一直处于terminating状态

用的nfs挂载卷,当删除pv后再删除pod时,pod一直处于terminating状态. 如下图: 解决方法: 可使用kubectl中的强制删除命令 # 删除POD kubectl delete pod [pod name] --force --grace-period=0 -n [namespace] # 删除NAMESPACE kubectl delete namespace NAMESPACENAME --force --grace-period=0 若以上方法无法删除,可使用第二种方法,

Kubernetes优雅停止Pod

原文:https://i4t.com/4424.html 首先我们先简单的分析一下"优雅的停止Pod" 优雅停止(Graceful shutdown)这个说法来自于操作系统,比如我们windows关机系统首先会退出软件然后一步步到达关机,而相对的就是硬终止(Hard shutdown),简单的理解就是直接拔电源 到了微服务中,网关会把流量分配给每个Pod节点上,比如我们上线更新Pod的时候 如果我们直接将Pod杀死,那这部分流量就无法得到正确处理,会影响部分用户,通常来说网关或者注册中