kubectl Usage Conventions

Recommended usage conventions for kubectl.

Using kubectl in Reusable Scripts

For a stable output in a script:

  • Request one of the machine-oriented output forms, such as -o name, -o json, -o yaml, -o go-template, or -o jsonpath.
  • Fully-qualify the version. For example, jobs.v1.batch/myjob. This will ensure that kubectl does not use its default version that can change over time.
  • Specify the —generator flag to pin to a specific behavior when you use generator-based commands such as kubectl run or kubectl expose.
  • Don’t rely on context, preferences, or other implicit states.

Best Practices

kubectl run

For kubectl run to satisfy infrastructure as code:

  • Tag the image with a version-specific tag and don’t move that tag to a new version. For example, use :v1234, v1.2.3, r03062016-1-4, rather than :latest (For more information, see Best Practices for Configuration).
  • Capture the parameters in a checked-in script, or at least use —record to annotate the created objects with the command line for an image that is lightly parameterized.
  • Check in the script for an image that is heavily parameterized.
  • Switch to configuration files checked into source control for features that are needed, but not expressible via kubectl run flags.
  • Pin to a specific generator version, such as kubectl run —generator=deployment/v1beta1.

Generators

You can create the following resources using kubectl run with the —generator flag:

Resourceapi groupkubectl command
Podv1kubectl run —generator=run-pod/v1
Replication controller (deprecated)v1kubectl run —generator=run/v1
Deployment (deprecated)extensions/v1beta1kubectl run —generator=deployment/v1beta1
Deployment (deprecated)apps/v1beta1kubectl run —generator=deployment/apps.v1beta1
Job (deprecated)batch/v1kubectl run —generator=job/v1
CronJob (deprecated)batch/v1beta1kubectl run —generator=cronjob/v1beta1
CronJob (deprecated)batch/v2alpha1kubectl run —generator=cronjob/v2alpha1
Note: kubectl run —generator except for run-pod/v1 is deprecated in v1.12.

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 ResourceCluster v1.4 and laterCluster v1.3Cluster v1.2Cluster v1.1 and earlier
Pod—restart=Never—restart=Never—generator=run-pod/v1—restart=OnFailure OR —restart=Never
Replication Controller—generator=run/v1—generator=run/v1—generator=run/v1—restart=Always
Deployment—restart=Always—restart=Always—restart=AlwaysN/A
Job—restart=OnFailure—restart=OnFailure—restart=OnFailure OR —restart=NeverN/A
Cron Job—schedule=<cron>N/AN/AN/A
Note: These flags use a default generator only when you have not specified any flag.This means that when you combine —generator with 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-runflag, which only prints the object that would be sent to the cluster without really sending it.

kubectl apply

  • You can use kubectl apply to create or update resources. For more information about using kubectl apply to update resources, see Kubectl Book.

Feedback

Was this page helpful?

Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it onStack Overflow.Open an issue in the GitHub repo if you want toreport a problemorsuggest an improvement.