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: 80

POD_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.11

Exposes 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.11

Kube-DNS

my-svc.my-namespace.svc.cluster.local

      A-Record

Cluster IP of Service `my-svc`

Inside Kubernetes

By Corey Brooks

Inside Kubernetes

  • 615