Hệ thống điều phối Kubernetes
Kubernetes (thường được gọi là K8s, với số “8” được thay thế bằng chữ “ubernete” ) là một hệ thống nguồn mở dùng để tự động hóa việc triển khai, mở rộng và quản lý các ứng dụng được đóng gói trong container . Hệ thống này được Google thiết kế và tặng cho Cloud Native Computing Foundation (nay là một phần của Linux Foundation) để sử dụng.
Kubernetes là gì ?
Kubernetes ( thường được gọi là K8s , với số ” 8 ” được thay thế bằng chữ “ubernete” ) là một hệ thống nguồn mở dùng để tự động hóa việc triển khai, mở rộng và quản lý các ứng dụng được đóng gói trong container . Hệ thống này được Google thiết kế và tặng cho Cloud Native Computing Foundation (nay là một phần của Linux Foundation) để sử dụng.
Nền tảng này hướng đến việc cung cấp một nền tảng tự động hóa việc triển khai, mở rộng và chạy các container ứng dụng trên nhiều cụm máy chủ . Nền tảng này hỗ trợ một loạt các công cụ container , bao gồm cả Docker . Năm 2017 , CNCF đã công bố đợt Nhà cung cấp Dịch vụ Kubernetes được Chứng nhận ( KCSP ) đầu tiên, bao gồm IBM , MIRANTIS , Huawei và inwinSTACK .
Lịch sử phát triển Kubernetes
Kubernetes ( tiếng Hy Lạp có nghĩa là ” người lái ” hoặc ” phi công “) được sáng lập bởi Joe Beda , Brendan Burns và Craig McLuckie , với sự đóng góp của các kỹ sư Google khác, bao gồm Brian Grant và Tim Hockin . Dự án được Google công bố lần đầu tiên vào năm 2014. Quá trình phát triển và thiết kế của Kubernetes chịu ảnh hưởng lớn từ hệ thống Borg của Google , với nhiều người đóng góp hàng đầu cũng từng là các nhà phát triển Borg . Trong Google, tên mã ban đầu của Kubernetes là Seven , ám chỉ đến nhân vật Borg thân thiện trong Star Trek . Bảy nan hoa trên vô lăng trong logo Kubernetes là một sự gợi nhớ đến tên mã của dự án.
Kubernetes v1.0 được phát hành vào ngày 21 tháng 7 năm 2015. Với việc phát hành v1.0 , Google đã hợp tác với Linux Foundation để thành lập Cloud Native Computing Foundation (CNCF) và cung cấp Kubernetes như một công nghệ hạt giống.
Rancher Labs tích hợp bản phân phối Kubernetes vào nền tảng quản lý container Rancher của mình . Kubernetes cũng được sử dụng trong các sản phẩm của nhiều công ty khác, chẳng hạn như Red Hat trong sản phẩm OpenShift , CoreOS trong sản phẩm Tectonic và IBM trong sản phẩm IBM Cloud Private.
Các tính năng của Kubernetes
- Khả năng di động: Hỗ trợ đám mây công cộng, đám mây riêng, đám mây lai và đa đám mây
- Có thể mở rộng: mô-đun , plug-in , có thể gắn kết và kết hợp
- Tự động hóa: triển khai tự động, khởi động lại tự động, sao chép tự động, mở rộng / điều chỉnh quy mô tự động
- Triển khai và mở rộng ứng dụng nhanh chóng
- Tích hợp liền mạch với các tính năng ứng dụng mới
- Tiết kiệm tài nguyên và tối ưu hóa việc sử dụng tài nguyên phần cứng
Các thành phần lập kế hoạch Kubernetes
Kubernetes định nghĩa một tập hợp các khối xây dựng, cùng nhau cung cấp một cơ chế triển khai, bảo trì và mở rộng quy mô ứng dụng. Các thành phần tạo nên Kubernetes được thiết kế để liên kết lỏng lẻo và có thể mở rộng, cho phép chúng đáp ứng nhiều loại khối lượng công việc khác nhau. Khả năng mở rộng chủ yếu được cung cấp bởi API Kubernetes , được sử dụng bởi các thành phần nội bộ có thể mở rộng, cũng như bởi các container chạy trên Kubernetes .
Pod
Đơn vị cơ bản của lập lịch Kubernetes được gọi là ” pod ” . Nó bổ sung mức độ trừu tượng cao hơn cho các thành phần được chứa trong container. Một pod thường chứa một hoặc nhiều container, đảm bảo chúng vẫn cục bộ với máy chủ và có thể chia sẻ tài nguyên. Mỗi pod trong Kubernetes được gán một địa chỉ IP duy nhất (trong cụm) , cho phép các ứng dụng sử dụng các cổng mà không có nguy cơ xung đột.
Pod có thể định nghĩa một ổ đĩa, chẳng hạn như thư mục đĩa cục bộ hoặc đĩa mạng, và hiển thị nó cho một vùng chứa trong Pod . Pod có thể được quản lý thủ công thông qua API Kubernetes hoặc được ủy quyền cho một bộ điều khiển.
Nhãn và bộ chọn
Kubernetes cho phép máy khách (người dùng hoặc thành phần nội bộ) gắn các cặp khóa-giá trị được gọi là “nhãn” vào bất kỳ đối tượng API nào trong hệ thống , chẳng hạn như pod và node. Tương ứng, “bộ chọn nhãn” là một truy vấn khớp với nhãn trên một đối tượng.
Nhãn và bộ chọn là cơ chế nhóm chính trong Kubernetes , được sử dụng để xác định các thành phần mà hành động áp dụng.
Ví dụ, nếu Pod của ứng dụng của bạn có nhãn hệ thống theo tầng (ví dụ: “front-end”, “back-end”) và release_track (ví dụ: “canary”, “production”) , thì thao tác trên tất cả các nút “back-end” và “canary” có thể sử dụng bộ chọn nhãn như sau:
tier=back-end VÀ release_track=canary
Bộ điều khiển
Bộ điều khiển là vòng lặp đối chiếu, chuyển trạng thái cụm thực tế sang trạng thái cụm mong muốn. Nó thực hiện điều này bằng cách quản lý một tập hợp các pod . Một loại bộ điều khiển là “bộ điều khiển sao chép”, xử lý việc sao chép và mở rộng quy mô bằng cách chạy một số lượng bản sao pod được chỉ định trong cụm . Nó cũng xử lý việc tạo các pod thay thế nếu một nút cơ sở bị lỗi .
Các bộ điều khiển khác là một phần của hệ thống Kubernetes cốt lõi bao gồm ” Bộ điều khiển DaemonSet ” để chạy chính xác một pod trên mỗi máy (hoặc một tập hợp con các máy) và “Bộ điều khiển công việc” để chạy các pod cho đến khi hoàn tất, ví dụ như một phần của tác vụ hàng loạt. Tập hợp các pod do bộ điều khiển quản lý được xác định bởi bộ chọn nhãn nằm trong định nghĩa bộ điều khiển.
Phục vụ
Dịch vụ Kubernetes là một nhóm các pod hoạt động cùng nhau , giống như một lớp trong ứng dụng đa tầng. Nhóm các pod tạo nên một dịch vụ được xác định bởi một bộ chọn nhãn.
Kubernetes cung cấp cơ chế khám phá dịch vụ bằng cách gán địa chỉ IP tĩnh và tên miền cho các dịch vụ, đồng thời cân bằng tải lưu lượng đến các kết nối mạng khớp với địa chỉ IP của các pod khớp với bộ chọn theo cơ chế vòng tròn (ngay cả khi lỗi khiến pod di chuyển từ máy này sang máy khác). Theo mặc định, một dịch vụ được hiển thị trong cụm (ví dụ: nhiều pod backend có thể được nhóm thành một dịch vụ và các yêu cầu đến các pod frontend được cân bằng tải giữa chúng); tuy nhiên, một dịch vụ cũng có thể được hiển thị bên ngoài cụm (ví dụ: để truy cập các pod frontend từ máy khách ).
Các thành phần cốt lõi của Kubernetes
Kubernetes tuân theo kiến trúc master-slave . Các thành phần Kubernetes có thể được chia thành các thành phần quản lý các nút riêng lẻ và các thành phần thuộc mặt phẳng điều khiển.
Kubernetes Master là đơn vị điều khiển chính của cụm, quản lý khối lượng công việc và điều hướng giao tiếp trên toàn hệ thống. Mặt phẳng điều khiển Kubernetes bao gồm các quy trình riêng, mỗi quy trình có thể chạy trên một hoặc nhiều nút chủ để hỗ trợ các cụm có tính sẵn sàng cao .
Kubernetes chủ yếu bao gồm các thành phần cốt lõi sau:
Tên thành phần | minh họa |
etcd | Lưu trạng thái của toàn bộ cụm; |
apiserver | Nó cung cấp một điểm vào duy nhất cho các hoạt động tài nguyên và cung cấp các cơ chế như xác thực, ủy quyền, kiểm soát truy cập, đăng ký API và khám phá. |
controller manager | Chịu trách nhiệm duy trì trạng thái của cụm, chẳng hạn như phát hiện lỗi, mở rộng tự động, cập nhật liên tục, v.v. |
scheduler | Chịu trách nhiệm lập lịch trình tài nguyên, lập lịch trình cho các Pod tới các máy tương ứng theo chiến lược lập lịch trình đã định trước ; |
kubelet | Chịu trách nhiệm duy trì vòng đời của container, cũng như quản lý khối lượng ( CVI ) và mạng ( CNI ); |
Container runtime | Chịu trách nhiệm quản lý hình ảnh và vận hành thực tế các Pod và container ( CRI ); |
kube-proxy | Chịu trách nhiệm cung cấp dịch vụ khám phá và cân bằng tải trong cụm cho Dịch vụ ; |
Sơ đồ cấu trúc thành phần cốt lõi

Ngoài các thành phần cốt lõi, còn có một số tiện ích bổ sung được đề xuất :
Tên thành phần | Minh họa |
kube-dns | Chịu trách nhiệm cung cấp dịch vụ DNS cho toàn bộ cụm |
Ingress Controller | Cung cấp quyền truy cập mạng bên ngoài cho các dịch vụ |
Heapster | Cung cấp giám sát tài nguyên |
Dashboard | Cung cấp GUI |
Federation | Cung cấp các cụm trên các vùng khả dụng |
Fluentd-elasticsearch | Cung cấp bộ sưu tập, lưu trữ và truy vấn nhật ký cụm |
Kiến trúc phân lớp
Khái niệm thiết kế và chức năng của Kubernetes thực chất là một kiến trúc phân lớp tương tự như Linux , như thể hiện trong hình sau:

Mô tả lớp:
Cấu trúc phân cấp | minh họa | |
Lớp lõi | Chức năng cốt lõi của Kubernetes là cung cấp API để xây dựng các ứng dụng cấp cao bên ngoài và môi trường thực thi ứng dụng bổ trợ bên trong. | |
Lớp ứng dụng | Triển khai (ứng dụng không trạng thái, ứng dụng có trạng thái, tác vụ hàng loạt, ứng dụng cụm, v.v.) và định tuyến (khám phá dịch vụ, giải quyết DNS , v.v.) | |
Sự quản lý | Các số liệu hệ thống (như số liệu cơ sở hạ tầng, vùng chứa và mạng), tự động hóa (như tự động mở rộng, cung cấp động , v.v.) và quản lý chính sách ( RBAC , Quota , PSP , NetworkPolicy , v.v.) | |
Lớp giao diện | công cụ dòng lệnh kubectl , SDK máy khách và liên kết cụm | |
hệ sinh thái | Hệ sinh thái quản lý và lập lịch cụm container rộng lớn phía trên lớp giao diện có thể được chia thành hai loại: | |
Bên ngoài Kubernetes | Ghi nhật ký, giám sát, quản lý cấu hình, CI , CD , Workflow , FaaS , ứng dụng OTS , ChatOps , v.v… | |
Bên trong Kubernetes | CRI , CNI , CVI , kho lưu trữ hình ảnh, Nhà cung cấp đám mây , cấu hình và quản lý cụm, v.v… |
(Còn tiếp)