Một số tìm hiểu ban đầu về k8s.
- 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
- 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)
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:
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 ?
- 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
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