设置Pod重新启动限制

时间:2019-12-12 09:28:32

标签: docker kubernetes minikube kubernetes-pod

我们是否可以像Kubernetes中的Docker群一样 设置Pod重新启动限制

  

Docker swarm restart_policy:

    condition: any
    delay: 60s
    max_attempts: 2
    window: 60s         

或其他任何方式,因为k8s种部署不支持重启策略neveronfailure

我的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"

2 个答案:

答案 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,如果未指定,则为默认值。

DaemonSetStatefulSet的情况相同。

Deployment concept有关的是,所有吊舱都必须处于Running状态,吊舱不能失败或无响应。

  

部署代表一组多个相同的Pod,没有唯一的标识。部署运行应用程序的多个副本,并自动替换任何失败或无响应的实例。通过这种方式,部署有助于确保您的应用程序的一个或多个实例可用于满足用户请求。部署由Kubernetes部署控制器管理。

默认情况下,Deployment自动创建ReplicaSet,它还会处理广告连播状态。

  

ReplicaSet由字段定义,包括一个选择器,该选择器指定如何标识它可以获取的Pod,许多副本指示其应维护的Pod,以及Pod模板,指定应创建的新Pod的数据。符合副本数标准。然后,ReplicaSet通过创建和删除Pod以达到所需数量来实现其目的。当ReplicaSet需要创建新的Pod时,它将使用其Pod模板。

只有podjob类型能够将restartPolicyNeveronFailure值一起使用。