Kubernetes là gì?
Kubernetes là một nền tảng mã nguồn mở giúp tự động triển khai, scale và vận hành các ứng dụng container trên cụm các host, cung cấp cơ sở hạ tầng tập trung container
Với kubernetes ta có thể giải quyết các nhu cầu của khác hàng nhanh chóng và rất hiệu quả:

  • Deploy ứng dụng nhanh
  • Scale ứng dụng mà không ảnh hưởng tới các thành phần khác
  • Liên tục có những tính năng mới
  • Tối ưu việc sử dụng tài nguyên

Các khái niệm

Cluster
Một cluster là một tập các máy vật lý hay máy ảo hoặc những tài nguyên cơ sở hạ tầng khác được sử dụng bởi Kubernetes để chạy các ứng dụng
Node
Một node là một máy ảo hoặc máy vật lý chạy Kubernetes, nơi mà các pod có thể được schedule tới đó.
Pod
Một pod là một nhóm các container và volume có liên quan tới nhau
Label
Một label là một cặp key/value gắn với một tài nguyên (resource) như một pod, để truyền tải các thuộc tính mà người dùng định nghĩa ra. Các label có thể được sử dụng để tổ chức và lựa chọn các tập con của nhiều resource khác nhau.
Selector
Một Selector là một biểu thức mà phù hợp với label để xác định các resource liên quan. Ví dụ: Những pod nào là backend của một load balancer
Replication Controller
Một replication controller đảm bảo rằng số lượng các pod replicas đã định nghĩa luôn luôn chạy tại bất kì thời điểm nào. Nhiệm vụ là xử lý việc tạo lại những pod này khi máy chủ đó bị reboot hoặc lỗi.
Service
Một service định nghĩa một tập các pod và cách để truy cập vào chúng, ví dụ như một địa chỉ IP hoặc 1 tên miền
Volume
Một volume đơn giản là một thư mục, có thể có dữ liệu bên trong, nó được truy cập bởi một container.
Secret
Một secret chứa dữ liệu nhạy cảm, như token. Nó sẽ nằm bên trong container khi có yêu cầu.
Name
Tên của resource
Namespace
Một namespace như một prefix cho tên của một resource. Namespace giúp cô lập các project, team hay các khách hàng trên cùng 1 cluster với nhau. Namespace cũng tránh việc trùng lặp tên giữa các team.
Annotation
Một cặp key/value - có thể lưu giữ lượng dữ liệu lớn hơn (khi so sánh với label) và có thể người dùng không đọc hiểu được dữ liệu đó.

Thành phần cơ bản

1. Etcd

Là một service discovery được dùng phổ biến, được lập trình bởi CoreOS team, rất nhẹ và dùng để lưu trữ cấu hình hệ thống dưới dạng key-value.
Kubernetes sử dụng Etcd để lưu trữ cấu hình dữ liệu và được các node kubernetes sử dụng. Hoạt động rất đơn giản, cung cấp dữ liệu qua HTTP/Json API

2. API server

Là 1 trong những service quan trọng vì đây là điểm chính của cả hệ thống Kubernetes. Đại khái nó là 1 interface RESTful API, cho nhiều công cụ hoặc thư viện có thể giao tiếp tới nó, ví dụ như kubecfgtương tác với Kubernetes Cluster, để cấu hình và có nhiệm vụ đảm bảo service discovery Etcd lưu trữ và các service container được deploy. Nó hoạt động như 1 cầu nối giữa các thành phần trong Kubernetes Cluster với nhau để health check, maintain các cấu hình.

3. Controller Manager Service

Là 1 service có nhiều nhiệm vụ trong hệ thống. Ví dụ, Controller phải đảm bảo số lượng replicas được defined cho 1 service, ví dụ defined trong 1 file cấu hình là replicas: 5 thì replication Controller sẽ đảm bảo số lượng là 5 services được deploy trên hệ thống Kubernetes Cluster. Controller sẽ theo dõi trên API server những thay đổi và mọi hoạt động thay đổi đều được update về Etcd. Khi có sự thay đổi, update trên API, controller sẽ đọc thông tin mới và update lại hệ thống, ví dụ như scale up hoặc down 1 ứng dụng dịch vụ, hoặc thay đổi các endpoint của ứng dụng.

4. Schedule Service

Service này hoạt động phân tích, theo dõi resource available của các node trong hệ thống Kubernetes Cluster, để dựa vào đó triển khai các ứng dụng service lên đó 1 cách hợp lý.