我们是否可以像Kubernetes中的Docker群一样 设置Pod重新启动限制 ?
Docker swarm restart_policy:
condition: any
delay: 60s
max_attempts: 2
window: 60s
或其他任何方式,因为k8s种部署不支持重启策略never
或onfailure
我的Deployment.yaml:-
apiVersion: apps/v1
kind: Deployment
metadata:
name: xyz
labels:
app: xyz
spec:
replicas: 1
selector:
matchLabels:
app: xyz
template:
metadata:
labels:
app: xyz
spec:
containers:
- name: xyz
image: x.y.z
imagePullPolicy: IfNotPresent
imagePullSecrets:
- name: x
restartPolicy: Never
错误
is invalid: spec.template.spec.restartPolicy: Unsupported value: "Never": supported values: "Always"
答案 0 :(得分:0)
运行kubectl run --help | grep restart
您将看到有一个重新启动策略设置,如下所示
--restart='Always': The restart policy for this Pod.
Legal values [Always, OnFailure, Never].
If set to 'Always' a deployment is created, if set to 'OnFailure' a job is created,
if set to 'Never', a regular pod is created.
For the latter two --replicas must be 1. Default 'Always', for CronJobs `Never`.
还有maxRetries
$ cat pod_retry.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
restartPolicy: "OnFailure"
maxRetries: "3" // Max retries is 3
containers:
- image: nginx:1.7.9
name: test-pod
command:
- /bin/ls
- hello
答案 1 :(得分:0)
很遗憾,这是不可能。在official docs中提到仅允许Always
。
仅允许
.spec.template.spec.restartPolicy
等于Always
,如果未指定,则为默认值。
DaemonSet
和StatefulSet
的情况相同。
与Deployment
concept有关的是,所有吊舱都必须处于Running
状态,吊舱不能失败或无响应。
部署代表一组多个相同的Pod,没有唯一的标识。部署运行应用程序的多个副本,并自动替换任何失败或无响应的实例。通过这种方式,部署有助于确保您的应用程序的一个或多个实例可用于满足用户请求。部署由Kubernetes部署控制器管理。
默认情况下,Deployment
自动创建ReplicaSet,它还会处理广告连播状态。
ReplicaSet由字段定义,包括一个选择器,该选择器指定如何标识它可以获取的Pod,许多副本指示其应维护的Pod,以及Pod模板,指定应创建的新Pod的数据。符合副本数标准。然后,ReplicaSet通过创建和删除Pod以达到所需数量来实现其目的。当ReplicaSet需要创建新的Pod时,它将使用其Pod模板。
只有pod
和job
类型能够将restartPolicy
与Never
和onFailure
值一起使用。