Hệ sinh thái Docker: Lập kế hoạch và điều phối

2243
27-07-2018
Hệ sinh thái Docker: Lập kế hoạch và điều phối

Trong bài hướng dẫn này, Bizfly Cloud sẽ thảo luận về các công cụ lên lịch và trình sắp xếp của Docker. Chúng tương ứng với giao diện quản lý container chính cho các quản trị viên trong triển khai phân tán.

Giới thiệu 

Công cụ Docker cung cấp tất cả các chức năng cần thiết để build, upload, download, start và dừng các container. Nó rất phù hợp cho quản lý các quy trình này trong môi trường máy chủ đơn lẻ với số lượng container tối thiểu.

Tuy nhiên, nhiều người dùng Docker đang tận dụng nền tảng này như một công cụ để dễ dàng mở rộng số lượng lớn các container trên nhiều máy chủ khác nhau. Các cụm máy chủ Docker đưa ra những thách thức về quản lý chuyên biệt, do đó cũng đòi hỏi những bộ công cụ xử lý khác nhau.

Trong bài hướng dẫn này, chúng ta sẽ thảo luận về các công cụ lên lịch và trình sắp xếp của Docker. Chúng tương ứng với giao diện quản lý container chính cho các quản trị viên trong triển khai phân tán.

Lập lịch/Scheduling Container, Orchestration và quản lý Cluster

Khi các ứng dụng được thu nhỏ trên nhiều hệ thống máy chủ, khả năng quản lý từng hệ thống máy chủ và phân tách nền tảng cơ bản phức tạp lại trở nên đáng chú ý. Orchestration là một thuật ngữ khá rộng dùng để chỉ việc lên lịch container, quản lý cụm và khả năng cung cấp các máy chủ bổ sung.

Trong môi trường này, "lên lịch"/scheduling đề cập đến khả năng quản trị viên tải một tệp dịch vụ lên một hệ thống lưu trữ mà hệ thống đó thiết lập cách chạy một container xác định. Trong khi scheduling tượng trưng cho hành động cụ thể của việc tải lên dịch vụ, thì tổng quát hơn, các scheduler/trình lên lịch chịu trách nhiệm kết nối vào hệ thống init của máy chủ để quản lý các dịch vụ với bất kỳ nhu cầu cần đến nào.

Quản lý cụm/cluster management là quy trình kiểm soát các nhóm máy chủ. Điều này có thể bao gồm việc thêm và loại bỏ các máy chủ từ một cụm, nhận thông tin về trạng thái hiện tại của các máy chủ và các container, khởi động hay dừng các quá trình. Quản lý cụm gắn liền với việc lên lịch vì scheduler phải có quyền truy cập vào từng máy chủ trong cụm để lên lịch dịch vụ. Vì lý do này mà các tool tương tự thường được sử dụng cho cả hai mục đích cùng lúc.

Hệ sinh thái Docker: Lập kế hoạch và điều phối - Ảnh 1.

Hệ sinh thía Docker

Để chạy và quản lý các container trên các máy chủ trong toàn bộ cluster, scheduler phải tương tác với hệ thống init của từng máy chủ. Đồng thời, để dễ quản lý, scheduler sẽ tạo ra bản trình bày thống nhất về trạng thái của các dịch vụ trong toàn bộ cụm. Kết quả là quy trình này hoạt động như một hệ thống init toàn cụm. Vì lý do này, có nhiều scheduler mirror/phản ánh cấu trúc lệnh của hệ thống init mà chúng đang abstract.

Một trong những nhiệm vụ lớn nhất của scheduler là lựa chọn máy chủ. Nếu quản trị viên quyết định chạy một dịch vụ (container) trên cụm, scheduler khi chọn một máy chủ lưu trữ sẽ tự động bị tính phí. Người quản trị có thể tùy ý cung cấp các ràng buộc lập lịch theo nhu cầu hoặc mong muốn của mình, nhưng scheduler sẽ chịu trách nhiệm cuối cùng về việc thực hiện các yêu cầu này.

Làm thế nào để scheduler ra quyết định lên lịch?

Scheduler thường xác định chính sách lập lịch mặc định. Điều này xác định cách dịch vụ được lên lịch khi không có input nào được cung cấp từ quản trị viên. Ví dụ: một scheduler có thể chọn để đặt các dịch vụ mới trên máy chủ đang có ít dịch vụ hoạt động nhất.

Scheduler thường cung cấp cơ chế ghi đè mà quản trị viên có thể sử dụng để tinh chỉnh quy trình lựa chọn nhằm đáp ứng các yêu cầu cụ thể. Ví dụ: nếu hai container luôn chạy trên cùng một máy chủ vì chúng hoạt động như một cụm, thì mối quan hệ đó thường có thể được khai báo trong quá trình lên lịch. Tương tự như vậy, ví dụ nếu hai container không đặt trên cùng một máy chủ để đảm bảo tính sẵn sàng cao của hai phiên bản trong cùng một dịch vụ, thì điều này cũng có thể được xác định.

Các ràng buộc tiêu biểu khác mà khi lên lịch nên chú ý đến có thể là các metadata tùy chỉnh. Các máy chủ riêng biệt có thể được gắn nhãn và nhắm mục tiêu theo lịch. Điều này có thể là cần thiết, ví dụ trường hợp một máy chủ chứa một khối lượng dữ liệu cần cho một ứng dụng. Một số dịch vụ có thể cần phải được triển khai trên mỗi máy chủ riêng lẻ trong cụm. Hầu hết các scheduler cho phép thực hiện việc này.

Scheduler cung cấp các chức năng quản lý cụm gì?

Lập lịch thường được gắn với các chức năng quản lý cụm vì cả hai chức năng đều yêu cầu khả năng hoạt động trên các máy chủ cụ thể và trên toàn bộ cụm. Phần mềm quản lý cụm có thể được sử dụng để truy vấn thông tin về các phần tử trong một cụm, thêm hoặc xóa phần tử hoặc thậm chí kết nối với máy chủ riêng lẻ để quản trị chi tiết hơn. Các chức năng này có thể nằm trong scheduler hoặc có thể là nhiệm vụ của một quy trình khác.

Thông thường, quản lý cụm cũng được liên kết với công cụ discovery service hoặc kho lưu trữ key-value phân tán. Chúng đặc biệt thích hợp để lưu trữ loại thông tin này bởi thông tin sẽ được phân tán trên khắp cụm đó và bởi nền tảng cho chức năng cơ bản của cụm đã tồn tại từ trước .

Vì vậy, nếu bản thân scheduler không cung cấp các method, một số hoạt động quản lý cụm có thể phải được thực hiện bằng cách sửa đổi các giá trị trong kho cấu hình sử dụng các API được cung cấp. Ví dụ, thay đổi phần tử trong cụm có thể cần phải được xử lý thông qua các thay đổi raw trên discovery service.

Kho lưu trữ key-value cũng thường là vị trí mà metadata của các máy chủ riêng lẻ có thể được lưu trữ. Như đã đề cập từ trước, các máy chủ đã được gán nhãn cho phép bạn nhắm mục tiêu riêng lẻ hoặc theo nhóm để ra quyết định lập lịch.

Triển khai Multi-Container phù hợp với lịch trình như thế nào?

Đôi khi, mặc dù mỗi thành phần của một ứng dụng đã được chia nhỏ thành một dịch vụ riêng rẽ, chúng vẫn cần phải được quản lý như một đơn vị duy nhất. Có những thời điểm mà việc triển khai một dịch vụ khi không có dịch vụ còn lại sẽ không có ý nghĩa gì bởi chúng còn liên quan đến những chức năng mà mỗi dịch vụ cung cấp.

Lên lịch nâng cao - có tính đến lập nhóm container- sẽ có sẵn thông qua một vài chương trình khác nhau. Có một vài lợi ích mà người dùng sẽ đạt được từ việc truy cập chức năng này. Quản lý nhóm container cho phép quản trị viên xử lý một tập hợp các container dưới dạng một ứng dụng duy nhất. Chạy các thành phần tích hợp chặt chẽ như một cụm sẽ đơn giản hóa việc quản lý ứng dụng mà không phải bỏ qua những lợi ích của việc phân bổ chức năng riêng lẻ. Thực tế, nó cho phép các quản trị viên đạt được lợi ích từ việc sử dụng container và kiến trúc hướng dịch vụ trong khi giảm thiểu việc tăng chi phí quản lý.

Việc nhóm các ứng dụng lại với nhau có thể có nghĩa là chỉ cần sắp xếp chúng lại với nhau và cung cấp khả năng khởi động và dừng chúng cùng một lúc. Nó cũng có thể cho phép các tình huống phức tạp hơn như cấu hình các subnet riêng biệt cho từng nhóm ứng dụng hoặc mở rộng toàn bộ hệ các container, nơi trước kia ta chỉ có thể mở rộng trên quy mô container mà thôi.

Provisioning là gì?

Một khái niệm liên quan đến quản lý cụm là provisioning. Provisioning là quy trình cung cấp các máy chủ trực tuyến mới và cấu hình cơ bản để chúng sẵn sàng hoạt động. Với việc triển khai Docker, điều này thường có nghĩa là cấu hình Docker và thiết lập máy chủ mới để tham gia một cụm hiện có.

Hệ sinh thái Docker: Lập kế hoạch và điều phối - Ảnh 2.

Hạ tầng cơ sở Provisioning

Mặc dù kết quả cuối cùng của việc cung cấp máy chủ lưu trữ thường chỉ là một hệ thống mới sẵn hoạt động, phương pháp thực hiện cũng thay đổi đáng kể tùy thuộc vào các công cụ được sử dụng và loại máy chủ lưu trữ. Ví dụ, nếu máy chủ host là một máy ảo, các công cụ như vagrant có thể được sử dụng để spin nó lên một máy chủ mới. Hầu hết các nhà cung cấp dịch vụ đám mây cho phép bạn tạo các máy chủ mới bằng cách sử dụng API. 

Ngược lại, việc cung cấp bare hardware có lẽ sẽ yêu cầu một số thao tác thủ công. Các công cụ quản lý cấu hình như Chef, Puppet, Ansible hoặc Salt có thể sẽ tham gia vào việc quản lý cấu hình ban đầu của máy chủ và cung cấp thông tin cần thiết để kết nối với một cụm hiện có.

Provisioning có thể ở dưới dạng quy trình do quản trị viên khởi tạo hoặc có thể được nối vào các công cụ quản lý cụm để tự động mở rộng quy mô. Phương pháp này liên quan đến việc xác định quy trình dành cho yêu cầu các máy chủ bổ sung cũng như các điều kiện mà theo đó quy trình sẽ tự động được kích hoạt. Ví dụ, nếu ứng dụng đang chịu tải nặng, bạn có thể sẽ muốn hệ thống spin lên các máy chủ bổ sung và mở rộng các container trên toàn bộ cơ sở hạ tầng mới để giảm bớt tắc nghẽn.

Một số Schedulers phổ biến

Trong trường hợp lên lịch và quản lý cụm cơ bản, có một số chương trình phổ biến như sau:

  • fleet: fleet là thành phần trong schedule và quản lý cụm của CoreOS. Fleet đọc thông tin kết nối cho mỗi máy chủ lưu trữ trong cụm từ etcd và cung cấp quản lý dịch vụ giống như systemd.
  • marathon: Marathon là thành phần lập kế hoạch và quản lý dịch vụ của cài đặt Mesosphere. Nó hoạt động với các mesos để kiểm soát các dịch vụ dài hạn và cung cấp một web UI để quản lý quy trình và container.
  • Swarm: Swarm của Docker là một trình lập lịch mà chương trình Docker đã ra mắt vào tháng 12 năm 2014, với mong muốn sẽ mang lại một trình lên lịch mạnh mẽ có thể spin lên các container trên các máy chủ được có sẵn Docker, sử dụng cú pháp Docker-native.
  • Là một phần của chiến lược quản lý cụm, cấu hình Mesosphere dựa vào thành phần sau:
  • mesos: Apache mesos là một công cụ phân tách và quản lý tài nguyên của tất cả các máy chủ trong một cụm. Nó cung cấp một tập hợp các tài nguyên có sẵn trong toàn bộ cụm cho các thành phần phía trên (như marathon). Mesos được mô tả tương tự như một "hạt nhân" cho một cấu hình phân cụm.
  • Về lập lịch nâng cao và kiểm soát các nhóm container như một đơn vị duy nhất, ta có sẵn các chương trình sau:
  • kubernetes: Trình lên lịch nâng cao của Google, kubernetes cho phép kiểm soát nhiều hơn đối với các container đang chạy trên cơ sở hạ tầng của bạn. Các container có thể được gán nhãn, nhóm lại và cấp subnet riêng để giao tiếp.
  • Compose: Chương trình soạn thảo của Docker được tạo ra để quản lý nhóm các container bằng cách sử dụng các tệp khai báo. Nó sử dụng liên kết Docker để học hỏi mối quan hệ phụ thuộc giữa các container.
Hệ sinh thái Docker: Lập kế hoạch và điều phối - Ảnh 3.

Cluster management sử dụng một số trình Scheduler

Kết luận

Quản lý cụm và trình lập lịch công việc là một phần quan trọng cốt yếu trong việc triển khai các dịch vụ nằm trong một cụm máy chủ phân tán. Chúng mang đến sự quản lý quan trọng khi khởi động và kiểm soát các dịch vụ đang cung cấp ứng dụng của bạn. Với việc sử dụng các trình lập lịch hiệu quả, bạn có thể thực hiện được những thay đổi mạnh mẽ cho các ứng dụng của mình mà không tốn nhiều công sức, nỗ lực.

Theo www.digitalocean.com

>> Có thể bạn quan tâm: Hệ sinh thái Docker: Các thành phần phổ biến

TAGS: docker
SHARE