簡體   English   中英

在 Kubernetes 中僅重啟 sidecar 容器

[英]Restart only sidecar container in Kubernetes

我的 POD 中有兩個容器。 第一個容器是我的主要應用程序,第二個用作具有以下 Dockerfile 的以下圖像的 sidecar 容器。

FROM scratch

EXPOSE 8080
ADD my-binary /

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

基本上它使用scratch,而my-binary 是一個作為進程運行的go 應用程序。 所以我不能EXEC在這一側汽車集裝箱。 我需要重新啟動側容器(​​my-binary),但主容器應該沒有變化。 不應以任何方式更改主容器。

有沒有可能,我怎么能做到這一點?

非常感謝您調查此事。

有人要求提供POD的完整細節,那么你可以考慮下面的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 

這不適用於第二個容器,因為它是臨時映像。

因此,由於使用scatch作為基本映像,您的reboot命令不起作用(當然它會更新工作)。

此映像在構建基本映像(例如debianbusybox )或超小型映像(僅包含單個二進制文件和它需要的任何內容,例如 hello-world )的上下文中最有用。

見, https://hub.docker.com/_/scratch

該基地圖像scratch是碼頭工人的保留最少的圖像。 它可以作為構建小型容器的起點。 使用scratch “鏡像”向構建過程發出信號,表明您希望 Dockerfile 中的下一個命令成為鏡像中的第一個文件系統層。

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

從您提供的 dockerfile 來看,唯一的文件系統是您的 go-binery。 除此以外別無他物。 這就是你不能(不能)運行reboot命令的原因。 如果您更改了基本映像,例如busyboxalpine或其他任何東西,您將能夠運行reboot命令。

但請記住,您的新基礎映像必須具有合適的 shell 才能運行您預期的命令。 例如, busybox映像具有 shell ( bash ),因此可以運行reboot命令。 alpine圖像也有外殼( sh )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM