[Docker] Kubernetes Basic

Concepts

  • Why Kubernete: manual deployment of containers is hard to maintain, error-prone and annoying.
    • Containers might crash/go down and need to be replaced. We need to monitor and replace containers.
    • We might need more container instances upon traffic spikes
    • Incoming traffic should be distributed equally
  • Kubernetes Configuration can run on any cloud provider. Extensible and standardized.
  • Kubernetes is a collection of concepts and tools. It works with Docker containers.

  • Pod: a pod holds containers. Multiple Pods can be created and removed to scale your app.

  • Worker node: worker nodes are your machines (virtual instances) that runs the container of your application. A worker node can have multiple pods running.
  • Proxy / Config: Control the network.
  • Master node (The Control Plane): The master node controls your deployment. (i.e. all Worker Nodes). Send instructions to cloud provider API to create required infrastructures.
  • Cluster: A set of Node machines which are running the Containerized Application (Worker Nodes) or control other Nodes (Master Node)
  • kublet: Communication between Master and Worker node
  • kube-proxy: Managed Node and Pod network communication

Master Node

  • API Server: API for the kublets to communicate
  • Scheduler: watches for new pods, select Worker Nodes to run them on
  • Kube-Controller-Manager: watches and controls Worker Nodes, correct number of Pods & more
  • Cloud-Controller-Manager: like Kube-Controller-Manager BUT for a specific Cloud Provider: knows how to interact with Cloud Provider resources

Objects

  • Kubernetes works with Objects (Pods, Deployments, Services, Volumeā€¦)
  • Objects can be created in 2 ways: Imperatively or Declaratively
  • Pod
    • the smallest unit Kubernetes interacts with. The most common use case is One container per pod
    • Can also contain shared resources (i.e. Volumes) for all Pod container
    • Has a cluster-internal IP by default: Containers inside a Pod can communicate via localhost
    • For Pods to be managed for you, you need a Controller (i.e. a Deployment)
  • Deployment
    • Controls multiple Pods
    • You set a desired state, Kubernetes then changes the actual state

Publish local image to dockerhub

1
2
docker tab <APP NAME> <REPOSITORY NAME>
docker push <REPOSITORY NAME>
1
2
kubectl create deployment first-app --image=<REPOSITORY NAME>
kubectl get deployments