Press ESC to close

The Techdoors BlogThe Techdoors Blog Mở cửa sổ và đón ánh nắng vào nhà

[CKA] 01. Khởi nguyên

Một website, cơ sở dữ liệu (database), hay Redis có thể dựng bằng container trên laptop một cách đơn giản. Tuy nhiên, việc triển khai các dịch vụ này trên hệ thống lớn mà không có downtime, hay tính năng service discovery (giao tiếp với nhau mà không cần biết địa chỉ IP), hay vô vàn khía cạnh khác sẽ gặp nhiều khó khăn. Kubernetes ra đời để giải quyết những khó khăn này bằng việc tập các hợp building block cơ bản (primitive) và cung cấp API mạnh mẽ để giao tiếp giữa chúng.

Theo trang kubernetes.io

Kubernetes là một phần mềm mã nguồn mở để tự động hóa việc triển khai, tự động mở rộng quy mô (auto scaling), và quản lý các ứng dụng được đóng gói trong container (containerized applications).

1. Lịch sử ra đời của Kubernetes

Hồi tưởng về lịch sử ra đời của Kubernetes, nó được xây dựng và trui rèn trong 15 năm kinh nghiệm tại Google, một dự án có tên là Borg. Trong 15 năm đó, cơ sở hạ tầng của Google bắt đầu phát triển với quy mô lớn khi máy ảo trở nên phổ biến, giải pháp container được đưa ra để đóng gói các ứng dụng trong cụm (cluster) một cách hiệu quả. Hiệu quả trong việc sử dụng cụm và quản lý các ứng dụng phân tán là thách thức cốt lõi của Google.

Khái niệm về container trong công nghệ thông tin được lấy cảm hứng từ lĩnh vực hàng hải. Trong tiếng Hy Lạp, κνβερνητης nghĩa là người lái tàu (Helmsman hay pilot of the ship). Do khó phát âm nên nhiều người sẽ sử dụng nickname là K8s, vì Kubernetes có 8 chữ cái giữa K và S.

2. Kiến trúc của Kubernetes

Cùng tham quan kiến trúc của Kubernetes để có cái nhìn rõ hơn về các building block cơ bản. K8s có 2 thành phần chính, mỗi phần gồm các thành phần nhỏ hơn.

Hình 1. Các thành phần trong cụm Kubernetes.

2.1. Master node (control plane)

Là trung tâm điều khiển của cụm Kubernetes, chịu trách nhiệm quản lý, lập lịch và giám sát các Worker Node.

  • etcd cluster: Chịu trách nhiệm lưu trữ thông tin về các node, cấu hình,… Có một giả thuyết rằng nguồn gốc của etcd là sự kết hợp của thư mục “/etc” trong hệ thống Unix (nơi lưu trữ các file cấu hình hệ thống) và chữ “d” ở cuối là Distributed.
  • kube-scheduler: Lập lịch cho việc tạo và đặt các container trên node phù hợp.
  • controller-manager
    • node-controller: Quản lý các node, thêm node vào cụm và xử lý lỗi khi node không khả dụng.
    • replication-controller: Đảm bảo số lượng container chạy đúng với mong muốn trong mọi thời điểm.
  • kube-apiserver: Chịu trách nhiệm điều phối các hoạt động trong cụm.

2.2. Worker node

Chịu trách nhiệm lưu trữ và vận hành các ứng dụng dưới dạng container.

  • kubelet: Được ví như thuyền trưởng của một con tàu, lắng nghe hướng dẫn từ kube-apiserver, triển khai hoặc phá hủy container trên các node theo yêu cầu.
  • kube-proxy: Giúp giao tiếp giữa các node, đảm bảo các rule được tuân thủ trên worker node, định tuyến lưu lượng mạng và duy trì kết nối giữa các pod.
  • container runtime engine: Chịu trách nhiệm quản lý, thêm và xóa các container.

2.3. Container Runtime Engine

Khởi đầu, Kubernetes ra đời với container runtime engine mặc định là Docker. Sau đó, K8s phát triển một bộ interface gọi là Container Runtime Interface (CRI) cho phép các vendor khác có thể hoạt động như container runtime cho K8s, miễn tuân theo chuẩn Open Container Initiative (OCI).

Hình 2. dockershim và CRI-Containerd đóng vai trò cầu nối.

Docker, đứa con đầu tiên không hỗ trợ chuẩn CRI do sinh ra trước khi CRI được giới thiệu. Tuy nhiên, K8s vẫn hỗ trợ Docker thông qua cầu nối dockershim nhưng từ phiên bản K8s 1.20 trở đi, cầu nối này đã bị gỡ bỏ và Docker đi vào dĩ vãng.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *