我在Kubernetes中找到的重启策略的最佳来源是:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy
但它只列出了可能的restartPolicy
值,并没有解释它们。Always
和OnFailure
的区别是什么?难道这东西不能在重新启动之前就失败吗?
我在Kubernetes中找到的重启策略的最佳来源是:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy
但它只列出了可能的restartPolicy
值,并没有解释它们。Always
和OnFailure
的区别是什么?难道这东西不能在重新启动之前就失败吗?
2条答案
按热度按时间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。
olmpazwi2#
举一个实际的例子:
它会启动一个Pod,该Pod运行并成功终止(
echo hello
),并且将永不重启,因此状态为完成。它将启动一个Pod,运行并终止成功(将
echo hello
),因此它不会重新启动,状态也将完成:它将启动一个Pod,该Pod运行并终止,但出现错误,因此它将重新启动,并且Pod将处于CrashLoopBackOff状态:
它将启动一个Pod,运行并成功终止**(将
echo hello
),但它将总是重新启动:使用
Always
作为重启策略,您可能会认为它的行为类似于deployment
,而使用OnFailure
作为重启策略,它的行为类似于job