Defina o contêiner padrão ao usar o contêiner secundário

Defina o contêiner padrão ao usar o contêiner secundário

Eu uso o keycloak gatekeeper como um contêiner secundário para vários pods em meu cluster para habilitar o SSO para esses serviços.

Mas quando tento executar, visualizar logs, etc; ele pergunta qual contêiner eu quero usar em vez de apenas entrar nele. Existe uma maneira de definir o contêiner padrão que ele usará para algo como kubectl exec -it PODNAMEquando eu não passar o -csinalizador?

Responder1

O que você está pedindo está funcionando atualmente, mas é muito limitado. De acordo comdocumentação executiva do kubectlvocê pode perder -ca bandeira:

-c, --container="": Nome do contêiner. Se omitido, o primeiro contêiner do pod será escolhido

mas você também especificou alguma ação/comando datecomo bashou sh.

Obtenha a saída da execução de 'date' do pod 123456-7890, usando o primeiro contêiner por padrão kubectl exec 123456-7890 date

Mencionei que é muito limitado, pois usaráprimeiro contêinerda lista que foi especificada no manifesto YAML. Se você for usar -cflag, poderá especificar qual deseja execute.

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

Saída

Sem usar nenhum comando:

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

Com o uso de command date, ele usará o primeiro contêiner do YAML/descrição do 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

Datecomando com pod especificado

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

Anotação exec Kubectl - contêiner padrão

Em um dosMelhorias no Githubvocê pode encontrar informações de que há planos para introduzir esse recurso na versão estável do Kubernetes (1.23).

Seria parecido com:

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

Anotação de logs do Kubectl – contêiner padrão

Recurso semelhante, mas logsnão relacionado, execfoi introduzido no kubectl 1.18. Foi mencionado emTópico do Github. Para conseguir isso, você deve adicionar uma nova anotaçãokubectl.kubernetes.io/default-logs-container=<containerName>

Cenário meu test-podpod com busyboxehttpd

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

informação relacionada