Recommended usage conventions for kubectl.
kubectl in Reusable ScriptsFor a stable output in a script:
-o name, -o json, -o yaml, -o go-template, or -o jsonpath.jobs.v1.batch/myjob. This will ensure that kubectl does not use its default version that can change over time.--generator flag to pin to a specific behavior when you use generator-based commands such as kubectl run or kubectl expose.kubectl runFor kubectl run to satisfy infrastructure as code:
:v1234, v1.2.3, r03062016-1-4, rather than :latest (For more information, see Best Practices for Configuration).--record to annotate the created objects with the command line for an image that is lightly parameterized.kubectl run flags.kubectl run --generator=deployment/v1beta1.You can create the following resources using kubectl run with the --generator flag:
| Resource | kubectl command | 
|---|---|
| Pod | kubectl run --generator=run-pod/v1 | 
| Replication controller | kubectl run --generator=run/v1 | 
| Deployment | kubectl run --generator=extensions/v1beta1 | 
| -for an endpoint (default) | kubectl run --generator=deployment/v1beta1 | 
| Deployment | kubectl run --generator=apps/v1beta1 | 
| -for an endpoint (recommended) | kubectl run --generator=deployment/apps.v1beta1 | 
| Job | kubectl run --generator=job/v1 | 
| CronJob | kubectl run --generator=batch/v1beta1 | 
| -for an endpoint (default) | kubectl run --generator=cronjob/v1beta1 | 
| CronJob | kubectl run --generator=batch/v2alpha1 | 
| -for an endpoint (deprecated) | kubectl run --generator=cronjob/v2alpha1 | 
If you do not specify a generator flag, other flags prompt you to use a specific generator. The following table lists the flags that force you to use specific generators, depending on the version of the cluster:
| Generated Resource | Cluster v1.4 and later | Cluster v1.3 | Cluster v1.2 | Cluster v1.1 and earlier | 
|---|---|---|---|---|
| Pod | --restart=Never | --restart=Never | --generator=run-pod/v1 | --restart=OnFailureOR--restart=Never | 
| Replication Controller | --generator=run/v1 | --generator=run/v1 | --generator=run/v1 | --restart=Always | 
| Deployment | --restart=Always | --restart=Always | --restart=Always | N/A | 
| Job | --restart=OnFailure | --restart=OnFailure | --restart=OnFailureOR--restart=Never | N/A | 
| Cron Job | --schedule=<cron> | N/A | N/A | N/A | 
Note: These flags use a default generator only when you have not specified any flag. This means that when you combine--generatorwith other flags the generator that you specified later does not change. For example, in a cluster v1.4, if you initially specify--restart=Always, a Deployment is created; if you later specify--restart=Alwaysand--generator=run/v1, a Replication Controller is created. This enables you to pin to a specific behavior with the generator, even when the default generator is changed later.
The flags set the generator in the following order: first the --schedule flag, then the --restart policy flag, and finally the --generator flag.
To check the final resource that was created, use the --dry-run
flag, which provides the object to be submitted to the cluster.
kubectl applykubectl apply to create or update resources. However, to update a resource you should have created the resource by using kubectl apply or kubectl create --save-config. For more information about using kubectl apply to update resources, see Managing Resources.Was this page helpful?
Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on Stack Overflow. Open an issue in the GitHub repo if you want to report a problem or suggest an improvement.