notes/software/Kubernetes.md
2023-08-26 11:34:11 -06:00

4.6 KiB

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 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 responsible for pulling the container image from a registry, unpacking the container, and running the application. Examples include containerd and docker.

Deployment

A deployment 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 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, 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 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/