首页 > 解决方案 > 如何在结束进程后阻止 Kubernetes pod 重新启动

问题描述

我有一个 python 脚本,我在 Kubernetes 上使用过。在 python 脚本 Kubernetes 重新启动 pod 进程结束后。我不想这样。

我试图从 python 脚本中添加一行代码,如下所示:

text = input("please a key for exiting")

我收到 EOF 错误,因此它取决于容器在我的 Kubernetes 上没有 EOF 配置。

之后我尝试使用 restartPolicy: Never。但是 restartPolicy 不能是 Never 并且我得到这样的错误:

error validating data: ValidationError(Deployment.spec.template): unknown field \"restartPolicy\" in io.k8s.api.core.v1.PodTemplateSpec;

我怎样才能做到这一点?我只想不重启这个 pod。它可以在 python 脚本或 Kubernetes yaml 文件上。

标签: pythonpython-3.xkubernetes

解决方案


你得到unknown field \"restartPolicy\" in io.k8s.api.core.v1.PodTemplateSpec;是因为你很可能搞砸了一些缩进。

这是一个字段缩进不正确的示例部署restartPolicy

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
    restartPolicy: Never   # <-------

这是一个具有正确缩进的部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
      restartPolicy: Never   # <-------

但这会导致错误:

kubectl  apply -f deploy.yaml
The Deployment "nginx-deployment" is invalid: spec.template.spec.restartPolicy: Unsupported value: "Never": supported values: "Always"

这是一个解释为什么:restartpolicy-unsupported-value-never-supported-values-always


如果要运行一次性 pod,请使用k8s 作业或直接使用 pod:

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: ngx
  name: ngx
spec:
  containers:
  - image: nginx
    name: ngx
  restartPolicy: Never

推荐阅读