2 min read | by Jordi Prats
One of the many improvements we get in Kubernetes 1.27 is the ability to set what's the default container:
apiVersion: v1 kind: Pod metadata: name: multi-container-pod spec: containers: - image: alpine:latest name: one command: - sh - -c - 'while true; do echo one; sleep 1m; done' - image: alpine:latest name: two command: - sh - -c - 'while true; do echo two; sleep 2m; done' - image: alpine:latest name: three command: - sh - -c - 'while true; do echo tree; sleep 3m; done'
To do so we just need to use the kubectl.kubernetes.io/default-container annotation setting which one is going to be the default.
Without any annotation it's going to default to the first container that it has in the Pod definition:
$ kubectl logs multi-container-pod Defaulted container "one" out of: one, two, three one
If we add the annotation setting one of the container names, in this example it's set to two:
apiVersion: v1 kind: Pod metadata: name: multi-container-pod annotations: kubectl.kubernetes.io/default-container: two spec: containers: - image: alpine:latest name: one command: - sh - -c - 'while true; do echo one; sleep 1m; done' - image: alpine:latest name: two command: - sh - -c - 'while true; do echo two; sleep 2m; done' - image: alpine:latest name: three command: - sh - -c - 'while true; do echo tree; sleep 3m; done'
Using this annotation we won't get the Defaulted container warning when we are not specifying any container to kubectl. Instead, it will just use the container set in the annotation:
$ kubectl logs multi-container-pod two
Posted on 01/06/2023