Posts Understanding K8s Overview
Post
Cancel

Understanding K8s Overview

Some initial research about k8s.

  1. Relationship between containerd and docker
  • Low level runtime is currently mainly runc
  • High level runtime is currently mainly using containerd
graph TD;
    A[Docker CLI]-->|docker run ...|B[Docker Engine];
    B[Docker Daemon];
    B -->C[Containerd];

    C --> D[Open Container Initiative OCI. 2015 by Docker];
    D --> |Implement|E[runc Golang];
    D --> |Implement|CR[crun C];
    D --> |Implement|FC[firecracker-containerd AWS Lambda];

    E --> CO[container]
    CR --> CO[container]
    FC --> CO[container]

    F[Kubernetes] --> G[Container Runtime Interface CRI - K8s API];
    G-->|dockershim. 1.24 k8s remove|B
    G -->|Implement| C[Containerd from Docker];
    G --->|Implement| H[CRI-O from Red Hat - OpenShift, IBM..];
    H --> D

    subgraph Docker
    A
        B
        
    end

    subgraph High Level Runtime: pull image. network. storage
        C
        H
    end

    subgraph Low Level Runtime
        E
        CR
        FC
    end

    subgraph Kubernetes
        F
        G
    end
  • k8s is removing docker runtime from version 1.24
  • removing doesn’t mean having to change docker-formatted containers (meaning dockerfile standard is still kept)
  • both containerd and CRI-O can run docker-formatted and OCI-formatted images, the difference is they can run without needing to use docker commands from docker daemon

  • detailed review article
  1. Container Component Model

Simply understand containers: group processes together to isolate

History of container formation:

  • don’t want to waste effort creating another VM to make everything completely independent
  • want to manage independent environments more lightly (direct interaction)

VM vs container

Distinguishing virtualization and Container:

  • virtualization works with VMs, containers work directly with processes

Docker in the overall picture of containers:

container

Previously, Docker included 3 parts:

  • Managing images, network, volume (now it shifts to only managing this part - parallel in function and responsibility with K8S)
  • container manager -> shifted to using containerd (CNCF)
  • container runtime -> shifted to runc (CNCF)

I have this open question for you: why can’t systemd run in containers?

  1. Components of k8s

I’ll introduce a basic model of K8S

k8s

Will include the following basic components:

  • Runtime (containerd)
  • kubelet: runs on nodes
  • Master: etcd (database - stores cluster information), scheduler, api-server, controller
  • HA for api-server: can use nginx or haproxy, combined with keepalived
  • Kube-proxy

Details about component interactions, network, volume… I’ll see you in the distant future :D

This post is licensed under CC BY 4.0 by the author.