kubectl wait --for=condition=complete --timeout=30s
This totally looks like you are running kubectl wait --for=condition=complete
on a Pod as described in your output rather than a Job.
A pod doesn't have the --for=condition=complete
option. Exactly, what I get when I run it on a pod:
$ kubectl wait --for=condition=complete pod/mypod-xxxxxxxxxx-xxxxx
error: .status.conditions accessor error: Failure is of the type string, expected map[string]interface{}
As outlined by Rico you can't wait for the complete state on the pod, assuming you want to wait for the job to complete use the following
kubectl wait --for=condition=complete --timeout=30s -n d1 job/test-job1
To wait until your pod is running, check for "condition=ready". In addition, prefer to filter by label, rather than specifying pod id. For example:
$ kubectl wait --for=condition=ready pod -l app=netshoot
pod/netshoot-58785d5fc7-xt6fg condition met
Another option is rollout status - To wait until the deployment is done:
$ kubectl rollout status deployment netshoot
deployment "netshoot" successfully rolled out
Both options works great in automation scripts, when it is required to wait for an app to be installed. However, as @CallMeLaNN noted for the second option, deployment "rolled out" is not necessarily without errors.