2.6 Container hóa và quản lý hạ tang container
2.6.4 Quản lý và điều phối
Quản lý và điều phối (Orchestration) là tính năng đóng vai trò quan trọng trong một
hệ thống sử dụng container. Nó giúp tự động hóa việc triển khai, quản lý, nhân rộng và kết nối mạng của container. Việc quản lý và điều phối các container mang lại lợi ích rất lớn cho các doanh nghiệp phải triển khai và quản lý hệ thống hàng trăm hoặc hàng
ngàn container.
Trong bat kì môi trường nào có sử dụng container đều có thể sử dụng hệ thống điều phối container. Nó giúp triển khai cùng một ứng dụng trên các môi trường khác nhau
mà không cần thiết kế lại. Và microservice trong các container giúp việc sắp xếp các dịch vụ dễ dàng hơn, bao gồm lưu trữ, kết nối mạng và bảo mật [42]. Một số công cụ điều phối container phổ biến là Kubernetes, Docker Swarm và Apache Mesos.
2.6.5 Kubernetes
Kubernetes là một công cụ điều phối container mã nguồn mở phổ biến nhất trên thé giới. Ban đầu, Kubernetes được phát triển và thiết kế bởi các kỹ sư tại Google nhưng
sau đó Google đã quyên tặng dự án Kubernetes cho Quỹ Điện toán đám mây (Cloud Native Computing Foundation, CNCF, thành lập vào năm 2015).
Hệ thống điều phối Kubernetes được xây dựng nhằm mục đích quản lý và đơn giản hóa việc điều phối, triển khai và quản lý các hệ thống container phân tán trên nhiều môi trường [44]. Kubernetes loại bỏ nhiều quy trình thủ công liên quan đến việc triển khai và nhân rộng các ứng dụng được đóng gói. Người dùng có thể phân chia các máy
49
chủ, máy vật lý hoặc máy ảo thành các cum (cluster) và cung cấp cho người dùng nền tảng để quản lý các cụm đó một cách dễ dàng và hiệu quả.
|kube-controller- - ‹
of kabeapisemer | + + ¡
h—>>( man Kbeet } oe 7
¡CC p(kimepò) — (eabe-proxy) (my) |
:: Fl Fa Em:
ơ-....
Hình 2.14: Kiến trúc Kubernetes.
6 cấp độ kiến trúc, Kubernetes là một hệ thông phân cum (cluster) bao gồm các
nút chính (master) chịu trách nhiệm điều phối, quản lý tài nguyên, lập lịch,... và các nút (node) chịu trách nhiệm chạy các công việc được giao và báo cáo lại cho master. Kiến trúc của Kubernetes bao gồm:
* kube-apiserver (REST API): là thành phan cốt lõi của cum Kubernetes, cung cấp giao diện người dùng cho trình điều khiển (control plane). kube-apiserver hoạt động như một cổng (gateway) để tiếp nhận và xử lý các yêu cầu. Nó sẽ xác định một yêu cầu có hợp lệ hay không và xử lý yêu cầu đó nếu có. Người dùng
có thể truy cập kube-apiserver thông qua lệnh gọi REST (REST calls), giao diện
đòng lệnh kubectl hoặc các công cụ dòng lệnh khác như kubeadm.
* efcd: hoạt động như một kho lưu trữ các dữ liệu có dạng khóa - giá trị (key - value), có tính kha dụng cao và được sử dụng làm kho lưu trữ dit liệu dự phòng cho một cụm Kubernetes.
kube-scheduler: tính toán các công việc cần thiết và xem xét các tài nguyên hiện
có cùng với trạng thái của một cụm để phân bổ tài nguyên một cách hợp lý.
kube-controller-manager: hoạt động như một tiền trình ngầm (daemon), tham khảo các ý kiến của kube-scheduler và điều khiển các hoạt động trong một cụm.
kubelet: là một ứng dụng nhỏ nằm trên các nút (node) để giao tiếp với trình điều khiển (control plane), đảm bảo các container đang hoạt động ổn định.
kube-proxy: là một proxy nằm trên các nút (node) được dùng để đảm bảo an
toàn cho các giao tiếp mạng của một cụm.
Một số khái niệm thường được sử dụng trong Kubernetes [44]:
* Node (Nut): Mỗi máy chủ (máy vật lý hoặc máy ảo) là một node, với chức năng
là chạy các pod. Mỗi node chạy một số thành phần của Kubernetes như kubelet,
kube proxy và được quản lý bởi một master.
5 Cluster (Cum): Cluster là một tập hợp các máy chủ lưu trữ và tài nguyên mạng
mà Kubernetes sử dụng để thực hiện các công việc khác nhau. Một hệ thống có thể bao gồm một hay nhiêu cluster.
* Master (Máy điều khiển): Master là một trình điều khiển (control plane) của Kubernetes bao gồm API server, bộ lập lịch và trình quản lý bộ điều khiển
(controller manager). Master chịu trách nhiệm lập lịch cho các pod và xử lý các sự kiện.
* Pod: Pod là đơn vị có thể triển khai trên Kubernetes. Mỗi pod có thể chứa một hoặc nhiều container, các container trong pod chia sẽ chung tài nguyên và mạng.
* Services (Dich vu): Services được sử dụng để hiển thị một số chức năng cho người dùng hoặc dịch vụ khác. Chúng thường bao gồm một nhóm các pod.
51
* Volume (Dung lượng): Volume hỗ trợ việc lưu trữ dữ liệu của pod hoặc chia sẻ
dit liệu giữa các pod.
* Namespace (Không gian tên): Namespace là một cụm ảo (virtual cluster). Trên
một cluster vật lý có thể chứa nhiều cluster ảo được phân tách bằng namespace
và chúng hoàn toàn bị cô lập với nhau.
2.6.6 Rancher
Rancher là một phần mềm mã nguồn mở cho phép các cá nhân, tổ chức hoặc doanh nghiệp triển khai, vận hành và quản lý một hoặc nhiều cụm Kubernetes [45]. Rancher cung cấp các phần mềm cần thiết để quản lý các thùng chứa (container). Nó giải quyết các thách thức của việc quản lý hoạt động và bảo mật nhiều cụm Kubernetes trên bất
kì cơ sở hạ tầng nào, đồng thời cung cấp cho các nhóm DevOps những công cụ tích hợp để chạy các khôi lượng công việc (workload) được container hóa.
Rancher Catalog
Croan Spark’ [Bist Gp clastic WP rogstash kibGh ;e..es @ Jenkins
Container Orchestration and Scheduling Leverage
Ops Mgmt. existing tools:
SS= User Mgmt Docker $- cocsr Seg MESOS kubernetes - CVCD
AD/LDAP - Code
Reposito
Infrastructure Services (Storage, Networking, Load Balancer, DNS, etc.) | -_ Monitoring
zon BS
Hình 2.15: Các thành phan của Rancher.
Rancher có bốn thành phần chính được thể hiện trong hình 2.15, bao gồm [46]:
* Điều phối cơ sở hạ tầng (Infrastructure Orchestration): Rancher lấy tài nguyên
(CPU, bộ nhớ, ổ cứng và mạng) từ máy chủ dạng Linux và cung cấp cho các ứng dụng chứa trong các container thông qua một lớp dịch vụ cơ sở hạ tầng (infrastructure services) được thiết kế đặc biệt. Các dich vụ cơ sở hạ tầng của Rancher bao gồm lưu trữ (storage), mạng (networking), cân bằng tải (load balancer),
hệ thống phân giải tên miền (DNS).... và thường được triển khai dưới dạng container để một dịch vụ có thể chạy trên bất kì máy chủ Linux nào.
+ Lập kế hoạch và điều phối vùng chứa (Container Orchestration and Scheduling):
Rancher có tất cả các khung (framework) lập kế hoạch và điều phối vùng chứa phổ biến hiện nay, bao gồm: Docker Swarm, Kubernetes và Mesos. Một người dùng có thể tạo ra nhiều cụm Swarm hoặc Kubernetes và sử dụng các công cụ Swarm hoặc Kubernetes để quản lý các ứng dụng của họ.
* Danh mục ứng dung (Application Catalog): Người dùng Rancher có thể triển
khai các ứng dụng trong danh mục ứng dụng chỉ bằng một cú nhấp chuột dù ứng dụng đó được triển khai trên nhiều vùng chứa (container). Người dùng có thể quản lý các ứng dụng đã triển khai và thực hiện tự động nâng cấp khi có
phiên bản mới. Ngoài việc sử dụng danh mục ứng dụng công khai của Rancher
thì người dùng có thể tạo danh mục ứng dụng của riêng họ.
+ Kiểm soát ở mức độ doanh nghiệp (Enterprise-Grade Control): Rancher hỗ trợ
các tiện ích (plugin) để xác thực người dùng một cách linh hoạt. Bên cạnh đó, Rancher còn hỗ trợ kiểm soát truy cập ở cấp độ môi trường (môi trường phát triển), cho phép các cá nhân hoặc nhóm có quyền cho phép hoặc từ chối truy
cập.
Với Rancher, người dùng có thể triển khai các ứng dụng được chứa trong các vùng chứa (container) một cách an toàn. Bên cạnh đó, Rancher giúp việc phân phối Kubernetes cho các nhóm phát triển trở nên đơn giản hơn, tăng tốc độ phát hành sản
phẩm ra thị trường và đẩy nhanh quá trình chuyển đổi kỹ thuật của tổ chức hay doanh
nghiệp.