kubernetes 延迟容器启动,直到pod中的其他容器启动

wgmfuz8q  于 2023-06-28  发布在  Kubernetes
关注(0)|答案(2)|浏览(252)

我正在研究一个用例,其中sidecar容器在主容器的目录权限更改时连续运行shell脚本。我想在pod中的主容器准备好后才启动侧容器。
我在看初始化容器,我可以看到的是,当我们有pod间的依赖关系时,初始化容器是很好的候选者(pod A只在Pod B启动/健康之后才启动)。
在我的例子中,我需要容器B只有在容器A在同一Pod中启动后才能启动。
部署。yaml供参考

containers:
    - name: {{ .Chart.Name }}
      securityContext:
        {{- toYaml .Values.securityContext | nindent 12 }}
      image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
      imagePullPolicy: {{ .Values.image.pullPolicy }}
   - name: container2
      image: some-repo
      imagePullPolicy: {{ .Values.image.pullPolicy }}
vu8f3i0k

vu8f3i0k1#

我不知道有任何K8s的原生特性或钩子可以满足您所描述的用例。
我会这样解决:
在与常规容器相同的Pod中运行sidecar容器,并让它执行一个脚本,该脚本在继续检查目录权限之前ping应用程序容器的就绪端点。

bn31dyow

bn31dyow2#

Marko Lukša写了一篇关于这个主题的博客文章(https://medium.com/@marko.luksa/delaying-application-start-until-sidecar-is-ready-2ec2d21a7b74)。
您可以编写一些脚本,在容器A上运行,并等待它“正式就绪”后退出。将该命令附加到容器A的启动后生命周期阶段将阻止pod中的后续容器启动,直到它完成。

apiVersion: v1
kind: Pod
metadata:
  name: container-a-starts-first
spec:
  containers:
  - name: containerA
    image: container-a
    lifecycle:
      postStart:
        exec:
          command:
          - /bin/wait-until-ready.sh
  - name: containerB
    image: container-b

相关问题