Hình 2.2 thể hiện các thành phần cơ bản của một nền tảng điều phối container
như thành phần kiểm tra sức khỏe, tự động scale, thành phần khám phá dịch vụ, bộ lập lịch hay thành phần nâng cấp hệ thống. Nền tảng điều phối container sẽ thực hiện qúa trình khởi tạo, lập lịch, lựa chọn máy cho tới giám sát, cập nhật và đảm bảo giao tiếp
Các nền tảng điều phối container khác nhau thường có nhiều đặc điểm khác
nhau, nhưng tất cả những nền tảng này đều phải đảm bảo cung cấp được các tính năng cơ bản như:
• Cách thức cấu hình đơn giản: Những nền tảng điều phối container thường cho
phép người dùng khai báo các thông tin về cấu hình ứng dụng, kho ảnh, cấu
hình về mạng và các cổng được mở trên máy, thông tin về bộ lưu trữ ... một
cách đơn giản, trực quan thông qua các định dạng JSON hoặc YAML.
• Có các API để bật tắt container: Nền tảng điều phối container sẽ có API cho
phép việc cung ứng hay xếp lịch để bật container. Dựa vào các ràng buộc về tài nguyên, về mối tương quan của container cần bật với các container đang chạy
khác mà các nền tảng điều phối sẽ chọn máy phù hợp để triển khai.
• Có cơ chế khám phá dịch vụ: Khi triển khai một hệ thống gồm rất nhiều dịch
vụ, các dịch vụ được đóng gói theo dạng ảnh container và chạy trên nhiều máy khác nhau thì việc một container có thể nhận biết các thông tin về container khác sẽ trở nên khó khăn và đây là một trong những việc quan trọng hàng đầu trong qúa trình quản lý toàn bộ cluster. Các nền tảng điều phối container đều
cung cấp giải pháp để giải quyết vấn đề này cho người dùng, chẳng hạn thông
qua các dịch vụ dạng DNS, dịch vụ proxy, ...
• Cơ chế giám sát và sửa lỗi: Nền tảng điều phối container có trách nhiệm theo
dõi, giám sát container cũng như các máy mà chúng đang chạy. Nếu container bị lỗi, việc bật một container mới để thay thế được thực hiện gần như ngay lập tức. Nếu một máy trong cluster bị lỗi, các container đang chạy trên máy đấy sẽ
được phân phối để bật lại trên những máy cịn lại. Thường thì người sử dụng sẽ
miêu tả trạng thái container mong muốn thông qua file cấu hình (phổ biến nhất là dạng JSON hoặc YAML) cịn nền tảng điều phối sẽ giám sát để ln đảm
bảo điều này.
Để đảm bảo xây dựng được hệ thống triển khai liên tục cho các phần mềm dựa
trên vi dịch vụ, yêu cầu đầu tiên chính là việc lựa chọn nền tảng điều phối container
thỏa mãn những tính chất đã nêu trên, phù hợp với cơ sở hạ tầng mà tổ chức đang sử
dụng, có nhiều cơng cụ hỗ trợ cũng như có khả năng mở rộng tốt trong tương lai.
2.2 Yêu cầu cho các nhà phát triển
2.2.1 Khả năng tự triển khai
Ngoài việc tự động triển khai khi có sự thay đổi mã nguồn trên kho mã chung, hệ thống triển khai liên tục cũng cần có cơ chế để cho phép các đội phát triển, kiểm thử tự triển khai ứng dụng lên các môi trường, phục vụ mục đích kiểm tra tính năng hoặc
kiểm thử, tái hiện lỗi. Hệ thống phân quyền cần được cấu hình để đảm bảo quyền hạn khác nhau tùy theo vai trò của các đội.
2.2.2 Nhận được các thông tin về kết quả build
Quá trình triển khai liên tục thường gồm hai giai đoạn: dịch và triển khai. Dịch là quá trình biên dịch từ mã nguồn để đưa ra được một phiên bản chạy của ứng dụng, còn triển khai sẽ sử dụng sản phầm của quá trình dịch để cập nhật lên môi trường. Trách
nhiệm của các đội phát triển là phải đảm bảo build thành công đối với bất cứ sự thay
đổi mã nào. Tuy nhiên, quá trình dịch thường mất thời gian và các lập trình viên
thường bận rộn với việc phát triển tính năng mới cho sản phẩm, do vậy cần có cơ chế
để thơng báo trạng thái của các tác vụ dịch cho các đội thông qua các kênh giao tiếp
của công ty như email, phần mềm chat, ...
2.3 Yêu cầu về vận hành
2.3.1 Quản lý cấu hình
Cơ sở hạ tầng được quản lý như mã (Infrastructure as code - IAC) là cách tiếp
cận việc tự động hóa quản lý cơ sở hạ tầng dựa trên những kinh nghiệm từ quá trình
phát triển phần mềm [12]. IAC nhấn mạnh vào tính nhất quán, lặp đi lặp lại đối với
việc cung ứng và thay đổi các hệ thống cũng như cấu hình của chúng. Ý tưởng của
IAC là người dùng sẽ viết và thực thi mã để định nghĩa, triển khai và cập nhật cơ sở hạ tầng. IAC thay đổi nhận thức của mọi người trong việc đối xử các hoạt động vận hành như là phần mềm, dù một số hoạt động thực tế liên quan tới phần cứng (ví dụ: cài đặt máy chủ triển khai).
Bằng việc ứng dụng IAC, không chỉ người quản trị, bất cứ ai cũng có thể đọc và hiểu về tồn bộ cấu hình hệ thống, có khả năng đảo ngược cấu hình về phiên bản chạy tốt bằng việc sử dụng hệ thống quản lí phiên bản. IAC cũng cho phép đánh giá, kiểm thử trước khi thực sự triển khai sự thay đổi về cơ sở hạ tầng.
Hệ thống quản lý cấu hình là một dạng cơng cụ IAC. Các hệ thống công nghệ thông tin thường xuyên thay đổi. Với mỗi bản phát hành, để hệ thống hoạt động được, người vận hành có thể cần thay đổi một số cấu hình nhất định. Trong hệ thống triển
khai liên tục, tần suất triển khai cao có thể khiến cấu hình của cơ sở hạ tầng ngày một khác biệt so với trạng thái ban đầu, trở nên khó quản lý và lộn xộn. Nhằm tránh tình trạng khơng nhất qn này, cần có một hệ thống quản lý cấu hình phù hợp.
2.3.2 Thu thập và lưu trữ log
Thu thập và lưu trữ log là yêu cầu cơ bản đối với bất cứ hệ thống phần mềm thực tế nào [13].
Trong một hệ thống vi dịch vụ dựa vào container, các container sẽ được triển
khai trong một cluster gồm nhiều máy. Với mỗi máy, ngồi các container cịn có những dịch vụ khác đang chạy. Các ứng dụng sẽ sản sinh ra các tệp log với định dạng, vị trí khác nhau, khiến cho việc quản lý và sử dụng log trở nên khó khăn [14] (Hình 2.3).