Kubernetes重启策略的always和on failure有什么区别?

gijlo24d  于 12个月前  发布在  Kubernetes
关注(0)|答案(2)|浏览(154)

我在Kubernetes中找到的重启策略的最佳来源是:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy
但它只列出了可能的restartPolicy值,并没有解释它们。
AlwaysOnFailure的区别是什么?难道这东西不能在重新启动之前就失败吗?

sxpgvts3

sxpgvts31#

总是意味着容器将重新启动,即使它以零退出代码退出(即成功地)。当你不关心容器为什么退出时,这很有用,你只是想确保它总是在运行(例如:网络服务器)。这是默认设置。
OnFailure意味着容器只有在使用非零退出代码退出时才会重新启动(即出了问题)。当你想用pod完成某个任务时,这很有用,并确保它成功完成-如果没有成功,它将重新启动,直到它成功完成。
Never表示无论退出原因如何,容器都不会重新启动。

这些不同的重启策略基本上Map到不同的控制器类型,如您在kubectl run --help中看到的:
--restart=“始终”:此Pod的重新启动策略。法律的值[始终、失败时、从不]。如果设置为“Always”,将为此Pod创建部署;如果设置为“OnFailure”,将为此Pod创建作业;如果设置为“Never”,将创建常规Pod。对于后两个--副本必须为1。默认“始终”
Pod用户指南:
ReplicationController仅适用于RestartPolicy = Always的Pod。Job仅适用于RestartPolicy等于OnFailure或Never的Pod。

olmpazwi

olmpazwi2#

举一个实际的例子:

kubectl run never --image=alpine --restart=Never  -- echo "Hello"

它会启动一个Pod,该Pod运行并成功终止(echo hello),并且将永不重启,因此状态为完成。

kubectl run onfail --image=alpine --restart=OnFailure  -- echo "Hello"

它将启动一个Pod,运行并终止成功(将echo hello),因此它不会重新启动,状态也将完成:

kubectl run onfail1 --image=alpine --restart=OnFailure  -- exit 0

它将启动一个Pod,该Pod运行并终止,但出现错误,因此它将重新启动,并且Pod将处于CrashLoopBackOff状态:

kubectl run always --image=alpine --restart=Always  -- echo "Hello"

它将启动一个Pod,运行并成功终止**(将echo hello),但它将总是重新启动:

使用Always作为重启策略,您可能会认为它的行为类似于deployment,而使用OnFailure作为重启策略,它的行为类似于job

相关问题