Posts Tìm hiểu tổng quan k8s
Post
Cancel

Tìm hiểu tổng quan k8s

Một số tìm hiểu ban đầu về k8s.

  1. Mối liên hệ giữa containerd và docker
  • Low level run time hiện tại chủ yếu là runc
  • High level runtime hiện tại chủ yếu là dùng 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 đang bỏ docker runtime từ bản 1.24
  • bỏ k có nghĩa là phải chỉnh lại docker-formatted container (tức là chuẩn dọckerfile vẫn được giữ nguyên)
  • cả containerd và CRI-O điều có thể chạy docker-formatted và OCI-formatted images, chỉ khác là nó có thể chạy mà không cần dùng đến lệnh docker của docker daemon

  • bài đánh giá chi tiết
  1. Mô hình các thành phần của container

Hiểu đơn giản container: nhóm các process với nhau để cô lập

Lịch sử hình thành container:

  • không muốn mất công tạo ra thêm một VM để mọi thứ hoàn toàn độc lập
  • muốn quản lí các môi trường độc lập một cách nhẹ nhàng hơn (tương tác trực tiếp)

VM vs container

Phân biệt ảo hóa và Container:

  • ảo hóa làm việc với VM, container làm việc trực tiếp với các process

Docker trong bức tranh tổng quát về container:

container

Trước kia thì docker bao gồm 3 phần:

  • Quản lí image, network, volume (giờ nó chuyển dịch sang chỉ quản lí phần này - ngang hàng chức năng nhiệm vụ với K8S)
  • container manager -> chuyển sang dùng containerd (CNCF)
  • container runtime -> chuyển sang runc (CNCF)

Mình có câu hỏi mở này dành cho các bạn: tại sao trong container không chạy đc systemd ?

  1. Các thành phần của k8s

Mình giới thiệu một mô hình cơ bản của K8S

k8s

Sẽ bao gồm các thành phần cơ bản sau:

  • Runtime (containerd)
  • kubelet: chạy ở các node
  • Master: etcd(database - lưu trữ thông tin cụm), scheduler, api-server, controler
  • HA cho api-server: có thể dùng nginx hoặc haproxy, kết hợp keepalived
  • Kube-proxy

Chi tiết về tương tác các thành phần, network, volume… mình xin hẹn các bạn tại một tương lai xa :D

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