Chủ Nhật, 01/02/2015 | 00:00 GMT+7

Hệ sinh thái Docker: Giới thiệu về các thành phần chung

Containerization là quá trình phân phối và triển khai các ứng dụng theo cách di động và có thể dự đoán được. Nó thực hiện điều này bằng cách đóng gói các thành phần và phụ thuộc của chúng vào các môi trường quy trình nhẹ được tiêu chuẩn hóa, cô lập, được gọi là container . Nhiều tổ chức hiện đang quan tâm đến việc thiết kế các ứng dụng và dịch vụ có thể dễ dàng triển khai cho các hệ thống phân tán, cho phép hệ thống mở rộng quy mô dễ dàng và tồn tại các lỗi máy và ứng dụng. Docker, một nền tảng container hóa được phát triển để đơn giản hóa và tiêu chuẩn hóa việc triển khai trong các môi trường khác nhau, phần lớn là công cụ thúc đẩy việc áp dụng phong cách thiết kế và quản lý dịch vụ này. Một lượng lớn phần mềm đã được tạo ra để xây dựng dựa trên hệ sinh thái quản lý containers phân tán này.

Docker và Containerization

Docker là phần mềm chứa phổ biến nhất được sử dụng ngày nay. Trong khi các hệ thống chứa khác tồn tại, Docker làm cho việc tạo và quản lý containers trở nên đơn giản và tích hợp với nhiều dự án open-souce .

Docker container

Trong hình ảnh này, bạn có thể bắt đầu thấy (trong một chế độ xem đơn giản) cách các containers liên quan đến hệ thống server . Vùng chứa cô lập các ứng dụng riêng lẻ và sử dụng tài nguyên hệ điều hành đã được Docker tóm tắt. Trong khung nhìn bùng nổ ở bên phải, ta có thể thấy rằng các containers có thể được xây dựng bằng cách "phân lớp", với nhiều containers chia sẻ các lớp bên dưới, giảm việc sử dụng tài nguyên.

Ưu điểm chính của Docker là:

  • Sử dụng tài nguyên nhẹ : thay vì ảo hóa toàn bộ hệ điều hành, các containers sẽ cô lập ở cấp tiến trình và sử dụng nhân của server .
  • Khả năng di chuyển : tất cả các phụ thuộc cho một ứng dụng được chứa trong containers , cho phép nó chạy trên bất kỳ server Docker nào.
  • Khả năng dự đoán : Server lưu trữ không quan tâm đến những gì đang chạy bên trong containers và containers không quan tâm đến server đó đang chạy trên server nào. Các giao diện được tiêu chuẩn hóa và các tương tác có thể dự đoán được.

Thông thường, khi thiết kế một ứng dụng hoặc dịch vụ để sử dụng Docker, cách tốt nhất là chia chức năng thành các containers riêng lẻ, một quyết định thiết kế được gọi là kiến trúc hướng dịch vụ. Điều này mang lại cho bạn khả năng dễ dàng mở rộng quy mô hoặc cập nhật các thành phần một cách độc lập trong tương lai. Có được tính linh hoạt này là một trong nhiều lý do mà mọi người quan tâm đến Docker để phát triển và triển khai.

Để tìm hiểu thêm về cách chứa các ứng dụng bằng Docker, hãy nhấp vào đây .

Cửa hàng cấu hình global và khám phá dịch vụ

Khám phá dịch vụ là một thành phần của chiến lược tổng thể nhằm làm cho việc triển khai containers có thể mở rộng và linh hoạt. Khám phá dịch vụ được sử dụng để các containers có thể tìm hiểu về môi trường mà chúng đã được đưa vào mà không cần sự can thiệp của administrator . Họ có thể tìm thông tin kết nối cho các thành phần mà họ phải tương tác và họ có thể tự đăng ký để các công cụ khác biết rằng chúng có sẵn. Các công cụ này cũng thường hoạt động như các repository cấu hình được phân phối global , nơi có thể đặt các cài đặt cấu hình tùy ý cho các dịch vụ hoạt động trong cơ sở hạ tầng của bạn.

Khám phá dịch vụ Docker

Trong hình trên, bạn có thể thấy một stream ví dụ trong đó một ứng dụng đăng ký thông tin kết nối của nó với hệ thống dịch vụ khám phá. Sau khi đăng ký, các ứng dụng khác có thể truy vấn dịch vụ khám phá để tìm cách kết nối với ứng dụng.

Các công cụ này thường được triển khai dưới dạng các repository key-value đơn giản được phân phối giữa các server trong một môi trường group . Nói chung, các cửa hàng key-value cung cấp một API HTTP để truy cập và đặt giá trị. Một số bao gồm các biện pháp bảo mật bổ sung như mục nhập được mã hóa hoặc cơ chế kiểm soát truy cập. Các cửa hàng được phân phối rất cần thiết để quản lý các server Docker theo cụm ngoài chức năng chính của chúng là cung cấp thông tin chi tiết tự cấu hình cho các containers mới.

Một số trách nhiệm của cửa hàng khám phá dịch vụ là:

  • Cho phép các ứng dụng lấy dữ liệu cần thiết để kết nối với các dịch vụ mà chúng phụ thuộc vào.
  • Cho phép các dịch vụ đăng ký thông tin kết nối của họ cho mục đích trên.
  • Cung cấp vị trí có thể truy cập global để lưu trữ dữ liệu cấu hình tùy ý.
  • Lưu trữ thông tin về các thành viên trong cụm khi cần bằng bất kỳ phần mềm quản lý cụm nào.

Một số công cụ khám phá dịch vụ phổ biến và các dự án liên quan là:

  • etcd : khám phá dịch vụ / kho key-value được phân phối global
  • consul : khám phá dịch vụ / kho key-value được phân phối global
  • Zookeeper : khám phá dịch vụ / kho key-value được phân phối global
  • crypt : dự án mã hóa các mục nhập etcd
  • confd : xem kho key-value để biết các thay đổi và kích hoạt cấu hình lại dịch vụ với các giá trị mới

Để tìm hiểu thêm về khám phá dịch vụ với Docker, hãy truy cập hướng dẫn của ta tại đây .

Công cụ mạng

Các ứng dụng được chứa trong container tự cho mình một thiết kế hướng tới dịch vụ khuyến khích chia nhỏ chức năng thành các thành phần rời rạc. Mặc dù điều này làm cho việc quản lý và mở rộng quy mô dễ dàng hơn, nó đòi hỏi sự đảm bảo hơn nữa về chức năng và độ tin cậy của mạng giữa các thành phần. Docker tự cung cấp các cấu trúc mạng cơ bản cần thiết cho giao tiếp từ container đến container và container-to-host.

Khả năng kết nối mạng riêng của Docker cung cấp hai cơ chế để kết nối các containers với nhau. Đầu tiên là hiển thị các cổng của containers và tùy chọn ánh xạ tới hệ thống server để định tuyến bên ngoài. Bạn có thể chọn cổng server để ánh xạ tới hoặc cho phép Docker chọn ngẫu nhiên một cổng cao, không sử dụng. Đây là một cách chung để cung cấp quyền truy cập vào containers hoạt động tốt cho hầu hết các mục đích.

Phương pháp khác là cho phép các containers giao tiếp bằng cách sử dụng "liên kết" Docker. Một containers được liên kết sẽ nhận được thông tin kết nối về đối tác của nó, cho phép nó tự động kết nối nếu nó được cấu hình chú ý đến các biến đó. Điều này cho phép liên hệ giữa các containers trên cùng một server lưu trữ mà không cần phải biết trước cổng hoặc địa chỉ nơi dịch vụ sẽ được đặt.

Cấp độ mạng cơ bản này phù hợp với môi trường server đơn hoặc được quản lý chặt chẽ. Tuy nhiên, hệ sinh thái Docker đã tạo ra một loạt các dự án tập trung vào việc mở rộng chức năng mạng có sẵn cho các nhà khai thác và nhà phát triển. Một số khả năng kết nối mạng bổ sung có sẵn thông qua các công cụ bổ sung bao gồm:

  • Kết nối mạng chồng lên nhau để đơn giản hóa và thống nhất không gian địa chỉ trên nhiều server .
  • Mạng riêng ảo được điều chỉnh để cung cấp giao tiếp an toàn giữa các thành phần khác nhau.
  • Chỉ định mạng con cho mỗi server lưu trữ hoặc mỗi ứng dụng
  • Cài đặt giao diện macvlan để giao tiếp
  • Cấu hình địa chỉ MAC tùy chỉnh, cổng, v.v. cho containers của bạn

Một số dự án liên quan đến việc cải thiện mạng Docker là:

  • flannel : Mạng lớp phủ cung cấp cho mỗi server một mạng con riêng biệt.
  • weave : Mạng lớp phủ mô tả tất cả các containers trên một mạng duy nhất.
  • pipework : Bộ công cụ mạng nâng cao dành cho các cấu hình mạng nâng cao tùy ý.

Để có cái nhìn sâu hơn về các cách tiếp cận khác nhau để kết nối mạng với Docker, hãy nhấp vào đây .

Lập lịch, Quản lý cụm và Điều phối

Một thành phần khác cần thiết khi xây dựng môi trường containers được phân cụm là bộ lập lịch. Bộ lập lịch có trách nhiệm khởi động containers trên các server có sẵn.

Lên lịch đăng ký

Hình ảnh trên minh họa một quyết định lập lịch đơn giản. Yêu cầu được đưa ra thông qua API hoặc công cụ quản lý. Từ đây, bộ lập lịch đánh giá các điều kiện của yêu cầu và trạng thái của các server khả dụng. Trong ví dụ này, nó lấy thông tin về mật độ containers từ dịch vụ khám phá / lưu trữ dữ liệu phân tán (như đã thảo luận ở trên) để có thể đặt ứng dụng mới trên server ít bận nhất.

Quá trình lựa chọn server lưu trữ này là một trong những trách nhiệm cốt lõi của người lập lịch. Thông thường, nó có các chức năng tự động hóa quá trình này với administrator có tùy chọn để chỉ định các ràng buộc nhất định. Một số hạn chế có thể là:

  • Lập lịch cho containers trên cùng một server lưu trữ như một containers đã cho khác.
  • Đảm bảo rằng containers không được đặt trên cùng một server với một containers nhất định khác.
  • Đặt containers trên server có nhãn hoặc metadata phù hợp.
  • Đặt containers trên server ít bận nhất.
  • Chạy containers trên mọi server trong cụm.

Bộ lập lịch chịu trách nhiệm tải các container lên các server có liên quan và bắt đầu, dừng và quản lý vòng đời của quy trình.

Vì bộ lập lịch phải tương tác với từng server trong group , các chức năng quản lý cụm cũng thường được bao gồm. Những điều này cho phép người lập lịch trình lấy thông tin về các thành viên và thực hiện các nhiệm vụ quản trị. Điều phối trong ngữ cảnh này thường đề cập đến sự kết hợp giữa lập lịch containers và quản lý server .

Một số dự án phổ biến có chức năng như bộ lập lịch và công cụ quản lý đội xe là:

  • fleet: công cụ lập lịch và quản lý cụm.
  • marathon : công cụ lập lịch và quản lý dịch vụ.
  • Swarm : công cụ lập lịch và quản lý dịch vụ.
  • mesos : dịch vụ trừu tượng server lưu trữ hợp nhất tài nguyên server lưu trữ cho bộ lập lịch.
  • kubernetes : bộ lập lịch nâng cao có khả năng quản lý các group containers .
  • compose : công cụ điều phối containers để tạo group containers .

Để tìm hiểu thêm về phần mềm lập lịch, group containers và quản lý cụm cơ bản cho Docker, hãy nhấp vào đây .

Kết luận

Đến đây, bạn đã quen với chức năng chung của hầu hết các phần mềm liên quan đến hệ sinh thái Docker. Bản thân Docker, cùng với tất cả các dự án hỗ trợ, cung cấp chiến lược quản lý, thiết kế và triển khai phần mềm cho phép khả năng mở rộng lớn. Bằng cách hiểu và tận dụng khả năng của các dự án khác nhau, bạn có thể thực hiện các triển khai ứng dụng phức tạp đủ linh hoạt để giải quyết các yêu cầu vận hành khác nhau.


Tags:

Các tin liên quan

Hệ sinh thái Docker: Tổng quan về Containerization
2015-02-01
Hệ sinh thái Docker: Lập lịch và Điều phối
2015-02-01
Hệ sinh thái Docker: Khám phá dịch vụ và Cửa hàng cấu hình phân tán
2015-02-01
Hệ sinh thái Docker: Mạng và Truyền thông
2015-02-01
Cách thiết lập registry Docker riêng trên Ubuntu 14.04
2014-10-15
Cách thực hiện kiểm tra tích hợp liên tục với Drone.io trên CoreOS và Docker
2014-10-08