Kubernetes is software to help you run lots of containers in an organized way. Aside from providing tools to manage (or orchestrate) the containers you run, Kubernetes also helps those containers scale out as needed. With Kubernetes as your central control panel (or control plane), you need a way to manage Kubernetes, and the tool for that job is kubectl. The
kubectl command lets you control, maintain, analyze, and troubleshoot Kubernetes clusters. As with many tools using the
ctl (short for "control") suffix, such as systemctl and sysctl, kubectl has purview over a broad array of functions and tasks, so you end up using it a lot if you're running Kubernetes. It's a big command with lots of options, so here are five common tasks that kubectl makes easy.
More on Kubernetes
- What is Kubernetes?
- eBook: Storage Patterns for Kubernetes
- Test drive OpenShift hands-on
- eBook: Getting started with Kubernetes
- An introduction to enterprise Kubernetes
- How to explain Kubernetes in plain terms
- eBook: Running Kubernetes on your Raspberry Pi homelab
- Kubernetes cheat sheet
- eBook: A guide to Kubernetes for SREs and sysadmins
- Latest Kubernetes articles
Containers, by design, tend to multiply. Under certain conditions, they can multiply rapidly. This can get overwhelming if the only way you have to see running containers is
podman ps or
docker ps. With
kubectl get and
kubectl describe, you can get information about what pods are running and the containers they're handling. What's more is that you can get just the information you need by using options like
get subcommand is useful for a lot more than just pods and containers. It has information about nodes, namespaces, deployments, services, and replicas.
If you've only ever created deployments through a web user interface (UI) like one provided by OpenShift, OKD, or Kubernetes, but you're looking to take control of your cluster from your Linux terminal instead, then get ready to use
kubectl create. The
kubectl create command doesn't just instantiate a new app deployment, though. There are lots of other components available in Kubernetes that you can create, such as services, quotas, and CronJobs.
A CronJob in Kubernetes can create a transient pod meant to perform some task on a schedule of your choice. They're not difficult to set up. Here's a CronJob to have a BusyBox image echo "hello world" every minute:
$ kubectl create cronjob \ hello-world \ --image=busybox \ --schedule="*/1 * * * *" -- echo "hello world"
You may have an understanding that objects in Kubernetes have accompanying configuration files, but rummaging through your filesystem to find the appropriate file can be troublesome. With
kubectl edit, you can keep your mind on the objects and not on the files that define them. You can have
kubectl find and open the file for you (it respects the
KUBE_EDITOR environment variable, so you can set your editor to whatever you prefer):
$ KUBE_EDITOR=emacs \ kubectl edit cronjob/hello-world
Newcomers to containers are often baffled by the concept of a shared system that they can't apparently access. They may learn about
exec options in their container engine or in kubectl itself, but containers still can seem impervious when they can't just grab a file from or place a file into a container. Using the
kubectl cp command, you can treat containers as if they were remote servers, making copying files to and from containers no more complex than an SSH command:
$ kubectl cp foo my-pod:/tmp
Making changes to Kubernetes objects can be done at any time with the
kubectl apply command. All you have to do is point the command to a configuration file:
$ kubectl apply -f ./mypod.json
Akin to running an Ansible playbook or a Bash script,
apply makes it easy to "import" settings quickly into a running Kubernetes instance. For instance, the GitOps tool ArgoCD is surprisingly simple to install thanks to the `apply` subcommand:
$ kubectl create namespace argocd $ kubectl apply -n argocd \ -f https://raw.githubusercontent.com/argoproj/argo-cd/vx.y.z/manifests/install.yaml
Kubectl is a powerful tool, and because it's a terminal command it can be scripted and used in many ways a web UI cannot. Learning kubectl is a great way to further your understanding of Kubernetes, containers, pods, and all the technologies that surround these important cloud innovations. Download our kubectl cheat sheet for a quick reference, complete with sample commands, to help you as you learn and remind you of the details once you're a pro.