Kubectl: What is the difference between a context and a cluster?
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.