Hệ sinh thái Docker: Các thành phần phổ biến
Giới thiệu
Containerization là quá trình phân phối và triển khai ứng dụng theo cách di động và có thể dự đoán được. Nó thực hiện bằng cách đóng gói các thành phần và các phụ thuộc vào môi trường quy trình được tiêu chuẩn hóa, được cô lập, nhẹ, được gọi là các containers. Nhiều doanh nghiệp 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 được triển khai cho các hệ thống phân tán, cho phép hệ thống mở rộng dễ dàng và tồn tại các lỗi máy hoặc lỗi ứng dụng. Cùng Bizfly Cloud tìm hiểu Docker và các thành phần qua bài viết này nhé!
Docker và Containerization
Docker là phần mềm container phổ biến nhất hiện nay. So với rất nhiều các hệ thống container khác thì Docker giúp cho việc tạo và quản lý containers trở nên đơn giản và nó còn tích hợp với khá nhiều dự án mã nguồn mở.
Có thể bạn quan tâm: Docker là gì? Những khái niệm cơ bản cần biết về Docker
Trong hình ảnh này, bạn sẽ thấy cách các container liên quan thế nào đến hệ thống server. Containers cách ly các ứng dụng riêng lẻ và sử dụng tài nguyên hệ điều hành đã được Docker cô lập. Trong hình ở bên phải, chúng ta có thể thấy rằng các container có thể được tạo bằng cách "layering", với nhiều container chia sẻ các lớp bên dưới, giảm mức sử dụng tài nguyên.
Các ưu điểm chính của Docker là:
- Light Weight
Thay vì ảo hóa toàn bộ hệ điều hành, container được cô lập ở cấp độ quy trình và sử dụng kernel của máy chủ.
- Mobility
Tất cả các phụ thuộc cho một ứng dụng được đóng gói bên trong container, cho phép nó chạy trên bất kỳ Docker host nào.
- Predictable
Host không quan tâm đến những gì đang chạy bên trong container và container không quan tâm đến host nào đang hoạt động. Các interfaces được chuẩn hóa và 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, tối ưu nhất là chia chức năng vào các container riêng lẻ, hay còn được gọi là SOA. Điều này giúp dễ dàng mở rộng hoặc cập nhật các thành phần độc lập trong tương lai. Sự linh hoạt này là một trong nhiều lý do khiến mọi người quan tâm đến việc phát triển và triển khai bằng Docker.
Service Discovery và Global Configuration Stores
Service discovery là thành phần của một chiến lược tổng thể nhằm giúp triển khai container có thể mở rộng và trở nên linh hoạt. Service discovery được sử dụng để các container có thể tìm hiểu về môi trường mà chúng đã được giới thiệu mà không cần sự can thiệp của quản trị viên. Chúng có thể tìm thấy thông tin kết nối của các thành phần mà chúng phải tương tác, đồng thời chúng có thể tự đăng ký để các công cụ khác biết rằng mình đang sẵn có. Các công cụ này cũng thường hoạt động như các globally distributed configuration stores, nơi các thiết lập cấu hình bất kỳ có thể được thiết lập cho các dịch vụ hoạt động trong cơ sở hạ tầng.
Hình trên là luồng 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 discovery service. Sau khi đăng ký, các ứng dụng khác có thể truy vấn discovery service để tìm hiểu cách kết nối với ứng dụng.
Các công cụ này thường được thực thi như các key-value stores đơn giản được phân phối giữa các máy chủ trong một môi trường nhóm. Nói chung, các key-value stores cung cấp một API HTTP để truy cập và thiết lập các giá trị. Một số store bao gồm các biện pháp bảo mật bổ sung như encrypted entry hoặc cơ chế kiểm soát truy cập. Ngoài chức năng chính là cung cấp các chi tiết tự cấu hình cho các container mới thì Các distributed store còn đóng vai trò quan trọng trong việc quản lý các clustered Docker host.
Vai trò của các service discovery stores là:
- Cho phép ứ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.
- Cho phép các dịch vụ đăng ký thông tin kết nối của chúng cho mục đích trên.
- Cung cấp vị trí có thể truy cập toàn cầu để lưu trữ dữ liệu arbitrary configuration.
- Lưu trữ thông tin về các cluster members của bất kỳ phần mềm quản lý cluster nào khi cần thiết.
Một vài công cụ service discovery phổ biến và các dự án liên quan:
- etcd: service discovery/ globally distributed key-value store
- consul: service discovery/ globally distributed key-value store
- zookeeper: service discovery/ globally distributed key-value store
- crypt: project to encrypt etcd entries
- confd: watches key-value store để thay đổi và kích hoạt reconfiguration của dịch vụ với các giá trị mới.
Networking Tools
Các containerized applications theo hướng SOA, khuyến khích phá vỡ chức năng thành các thành phần rời rạc. Điều này giúp việc quản lý và mở rộng quy mô trở nên dễ dàng hơn, nhưng đồng thời nó cũng đòi hỏi sự đảm bảo nhiều hơn về chức năng và độ tin cậy của mạng giữa các thành phần. Docker chính nó có khả năng cung cấp các cấu trúc mạng cơ bản cần thiết cho việc giao tiếp container-to-container và container-to-host communication.
Native networking capabilities của Docker cung cấp hai cơ chế để gắn các container lại với nhau. Đầu tiên là để lộ các port của một container và tùy chọn ánh xạ tới hệ thống máy chủ để định tuyến bên ngoài. Bạn có thể chọn host port để ánh xạ tới hoặc cho phép Docker chọn ngẫu nhiên một port. Đây là cách chung để cung cấp quyền truy cập vào container.
Một phương pháp khác là cho phép các container giao tiếp bằng cách sử dụng "links" Docker. Một container được liên kết sẽ nhận được thông tin kết nối về bản sao của nó, cho phép tự động kết nối nếu nó được cấu hình để liên quan đến các biến đó. Điều này cho phép liên hệ giữa các container trên cùng một server 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 độ networking cơ bản này phù hợp với môi trường single-host 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 kết nối mạng có sẵn cho các operators and developers.
Một số tính năng có sẵn của các công cụ bổ sung là:
- Overlay networking để đơn giản hóa và thống nhất không gian địa chỉ trên nhiều hosts.
- Virtual private networks cung cấp giao tiếp an toàn giữa các thành phần khác nhau.
- Chỉ định per-host hoặc per-application subnetting.
- Thiết lập macvlan interface cho giao tiếp.
- Cấu hình địa chỉ MAC tùy chỉnh, gateway,... cho các containers của bạn.
Một số dự án có liên quan đến phát triển Docker networking là:
- flannel: Overlay network cung cấp cho mỗi máy chủ với một subnet riêng biệt.
- weave: Overlay network mô tả tất cả các containers trên một single network.
- pipework: Bộ công cụ mạng nâng cao cho các arbitrarily advanced networking configuration.
Lập kế hoạch, quản lý cluster management, và phối hợp
Một thành phần khác cũng rất cần thiết khi xây dựng môi trường clustered container là một scheduler. Schedulers chịu trách nhiệm khởi động container trên các host có sẵn.
Hình ảnh trên minh họa một scheduling decision đơn giản. Yêu cầu được đưa ra thông qua API hoặc công cụ quản lý. Từ đây, scheduler đánh giá các điều kiện của yêu cầu và trạng thái của các máy chủ có sẵn. Trong ví dụ này, nó lấy thông tin về mật độ vùng chứa từ một data store/ discovery service phân tán để có thể đặt ứng dụng mới trên máy chủ lưu trữ ít bận rộn nhất.
Quy trình chọn máy chủ này là một trong những trách nhiệm cốt lõi của scheduler. Thông thường, nó có các chức năng tự động hóa quy trình này với administrator, administrator này thường sở hữu các tùy chọn để chỉ định một số ràng buộc nhất định. Một số ràng buộc này có thể là:
- Lên kế hoạch container trên cùng một máy chủ như container khác.
- Đảm bảo các container không được đặt trên cùng một máy với một container nhất định.
- Đặt container lên máy chủ có label phù hợp hoặc metadata.
- Đặt container trên máy chủ lưu trữ ít bận rộn nhất.
Scheduler chịu trách nhiệm tải container lên các máy chủ có liên quan kiêm việc khởi động, dừng lại và quản lý vòng đời của quy trình.
Vì scheduler phải tương tác với mỗi máy chủ trong nhóm, nên các chức năng quản lý cụm cũng thường được bao gồm cả trong đó. Điều này cho phép scheduler nhận thông tin về các thành viên và thực hiện các nhiệm vụ quản trị. Việc phối hợp trong bối cảnh này thường đề cập đến sự kết hợp giữa container scheduling và quản lý máy chủ.
Một số project phổ biến có chức năng như scheduler và quản lý nhóm là:
- fleet: scheduler và công cụ quản lý cluster.
- marathon: scheduler và công cụ quản lý dịch vụ.
- Swarm: scheduler và công cụ quản lý dịch vụ.
- mesos: host abstraction service hợp nhất tài nguyên máy chủ cho scheduler.
- kubernetes: Scheduler nâng cao có khả năng quản lý các nhóm container.
- compose: công cụ kết hợp container để tạo container group.
Kết luận
Giờ đây, bạn nên tập làm quen với các 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. Docker cùng với tất cả các project bổ trợ, cung cấp chiến lược về quản lý, thiết kế và thực thi phần mềm, cho phép khả năng mở rộng linh hoạt dễ dàng. Bằng cách hiểu và tận dụng các khả năng của các project khác nhau, bạn có thể thực hiện các triển khai ứng dụng phức tạp, các ứng dụng này đủ linh hoạt để giải thích các yêu cầu hoạt động thay đổi.
Theo Bizfly Cloud chia sẻ
>> Có thể bạn quan tâm: Hệ sinh thái Docker: Tổng quan về Container