使用 sidecar 容器時定義預設容器

使用 sidecar 容器時定義預設容器

我使用 keycloak gatewaykeeper 作為叢集上多個 pod 的 sidecar 容器,以便為這些服務啟用 SSO。

但是當我嘗試執行、查看日誌等時;它詢問我想使用什麼容器,而不是直接進入它。有沒有辦法定義預設容器,kubectl exec -it PODNAME當我不傳遞標誌時它將使用它-c

答案1

您所要求的目前有效,但非常有限。根據kubectl 執行文檔你可能會錯過-c標誌:

-c, --container="": 容器名稱。如果省略,將選擇 Pod 中的第一個容器

但您也指定了一些操作/命令,例如date,bashsh

預設使用第一個容器,從 pod 123456-7890 執行「date」取得輸出 kubectl exec 123456-7890 date

我提到它非常有限,因為這將使用第一個容器來自 YAML 清單中指定的清單。如果您要使用-c標誌,您可以指定您想要的標誌execute

spec:
  containers:
  - image: httpd
    name: httpd
  - image: busybox
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
    name: busybox

輸出

不使用任何指令:

$ kubectl exec -ti test-pod
error: you must specify at least one command for the container

透過使用命令date,它將使用 YAML/pod 描述中的第一個容器。

$ kubectl exec -ti test-pod -- date
Defaulting container name to httpd.
Use 'kubectl describe pod/test-pod -n default' to see all of the containers in this pod.
Mon Jan  4 14:06:27 UTC 2021

Date指定 pod 的命令

$ kubectl exec -ti test-pod -c busybox -- date
Mon Jan  4 14:06:36 UTC 2021

Kubectl exec 註解 - 預設容器

在其中之一Github 增強功能可以查到訊息,有計劃在穩定的kubernetes版本(1.23)中引入這個功能。

它看起來像:

kubectl annotate pod test-pod kubectl.kubernetes.io/default-exec-container=<conatinerName>

Kubectl 日誌註解 - 預設容器

類似的功能但logs沒有exec在 中引入kubectl 1.18。中提到過Github 線程。要實現這一點,您必須添加新的註釋kubectl.kubernetes.io/default-logs-container=<containerName>

test-pod我的pod 的場景為busyboxhttpd

$ kubectl logs test-pod
error: a container name must be specified for pod test-pod, choose one of: [busybox httpd]

$ kubectl annotate pod test-pod kubectl.kubernetes.io/default-logs-container=httpd
pod/test-pod annotated

$ kubectl logs test-pod
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.4.1.12. Set the 'ServerName' directive globally to suppress this message
[Mon Jan 04 14:05:08.191117 2021] [mpm_event:notice] [pid 1:tid 140379730310272] AH00489: Apache/2.4.46 (Unix) configured -- resuming normal operations
[Mon Jan 04 14:05:08.191428 2021] [core:notice] [pid 1:tid 140379730310272] AH00094: Command line: 'httpd -D FOREGROUND'

$ kubectl logs test-pod -c httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.4.1.12. Set the 'ServerName' directive globally to suppress this message
[Mon Jan 04 14:05:08.191117 2021] [mpm_event:notice] [pid 1:tid 140379730310272] AH00489: Apache/2.4.46 (Unix) configured -- resuming normal operations
[Mon Jan 04 14:05:08.191428 2021] [core:notice] [pid 1:tid 140379730310272] AH00094: Command line: 'httpd -D FOREGROUND'

相關內容