# Vocabulary https://kubernetes.io/docs/tutorials/kubernetes-basics/explore/explore-intro/ - Good summary of the different parts ## Cluster The largest unit, a kubernetes cluster is a collection of one or more worker machines (virtual or physical machines), and the control plane. ## Control plane A control plane is in charge of managing worker nodes and pods in a cluster. ## Node [A node](https://kubernetes.io/docs/tutorials/kubernetes-basics/explore/explore-intro/) is a virtual or physical machine that in Kubernetes, and is managed by the control plane. A Node can have multiple pods, and the control plane is in charge of scheduling pods across nodes. Each node runs at least: - A Kubelet, the process responsible for handling communication between the control plane and the node. It manages the pods and containers running on a machine - A [container runtime](https://kubernetes.io/docs/setup/production-environment/container-runtimes/) responsible for pulling the container image from a registry, unpacking the container, and running the application. Examples include containerd and docker. ## Deployment A [deployment](https://kubernetes.io/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro/) instructs kubernetes how to create and update instances of an application. It can be imagined similar to a blueprint. The term 'deployment' may also refer to the group of pods and replicas defined by one or more configuration files. ## Pod A [pod](https://kubernetes.io/docs/tutorials/kubernetes-basics/explore/explore-intro/) is an abstraction that represents a group of one or more application containers, and shared resources. Some shared include storage and a private network. They are meant to represent a logical host, and a rough parallel might be a physical machine running a service, although this machine may have multiple network adapters. A deployment creates pods, and not containers. ## ReplicaSet A [ReplicaSet](https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/), often referred to as a pod replica, is an identical copy of pod. They can be used for many things, most commonly high availability and load balancing. ## Service A [service](https://kubernetes.io/docs/concepts/services-networking/service/) in Kubernetes is is an abstraction that defines a logical set of Pods and a policy to access them. A Service is defined using YAML or JSON, and is primarily used to expose a network application that's running on one or more Pods in a cluster. They also route traffic across a set of Pods, allowing Pods to die and replicate without impacting the application. ## `kubectl` `kubectl` is the Kubernetes command line tool used to run commands against clusters. You can use `kubectl` to deploy applications, inspect and manage cluster resources, and view logs. The general format of the command follows `kubectl [action] [resource]` ## `minikube` `minikube` creates a local Kubernetes cluster for development. It can be configured to deploy on bare metal, containers (like docker), or a VM (QEMU). # Commands ## Common commands - **kubectl get** - list resources - **kubectl describe** - show detailed information about a resource - **kubectl logs** - print the logs from a container in a pod - **kubectl exec** - execute a command on a container in a pod ## Start `minikube` ``` minikube start ``` ## Stop `minikube` ``` minikube stop ``` ## Expose services running in minikube ``` minikube services ``` ## View the dashboard for `minikube`(run in new terminal window) ``` minikube dashboard ``` ## Check that `kubectl` is configured to talk to the cluster ``` kubectl version ``` ## View nodes in the server ``` kubectl get nodes ``` ## List deployments ``` kubectl get deployments ``` ## Start a proxy to access the private network ``` kubectl proxy ``` ## Access the API of a pod (through the proxy) ``` curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/ ``` Where `$POD_NAME` is the name of a pod, you can get this information with `kubectl get pods` ## Start a Bash session in a Pod's container ``` kubectl exec --ti $POD_NAME -- bash ``` ## Create a new Service and expose it to external traffic ``` kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080 ``` ## Apply a new label to pods ``` kubectl label pods "$POD_NAME" version=v1 ``` ## See if a Service is load-balancing traffic ``` kubectl describe services/$SERVICE_NAME ``` ## Set a different desired amount of replicas for a deployment ``` kubectl scale deployments/$DEPLOYMENT_NAME --replicas=$DESIRED_NUM_OF_REPLICAS ``` # Tutorials https://kubernetes.io/docs/tutorials/hello-minikube/ https://kubernetes.io/docs/tutorials/kubernetes-basics/