为什么状态已完成的pod仍会出现在kubctl get pods中?

ams*_*ams 5 kubernetes

我已经执行了"Kubernetes Up and Running"一书中的示例,其中运行了具有工作队列的pod,然后创建了一个k8s作业,其中5个pod用于消耗队列中的所有工作.我已经复制了下面的yaml api对象.

我的期望是,一旦k8s工作完成,那么它的pod将被删除,但kubectl get pods -o wide显示pod仍然存在,即使它报告0/1容器准备好了,他们似乎仍然分配了ip地址,见下面的输出.

  • 何时将完成的工作吊舱从输出中删除kubectl get pods为什么在吊舱中的所有容器完成后不正确?
  • 当pod像IP地址一样完成消息时,是否会消耗任何资源,或者信息是打印出来的?

在所有pod消耗掉所有消息之后从kubectl输出.

kubectl get pods -o wide
NAME              READY     STATUS      RESTARTS   AGE       IP           NODE
consumers-bws9f   0/1       Completed   0          6m        10.32.0.35   gke-cluster1-default-pool-3796b2ee-rtcr
consumers-d25cs   0/1       Completed   0          6m        10.32.0.33   gke-cluster1-default-pool-3796b2ee-rtcr
consumers-jcwr8   0/1       Completed   0          6m        10.32.2.26   gke-cluster1-default-pool-3796b2ee-tpml
consumers-l9rkf   0/1       Completed   0          6m        10.32.0.34   gke-cluster1-default-pool-3796b2ee-rtcr
consumers-mbd5c   0/1       Completed   0          6m        10.32.2.27   gke-cluster1-default-pool-3796b2ee-tpml
queue-wlf8v       1/1       Running     0          22m       10.32.0.32   gke-cluster1-default-pool-3796b2ee-rtcr
Run Code Online (Sandbox Code Playgroud)

执行了以下三个k8s api调用,这些调用是从书籍样本中剪切和粘贴的.

运行具有工作队列的pod

apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
  labels:
    app: work-queue
    component: queue
    chapter: jobs
  name: queue
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: work-queue
        component: queue
        chapter: jobs
    spec:
      containers:
      - name: queue
        image: "gcr.io/kuar-demo/kuard-amd64:1"
        imagePullPolicy: Always
Run Code Online (Sandbox Code Playgroud)

将pod作为服务公开,以便工作人员可以访问它.

apiVersion: v1
kind: Service
metadata:
  labels:
    app: work-queue
    component: queue
    chapter: jobs
  name: queue
spec:
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: work-queue
    component: queue
Run Code Online (Sandbox Code Playgroud)

将100个项目发布到队列然后运行具有5个并行执行的pod的作业,直到队列为空.

apiVersion: batch/v1
kind: Job
metadata:
  labels:
    app: message-queue
    component: consumer
    chapter: jobs
  name: consumers
spec:
  parallelism: 5
  template:
    metadata:
      labels:
        app: message-queue
        component: consumer
        chapter: jobs
    spec:
      containers:
      - name: worker
        image: "gcr.io/kuar-demo/kuard-amd64:1"
        imagePullPolicy: Always
        args:
        - "--keygen-enable"
        - "--keygen-exit-on-complete"
        - "--keygen-memq-server=http://queue:8080/memq/server"
        - "--keygen-memq-queue=keygen"
      restartPolicy: OnFailure
Run Code Online (Sandbox Code Playgroud)

Tom*_*lin 9

文件说,这非常好:

作业完成后,不再创建Pod,但也不会删除Pod.保持它们可以让您仍然查看已完成的pod的日志,以检查错误,警告或其他诊断输出.作业对象在完成后也会保留,以便您可以查看其状态.在注意到其状态后,用户可以删除旧作业.使用kubectl删除作业(例如kubectl delete jobs/pi或kubectl delete -f ./job.yaml).使用kubectl删除作业时,它创建的所有pod也将被删除.

  • 吊舱仍在消耗哪些资源?显然,由于Pod的容器未运行,因此没有任何内存/ CPU,那么通过Pod闲逛还消耗着哪些其他资源? (3认同)