Kubernetes 当主容器退出时,如何使k8s吊舱自行退出?

Kubernetes 当主容器退出时,如何使k8s吊舱自行退出?,kubernetes,microservices,kubernetes-pod,Kubernetes,Microservices,Kubernetes Pod,我使用的是k8s吊舱的sidecard模式,其中有两个容器:主容器和sidecar容器。我希望pod状态仅取决于主容器(例如,如果主容器失败/完成,pod应处于相同状态),并丢弃sidecard容器 有一种优雅的方法可以做到这一点吗?不幸的是,restartPolicy标志适用于pod中的所有容器,因此简单的解决方案实际上不起作用。你确定你的逻辑不应该放在一个容器里,而不是一个侧车里吗?如果它确实需要一个侧车,让它在你的逻辑结束时永远休眠。根据: Pod正在运行,有两个容器。容器1失败退出 记录

我使用的是k8s吊舱的sidecard模式,其中有两个容器:主容器和sidecar容器。我希望pod状态仅取决于主容器(例如,如果主容器失败/完成,pod应处于相同状态),并丢弃sidecard容器


有一种优雅的方法可以做到这一点吗?

不幸的是,restartPolicy标志适用于pod中的所有容器,因此简单的解决方案实际上不起作用。你确定你的逻辑不应该放在一个容器里,而不是一个侧车里吗?如果它确实需要一个侧车,让它在你的逻辑结束时永远休眠。

根据:

Pod正在运行,有两个容器。容器1失败退出

记录失败事件

如果重新启动策略为:

  • 始终:重新启动容器;Pod阶段保持运行状态
  • OnFailure:重新启动容器;Pod阶段保持运行状态
  • 从不:不重新启动容器;Pod阶段保持运行状态
如果容器1未运行,而容器2退出:

记录失败事件

如果重新启动策略为:

  • 始终:重新启动容器;Pod阶段保持运行状态
  • OnFailure:重新启动容器;Pod阶段保持运行状态
  • 从不:Pod阶段变得失败
作为restartPolicy:Never的变通方法(此问题的部分解决方案)——您可以将livenees探测的结果从主容器应用到sidecar容器(使用exec、http或tcp探测)

在使用微服务时,这不是一个好的解决方案

例如:

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness1
    image: k8s.gcr.io/busybox
    args:
    - /bin/sh
    - -c
    - touch /test-pd/healthy; sleep 30; rm -rf /test-pd/healthy; sleep 30
    livenessProbe:
      exec:
        command:
        - cat
        - /test-pd/healthy
      initialDelaySeconds: 5
      periodSeconds: 5
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  - name: liveness2
    image: k8s.gcr.io/busybox
    args:
    - /bin/sh
    - -c
    - sleep 120
    livenessProbe:
      exec:
        command:
        - cat
        - /test-pd2/healthy
      initialDelaySeconds: 5
      periodSeconds: 5
    volumeMounts:
    - mountPath: /test-pd2
      name: test-volume
  restartPolicy: Never
  volumes:
  - name: test-volume
    hostPath:
      # directory location on host
      path: /data
      type: Directory

如果有帮助,请告诉我。

您能将sidecar的liveness probe更改为no op吗?您能分享一下您的经验吗。最后——如何解决这个问题?