Slide 1

Slide 1 text

nghialv
 Sig-Build Study Dec 17, 2021 ”How It Works” Series Season 1: Kubernetes Episode 1: What happens when you run kubectl apply command

Slide 2

Slide 2 text

kubectl run myapp --image=myapp:1.0.0 --replicas=3 What happens when you run

Slide 3

Slide 3 text

1 kubectl apply -f deployment.yaml Kubernetes Cluster apiVersion: apps/v1 kind: Deployment metadata: name: myapp labels: app: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:1.0.0 ports: - containerPort: 80 kubectl run myapp --image=myapp:1.0.0 --replicas=3

Slide 4

Slide 4 text

1 kubectl apply -f deployment.yaml Control Plane Node Kubernetes Cluster apiVersion: apps/v1 kind: Deployment metadata: name: myapp labels: app: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:1.0.0 ports: - containerPort: 80 kubectl run myapp --image=myapp:1.0.0 --replicas=3 Node Means that there are many nodes are ommited in the diagram

Slide 5

Slide 5 text

kube-scheduler 1 kubectl apply -f deployment.yaml Control Plane Node Kubernetes Cluster etcd etcd etcd Persistence Store kube-apiserver kube-apiserver kube-apiserver Each controller is run in parallel
 by kube-controller-manager node-controller replicaset-controller ... deployment-controller kube-controller-manager apiVersion: apps/v1 kind: Deployment metadata: name: myapp labels: app: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:1.0.0 ports: - containerPort: 80 kubectl run myapp --image=myapp:1.0.0 --replicas=3 kubelet kube-proxy container-runtime kubelet kube-proxy container-runtime Node • kube-apiserver is a stateless component and can be easily scaled by adding more instances • kube-controller-manager runs as a single process that spawns many controllers to run in parallel

Slide 6

Slide 6 text

kube-scheduler 1 kubectl apply -f deployment.yaml Control Plane Node Kubernetes Cluster etcd etcd etcd Persistence Store kube-apiserver kube-apiserver kube-apiserver Each controller is run in parallel
 by kube-controller-manager node-controller replicaset-controller ... deployment-controller kube-controller-manager apiVersion: apps/v1 kind: Deployment metadata: name: myapp labels: app: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:1.0.0 ports: - containerPort: 80 kubectl run myapp --image=myapp:1.0.0 --replicas=3 kubelet kube-proxy container-runtime kubelet kube-proxy container-runtime Node All external requests go through this hub All internal requests for Object API go though this hub

Slide 7

Slide 7 text

kube-scheduler 1 kubectl apply -f deployment.yaml Control Plane Node Kubernetes Cluster etcd etcd etcd Persistence Store kube-apiserver kube-apiserver kube-apiserver Each controller is run in parallel
 by kube-controller-manager node-controller replicaset-controller ... deployment-controller kube-controller-manager apiVersion: apps/v1 kind: Deployment metadata: name: myapp labels: app: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:1.0.0 ports: - containerPort: 80 kubectl run myapp --image=myapp:1.0.0 --replicas=3 kubelet kube-proxy container-runtime kubelet kube-proxy container-runtime Node All external requests go through this hub All internal requests for Object API go though this hub 2 Save Objects

Slide 8

Slide 8 text

kube-scheduler 1 kubectl apply -f deployment.yaml Control Plane Node Kubernetes Cluster etcd etcd etcd Persistence Store kube-apiserver kube-apiserver kube-apiserver Each controller is run in parallel
 by kube-controller-manager node-controller replicaset-controller ... deployment-controller kube-controller-manager apiVersion: apps/v1 kind: Deployment metadata: name: myapp labels: app: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:1.0.0 ports: - containerPort: 80 kubectl run myapp --image=myapp:1.0.0 --replicas=3 kubelet kube-proxy container-runtime kubelet kube-proxy container-runtime Node All external requests go through this hub All internal requests for Object API go though this hub 2 Save Objects 3 Fetch Objects 5 Handle Objects 6 Update Objects 4 Fetch Objects • deployment-controller fetches Deployment objects and handle (creating new ReplicaSet object) then write back their status to etcd • replicaset-controller fetches ReplicaSet objects and handle (creating new Pod object) then write back their status to etcd

Slide 9

Slide 9 text

1 kubectl apply -f deployment.yaml Control Plane Node Kubernetes Cluster etcd etcd etcd Persistence Store kube-apiserver kube-apiserver kube-apiserver Each controller is run in parallel
 by kube-controller-manager node-controller replicaset-controller ... deployment-controller kube-controller-manager apiVersion: apps/v1 kind: Deployment metadata: name: myapp labels: app: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:1.0.0 ports: - containerPort: 80 kubectl run myapp --image=myapp:1.0.0 --replicas=3 kubelet kube-proxy container-runtime kubelet kube-proxy container-runtime Node All external requests go through this hub All internal requests for Object API go though this hub 2 Save Objects 3 Fetch Objects 5 Handle Objects 6 Update Objects 4 Fetch Objects kube-scheduler 7 Create a Binding object to assign 
 newly created Pod to a suitable Node Fetch Pods 8 Handle Pods 9 Update Pods • Node selection is based on node available resources (memory, cpu...), balancing, data locality, or user's speci fi ed conditions...

Slide 10

Slide 10 text

1 kubectl apply -f deployment.yaml Control Plane Node Kubernetes Cluster etcd etcd etcd Persistence Store kube-apiserver kube-apiserver kube-apiserver Each controller is run in parallel
 by kube-controller-manager node-controller replicaset-controller ... deployment-controller kube-controller-manager apiVersion: apps/v1 kind: Deployment metadata: name: myapp labels: app: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:1.0.0 ports: - containerPort: 80 kubectl run myapp --image=myapp:1.0.0 --replicas=3 kubelet kube-proxy container-runtime kubelet kube-proxy container-runtime Node All external requests go through this hub All internal requests for Object API go though this hub 2 Save Objects 3 Fetch Objects 5 Handle Objects 6 Update Objects 4 Fetch Objects kube-scheduler 7 Create a Binding object to assign 
 newly created Pod to a suitable Node Fetch Pods 8 Handle Pods 9 Update Pods 9 container 1 container 2 pod-1 9 container 1 container 2 pod-2

Slide 11

Slide 11 text

kube-scheduler 1 kubectl apply -f deployment.yaml 2 7 Control Plane Node Kubernetes Cluster etcd etcd etcd Persistence Store kube-apiserver kube-apiserver kube-apiserver Each controller is run in parallel
 by kube-controller-manager All external requests go through this hub All internal requests for Object API go though this hub Create a Binding object to assign 
 newly created Pod to a suitable Node node-controller replica-set-controller ... deployment-controller kube-controller-manager apiVersion: apps/v1 kind: Deployment metadata: name: myapp labels: app: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:1.0.0 ports: - containerPort: 80 3 Fetch Objects Save Objects 5 Handle Objects 6 Update Objects Fetch Pods 8 Handle Pods 9 Update Pods 4 Fetch Objects kubectl run myapp --image=myapp:1.0.0 --replicas=3 kubelet kube-proxy container-runtime container 1 container 2 pod-1 container 1 container 2 pod-3 kubelet kube-proxy container-runtime container 1 container 2 pod-2 Node 9 9

Slide 12

Slide 12 text

What we have learned from K8s' design?

Slide 13

Slide 13 text

kube-scheduler 1 kubectl apply -f deployment.yaml 2 7 Control Plane Node Kubernetes Cluster etcd etcd etcd Persistence Store kube-apiserver kube-apiserver kube-apiserver Each controller is run in parallel
 by kube-controller-manager All external requests go through this hub All internal requests for Object API go though this hub Create a Binding object to assign 
 newly created Pod to a suitable Node node-controller replica-set-controller ... deployment-controller kube-controller-manager apiVersion: apps/v1 kind: Deployment metadata: name: myapp labels: app: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:1.0.0 ports: - containerPort: 80 3 Fetch Objects Save Objects 5 Handle Objects 6 Update Objects Fetch Pods 8 Handle Pods 9 Update Pods 4 Fetch Objects kubectl run myapp --image=myapp:1.0.0 --replicas=3 kubelet kube-proxy container-runtime container 1 container 2 pod-1 container 1 container 2 pod-3 kubelet kube-proxy container-runtime container 1 container 2 pod-2 Node 9 9

Slide 14

Slide 14 text

To be continued