【问题标题】:How can I block Kubernetes pod restarting after ended process如何在结束进程后阻止 Kubernetes pod 重启
【发布时间】:2021-04-11 13:36:55
【问题描述】:

我有一个 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 文件中。

【问题讨论】:

    标签: python python-3.x kubernetes


    【解决方案1】:

    你得到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 job 或直接使用 pod:

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

    【讨论】:

      【解决方案2】:

      PodSpec 有一个 restartPolicy 字段,其可能的值包括 Always、OnFailure 和 Never。默认值为始终。 你能不能试试 OnFailure 你只有一个容器应该可以工作。

      【讨论】:

        【解决方案3】:

        您有一个因异常而结束的进程,您需要更正该逻辑。 并且可以设置 OnFailure。如果你想调试你的代码,那么你需要捕获这个错误并记录它。这样您的进程就不会结束,或者您可以在新线程中运行此逻辑。这将是子线程,在主线程中你可以有睡眠或等待条件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-05
          • 1970-01-01
          相关资源
          最近更新 更多