Welcome to the DevOps Digest! If you are interested in containerization and orchestrating containerized applications at scale, then you have come to the right place. In this blog, we will provide you with a comprehensive introduction to Kubernetes, including what it is, why it's important, and how it works. Whether you are a developer, an operations professional, or just someone curious about the latest trends in technology, this blog will help you understand the fundamental concepts of Kubernetes and why it has become so popular. What is Kubernetes? Kubernetes is a container orchestration technology used to orchestrate the deployment and management of hundreds and thousands of containers in a clustered environment. The whole process of deploying and managing containers is known as Container Orchestration. e.g. Scaling up your application when no. of users increases and scaling down when the load decreases. Kubernetes Architecture Node: It is a machine (physical or virtual on which Kubernetes is installed. It is a worker machine where a container will be launched by Kubernetes. Cluster: It is a set of nodes grouped together. So, even if one node fails, we have our application still accessible from the other nodes. It also helps in sharing loads as well. Master: It is another node with Kubernetes installed in it and is configured as a Master. It watches over the nodes in the cluster and is responsible for the actual orchestration of containers on the worker nodes. Manage the cluster Stores the information about the members of the cluster Monitor the nodes Components: API Server etcd Service kubelet Service Container runtime Controllers Schedulers Components of Kubernetes API Server: It acts as the frontend for kubernetes. The user, management devices, and command line interfaces all talk to the API server to interact with kubernetes clusters. etcd: It is a distributed reliable key-value store used by kubernetes to store all data used to manage the clusters. Responsible for implementing locks within the cluster to ensure that there are no conflicts between the masters. When you have multiple nodes and multiple masters in your clusters, etcd, stores all that information on all the nodes in the cluster in a distribution manner. Scheduler: It is responsible for distributing work or containers across multiple nodes. It looks for newly created containers and assigns them to nodes 4. Controllers: (Brain behind Orchestration) They are responsible for noticing and responding when nodes, containers or endpoints go down They make the decision to bring up new containers 5. Container Runtime: It is the underlying software that is used to run containers. e.g. Docker 6. Kubelet: It is an agent that runs on each node in the cluster. It is responsible for making sure that the containers are running on the node as expected It is also responsible for interacting with a master to provide health information of the worker node and carry out the action requested by the Master on the worker nodes Kubernetes doesn't deploy containers directly on the worker nodes. Kubectl It is a command-line utility It is used to deploy and manage applicants on a Kubernetes cluster To get cluster information, the status of other nodes in the cluster, etc. Kubernetes Pods Pods are the smallest deployable units of computing that you can create and manage in Kubernetes Pods usually have a one-to-one relationship with containers running your application To scale up, you create new Pods and to scale down, you delete existing Pods Q: Can a Pod only have a single container? No, a single Pod can have multiple containers except for the fact that they're usually not multiple containers of the same kind. Those containers can also communicate with each other directly by referring to each other as localhost since they share the same network space. They can also easily share the same storage space as well. Commands Kubectl run: It is used to deploy an application on the cluster kubectl cluster-info: It is used to view information about the cluster kubectl get nodes: It is used to list all the nodes part of the cluster kubectl get pods: Used to see the list of Pods available kubectl run (pod name) --image = (image name): Used to create a pod by specifying the docker image to be used available at the dockerhub kubectl describe pod (pod name): Used to get more information related to pods kubectl get pods -o wide: It provides additional information such as the node when the pod is running and the IP address of the Pod kubectl create deployment (pod name) --image = (image name): As of version 1.18, to create a deployment using the imperative command, we have to use "kubectl create" YAML in Kubernetes (pod-defination.yml) A kubernetes definition file always contains 4 top level fields. apiVersion kind metadata spec apiVersion: It is the version of the kubernetes API you're using to create the objects. Kind Version POD v1 Service v1 ReplicaSet apps/v1 Deployment apps/v1 kind: It refers to the type of object we are trying to create. e.g. POD, Service, ReplicaSet, Deployment. Metadata: It is the data about the object like its name labels, etc. As you can see, metadata is in the form of a dictionary. metadata: name: myapp-pod labels: app: myapp type: front-end spec: Depending on the object we are going to create, this is where we provide additional information to kubernetes about that object. spec: containers: - name: nginx-container image: nginx Resources TechwithPrerit TechWorldwithNana Kodekloud Conclusion In conclusion, Kubernetes has become the go-to solution for container orchestration, enabling organizations to deploy, manage, and scale containerized applications with ease. With its robust feature set and flexibility, Kubernetes has gained widespread adoption across industries and has revolutionized the way modern software is developed, deployed, and managed. Whether you are a developer, an operations professional, or just someone curious about the latest trends in technology, understanding Kubernetes is essential in today's tech landscape. We hope this introduction has given you a solid foundation to start exploring the world of Kubernetes and its possibilities. Welcome to the DevOps Digest! If you are interested in containerization and orchestrating containerized applications at scale, then you have come to the right place. In this blog, we will provide you with a comprehensive introduction to Kubernetes, including what it is, why it's important, and how it works. Whether you are a developer, an operations professional, or just someone curious about the latest trends in technology, this blog will help you understand the fundamental concepts of Kubernetes and why it has become so popular. containerization What is Kubernetes? Kubernetes is a container orchestration technology used to orchestrate the deployment and management of hundreds and thousands of containers in a clustered environment. The whole process of deploying and managing containers is known as Container Orchestration. e.g. Scaling up your application when no. of users increases and scaling down when the load decreases. The whole process of deploying and managing containers is known as Container Orchestration. e.g. Scaling up your application when no. of users increases and scaling down when the load decreases. Kubernetes Architecture Node: It is a machine (physical or virtual on which Kubernetes is installed. It is a worker machine where a container will be launched by Kubernetes. Cluster: It is a set of nodes grouped together. So, even if one node fails, we have our application still accessible from the other nodes. It also helps in sharing loads as well. Master: It is another node with Kubernetes installed in it and is configured as a Master. It watches over the nodes in the cluster and is responsible for the actual orchestration of containers on the worker nodes. Node: It is a machine (physical or virtual on which Kubernetes is installed. It is a worker machine where a container will be launched by Kubernetes. Node: It is a machine (physical or virtual on which Kubernetes is installed. It is a worker machine where a container will be launched by Kubernetes. Node: Cluster: It is a set of nodes grouped together. So, even if one node fails, we have our application still accessible from the other nodes. It also helps in sharing loads as well. Cluster: It is a set of nodes grouped together. So, even if one node fails, we have our application still accessible from the other nodes. It also helps in sharing loads as well. Cluster: Master: It is another node with Kubernetes installed in it and is configured as a Master. It watches over the nodes in the cluster and is responsible for the actual orchestration of containers on the worker nodes. Master: It is another node with Kubernetes installed in it and is configured as a Master. It watches over the nodes in the cluster and is responsible for the actual orchestration of containers on the worker nodes. Master: Manage the cluster Stores the information about the members of the cluster Monitor the nodes Manage the cluster Manage the cluster Stores the information about the members of the cluster Stores the information about the members of the cluster Monitor the nodes Monitor the nodes Components: Components: Components: Components: API Server etcd Service kubelet Service Container runtime Controllers Schedulers API Server etcd Service kubelet Service Container runtime Controllers Schedulers Components of Kubernetes API Server: It acts as the frontend for kubernetes. The user, management devices, and command line interfaces all talk to the API server to interact with kubernetes clusters. etcd: It is a distributed reliable key-value store used by kubernetes to store all data used to manage the clusters. API Server: It acts as the frontend for kubernetes. The user, management devices, and command line interfaces all talk to the API server to interact with kubernetes clusters. API Server: It acts as the frontend for kubernetes. The user, management devices, and command line interfaces all talk to the API server to interact with kubernetes clusters. API Server: etcd: It is a distributed reliable key-value store used by kubernetes to store all data used to manage the clusters. etcd: It is a distributed reliable key-value store used by kubernetes to store all data used to manage the clusters. etcd: Responsible for implementing locks within the cluster to ensure that there are no conflicts between the masters. When you have multiple nodes and multiple masters in your clusters, etcd, stores all that information on all the nodes in the cluster in a distribution manner. Responsible for implementing locks within the cluster to ensure that there are no conflicts between the masters. Responsible for implementing locks within the cluster to ensure that there are no conflicts between the masters. When you have multiple nodes and multiple masters in your clusters, etcd, stores all that information on all the nodes in the cluster in a distribution manner. When you have multiple nodes and multiple masters in your clusters, etcd, stores all that information on all the nodes in the cluster in a distribution manner. Scheduler: It is responsible for distributing work or containers across multiple nodes. It looks for newly created containers and assigns them to nodes Scheduler: It is responsible for distributing work or containers across multiple nodes. It looks for newly created containers and assigns them to nodes Scheduler: It is responsible for distributing work or containers across multiple nodes. It looks for newly created containers and assigns them to nodes Scheduler: 4. Controllers: (Brain behind Orchestration) Controllers: (Brain behind Orchestration) They are responsible for noticing and responding when nodes, containers or endpoints go down They make the decision to bring up new containers They are responsible for noticing and responding when nodes, containers or endpoints go down They are responsible for noticing and responding when nodes, containers or endpoints go down They make the decision to bring up new containers They make the decision to bring up new containers 5. Container Runtime: It is the underlying software that is used to run containers. e.g. Docker Container Runtime: 6. Kubelet: It is an agent that runs on each node in the cluster. Kubelet: It is responsible for making sure that the containers are running on the node as expected It is also responsible for interacting with a master to provide health information of the worker node and carry out the action requested by the Master on the worker nodes It is responsible for making sure that the containers are running on the node as expected It is also responsible for interacting with a master to provide health information of the worker node and carry out the action requested by the Master on the worker nodes Kubernetes doesn't deploy containers directly on the worker nodes. Kubernetes doesn't deploy containers directly on the worker nodes. Kubectl It is a command-line utility It is used to deploy and manage applicants on a Kubernetes cluster To get cluster information, the status of other nodes in the cluster, etc. It is a command-line utility It is used to deploy and manage applicants on a Kubernetes cluster To get cluster information, the status of other nodes in the cluster, etc. Kubernetes Pods Pods are the smallest deployable units of computing that you can create and manage in Kubernetes Pods usually have a one-to-one relationship with containers running your application To scale up, you create new Pods and to scale down, you delete existing Pods Pods usually have a one-to-one relationship with containers running your application Pods usually have a one-to-one relationship with containers running your application To scale up, you create new Pods and to scale down, you delete existing Pods To scale up, you create new Pods and to scale down, you delete existing Pods Q: Can a Pod only have a single container? Q: Can a Pod only have a single container? No, a single Pod can have multiple containers except for the fact that they're usually not multiple containers of the same kind. Those containers can also communicate with each other directly by referring to each other as localhost since they share the same network space. They can also easily share the same storage space as well. localhost Commands Kubectl run: It is used to deploy an application on the cluster kubectl cluster-info: It is used to view information about the cluster kubectl get nodes: It is used to list all the nodes part of the cluster kubectl get pods: Used to see the list of Pods available kubectl run (pod name) --image = (image name): Used to create a pod by specifying the docker image to be used available at the dockerhub kubectl describe pod (pod name): Used to get more information related to pods kubectl get pods -o wide: It provides additional information such as the node when the pod is running and the IP address of the Pod kubectl create deployment (pod name) --image = (image name): As of version 1.18, to create a deployment using the imperative command, we have to use "kubectl create" Kubectl run: It is used to deploy an application on the cluster Kubectl run: kubectl cluster-info: It is used to view information about the cluster kubectl cluster-info: kubectl get nodes: It is used to list all the nodes part of the cluster kubectl get nodes: kubectl get pods: Used to see the list of Pods available kubectl get pods: kubectl run (pod name) --image = (image name): Used to create a pod by specifying the docker image to be used available at the dockerhub kubectl run (pod name) --image = (image name): kubectl describe pod (pod name): Used to get more information related to pods kubectl describe pod (pod name): kubectl get pods -o wide: It provides additional information such as the node when the pod is running and the IP address of the Pod kubectl get pods -o wide: kubectl create deployment (pod name) --image = (image name): As of version 1.18, to create a deployment using the imperative command, we have to use "kubectl create" kubectl create deployment (pod name) --image = (image name): YAML in Kubernetes (pod-defination.yml) (pod-defination.yml) A kubernetes definition file always contains 4 top level fields. apiVersion kind metadata spec apiVersion kind metadata spec apiVersion: It is the version of the kubernetes API you're using to create the objects. apiVersion: It is the version of the kubernetes API you're using to create the objects. apiVersion: Kind Version POD v1 Service v1 ReplicaSet apps/v1 Deployment apps/v1 Kind Version POD v1 Service v1 ReplicaSet apps/v1 Deployment apps/v1 Kind Version Kind Kind Version Version POD v1 POD POD v1 v1 Service v1 Service Service v1 v1 ReplicaSet apps/v1 ReplicaSet ReplicaSet apps/v1 apps/v1 Deployment apps/v1 Deployment Deployment apps/v1 apps/v1 kind: It refers to the type of object we are trying to create. e.g. POD, Service, ReplicaSet, Deployment. Metadata: It is the data about the object like its name labels, etc. As you can see, metadata is in the form of a dictionary. kind: It refers to the type of object we are trying to create. e.g. POD, Service, ReplicaSet, Deployment. kind: It refers to the type of object we are trying to create. e.g. POD, Service, ReplicaSet, Deployment. kind: Metadata: It is the data about the object like its name labels, etc. As you can see, metadata is in the form of a dictionary. Metadata: It is the data about the object like its name labels, etc. As you can see, metadata is in the form of a dictionary. Metadata: metadata: name: myapp-pod labels: app: myapp type: front-end metadata: name: myapp-pod labels: app: myapp type: front-end spec: Depending on the object we are going to create, this is where we provide additional information to kubernetes about that object. spec: Depending on the object we are going to create, this is where we provide additional information to kubernetes about that object. spec: spec: containers: - name: nginx-container image: nginx spec: containers: - name: nginx-container image: nginx Resources TechwithPrerit TechWorldwithNana Kodekloud TechwithPrerit TechwithPrerit TechwithPrerit TechWorldwithNana TechWorldwithNana TechWorldwithNana Kodekloud Kodekloud Kodekloud Conclusion Conclusion In conclusion, Kubernetes has become the go-to solution for container orchestration, enabling organizations to deploy, manage, and scale containerized applications with ease. With its robust feature set and flexibility, Kubernetes has gained widespread adoption across industries and has revolutionized the way modern software is developed, deployed, and managed. Whether you are a developer, an operations professional, or just someone curious about the latest trends in technology, understanding Kubernetes is essential in today's tech landscape. We hope this introduction has given you a solid foundation to start exploring the world of Kubernetes and its possibilities.