[ad_1]
Kubernetes thường được tiếp cận từ quan điểm của các hệ thống không trạng thái. Một ứng dụng không trạng thái rất dễ chứa, phân phối và mở rộng quy mô vì nó không cần lưu trữ bất kỳ dữ liệu nào bên ngoài môi trường của nó. Không quan trọng nếu vùng chứa bị dừng hoặc chuyển sang một máy chủ khác – các phiên bản mới có thể thay thế các phiên bản cũ hơn mà không có bất kỳ ảnh hưởng nào.
Hầu hết các ứng dụng thực tế không giống như vậy. Tất cả trừ các hệ thống đơn giản nhất đều có trạng thái thường được lưu trữ trong cơ sở dữ liệu hoặc hệ thống tệp liên tục. Dữ liệu định cấu hình dịch vụ của bạn hoặc do người dùng tạo phải được giữ lại và có thể truy cập vào tất cả các vùng chứa của bạn, bất kể chúng nằm ở đâu.
Hầu hết các tổ chức sử dụng vùng chứa, điều phối và phương thức làm việc riêng trên đám mây đều gặp phải thách thức trong việc duy trì trạng thái trên các môi trường tạm thời. Kubernetes có thể đáp ứng các khối lượng công việc trạng thái nhưng các giải pháp thay thế bên ngoài cũng tồn tại. Trong bài viết này, bạn sẽ tìm hiểu một số phương pháp giúp Kubernetes hoạt động với các ứng dụng trạng thái.
Các vấn đề với trạng thái
Thuật ngữ “trạng thái” mô tả dữ liệu được liên kết với một ứng dụng tại một thời điểm cụ thể. Đó là thông tin tồn tại lâu dài như nội dung cơ sở dữ liệu và tài khoản người dùng sẽ cần được truy xuất trong suốt vòng đời của hệ thống. Trạng thái liên tục thay đổi khi dữ liệu được tạo và sửa đổi trong khi dịch vụ của bạn đang được sử dụng.
Ứng dụng hoạt động chính xác phụ thuộc vào từng trường hợp có thể truy cập trạng thái liên tục. Nếu bạn phân phối bốn bản sao của một thành phần trên hai máy chủ vật lý, thì cả hai máy đó sẽ cần quyền truy cập vào kho dữ liệu của bạn. Điều này có nghĩa là các phiên bản ứng dụng có các phụ thuộc liên kết với nhau không thể tự động thay thế.
Các ràng buộc xung quanh các dịch vụ trạng thái xung đột với mô hình Kubernetes về các vùng chứa tạm thời có thể được thay thế bất kỳ lúc nào. Khi bạn đang làm việc với một ứng dụng trạng thái, bạn cần cung cấp điều khoản đặc biệt để các vùng chứa có thể truy cập một cách đáng tin cậy vào trạng thái mà chúng cần. Điều này yêu cầu cấu hình bổ sung để cung cấp độ bền dữ liệu đáng tin cậy, duy trì ổn định khi ứng dụng của bạn mở rộng.
Chạy các dịch vụ hợp lệ trong Kubernetes
Sự hỗ trợ của Kubernetes dành cho các hệ thống nhà nước đã phát triển trong vài năm qua, được hỗ trợ bởi sự gia tăng mối quan tâm của cộng đồng. Các ứng dụng trạng thái có thể được tập hợp từ các tài nguyên được hỗ trợ chính thức như bộ trạng thái và khối lượng liên tục. Những phương pháp này cung cấp các phương pháp tích hợp để lưu trữ và quản lý dữ liệu của bạn.
Ổ cứng liên tục cung cấp khả năng lưu trữ dữ liệu cho Nhóm của bạn. Các tệp được ghi vào một ổ đĩa liên tục được lưu trữ độc lập với Pod tạo ra chúng. Nội dung của tập vẫn tồn tại trong cụm của bạn sau khi các Nhóm bị phá hủy, cho phép các bộ thay thế của chúng truy cập vào trạng thái được lưu trữ.
StatefulSets là các đối tượng API đại diện cho các ứng dụng trạng thái. Chúng hoạt động tương tự như Triển khai nhưng chỉ định một mã định danh duy nhất cho mỗi Pod mà chúng đóng gói. Các nhóm giữ lại mã nhận dạng của chúng ngay cả khi chúng được khởi động lại hoặc được lên lịch trên một Node khác. Điều này cho phép bạn thực hiện các thủ tục mà việc đặt hàng và nhận dạng Pod là quan trọng. Các số nhận dạng đáng tin cậy cho phép bạn so sánh các khối lượng với Pod sau một sự kiện lên lịch và triển khai các bản cập nhật ứng dụng theo trình tự một cách duyên dáng.
Các tính năng này có nghĩa là bây giờ bạn có thể chạy các ứng dụng trạng thái bên trong cụm Kubernetes của mình. Bạn có thể ghi dữ liệu vào các ổ liên tục và sử dụng StatefulSets thay vì Deployments khi Nhóm cần nhớ danh tính của họ.
Quản lý trạng thái bên ngoài Kubernetes
Một lộ trình phổ biến để chạy các dịch vụ trạng thái ở Kubernetes là xác định vị trí của tiểu bang ngoài cụm của bạn. Bạn kiến trúc hệ thống của mình để các thành phần của nó được tách rời khỏi bộ nhớ mà chúng yêu cầu. Họ có thể truy cập dữ liệu liên tục trong các dịch vụ riêng biệt qua mạng.
Bạn có thể duy trì máy chủ cơ sở dữ liệu của riêng mình, kết nối với mạng chia sẻ tệp hiện có hoặc sử dụng dịch vụ được quản lý hoàn toàn từ nhà cung cấp đám mây của bạn. Các ứng dụng trong cụm Kubernetes của bạn phải được định cấu hình để tương tác với hệ thống lưu trữ của bạn bằng cách sử dụng API hoặc giao thức truy cập trực tiếp của chúng.
Đây là một cách tốt để thúc đẩy phân tách trong các dịch vụ của bạn. Loại bỏ quyền truy cập hệ thống tệp liên tục khỏi các ứng dụng được chứa trong vùng chứa của bạn làm cho chúng dễ di động hơn trên các môi trường. Các vùng chứa có thể được khởi chạy bằng cách sử dụng các mô hình triển khai không trạng thái vì sự phụ thuộc vào bộ nhớ của chúng được giảm xuống các cuộc gọi mạng cơ bản. Bạn có thể hưởng lợi từ tính linh hoạt của Kubernetes mà không phải chịu chi phí phức tạp của việc sử dụng khối lượng liên tục và bộ trạng thái để lưu trữ trạng thái trong cụm của bạn.
Tránh Kubernetes cho các Dịch vụ Tiểu bang
Trường phái tư tưởng thứ ba là tránh hoàn toàn Kubernetes đối với các dịch vụ nhà nước. Đây thường là một phản ứng quá mức – nếu bạn không cảm thấy thoải mái khi duy trì trạng thái trong cụm của mình, bạn vẫn có thể sử dụng phương pháp được nêu ở trên để triển khai các ứng dụng của mình bằng cách sử dụng nhà cung cấp bộ nhớ liền kề.
Tuy nhiên, vẫn có một số hệ thống có thể không hợp lý trong Kubernetes. Các kiến trúc cực kỳ phụ thuộc vào hệ thống tệp hoạt động với số lượng lớn tệp có thể là một thách thức để triển khai và mở rộng quy mô bằng cách sử dụng khối lượng liên tục. Hệ thống lưu trữ bên ngoài được quản lý cùng với Kubernetes có thể thêm độ trễ không thể chấp nhận được khi các tương tác tệp là chức năng cốt lõi của dịch vụ của bạn.
Trong những trường hợp này, bạn có thể phải tiếp cận với các phương pháp triển khai thay thế cho phép bạn kiểm soát nhiều hơn việc lưu trữ dữ liệu và các hoạt động I / O. Tuy nhiên, công việc đang được tiến hành trong hệ sinh thái để nâng cao các tùy chọn lưu trữ cho các hệ thống chứa trong container. Các giải pháp lưu trữ gốc đám mây đang nổi lên dưới dạng các khái niệm trừu tượng cấp cao hơn như khối lượng liên tục và bộ trạng thái, triển khai các hệ thống tệp phân tán vẫn hoạt động hiệu quả khi được sử dụng trên nhiều nút. Ceph, Minio và Portworx là một số đối thủ trong lĩnh vực này.
Bạn có nên chạy ứng dụng trạng thái trong Kubernetes không?
Hầu hết các ứng dụng trạng thái có thể được triển khai mà không gặp vấn đề gì khi sử dụng Kubernetes. Quyết định chính là bạn có giữ dữ liệu liên tục bên trong cụm của mình hay không, bằng cách sử dụng khối lượng ổn định và bộ trạng thái hoặc giao diện với kho dữ liệu được quản lý bên ngoài.
Khối lượng liên tục hoạt động cho hầu hết các trường hợp sử dụng nhưng chúng có một số hạn chế. Không phải tất cả các chế độ truy cập khối lượng đều được hỗ trợ bởi mọi triển khai, vì vậy điều quan trọng là phải kiểm tra các tính năng mà bản phân phối Kubernetes của bạn hỗ trợ.
Tương đối ít trình điều khiển cung cấp ReadWriteMany
chế độ cho phép khối lượng được liên kết với một số nút đồng thời, với mỗi nút có thể đọc và ghi dữ liệu. Các ReadWriteOnce
chế độ được hỗ trợ rộng rãi nhất, cho phép mỗi Node đọc dữ liệu nhưng chỉ một trong số chúng được ghi. Những ràng buộc này có thể ảnh hưởng đến việc lập lịch ứng dụng của bạn – một hệ thống có một số Pod cần ghi vào một cá thể cơ sở dữ liệu dùng chung sẽ cần chạy tất cả chúng trên một Node duy nhất, trừ khi ReadWriteMany
có sẵn. Điều này hạn chế khả năng mở rộng quy mô dịch vụ của bạn.
Sử dụng cơ sở dữ liệu được quản lý bên ngoài hoặc hệ thống lưu trữ đối tượng là một cách hiệu quả để giảm thiểu những vấn đề kéo dài này trong khi vẫn hưởng lợi từ tính linh hoạt của Kubernetes. Điều này yêu cầu ứng dụng của bạn phải được tách hoàn toàn khỏi bộ nhớ của nó, vì vậy nó có thể không phải là một tùy chọn nếu bạn đang di chuyển một dịch vụ cũ.
Làm việc với các ứng dụng cũ hơn là trường hợp mạnh nhất cho không phải đang chạy một ứng dụng trạng thái trong Kubernetes. Bạn có thể gặp phải rào cản nếu bạn không thể cố ý về nơi lưu trữ trạng thái và cách nó được quản lý. Trong những trường hợp này, tốt nhất bạn nên cấu trúc lại hệ thống của mình trước khi cố gắng phân phối nó trên các nút triển khai.
Bản tóm tắt
Mặc dù các ứng dụng trạng thái và Kubernetes không hoàn toàn phù hợp với nhau, nhưng bạn có thể cung cấp dữ liệu liên tục trong cụm của mình bằng cách kết hợp các bộ trạng thái và khối lượng liên tục. Chúng cung cấp các phương pháp được hỗ trợ chính thức để điều phối các hệ thống trạng thái bằng cách sử dụng Kubernetes nhưng bạn cần lưu ý đến các ràng buộc lập lịch mà chúng áp đặt.
Vì quản lý trạng thái trong cụm làm tăng thêm độ phức tạp, nên việc lưu giữ dữ liệu liên tục trong một dịch vụ bên ngoài là một cách phổ biến để hợp lý hóa việc triển khai của bạn. Cơ sở dữ liệu được quản lý, nền tảng lưu trữ đối tượng và mạng riêng cho phép bạn cung cấp bộ nhớ bên ngoài cụm của mình sau đó sử dụng nó một cách an toàn từ bên trong. Bạn sẽ cần phải điều chỉnh ứng dụng của mình để hỗ trợ các giao diện lưu trữ bên ngoài nhưng sau đó có thể được hưởng lợi từ việc tăng tính linh hoạt khi triển khai.
Các ứng dụng trong đó trạng thái bao gồm các tệp cấu hình đơn giản có thể sử dụng Bản đồ cấu hình để chạy trong Kubernetes mà không cần phải lưu trữ tệp liên tục. Bản đồ cấu hình là các đối tượng hạng nhất được cung cấp tự động cho Pod của bạn khi chúng cần, dưới dạng các biến môi trường hoặc tệp được gắn kết. Chúng loại bỏ nhu cầu về khối lượng liên tục khi bạn chỉ lưu trữ một số ít cài đặt tồn tại lâu dài.
[ad_2]