使用 sidecar 容器时定义默认容器

使用 sidecar 容器时定义默认容器

我使用 keycloak gatekeeper 作为集群上多个 pod 的 sidecar 容器,以便为这些服务启用 SSO。

但是当我尝试执行、查看日志等操作时,它会询问我想要使用哪个容器,而不是直接进入容器。有没有办法定义默认容器,例如kubectl exec -it PODNAME当我没有传递标志时它将使用哪个容器-c

答案1

您所要求的功能目前有效,但功能非常有限。根据kubectl exec 文档你可能会错过-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-podpodbusyboxhttpd

$ 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'

相关内容