Utilizo keycloak gatekeeper como contenedor complementario para varios pods en mi clúster para habilitar el SSO para esos servicios.
Pero cuando intento ejecutar, ver registros, etc. me pregunta qué contenedor quiero usar en lugar de simplemente entrar en él. ¿Hay alguna manera de definir el contenedor predeterminado que usará para algo como kubectl exec -it PODNAME
cuando no paso la -c
bandera?
Respuesta1
Lo que estás pidiendo actualmente funciona pero es muy limitado. De acuerdo adocumentación ejecutiva de kubectlte puedes perder -c
la bandera:
-c, --container="": Nombre del contenedor. Si se omite, se elegirá el primer contenedor del grupo.
pero también debe especificar alguna acción/comando date
como bash
o sh
.
Obtenga resultados al ejecutar 'fecha' desde el pod 123456-7890, utilizando el primer contenedor de forma predeterminada kubectl exec 123456-7890 fecha
Menciono que es muy limitado, ya que esto usaráprimer contenedorde la lista que se especificó en el manifiesto YAML. Si va a utilizar -c
la bandera, puede especificar cuál desea execute
.
spec:
containers:
- image: httpd
name: httpd
- image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
name: busybox
Producción
Sin usar ningún comando:
$ kubectl exec -ti test-pod
error: you must specify at least one command for the container
Al usar el comando date
, usará el primer contenedor de YAML/descripción del 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
comando con pod especificado
$ kubectl exec -ti test-pod -c busybox -- date
Mon Jan 4 14:06:36 UTC 2021
Anotación ejecutiva de Kubectl: contenedor predeterminado
En uno de losMejoras de GithubPuede encontrar información de que existe un plan para introducir esta función en la versión estable de Kubernetes (1.23).
Se vería así:
kubectl annotate pod test-pod kubectl.kubernetes.io/default-exec-container=<conatinerName>
Anotación de registros de Kubectl: contenedor predeterminado
Una característica similar pero logs
no exec
se introdujo en kubectl 1.18
. Fue mencionado enHilo de Github. Para lograr eso tienes que agregar una nueva anotación.kubectl.kubernetes.io/default-logs-container=<containerName>
Escenario mi test-pod
pod con busybox
yhttpd
$ 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'