Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 当其中一个容器终止并成功完成时,Pod将重新启动_Kubernetes - Fatal编程技术网

Kubernetes 当其中一个容器终止并成功完成时,Pod将重新启动

Kubernetes 当其中一个容器终止并成功完成时,Pod将重新启动,kubernetes,Kubernetes,我有这种部署 apiVersion:apps/v1 种类:部署 元数据: 名称:部署名称 标签: 关键词:价值 规格: 副本:1份 选择器: 火柴标签: 关键词:价值 模板: 元数据: 关键词:价值 规格: serviceAccountName:air run sa 容器: -名称:部署主 图片:这里是部署图片 imagePullPolicy:始终 端口: -名称:http 集装箱港口:5000 协议:TCP -名称:部署轮询 图片:阿尔卑斯山:3.9 imagePullPolicy:如果不存在

我有这种部署

apiVersion:apps/v1 种类:部署 元数据: 名称:部署名称 标签: 关键词:价值 规格: 副本:1份 选择器: 火柴标签: 关键词:价值 模板: 元数据: 关键词:价值 规格: serviceAccountName:air run sa 容器: -名称:部署主 图片:这里是部署图片 imagePullPolicy:始终 端口: -名称:http 集装箱港口:5000 协议:TCP -名称:部署轮询 图片:阿尔卑斯山:3.9 imagePullPolicy:如果不存在 命令:[/bin/sh] args: -/scripts/user-deployment-poll.sh -剪断-- pod包含两个容器—部署主容器和部署轮询容器。deployment main是一个web服务器,deployment poll容器运行一个bash脚本user-deployment-poll.sh,该脚本由此处未显示的配置映射提供,与此无关。脚本运行到完成并成功存在,容器部署轮询也是如此。一旦部署轮询终止,pod就会重新启动,并且会发生多次。我不希望pod在部署轮询完成后重新启动

这是kubectl描述pod的输出-

它清楚地显示部署轮询已完成并终止。由于CrashLoopBackOff,它当前处于等待状态

编辑 部署轮询容器检查部署主容器的状态。一旦部署主节点达到特定状态,部署轮询就会调用集群上的服务,通知pod正常,然后终止。换句话说,两个容器应该同时启动。对于init容器,主容器将在init容器完成后运行。

假设部署轮询只需运行一次,您可以使用运行bash脚本。容器将执行其工作并退出,pod不会重新启动

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-name
  labels:
    key: value
spec:
  replicas: 1
  selector:
    matchLabels:
      key: value
  template:
    metadata:
      key: value
    spec:
      containers:
        - name: deployment-main
          image: deployment-image-here
          imagePullPolicy: Always
          ports:
            - name: http
              containerPort: 5000
              protocol: TCP
      initContainers:
        - name: deployment-poll
          image: alpine:3.9
          imagePullPolicy: IfNotPresent
          command: [ "/bin/sh" ]
在您的情况下,它会重新启动,因为kubernetes试图保持部署状态,而在您的情况下,部署状态要求两个容器始终运行。但是您希望第二个容器执行其工作并退出

apiVersion:apps/v1 种类:部署 元数据: 名称:部署名称 标签: 关键词:价值 规格: 副本:1份 选择器: 火柴标签: 关键词:价值 模板: 元数据: 关键词:价值 规格: serviceAccountName:air run sa 容器: -名称:部署主 图片:这里是部署图片 imagePullPolicy:始终 端口: -名称:http 集装箱港口:5000 协议:TCP 初始化容器: -名称:部署轮询 图片:阿尔卑斯山:3.9 imagePullPolicy:如果不存在 命令:[/bin/sh] args: -/scripts/user-deployment-poll.sh 这仅在必须首先运行脚本部分时才有用。否则,我们应该尝试使用作业资源类型来运行bash容器,使用部署资源类型来运行另一个容器。当然,作业资源类型的元数据应该相应地更改

apiVersion:batch/v1 种类:工作 元数据: 姓名:pi 规格: 模板: 规格: 容器: -名称:部署轮询 图片:阿尔卑斯山:3.9 imagePullPolicy:如果不存在 命令:[/bin/sh] args: -/scripts/user-deployment-poll.sh 餐馆政策:永不 退订限额:4 另一种资源类型应该是部署

apiVersion:apps/v1 种类:部署 元数据: 名称:部署名称 标签: 关键词:价值 规格: 副本:1份 选择器: 火柴标签: 关键词:价值 模板: 元数据: 关键词:价值 规格: serviceAccountName:air run sa 容器: -名称:部署主 图片:这里是部署图片 imagePullPolicy:始终 端口: -名称:http 集装箱港口:5000 协议:TCP 假设部署轮询只需运行一次,则可以使用运行bash脚本。容器将执行其工作并退出,pod不会重新启动

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-name
  labels:
    key: value
spec:
  replicas: 1
  selector:
    matchLabels:
      key: value
  template:
    metadata:
      key: value
    spec:
      containers:
        - name: deployment-main
          image: deployment-image-here
          imagePullPolicy: Always
          ports:
            - name: http
              containerPort: 5000
              protocol: TCP
      initContainers:
        - name: deployment-poll
          image: alpine:3.9
          imagePullPolicy: IfNotPresent
          command: [ "/bin/sh" ]
在您的情况下,它会重新启动,因为kubernetes试图保持部署状态,而在您的情况下,部署状态要求两个容器始终运行。但是您希望第二个容器执行其工作并退出

apiVersion:apps/v1 种类:部署 元数据: 名称:部署名称 标签: 关键词:价值 规格: 副本:1份 选择器: 火柴标签: 关键词:价值 模板: 元数据: 关键词:价值 规格: serviceAccountName:air run sa 容器: -名称:部署主 图片:这里是部署图片 imagePullPolicy:始终 端口: -名称:http 集装箱港口:50 00 协议:TCP 初始化容器: -名称:部署轮询 图片:阿尔卑斯山:3.9 imagePullPolicy:如果不存在 命令:[/bin/sh] args: -/scripts/user-deployment-poll.sh 这仅在必须首先运行脚本部分时才有用。否则,我们应该尝试使用作业资源类型来运行bash容器,使用部署资源类型来运行另一个容器。当然,作业资源类型的元数据应该相应地更改

apiVersion:batch/v1 种类:工作 元数据: 姓名:pi 规格: 模板: 规格: 容器: -名称:部署轮询 图片:阿尔卑斯山:3.9 imagePullPolicy:如果不存在 命令:[/bin/sh] args: -/scripts/user-deployment-poll.sh 餐馆政策:永不 退订限额:4 另一种资源类型应该是部署

apiVersion:apps/v1 种类:部署 元数据: 名称:部署名称 标签: 关键词:价值 规格: 副本:1份 选择器: 火柴标签: 关键词:价值 模板: 元数据: 关键词:价值 规格: serviceAccountName:air run sa 容器: -名称:部署主 图片:这里是部署图片 imagePullPolicy:始终 端口: -名称:http 集装箱港口:5000 协议:TCP 一旦容器成功终止,您就可以使用POD,POD不会重新启动

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-name
  labels:
    key: value
spec:
  replicas: 1
  selector:
    matchLabels:
      key: value
  template:
    metadata:
      key: value
    spec:
      containers:
        - name: deployment-main
          image: deployment-image-here
          imagePullPolicy: Always
          ports:
            - name: http
              containerPort: 5000
              protocol: TCP
      initContainers:
        - name: deployment-poll
          image: alpine:3.9
          imagePullPolicy: IfNotPresent
          command: [ "/bin/sh" ]
一旦容器成功终止,您就可以使用POD,POD不会重新启动

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-name
  labels:
    key: value
spec:
  replicas: 1
  selector:
    matchLabels:
      key: value
  template:
    metadata:
      key: value
    spec:
      containers:
        - name: deployment-main
          image: deployment-image-here
          imagePullPolicy: Always
          ports:
            - name: http
              containerPort: 5000
              protocol: TCP
      initContainers:
        - name: deployment-poll
          image: alpine:3.9
          imagePullPolicy: IfNotPresent
          command: [ "/bin/sh" ]

这是预期的行为,因为部署控制器确保其规范中定义的POD数始终处于就绪状态。如果失败,它将尝试重新启动 使用退避算法失败的容器

您可以利用它在主容器启动之前进行设置


根据最新情况,恐怕部署策略将不适用于您的情况。相反,您应该考虑创建一个单独的资源,其逻辑是轮询在部署中运行的应用程序并执行必要的一次性作业。

< P>这是预期的行为,因为部署控制器确保在其规范中定义的POD副本的数量总是处于就绪状态。如果失败,它将尝试重新启动 使用退避算法失败的容器

您可以利用它在主容器启动之前进行设置



根据最新情况,恐怕部署策略将不适用于您的情况。相反,您应该考虑创建一个单独的资源,该逻辑具有轮询部署中运行的应用程序的逻辑,并执行必要的一次作业。请看编辑后的问题。嗯,我也这么想。作业会起作用。是的,作业资源类型也会起作用。同样的情况也可以通过一个部署只有InitContainer,另一个部署只有Container来实现。这可能有点过分了。。为什么要使用没有容器的部署来实现作业资源的行为?呵呵,这也无可争辩!工作资源类型绝对是更好的答案。确实值得投票:不幸的是,init容器不满足要求。请看编辑后的问题。嗯,我也这么想。作业会起作用。是的,作业资源类型也会起作用。同样的情况也可以通过一个部署只有InitContainer,另一个部署只有Container来实现。这可能有点过分了。。为什么要使用没有容器的部署来实现作业资源的行为?呵呵,这也无可争辩!工作资源类型绝对是更好的答案。确实值得投票:不幸的是,init容器不满足要求。请查看已编辑的问题。在这种情况下,为什么不使用不同的部署?你将有不同的吊舱运行和做同样的工作。我以为您希望bash脚本首先运行。顺便说一句,我尝试使用此策略,但失败了,出现以下错误:错误:验证stdep.yaml时出错:验证数据时出错:ValidationErrorDeployment.spec.template.spec:io.k8s.api.core.v1.PodSpec中缺少必需的字段容器;如果您选择忽略这些错误,请使用-validate=false关闭验证,看来容器字段对于部署是必需的,而且如果没有主容器,我们就无法进行部署。是的,这很有意义。我认为工作是更好的方法。让我删除部署部分。现在更新答案。不幸的是,init容器不能满足这个要求。请查看已编辑的问题。在这种情况下,为什么不使用不同的部署?你将有不同的吊舱运行和做同样的工作。我以为你想要bash脚本t
o run first.btw,我尝试使用此策略,但失败了,出现以下错误:错误:验证stdep.yaml时出错:验证数据时出错:ValidationErrorDeployment.spec.template.spec:io.k8s.api.core.v1.PodSpec中缺少必需的字段容器;如果您选择忽略这些错误,请使用-validate=false关闭验证,看来容器字段对于部署是必需的,而且如果没有主容器,我们就无法进行部署。是的,这很有意义。我认为工作是更好的方法。让我删除部署部分。现在更新答案。不幸的是,init容器不能满足这个要求。请查看已编辑的问题。请使用单个容器,并根据需要将另一个容器部署为部署或作业或conrjob,而不是在单个部署中同时管理这两个容器。很遗憾,init容器不满足要求。请查看已编辑的问题。请使用单个容器,并根据需要将另一个容器部署为部署或作业或conrjob,而不是在单个部署中同时管理这两个容器。