true is a reserved word in YAML and this can bite you when you least expect it. Consider the following extremely simple Pod and livenessProbe:
apiVersion: v1
kind: Pod
metadata:
name: true-test
spec:
containers:
- name: nginx
image: nginx
livenessProbe:
exec:
command:
- true
Let’s create this, shall we?
$ kubectl create -f true.yaml
Error from server (BadRequest): error when creating "true.yaml": Pod in version "v1" cannot be handled as a Pod: v1.Pod.Spec: v1.PodSpec.Containers: []v1.Container: v1.Container.LivenessProbe: v1.Probe.Handler: Exec: v1.ExecAction.Command: []string: ReadString: expects " or n, but found t, error found in #10 byte of ...|ommand":[true]}},"na|..., bigger context ...|age":"nginx","livenessProbe":{"exec":{"command":[true]}},"name":"nginx"}]}}
|...
$
All because in the above specification, true is not quoted, as it should:
livenessProbe:
exec:
command:
- "true"
A different take, if you do not want to mess with true would be:
livenessProbe:
exec:
command:
- exit
Beware though, if you want to exit 0
you need to quote again:
livenessProbe:
exec:
command:
- exit
- "0"
Oh, the many ways you can waste your time…