Kubernetes


Inside Kubernetes
Components

Master
Node
Components

- kube-apiserver
- kube-scheduler
- kube-controller-manager
- cloud-controller-manager
- etcd
- kube-dns (*)
Master
Node
- kubelet
- kube-proxy
- container runtime
NODE
POD INFRASTRUCT.
CONTAINER A
CONTAINER B
POD
KUBERNETES COMPONENTS:
kubelet
kube-proxy
Container Runtime (Docker, rkt, etc)

NODE
kubelet
Kubernetes Master
kube-apiserver
NODE
kubelet
kube-scheduler
kube-controller-manager
cloud-controller-manager

kube-apiserver
Responds to kubectl commands

kube-scheduler
Decides which pods go where

kube-controller-manager
Manages all controller control loops
https://github.com/kubernetes/kubernetes/blob/master/cmd/kube-controller-manager/app/controllermanager.go#L321

cloud-controller-manager
This is for Google / AWS / Azure, etc.

https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/cloud.go#L32
Components

- kube-apiserver
- kube-scheduler
- kube-controller-manager
- cloud-controller-manager
- etcd
- kube-dns (*)
Master
Node
- kubelet
- kube-proxy
- container runtime

kubelet
"Makes Containers Real"

kube-proxy
"Makes Services Real"

Services Part II

Services Part II
Type: LoadBalancer
Type: NodePort
Type: ClusterIP

Services Part II
Type: LoadBalancer
Type: NodePort
=> Type: ClusterIP

Services Part II
Type: LoadBalancer
Type: NodePort
=> Type: ClusterIP

Services Part II
Type: LoadBalancer
=> Type: NodePort
Type: ClusterIP
Endpoints

kind: Endpoints
apiVersion: v1
metadata:
name: my-service
subsets:
- addresses:
- ip: <pod_1_addr>
- ip: <pod_2_addr>
ports:
- port: 80POD_1
POD_2
SERVICE
ENDPOINT

PROXY-MODE: IPVS

PROXY-MODE: USERSPACE

PROXY-MODE: IPTABLES

PROXY-MODE: IPVS

PROXY-MODE: NFTTABLES
https://github.com/kubernetes/kubernetes/issues/62720
Coming Soon ?
Service Discovery

Environment Variables
DNS
MY_APP_SERVICE_HOST=10.0.0.11
MY_APP_SERVICE_PORT=6379
MY_APP_PORT=tcp://10.0.0.11:6379
MY_APP_PORT_6379_TCP=tcp://10.0.0.11:6379
MY_APP_PORT_6379_TCP_PROTO=tcp
MY_APP_PORT_6379_TCP_PORT=6379
MY_APP_PORT_6379_TCP_ADDR=10.0.0.11Exposes a DNS resolver service
Kubelet tells containers to use that service
(injected by kubelet into Container Runtime)
(managed by kube-dns addon)
my-svc.my-namespace.svc.cluster.local
RESOLVES TO 10.0.0.11Kube-DNS

my-svc.my-namespace.svc.cluster.local
A-Record

Cluster IP of Service `my-svc`
Inside Kubernetes
By Corey Brooks
Inside Kubernetes
- 615