Introduction

In this article, we will learn the difference between a context and a cluster in Kubernetes.

What is a Kubernetes Config file?

A Kubernetes configuration file is a YAML file that contains information about the cluster, such as the cluster name, the cluster’s certificate authority (CA) certificate, and the cluster’s private key. It also contains information about the user, such as the user’s certificate and private key. The configuration file is used by the kubectl command-line tool to authenticate and access the cluster.

What is a Cluster?

A Kubernetes cluster is a set of physical or virtual machines (nodes) that work together to run containerized applications. It consists of a master node that manages the entire cluster and multiple worker nodes that run the containers. The master node is responsible for scheduling and coordinating tasks, while the worker nodes execute those tasks.

Clusters in Kubernetes are identified by their respective Certifate Authority (CA) certificate and private key. The CA certificate is used to sign the certificates of all the nodes in the cluster. The private key is used to sign the certificates of all the nodes in the cluster. The CA certificate and private key are stored in the Kubernetes configuration file.

For example, in your Kubernetes configuration file, you might have the following:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: <CA_CERTIFICATE>
    server: https://<MASTER_NODE_IP>:6443
  name: development
- cluster:
    insecure-skip-tls-verify: true
    server: https://5.6.7.8
  name: test
....

In this example, the development cluster is identified by the CA certificate and private key. The test cluster is identified by the server IP address and is not authenticated.

What is a User?

In Kubernetes, users represent individual users or processes that interact with the cluster. Each user has its own credentials (e.g., certificates, tokens) to authenticate and access the cluster’s resources. A user can have access to multiple Kubernetes clusters. For example, you might have the following:

apiVersion: v1
....
users:
- name: developer
  user:
    client-certificate: fake-cert-file
    client-key: fake-key-file
- name: experimenter
  user:
    token: fake-token

What is a Namespace?

Namespaces provide a way to divide a single Kubernetes cluster into multiple virtual clusters. They are like separate virtual clusters within the same physical cluster. Namespaces help in organizing and isolating resources, so different teams or projects can have their resources without interfering with each other.

What is a Context?

A context in Kubernetes is a way to manage multiple clusters and their authentication information. It includes information about the cluster, the user, and the namespace to be used. You can have different contexts to switch between different Kubernetes clusters easily.

Each context contains a Kubernetes cluster, a user, and a namespace. The current context is the cluster that is currently the default for kubectl, and is the argument passed to the –context flag. You can specify other contexts on the command line using the –context flag.

For example, you might have the following:

apiVersion: v1
....
contexts:
- context:
    cluster: development
    namespace: frontend
    user: developer
  name: Context1
- context:
    cluster: test
    namespace: storage
    user: experimenter
  name: Context2
  ...

In this case, referring to Context1 means using the development cluster with the developer user in the frontend namespace . Referring to Context2 means using the test cluster with the experimenter user.

It is important to note that the Context terminology is only used by the kubectl command-line tool. The Kubernetes API does not use the term Context.

How to create a new context?

You can create a new context using the kubectl config set-context command. Example:

kubectl config set-context Context1 --cluster=development --user=developer --namespace=frontend

How to switch between contexts?

You can easily switch between contexts using the kubectl config use-context command. Example:

kubectl config use-context Context1

How to list all contexts?

You can list all contexts using the kubectl config get-contexts command. Example:

kubectl config get-contexts

Conclusion

In this article, we learned the difference between a context and a cluster in Kubernetes. We also learned about the Kubernetes configuration file, clusters, users, namespaces, and contexts.