Giới thiệu
Khi triển khai ứng dụng trên Kubernetes, việc thiết kế hệ thống lưu trữ là một trong những yếu tố quan trọng nhất mà các nhà phát triển cần chú ý. Trong khi các dịch vụ không trạng thái như frontend có thể khởi động lại hoặc mở rộng mà không gặp vấn đề gì, thì các dịch vụ có trạng thái—như cơ sở dữ liệu, hệ thống quản lý nội dung (CMS) hay hệ thống ghi nhật ký—cần có lưu trữ bền vững để tránh mất dữ liệu và duy trì độ tin cậy của ứng dụng.
Trong bài viết này, chúng ta sẽ:
- Khám phá các nguyên tắc cơ bản về lưu trữ trong Kubernetes.
- Hiểu cách lưu trữ được tích hợp trong Amazon Elastic Kubernetes Service (EKS).
- Thảo luận ba cách phổ biến để cung cấp lưu trữ cho các khối lượng công việc trên EKS với các trường hợp sử dụng thực tế.
Lưu trữ trong Kubernetes
Kubernetes cung cấp một lớp trừu tượng để quản lý lưu trữ. Thay vì trực tiếp gắn đĩa hoặc xử lý các hệ thống tệp, các nhà phát triển chỉ cần khai báo các yêu cầu về lưu trữ trong các tệp YAML, và Kubernetes sẽ tự động xử lý việc cung cấp và gắn kết backend phù hợp.
Các khối xây dựng chính
Persistent Volume (PV)
Persistent Volume (PV) đại diện cho một phần lưu trữ trong cụm. Nó có thể được tạo thủ công (cung cấp tĩnh) hoặc động thông qua StorageClass. Điều quan trọng là PV tồn tại độc lập với vòng đời của pod, đảm bảo tính bền vững của dữ liệu ngay cả khi các pod bị xóa hoặc được lên lịch lại.
Persistent Volume Claim (PVC)
Persistent Volume Claim (PVC) là một yêu cầu về lưu trữ được thực hiện bởi một pod. PVC là mặt đối diện với khối lượng công việc: các nhà phát triển xác định kích thước lưu trữ, chế độ truy cập (ReadWriteOnce, ReadWriteMany), và Kubernetes tự động khớp với một PV phù hợp.
StorageClass (SC)
StorageClass định nghĩa loại lưu trữ có sẵn trong một cụm. Mỗi SC tham chiếu một provisioner, chẳng hạn như driver EBS CSI của AWS, và bao gồm các tham số như loại volume (gp3, io1) hoặc thông lượng. Với lớp trừu tượng này, các ứng dụng có thể yêu cầu lưu trữ động mà không cần các quản trị viên phải tạo trước các volume.
Tóm lại, PV, PVC và StorageClass cung cấp cho Kubernetes một cách tiếp cận nhất quán, linh hoạt và tuyên bố để quản lý lưu trữ bền vững.
Lưu trữ trên Amazon EKS
Amazon EKS tích hợp hài hòa với các backend lưu trữ được quản lý bởi AWS, cung cấp cho các nhà phát triển nhiều tùy chọn tùy thuộc vào khối lượng công việc:
Amazon Elastic Block Store (EBS)
Định nghĩa: Các volume lưu trữ cấp khối được gắn vào các nút worker riêng lẻ.
Tốt nhất cho: Các khối lượng công việc trong một AZ như cơ sở dữ liệu quan hệ (MySQL, PostgreSQL) hoặc động cơ phân tích.
Hạn chế: Các volume EBS gắn với một Availability Zone (AZ) duy nhất. Nếu các pod di chuyển đến một AZ khác, volume không thể theo kịp.
Amazon Elastic File System (EFS)
Định nghĩa: Hệ thống tệp NFS hoàn toàn được quản lý, linh hoạt và có khả năng mở rộng.
Tốt nhất cho: Lưu trữ tệp chia sẻ giữa nhiều pod hoặc nút—lý tưởng cho các nền tảng CMS, công việc huấn luyện ML hoặc các pipeline CI/CD.
Điểm mạnh: Hỗ trợ đa AZ với tính khả dụng cao.
Amazon S3 (thông qua driver CSI)
Định nghĩa: Dịch vụ lưu trữ đối tượng tích hợp với Kubernetes thông qua driver S3 CSI.
Tốt nhất cho: Các khối lượng công việc yêu cầu lưu trữ đối tượng có khả năng mở rộng như lưu trữ hình ảnh, nhật ký, sao lưu hoặc pipeline dữ liệu lớn.
Lưu ý: S3 không phải là một hệ thống tệp truyền thống—các ứng dụng phải xử lý các ngữ nghĩa đối tượng thay vì các thao tác khối/tệp.
Các mẫu cung cấp lưu trữ trên EKS
Cách bạn cung cấp lưu trữ trong Kubernetes phụ thuộc vào yêu cầu của khối lượng công việc. Hai mẫu phổ biến nhất là:
1. Cung cấp tĩnh
- Tài nguyên lưu trữ (volume EBS/EFS) được tạo thủ công trong AWS.
- Các quản trị viên sau đó xác định PersistentVolumes của Kubernetes mà ánh xạ đến những tài nguyên này.
- Các ứng dụng sử dụng PVC để liên kết với các volume đã được định nghĩa trước.
Lợi ích: Kiểm soát hoàn toàn, phân bổ dự đoán.
Nhược điểm: Thủ công và ít khả năng mở rộng.
Trường hợp sử dụng: Di chuyển một volume cơ sở dữ liệu hiện có vào EKS hoặc khi tuân thủ nghiêm ngặt yêu cầu các tài nguyên đã được phê duyệt trước.
2. Cung cấp động
- Sử dụng StorageClasses cùng với các driver CSI (Container Storage Interface).
- Khi một pod yêu cầu một PVC, Kubernetes tự động cung cấp tài nguyên lưu trữ AWS tương ứng.
- Việc liên kết diễn ra một cách liền mạch mà không cần sự can thiệp của quản trị viên.
Lợi ích: Có khả năng mở rộng, tự động hóa và giảm nỗ lực vận hành.
Nhược điểm: Ít kiểm soát hơn đối với các tài nguyên cơ sở bên dưới cụ thể.
Trường hợp sử dụng: Microservices với nhu cầu lưu trữ đa dạng, nơi tự động hóa và tính linh hoạt là rất quan trọng.
Thực hành tốt nhất cho lưu trữ trên EKS
-
Khớp khối lượng công việc với loại lưu trữ:
- Cơ sở dữ liệu → EBS (IOPS cao, độ trễ thấp).
- Ứng dụng chia sẻ → EFS (truy cập đa pod).
- Nhật ký, lưu trữ → S3 (lưu trữ đối tượng).
-
Thiết kế cho nhận thức AZ: Lưu ý rằng các volume EBS bị ràng buộc với AZ. Sử dụng EFS hoặc S3 cho các khối lượng công việc đa AZ.
-
Bảo mật truy cập: Sử dụng IAM roles cho tài khoản dịch vụ (IRSA) thay vì vai trò nút để cung cấp cho các pod quyền truy cập lưu trữ tinh vi.
-
Giám sát hiệu suất: Sử dụng các chỉ số CloudWatch cho EBS/EFS và S3 để đảm bảo hiệu suất lưu trữ phù hợp với nhu cầu khối lượng công việc.
-
Xem xét chi phí: EFS và S3 tự động mở rộng nhưng có thể phát sinh chi phí cao hơn so với các volume EBS đã được cấp phát.
Kết luận
Lưu trữ là một thành phần cơ bản của Kubernetes—đặc biệt là trong Amazon EKS, nơi các khối lượng công việc có thể tận dụng các dịch vụ được quản lý bởi AWS như EBS, EFS và S3. Bằng cách kết hợp PV, PVC và StorageClass, bạn có thể cung cấp lưu trữ linh hoạt, bền vững và phù hợp với từng khối lượng công việc mà không làm phức tạp cho các nhà phát triển ứng dụng.
Với chiến lược lưu trữ phù hợp, các khối lượng công việc EKS của bạn có thể mở rộng một cách liền mạch trong khi đảm bảo tính bền vững, hiệu suất và tính khả dụng của dữ liệu.
Bước tiếp theo: Trong các bài viết sắp tới, chúng tôi sẽ hướng dẫn cách thiết lập lưu trữ EBS, EFS và S3 trong EKS bằng cách sử dụng Terraform và các tệp YAML của Kubernetes, bao gồm việc triển khai một container nginx ghi vào lưu trữ bền vững.
Câu hỏi thường gặp
Lưu trữ trên EKS có an toàn không?
Có, các giải pháp lưu trữ như EBS, EFS và S3 đều cung cấp tính bảo mật cao và có thể được cấu hình để đáp ứng các yêu cầu bảo mật của doanh nghiệp.
Tôi có thể sử dụng loại lưu trữ nào cho ứng dụng của mình?
Loại lưu trữ nên được chọn dựa trên nhu cầu cụ thể của ứng dụng—EBS cho cơ sở dữ liệu, EFS cho ứng dụng chia sẻ và S3 cho lưu trữ đối tượng.
Làm thế nào để tôi theo dõi hiệu suất lưu trữ?
Bạn có thể sử dụng CloudWatch để theo dõi các chỉ số hiệu suất cho EBS, EFS và S3, từ đó điều chỉnh các tài nguyên theo nhu cầu thực tế của ứng dụng.