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