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