我已经执行了《 Kubernetes Up and Running》一书中的示例,其中运行了带有工作队列的Pod,然后创建了一个5个Pod的k8s作业,以消耗队列中的所有工作。我已经复制了下面的yaml api对象。
我的期望是,一旦完成一个k8s作业,它将被删除,但kubectl get pods -o wide
显示该荚仍然存在,即使它报告了0/1个容器已经准备好并且它们似乎仍然分配了ip地址,请参见输出在下面。
kubectl get pods
的输出中删除,为什么在容器中的所有容器都装完之后不是这样?所有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
执行了以下三个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
将吊舱作为服务公开,以便工作吊舱可以使用它。
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
将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
答案 0 :(得分:7)
docs说得很好:
任务完成后,将不再创建其他Pod,但不会创建Pod 删除了。保持它们周围,您仍然可以查看日志 完成的吊舱的数量,以检查是否有错误,警告或其他诊断信息 输出。作业对象在完成后也会保留下来,以便您 可以查看其状态。由用户决定是否删除旧作业 注意他们的地位。使用kubectl删除作业(例如,kubectl delete jobs / pi或kubectl delete -f ./job.yaml)。删除作业时 使用kubectl,它创建的所有吊舱也将被删除。
答案 1 :(得分:0)
它实际终止时显示已完成状态。如果您设置 restartPloicy:Never(不想再运行一次,则一次),那么它将进入此状态。
已终止:表示容器已完成,并且已停止运行。当容器成功完成执行或由于某种原因失败时,容器就会进入该容器。无论如何,都会显示原因和退出代码,以及容器的开始和结束时间。在容器进入“已终止”之前,执行preStop挂钩(如果有)。
... 状态:已终止 原因:已完成 退出码:0 开始时间:2019年1月30日,星期三11:45:26 +0530 已完成:2019年1月30日星期三11:45:26 +0530 ...