‫Cho đến nay với Kubernetes, chúng tôi vẫn chưa thực sự thảo luận về dung
‫lượng hoặc dung lượng.
‫Bạn đã giải quyết vấn đề đó với Docker, sau
‫đó với Compose và Swarm và ở một mức độ nhất định, điều đó
‫cũng tương tự trong Kubernetes.
‫Bạn có các thùng chứa và chúng tôi giả định rằng các thùng
‫chứa đó là không trạng thái, nghĩa là khi bạn ném thùng
‫chứa đi, mọi thứ trong đó sẽ biến mất.
‫Khi bạn thay thế một vùng chứa bằng một bản cập nhật hoặc bạn
‫thay đổi thứ gì đó và bạn áp dụng nó bằng một ứng dụng kubectl, bạn sẽ mất vùng chứa, bạn
‫mất mọi thứ trong đó.
‫Rõ ràng, Kubernetes, cũng giống như các bộ điều
‫phối khác, phải có một cách để dữ
‫liệu liên tục tồn tại. Nó thậm chí còn nhiều hơn cả các tập.
‫Ngay cả các vùng chứa và triển khai cũng có thể khác nhau trong
‫Kubernetes với một thứ gọi là StatefulSets.
‫Đây là những tài nguyên khác
‫với triển khai.
‫Về cơ bản, chúng được thiết kế dựa trên cơ sở dữ liệu và những
‫thứ đòi hỏi tính bền bỉ hơn, bao gồm
‫cùng tên, cùng địa chỉ IP.
‫Chúng tôi không nhất thiết phải hiểu điều đó ra khỏi cổng
‫với Swarm hoặc với Docker.
‫Nó thực sự không có cách nào để bạn giữ các thuộc
‫tính khác nhau đó giữa các vùng chứa.
‫StatefulSets là một tính năng mới trong Kubernetes chỉ
‫mới xuất hiện được một chút thời gian ở đây.
‫Đó là những gì bạn sẽ xem xét nếu bạn
‫định xem xét cơ sở dữ liệu hoặc một cái gì đó rất nhạy cảm với
‫những thay đổi như tên, địa chỉ IP, khối lượng và dữ
‫liệu liên tục. Một lời cảnh báo ở đây.
‫Lý do chúng tôi sẽ không đi qua nhiều
‫chi tiết về nó là vì tôi không khuyên bạn nên triển khai Kubernetes
‫đầu tiên của bạn liên quan đến quá
‫nhiều StatefulSets trong đó. Trên thực tế, lý tưởng nhất là việc triển
‫khai bộ dàn nhạc đầu tiên của bạn, của bất kỳ bộ dàn nhạc nào,
‫cho dù đó là Swarm hay Kubernetes, chỉ liên quan đến trạng thái không trạng thái và
‫bạn biết đấy, hãy giữ nó đơn giản. Có thể chỉ thực hiện giao diện người dùng web
‫của bạn hoặc một số API, hoặc một số tính năng của công nhân hoặc một số thứ
‫không liên quan đến cơ sở dữ liệu. Trên thực tế, nếu bạn có thể sử dụng cơ
‫sở dữ liệu đám mây, hãy làm điều đó.
‫Tôi luôn khuyên bạn nên thuê ngoài cơ sở dữ liệu của
‫mình trừ khi bạn có các yêu cầu cụ thể mà bạn không
‫thể tránh khỏi khi tự vận hành. Ban đầu, dàn nhạc thực sự
‫được thiết kế xung quanh các vùng chứa là bất biến, được phân phối
‫và có thể thay thế.
‫Ý tưởng về tính trung thực này sẽ khiến bạn thêm nhiều công
‫việc và sự phức tạp, cũng như nhiều
‫thử nghiệm hơn cho bạn. Tốt nhất, ra khỏi cổng, bạn không
‫phải lo lắng về điều này.
‫Sau này, khi bạn cảm thấy thoải mái hơn nhiều với tất cả những thứ khác xung quanh
‫Kubernetes, thì bạn có thể quay lại và nói, bây giờ tôi
‫muốn xem xét cơ sở dữ liệu của mình.
‫Không phải là bạn không nên chạy cơ sở dữ liệu theo cụm.
‫Nó chỉ là công việc nhiều hơn. Nó thì khó hơn.
‫Cơ sở dữ liệu và lưu trữ liên tục luôn khó hơn và nhiều chi
‫tiết hơn để làm việc. Đây là mẹo chuyên nghiệp của tôi.
‫Với bất kỳ vùng chứa nào, bạn có thể thêm
‫một khối lượng tương tự như cách bạn đã làm
‫trong Swarm và trong Docker và Docker Compose. Bạn chỉ có thể thêm một câu lệnh khối lượng
‫trong mẫu bên trong thông số kỹ thuật. Nếu bạn nghĩ đến tệp YAML, chúng
‫tôi có thể chỉ cần đặt một tập vào đó như bạn
‫mong đợi, và định dạng và chi tiết chính
‫xác có trong tài nguyên. Không giống như với Docker
‫và Swarm trong đó khối lượng bằng thùng chứa, trong trường hợp
‫này, về mặt kỹ thuật, đó là với nhóm. Nó kết nối với từng vùng chứa hoặc chỉ một vùng
‫chứa trong nhóm nếu bạn yêu cầu.
‫Vì vậy, bạn đang kiểm soát nó ở cấp độ vùng chứa, nhưng nó vẫn tồn tại
‫ở cấp độ nhóm. Có một tính
‫năng mới hơn là khối lượng liên tục.
‫Điều đó hoạt động với một cái gì đó khác được gọi là xác nhận quyền sở hữu.
‫Ý tưởng thú vị với điều này là bạn đang
‫sử dụng nó hoặc bạn định nghĩa nó
‫bên ngoài vỏ. Về cơ bản, bạn đang tự tạo
‫tài nguyên đó và sau đó bạn đang đưa ra yêu cầu đối
‫với tài nguyên đó bên trong thông số nhóm của bạn.
‫Lý do điều này thú vị hơn là khi Kubernetes tiếp quản
‫doanh nghiệp, bạn thường có những người chăm sóc bộ
‫nhớ, thường là bộ nhớ của bên thứ ba, đó không phải là cùng một
‫nhóm điều hành Kubernetes.
‫Họ sẽ là những người liên quan đến việc quản lý và tạo
‫ra những khối lượng lâu dài này.
‫Sau đó, những người triển khai ứng dụng sẽ
‫nói, tôi cần
‫một lượng lớn loại này. Vì vậy, tôi sẽ yêu cầu SSD hoặc
‫chúng tôi có thể cần bộ nhớ RAM, hoặc có thể tôi cần NFS hoặc bất
‫cứ điều gì. Bộ nhớ đó
‫sẽ tự động được cung cấp vì nhóm lưu trữ đã
‫thiết lập bộ nhớ đó trong Kubernetes.
‫Đó là loại ý tưởng xoay quanh các tập liên tục.
‫Nếu bạn chỉ cần một số bộ nhớ đơn giản trên
‫một máy chủ tạm thời cho nhóm, thì chỉ cần sử dụng thuộc tính
‫khối lượng tiêu chuẩn.
‫Một điều cuối cùng ở
‫đây là tạo các plugin CSI. Trong lịch sử Kubernetes, bất
‫kỳ thứ gì là bộ nhớ của bên thứ ba, cho dù đó là
‫bộ nhớ đám mây hay bộ lưu trữ của nhà cung cấp bên thứ ba
‫hoặc thứ gì đó tùy chỉnh, bất kỳ thứ gì trong số
‫đó đều được thêm vào cây.
‫Điều đó có nghĩa là nó đã được thêm vào mã nhị phân
‫của Kubernetes và được vận chuyển cùng Kubernetes.
‫Điều đó có nghĩa là Kubernetes đi kèm với bộ lưu trữ Amazon
‫và Azure được xây dựng ngay lập tức.
‫Điều đó khá thuận tiện, nhưng nó thêm rất
‫nhiều thách thức.
‫Hầu hết những điều đó đều liên quan đến thực tế là các nhà
‫cung cấp dịch vụ lưu trữ hiện đang đóng góp mã vào lõi hệ thống của bạn mà bạn
‫có thể thậm chí không cần vì bạn có thể chỉ sử dụng một nhà cung cấp lưu trữ, vậy
‫tại sao lại có tất cả?
‫Ngoài ra, các nhà cung cấp dịch vụ lưu trữ sau đó phải kiểm soát các chu kỳ phát hành
‫của họ xung quanh chu kỳ phát hành Kubernetes và đây không phải là
‫một mô hình quá linh hoạt.
‫Vì vậy, ngành công nghiệp đã kết hợp lại với nhau,
‫và giống như nó đã làm với mạng và với Dockerfiles và chính hình ảnh,
‫nó đã tạo ra một tiêu chuẩn. Tiêu chuẩn đó là CSI.
‫Đó là viết tắt của Giao diện lưu trữ container.
‫Điều đó sẽ cung cấp các plugin ngay bây giờ để bất kỳ nhà cung cấp
‫dịch vụ lưu trữ nào cũng có thể tạo một plugin mà bạn
‫sẽ cài đặt trên tất cả các nút và điều đó sẽ khác
‫dựa trên plugin và hướng dẫn của họ.
‫Sau đó, chúng sẽ hoạt động trên một API tiêu chuẩn mà CSI cung cấp để
‫bất kỳ vùng chứa nào của bạn đều
‫có thể sử dụng plugin đó để truy cập vào bộ nhớ của chúng.
‫Đó là một mô hình tốt hơn và linh hoạt hơn nhiều.
‫Đó là tương lai của Kubernetes, nhưng nó
‫vẫn còn khá mới. Vì vậy, thường trong các ví dụ, và
‫thậm chí các nhà cung cấp dịch vụ lưu trữ của bạn có thể
‫khuyến nghị, tùy thuộc vào mức độ trưởng thành của CSI, bạn nên sử dụng plugin truyền
‫thống của họ, được tích hợp sẵn trong Kubernetes và xuất hiện.