重新启动Kubernetes中的Sidecar容器

时间:2019-07-19 02:58:52

标签: docker kubernetes containers

我的POD中有两个容器。第一个容器是我的主要应用程序,第二个用作具有以下镜像且具有以下Dockerfile的Sidecar容器。

FROM scratch

EXPOSE 8080
ADD my-binary /

ENV GOROOT=/usr/lib/go
ENTRYPOINT ["/my-binary"]

基本上,它使用 scratch ,而my-binary是一个go应​​用程序,它作为进程运行。因此,我不能执行这个侧面的汽车集装箱。我需要重新启动辅助容器(my-binary),但是主容器中应该没有任何更改。主容器不得以任何方式更改。

有没有可能,我该如何实现?

非常感谢您对此进行调查。

有人要求提供POD的完整详细信息,然后您可以考虑采用以下吊舱结构

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
  labels:
    app: my-deploy
spec:
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: main
        image: my-main-app-image
        ports:
        - containerPort: 80
      - name: my-go-binary
        image: my-go-binary-image

请注意-

kubectl exec POD_NAME -c CONTAINER_NAME reboot 

这不适用于第二个容器,因为它是临时图像。

1 个答案:

答案 0 :(得分:0)

因此,您使用reboot作为基本映像的scatch命令无效(当然,它将更新)。

  

此图像在构建基础图像(例如debianbusybox)或超小型图像(仅包含单个二进制文件以及所需内容,例如hello-世界)。

请参见https://hub.docker.com/_/scratch

  

基本映像scratch是Docker保留的最小映像。它可以作为构建小型容器的起点。使用scratch“映像”向构建过程发出信号,表示您希望Dockerfile中的下一个命令成为映像中的第一个文件系统层。

参考:https://docs.docker.com/develop/develop-images/baseimages/#create-a-simple-parent-image-using-scratch

从您提供的dockerfile中,唯一的文件系统是go-binery。除此以外没有别的。这就是为什么您不能(无法)运行reboot命令的原因。如果您更改基本图像,例如busyboxalpine或其他任何内容,则可以运行reboot命令。

  

但是请记住,新的基本映像必须具有正确的外壳程序才能运行预期的命令。例如,busybox图像具有外壳(bash),因此可以运行reboot命令。并且alpine图像也具有外壳(sh)。