延迟容器重启

Delay container restart

我正在使用 ReplicationController 创建 pod 运行 redis 容器。

redis容器由Redis Sentinel监控。而且还有一个问题,如果redis crash 和restart 过快,可能会在投票进行的时候给Redis Sentinel 带来麻烦。

{
  "apiVersion": "v1",
  "kind": "ReplicationController",
  "metadata": {
    "name": "redis",
    "labels": { "name" : "redis" }
  },
  "spec": {  
    "replicas": 1,
    "selector": {
      "name":"redis"
    },
    "template": { 
      "metadata": {
        "labels": {
          "name":"redis"
        }
      },
      "spec": { 
        "volumes": [
            //...
        ],
        "containers": [
          //...
        ],
        "restartPolicy": "Always"
      }
    }
  }
}

是否可以延迟重启?即在上次崩溃后 60 秒后重新启动容器

Kubelet 已经退出容器自动重启。在这种情况下,您会看到如下内容:

$ cluster/kubectl.sh get pods NAME READY STATUS RESTARTS AGE ... mem-besteffort-zpnpm 0/1 CrashLoopBackOff 4 3m

如果您发现它过于频繁地重新启动容器,您可以在执行实际命令之前做一些像 sleep 60 这样简单的事情。

sleep 的更好替代品:

  1. terminationGracePeriodSeconds:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
    name: test
spec:
    replicas: 1
    template:
        spec:
            containers:
              - name: test
                image: ...
            terminationGracePeriodSeconds: 60
  1. preStop handler, read more about lifecycle hooks

另请阅读:Kubernetes best practices: terminating with grace