Basic operations with Kubernetes using kubectl

Kubernetes provides a command line tool for communicating with a Kubernetes cluster’s control plane, using the Kubernetes API. This guide outlines how some of the everyday operations of your Kubernetes cluster can be managed with this tool.

What you will need

Before you begin, make sure you have the following:

  • A bootstrapped Canonical Kubernetes cluster (See Getting Started)

  • You are using the built-in kubectl command from the snap.

1. The kubectl command

The kubectl command communicates with the Kubernetes API server.

The kubectl command included with Canonical Kubernetes is built from the original upstream source into the k8s snap you have installed.

2. How to use kubectl

To access kubectl, run the following:

sudo k8s kubectl 

This will display a list of commands possible with kubectl.

Note: Only control plane nodes can use the kubectl command. Worker nodes do not have access to this command.

The format of kubectl commands are:

sudo k8s kubectl <command>

3. Configuration

In Canonical Kubernetes, the kubeconfig file that is being read to display the configuration when you run kubectl config view lives at /etc/kubernetes/admin.conf. You can change this by setting a KUBECONFIG environment variable or passing the --kubeconfig flag to a command.

To find out more, you can visit the official kubeconfig documentation

4. Viewing objects

Let’s review what was created in the Getting Started guide.

To see what pods were created when we enabled the network and dns components during the cluster bootstrap:

sudo k8s kubectl get pods -o wide -n kube-system

You should be seeing the network operator, networking agent and CoreDNS pods.

Note: If you see an error message here, it is likely that you forgot to bootstrap your cluster.

sudo k8s kubectl get services --all-namespaces

The kubernetes service in the default namespace is where the Kubernetes API server resides, and it’s the endpoint with which other nodes in your cluster will communicate.

5. Creating and managing objects

Let’s deploy an NGINX server using this command:

sudo k8s kubectl create deployment nginx --image=nginx:latest

To observe the NGINX pod running in the default namespace:

sudo k8s kubectl get pods

Let’s now scale this deployment, which means increasing the number of pods it manages.

sudo k8s kubectl scale deployment nginx --replicas=3

Execute sudo k8s kubectl get pods again and notice that you have 3 NGINX pods.

Let’s delete those 3 pods to demonstrate a deployment’s ability to ensure the declared state of the cluster is maintained.

First, open a new terminal so you can watch the changes as they happen. Run this command in a new terminal:

sudo k8s kubectl get pods --all-namespace --watch

Now, go back to your original terminal and run:

sudo k8s kubectl delete pods -l app=nginx

The above command deletes all pods in the cluster that are labelled with app=nginx.

You’ll notice the original 3 pods will have a status of Terminating and 3 new pods will have a status of ContainerCreating.

Further information