+2

Quản lý lưu trữ hiệu quả trong Kubernetes (Phần 1)

Mayfest2023

Quản lý lưu trữ hiệu quả trong Kubernetes

1. Giới thiệu

Ngày nay, việc xây dựng và triển khai các ứng dụng hiện đại đòi hỏi sự linh hoạt, khả năng mở rộng và đảm bảo tính sẵn sàng cao. Để đáp ứng những yêu cầu đó, Kubernetes đã trở thành một nền tảng quản lý container phổ biến, giúp tự động hóa việc triển khai, mở rộng và quản lý các ứng dụng container hóa. Tuy nhiên, để đạt được hiệu suất tối ưu và đảm bảo hoạt động ổn định của ứng dụng, việc quản lý storage đóng vai trò quan trọng không thể thiếu.

Lưu trữ là một trong những yếu tố quan trọng để đảm bảo tính bền vững của dữ liệu và trạng thái của ứng dụng. Đối với các ứng dụng hiện đại, việc lưu trữ dữ liệu đòi hỏi sự nhanh chóng, đáp ứng nhu cầu mở rộng và giảm thiểu thời gian downtime. Ngoài ra, vấn đề bảo mật cũng cần được chú trọng, đảm bảo an toàn cho dữ liệu và thông tin của người dùng.

Kubernetes cung cấp nhiều giải pháp quản lý storage linh hoạt và hiệu quả, giúp đáp ứng nhu cầu của các ứng dụng hiện đại. Một số khái niệm quan trọng trong việc quản lý storage trong Kubernetes bao gồm Persistent Volumes (PV), Persistent Volume Claims (PVC) và Storage Classes. Ngoài ra, Kubernetes còn hỗ trợ các giải pháp lưu trữ phổ biến như NFS, iSCSI, Ceph, GlusterFS và các dịch vụ cloud storage như Amazon EBS, Google Persistent Disk, Azure Disk Storage, v.v.

Thông qua bài viết này, chúng ta sẽ tìm hiểu sâu hơn về các khái niệm, công cụ và một số ví dụ trong việc quản lý storage trong Kubernetes. Điều này giúp bạn hiểu rõ hơn về tầm quan trọng của việc quản lý storage trong ứng dụng hiện đại và áp dụng hiệu quả vào các dự án thực tế của mình.

2. Các loại storage trong Kubernetes

Trong Kubernetes, việc quản lý và cấp phát storage cho các ứng dụng được thực hiện một cách linh hoạt và hiệu quả thông qua nhiều khái niệm và đối tượng. Bằng cách tìm hiểu và kết hợp các thành phần này, bạn có thể xây dựng một hệ thống lưu trữ mạnh mẽ và thích ứng với nhu cầu của ứng dụng. Trong chương này, chúng ta sẽ tìm hiểu về các loại storage trong Kubernetes, bao gồm:

  1. Persistent Volumes (PV)
  2. Persistent Volume Claims (PVC)
  3. Storage Classes
  4. Volume Modes
  5. StatefulSets

Chúng ta sẽ đi sâu vào mỗi loại storage và tìm hiểu cách sử dụng chúng trong Kubernetes để đảm bảo hoạt động hiệu quả và ổn định của ứng dụng.

2.1. Persistent Volumes (PV)

Persistent Volumes (PV) là một đối tượng quan trọng trong Kubernetes, giúp tách biệt việc quản lý storage giữa người dùng và người quản trị hệ thống. PV đại diện cho một phần bộ nhớ vật lý trong cluster và cung cấp khả năng cấu hình và quản lý storage độc lập với các container và Pods. Điều này giúp đảm bảo tính độc lập giữa người dùng (nhà phát triển ứng dụng) và người quản trị hệ thống.

Mỗi PV bao gồm các thông tin sau:

  • Dung lượng (capacity): Kích thước của PV, thường được đo bằng đơn vị Gigabyte (Gi).
  • Chế độ truy cập (access mode): Các chế độ truy cập cho phép, như ReadWriteOnce (RWO), ReadOnlyMany (ROX) và ReadWriteMany (RWX).
  • Loại storage (storage class): Loại storage mà PV sử dụng, chẳng hạn như local, NFS, iSCSI, hoặc các dịch vụ cloud storage như Amazon EBS, Google Persistent Disk và Azure Disk.
  • Chính sách thu hồi (reclaim policy): Chính sách xử lý PV khi PVC được xóa, có thể là Retain, Delete hoặc Recycle.

2.1.1. Tạo và cấu hình PV

Để sử dụng Persistent Volumes (PVs) trong Kubernetes, bạn cần tạo và cấu hình PV trước khi có thể sử dụng chúng trong các Pod. Để tạo một PV, bạn cần tạo một tệp tin YAML với định nghĩa PV, bao gồm thông tin về kích thước, chế độ truy cập, loại storage và chính sách xóa. Ví dụ về một tệp tin YAML định nghĩa PV như sau:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-example
spec:
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    path: /mnt/data
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - node1

Trong đoạn mã YAML trên:

  • Một Persistent Volume (PV) được định nghĩa với tên là pv-example
  • Dung lượng là 10GB
  • Chế độ truy cập là ReadWriteOnce
  • Chính sách xóa của PV được thiết lập là Retain, có nghĩa là khi PV bị xóa, dữ liệu trên nó sẽ được giữ lại.
  • Loại storage được sử dụng là local
  • Đường dẫn đến thư mục lưu trữ của PV trên nút node1 được chỉ định.

Sau khi tạo tệp tin YAML, bạn có thể tạo PV bằng cách sử dụng lệnh kubectl apply -f <your-pv-definition.yaml>.

PV có thể được giám sát và quản lý thông qua các lệnh kubectl phù hợp. Ví dụ, bạn có thể sử dụng các lệnh:

  • kubectl get pv: liệt kê danh sách các PV
  • kubectl describe pv <pv-name>: xem chi tiết thông tin của PV
  • kubectl delete pv <pv-name>: xóa các PV

Ngoài ra, bạn cũng có thể sử dụng các công cụ như Kubernetes Dashboard hoặc Lens để quản lý PV một cách trực quan hơn.

2.1.2. Kết nối PV với các Pod và container

Sau khi tạo và cấu hình Persistent Volume (PV), bạn có thể sử dụng nó bằng cách kết nối nó với các Pod và container. Việc kết nối PV với Pod có thể được thực hiện bằng cách sử dụng đối tượng PersistentVolumeClaim (PVC).

PersistentVolumeClaim là một tài nguyên trong Kubernetes cho phép bạn yêu cầu một phần hoặc toàn bộ dung lượng của một PV cho các Pod của bạn (sẽ dược giải thích chi tiết ở phần sau của bài viết). Bằng cách sử dụng PVC, bạn có thể yêu cầu dung lượng lưu trữ từ PV mà không cần biết chi tiết về PV đó.

Để sử dụng PVC trong Pod, bạn cần thêm một volume đến định nghĩa Pod và đặt tên cho volume đó bằng tên của PVC. Sau đó, bạn có thể mount volume đó vào container trong Pod. Ví dụ định nghĩa một Pod sử dụng PVC như sau:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: nginx
      volumeMounts:
        - name: my-volume
          mountPath: /data
  volumes:
    - name: my-volume
      persistentVolumeClaim:
        claimName: my-claim

Trong đoạn mã này, chúng ta định nghĩa một Pod có tên là my-pod và một container trong Pod với tên là my-container. Chúng ta thêm một volume đến Pod với tên là my-volume và định nghĩa volume đó sử dụng PVC có tên là my-claim. Sau đó, chúng ta mount volume my-volume vào đường dẫn /data trong container của Pod.

Khi Pod này được triển khai, Kubernetes sẽ tìm và kết nối PV phù hợp với PVC my-claim được yêu cầu và mount volume đó vào container trong Pod.

2.1.3. Lưu ý khi sử dụng PV

Khi sử dụng PV trong Kubernetes, bạn cần chú ý đến các vấn đề sau:

  1. Dung lượng: Đảm bảo rằng PV được cấp phát đủ dung lượng để đáp ứng nhu cầu lưu trữ của ứng dụng.
  2. Chế độ truy cập: Chọn chế độ truy cập phù hợp với yêu cầu của ứng dụng. Ví dụ, nếu ứng dụng cần đọc và ghi dữ liệu đồng thời trên nhiều node, bạn cần sử dụng chế độ truy cập ReadWriteMany (RWX).
  3. Chính sách thu hồi: Chú ý đến chính sách thu hồi PV khi PVC bị xóa, để đảm bảo dữ liệu được xử lý đúng cách và không gây tốn tài nguyên hệ thống.
  4. Các loại bộ nhớ: Chọn loại bộ nhớ phù hợp với nhu cầu lưu trữ và hiệu suất của ứng dụng. Kubernetes hỗ trợ nhiều loại bộ nhớ như emptyDir, hostPath, NFS, iSCSI, CephFS, GlusterFS, Amazon EBS, Azure Disk, Google Cloud Disk, ...
  5. Thiết lập quyền truy cập: Cấu hình quyền truy cập PV sao cho POD có thể truy cập được PV.
  6. Điều kiện sử dụng: Cấu hình điều kiện sử dụng cho PV, để đảm bảo rằng PV chỉ được sử dụng trong những trường hợp cần thiết.
  7. Giám sát: Theo dõi hoạt động của PV để phát hiện các vấn đề sớm và sửa chữa chúng.

Kết luận, trong phần này, chúng ta đã tìm hiểu về khái niệm Persistent Volumes (PV) trong Kubernetes, cách tạo và cấu hình PV, cũng như cách kết nối chúng với các Pod và container. Việc nắm rõ về PV sẽ giúp bạn quản lý storage trong Kubernetes một cách hiệu quả và linh hoạt, đáp ứng nhu cầu lưu trữ của các ứng dụng.

2.2. Persistent Volume Claims (PVC)

Persistent Volume Claims (PVC) là một đối tượng trong Kubernetes, cho phép người dùng yêu cầu và sử dụng bộ nhớ được cấp phát từ Persistent Volumes (PV). PVC đóng vai trò như một "claim" cho một phần bộ nhớ PV, đảm bảo các Pod và container có quyền truy cập vào PV phù hợp theo nhu cầu lưu trữ. PVC giúp tách biệt quá trình yêu cầu và cấp phát bộ nhớ giữa người dùng và người quản trị hệ thống.

Mỗi PVC bao gồm các thông tin sau:

  • Dung lượng yêu cầu (requested capacity): Kích thước bộ nhớ mà PVC yêu cầu, thường được đo bằng đơn vị Gigabyte (Gi).
  • Chế độ truy cập (access mode): Các chế độ truy cập cho phép, phải tương thích với chế độ truy cập của PV mà PVC đòi hỏi.
  • Storage Class (loại storage): Loại storage mà PVC yêu cầu, phải tương thích với loại storage của PV mà PVC đòi hỏi.

2.2.1. Tạo và cấu hình PVC

Để tạo một PVC, bạn cần tạo một tệp tin YAML với định nghĩa PVC, bao gồm thông tin về kích thước yêu cầu, chế độ truy cập và loại storage. Ví dụ về một tệp tin YAML định nghĩa PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-example
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: local-storage

Sau khi tạo tệp tin YAML, bạn có thể tạo PVC bằng cách sử dụng lệnh kubectl apply -f <your-pvc-definition.yaml>.

PVC có thể được giám sát và quản lý thông qua các lệnh kubectl phù hợp. Ví dụ, bạn có thể sử dụng các lệnh kubectl get pvc, kubectl describe pvc <pvc-name>kubectl delete pvc <pvc-name> để lần lượt liệt kê, xem chi tiết và xóa các PVC. Ngoài ra, bạn cũng có thể sử dụng các công cụ như Kubernetes Dashboard hoặc Lens để quản lý PVC một cách trực quan hơn.

2.2.2. Gắn PVC vào Pod và container

Để sử dụng PVC trong Pod, bạn cần thêm định nghĩa về Volume vào tệp tin YAML của Pod và liên kết nó với PVC đã tạo. Sau đó, bạn gắn Volume vào container thông qua cấu hình volumeMounts. Ví dụ về cách gắn PVC vào Pod:

apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  containers:
    - name: container-example
      image: example-image
      volumeMounts:
        - name: pvc-storage
          mountPath: /data
  volumes:
    - name: pvc-storage
      persistentVolumeClaim:
        claimName: pvc-example

Trong ví dụ trên, Pod pod-example sử dụng PVC pvc-example và gắn nó vào container container-example tại đường dẫn /data.

2.2.3. Lưu ý khi sử dụng PVC

Khi sử dụng PVC trong Kubernetes, bạn cần chú ý đến các vấn đề sau:

  • Đảm bảo rằng PVC được yêu cầu đúng dung lượng và chế độ truy cập phù hợp với nhu cầu lưu trữ của ứng dụng.
  • Chọn loại storage phù hợp với yêu cầu hiệu năng và tính linh hoạt của ứng dụng. Mỗi loại storage sẽ có đặc tính và chi phí khác nhau.
  • Khi PVC được xóa, chú ý đến chính sách thu hồi của PV liên quan, để đảm bảo dữ liệu được xử lý đúng cách và không gây tốn tài nguyên hệ thống.

Kết luận, trong phần này, chúng ta đã tìm hiểu về khái niệm Persistent Volume Claims (PVC) trong Kubernetes, cách tạo và cấu hình PVC, cũng như cách gắn chúng vào các Pod và container. Việc nắm rõ về PVC sẽ giúp bạn quản lý storage trong Kubernetes một cách hiệu quả và linh hoạt, đáp ứng nhu cầu lưu trữ của các ứng dụng.

2.3. Storage Classes

Storage Classes là một đối tượng trong Kubernetes, giúp quản lý các loại storage khác nhau mà hệ thống có thể cung cấp cho các Persistent Volumes (PV) và Persistent Volume Claims (PVC). Storage Classes cho phép người quản trị hệ thống định nghĩa và quản lý các loại storage, cũng như đảm bảo tính nhất quán và dễ dàng mở rộng khi cung cấp bộ nhớ cho các ứng dụng.

2.3.1. Các thuộc tính của Storage Classes

Mỗi Storage Class bao gồm các thông tin sau:

  • Tên (name): Tên duy nhất để định danh Storage Class.
  • Provisioner (bộ cấp phát): Tên của bộ cấp phát storage, chịu trách nhiệm tạo và xóa các PV tương ứng với Storage Class.
  • Các thông số (parameters): Một tập hợp các thông số cấu hình dành cho bộ cấp phát storage, giúp điều chỉnh các thuộc tính của PV được tạo ra.

2.3.2. Tạo và cấu hình Storage Classes

Để tạo một Storage Class, bạn cần tạo một tệp tin YAML với định nghĩa Storage Class, bao gồm thông tin về tên, bộ cấp phát và các thông số cấu hình. Ví dụ về một tệp tin YAML định nghĩa Storage Class:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
parameters:
  type: local

Sau khi tạo tệp tin YAML, bạn có thể tạo Storage Class bằng cách sử dụng lệnh kubectl apply -f <your-storageclass-definition.yaml>.

Storage Classes có thể được giám sát và quản lý thông qua các lệnh kubectl phù hợp. Ví dụ, bạn có thể sử dụng các lệnh kubectl get storageclass, kubectl describe storageclass <storageclass-name>kubectl delete storageclass <storageclass-name> để lần lượt liệt kê, xem chi tiết và xóa các Storage Class. Ngoài ra, bạn cũng có thể sử dụng các công cụ như Kubernetes Dashboard hoặc Lens để quản lý Storage Class một cách trực quan hơn.

2.3.3. Sử dụng Storage Classes trong PVC

Khi tạo PVC, bạn có thể chỉ định Storage Class mà PVC yêu cầu bằng cách thêm trường storageClassName vào tệp tin YAML của PVC. PVC sẽ được cấp bộ nhớ từ các PV thuộc Storage Class được chỉ định, đảm bảo tính nhất quán và phù hợp với yêu cầu hiệu năng của ứng dụng. Ví dụ về cách chỉ định Storage Class cho PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-example
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: local-storage

Trong ví dụ trên, PVC pvc-example yêu cầu bộ nhớ từ các PV thuộc Storage Class local-storage.

2.3.4. Lưu ý khi sử dụng Storage Classes

Khi sử dụng Storage Classes trong Kubernetes, bạn cần chú ý đến các vấn đề sau:

  • Chọn đúng Storage Class phù hợp với yêu cầu hiệu năng, độ tin cậy và chi phí của ứng dụng.
  • Tạo và quản lý các Storage Class theo cách phù hợp, để đảm bảo tính nhất quán và dễ dàng mở rộng khi cung cấp bộ nhớ cho các ứng dụng.
  • Cân nhắc việc sử dụng các Storage Class có sẵn từ nhà cung cấp dịch vụ (như AWS, GCP, Azure) hoặc tạo các Storage Class tùy chỉnh nếu cần thiết.

Kết luận, trong chương này, chúng ta đã tìm hiểu về khái niệm Storage Classes trong Kubernetes, cách tạo và cấu hình Storage Classes, cũng như cách sử dụng chúng trong các PVC. Việc nắm rõ về Storage Classes sẽ giúp bạn quản lý và cung cấp bộ nhớ cho các ứng dụng một cách linh hoạt và hiệu quả.

2.4. Các loại storage được hỗ trợ

Trong nội dung này, chúng ta sẽ điểm qua một số loại storage phổ biến được hỗ trợ trong Kubernetes. Các loại storage này có thể được sử dụng với Persistent Volumes (PV), Persistent Volume Claims (PVC) và Storage Classes, tùy thuộc vào yêu cầu hiệu năng, độ tin cậy và chi phí của ứng dụng.

  1. Local Storage: Là lưu trữ vật lý trên cùng một máy chủ với các nút Kubernetes đang chạy. Loại storage này có hiệu năng cao, tuy nhiên, bị giới hạn bởi khả năng mở rộng và độ tin cậy do lưu trữ trên một máy chủ duy nhất. Để sử dụng Local Storage trong Kubernetes, bạn cần tạo một Persistent Volume với thuộc tính local và liên kết nó với một Persistent Volume Claim.
  2. Network Attached Storage (NAS): Là lưu trữ kết nối mạng, cho phép nhiều máy chủ chia sẻ cùng một bộ nhớ. Loại storage này có hiệu năng tốt, khả năng mở rộng cao và độ tin cậy tốt hơn so với Local Storage. Một số ví dụ về NAS trong Kubernetes bao gồm NFS (Network File System), GlusterFS và CephFS. Để sử dụng NAS trong Kubernetes, bạn cần tạo một Persistent Volume với thuộc tính tương ứng và liên kết nó với một Persistent Volume Claim.
  3. Block Storage: Là lưu trữ dữ liệu dạng khối, thường được sử dụng cho các ứng dụng yêu cầu hiệu năng cao và độ trễ thấp. Loại storage này thường được sử dụng trong môi trường cloud như Amazon EBS (Elastic Block Store), Google Persistent Disk và Azure Disk Storage. Để sử dụng Block Storage trong Kubernetes, bạn cần tạo một Persistent Volume với thuộc tính tương ứng và liên kết nó với một Persistent Volume Claim.
  4. Object Storage: Là lưu trữ dữ liệu dạng đối tượng, thích hợp cho các ứng dụng yêu cầu lưu trữ dữ liệu không cấu trúc như hình ảnh, video và tài liệu. Loại storage này thường được sử dụng trong môi trường cloud như Amazon S3, Google Cloud Storage và Azure Blob Storage. Tuy nhiên, Object Storage không được hỗ trợ trực tiếp bởi Kubernetes PV và PVC, bạn cần sử dụng các giải pháp bên thứ ba hoặc tích hợp API của nhà cung cấp dịch vụ để sử dụng Object Storage trong ứng dụng Kubernetes.
  5. Software-defined Storage (SDS): là một loại lưu trữ mà quản lý và cấp phát bộ nhớ được kiểm soát bởi phần mềm, thay vì phần cứng truyền thống. SDS cho phép linh hoạt hơn trong việc quản lý, mở rộng và tối ưu hóa bộ nhớ. Một số ví dụ về SDS được sử dụng trong Kubernetes bao gồm Rook, OpenEBS và Portworx. Để sử dụng SDS trong Kubernetes, bạn cần tạo một Persistent Volume với thuộc tính tương ứng và liên kết nó với một Persistent Volume Claim.

Trong nội dung này, chúng ta đã điểm qua một số loại storage phổ biến được hỗ trợ trong Kubernetes, bao gồm Local Storage, Network Attached Storage (NAS), Block Storage, Object Storage và Software-defined Storage (SDS). Việc chọn đúng loại storage phù hợp với yêu cầu hiệu năng, độ tin cậy và chi phí của ứng dụng là rất quan trọng. Bạn cần xem xét các yếu tố này khi quyết định sử dụng loại storage nào trong ứng dụng Kubernetes của mình.

3. Persistent Volumes (PV) và Persistent Volume Claims (PVC)

Trong chương này, chúng ta sẽ tìm hiểu sâu hơn về Persistent Volumes (PV) và Persistent Volume Claims (PVC) trong Kubernetes, cách chúng tương tác với nhau và các lưu ý khi sử dụng chúng. PV và PVC là hai thành phần quan trọng trong việc quản lý storage trong Kubernetes, giúp đảm bảo tính linh hoạt, bảo mật và dễ dàng mở rộng khi cung cấp bộ nhớ cho các ứng dụng.

Persistent Volumes (PV) là một khái niệm trong Kubernetes dùng để trừu tượng hóa các loại storage như đã đề cập trong chương trước. PV giúp người quản trị có thể cấp phát và quản lý bộ nhớ mà không cần quan tâm đến cách thức hoạt động của từng loại storage cụ thể. Mỗi PV đại diện cho một khoảng bộ nhớ phân phối hoặc cục bộ có thể được sử dụng bởi các ứng dụng trong Kubernetes.

Persistent Volume Claims (PVC) là một yêu cầu của ứng dụng để sử dụng bộ nhớ từ một PV cụ thể. PVC chứa thông tin về dung lượng, chế độ truy cập và Storage Class của bộ nhớ yêu cầu. Khi một PVC được tạo, Kubernetes sẽ tự động liên kết PVC đó với một PV phù hợp, đảm bảo ứng dụng có đủ bộ nhớ để hoạt động.

Nắm rõ về PV và PVC sẽ giúp bạn hiểu cách quản lý và cấu hình storage trong Kubernetes, đồng thời đảm bảo tính linh hoạt và bảo mật cho các ứng dụng của mình.

3.1. Cách hoạt động

Trong phần này, chúng ta sẽ tìm hiểu cách hoạt động của Persistent Volumes (PV) và Persistent Volume Claims (PVC) trong Kubernetes, cũng như cách chúng tương tác với nhau trong quá trình cấp phát và sử dụng bộ nhớ.

  1. Tạo và cấp phát Persistent Volumes
    • Đầu tiên, người quản trị hệ thống cần tạo một hoặc nhiều Persistent Volumes (PV) tương ứng với các loại storage được hỗ trợ. Mỗi PV sẽ chứa thông tin về dung lượng, chế độ truy cập (ReadWriteOnce, ReadOnlyMany, ReadWriteMany), loại storage và các thông số cấu hình khác tùy thuộc vào loại storage cụ thể.
    • Khi một PV được tạo, nó sẽ ở trạng thái Available cho đến khi được liên kết với một PVC. Nếu một PV không còn được sử dụng bởi bất kỳ PVC nào, nó sẽ trở lại trạng thái Released và có thể được tái sử dụng hoặc xóa bỏ.
  2. Tạo và yêu cầu Persistent Volume Claims
    • Khi cần cấp phát bộ nhớ cho một ứng dụng, người dùng sẽ tạo một Persistent Volume Claim (PVC) chứa thông tin về dung lượng yêu cầu, chế độ truy cập và Storage Class (nếu có). PVC không trực tiếp chỉ định PV cụ thể nào sẽ được sử dụng, mà để hệ thống tự động liên kết với một PV phù hợp.
  3. Liên kết PV và PVC
    • Sau khi một PVC được tạo, Kubernetes sẽ tự động tìm kiếm một PV phù hợp để liên kết với PVC đó. Việc liên kết này dựa trên các tiêu chí như dung lượng, chế độ truy cập và Storage Class. Nếu tìm được một PV phù hợp, hệ thống sẽ liên kết PV và PVC, đồng thời cập nhật trạng thái của PV thành Bound.
    • Nếu không tìm được PV phù hợp, PVC sẽ ở trạng thái Pending cho đến khi có PV phù hợp hoặc PVC bị xóa. Trong trường hợp sử dụng Storage Class với tính năng dynamic provisioning, một PV mới sẽ được tự động tạo và liên kết với PVC nếu không có PV phù hợp sẵn có.
  4. Sử dụng PVC trong Pod
    • Sau khi PVC đã được liên kết với một PV, người dùng có thể sử dụng PVC đó trong định nghĩa Pod của ứng dụng. PVC sẽ được tham chiếu thông qua tên trong phần volumes của Pod, sau đó được gắn kết vào một thư mục cụ thể trong container thông qua phần volumeMounts.
    • Khi Pod được khởi tạo, Kubernetes sẽ đảm bảo rằng bộ nhớ được cấp phát thông qua PVC sẽ được gắn kết vào thư mục đúng trong container. Mọi dữ liệu được lưu trữ trong thư mục này sẽ được lưu trên PV và tồn tại ngay cả khi Pod bị xóa hoặc tái tạo.
  5. Cập nhật và xóa PVC
    • Nếu cần thay đổi thông tin của PVC, người dùng có thể cập nhật thông tin của PVC, ví dụ như tăng dung lượng yêu cầu. Tuy nhiên, việc cập nhật PVC phụ thuộc vào khả năng hỗ trợ của loại storage và PV liên quan.
    • Khi PVC không còn cần thiết, người dùng có thể xóa PVC. Trong quá trình xóa PVC, các tùy chọn xử lý dữ liệu trên PV cũng có thể được cấu hình, như giữ lại dữ liệu cho việc tái sử dụng sau này, hoặc xóa toàn bộ dữ liệu.
  6. Cập nhật và xóa PV
    • Cuối cùng, người quản trị có thể cập nhật hoặc xóa PV khi cần thiết. Việc cập nhật PV phụ thuộc vào khả năng hỗ trợ của loại storage. Khi xóa một PV, người quản trị cần chú ý đến việc xử lý dữ liệu trên PV, đảm bảo rằng dữ liệu được xử lý một cách an toàn và phù hợp với chính sách bảo mật của tổ chức.

Tóm lại, PV và PVC trong Kubernetes là hai khái niệm quan trọng giúp quản lý và cấp phát bộ nhớ cho các ứng dụng một cách linh hoạt và bảo mật. Bằng cách hiểu rõ cách hoạt động của PV và PVC, người dùng có thể tận dụng chúng để đảm bảo hiệu năng và ổn định của ứng dụng, đồng thời đơn giản hóa quá trình quản lý storage trong Kubernetes.

3.2. Tạo và sử dụng PV và PVC trong ứng dụng

Trong phần này, chúng ta sẽ tìm hiểu cách tạo và sử dụng PV và PVC trong ứng dụng Kubernetes thông qua các bước sau:

3.2.1. Tạo Persistent Volume (PV)

Đầu tiên, bạn cần tạo một tệp cấu hình cho PV, ví dụ: my-pv.yaml. Tệp này chứa thông tin về dung lượng, chế độ truy cập, loại storage và các thông số cấu hình khác tùy thuộc vào loại storage cụ thể.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: my-storage-class
  nfs:
    server: nfs.example.com
    path: /exports/my-pv

Sau khi tạo tệp cấu hình, hãy áp dụng nó bằng lệnh sau:

kubectl apply -f my-pv.yaml

3.2.2. Tạo Persistent Volume Claim (PVC)

Tiếp theo, tạo một tệp cấu hình cho PVC, ví dụ: my-pvc.yaml. Tệp này chứa thông tin về dung lượng yêu cầu, chế độ truy cập và Storage Class (nếu có).

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: my-storage-class
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

Áp dụng tệp cấu hình PVC bằng lệnh sau:

kubectl apply -f my-pvc.yaml

3.2.3. Sử dụng PVC trong Pod

Khi PVC đã được liên kết với một PV, bạn có thể sử dụng PVC trong định nghĩa Pod của ứng dụng. Ví dụ, tạo một tệp cấu hình cho Pod như sau: my-app-pod.yaml.

apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod
spec:
  containers:
    - name: my-app-container
      image: my-app-image
      volumeMounts:
        - name: my-storage
          mountPath: /data
  volumes:
    - name: my-storage
      persistentVolumeClaim:
        claimName: my-pvc

Áp dụng tệp cấu hình Pod bằng lệnh sau:

kubectl apply -f my-app-pod.yaml

Bây giờ, ứng dụng trong Pod sẽ sử dụng bộ nhớ được cấp phát thông qua PVC, và mọi dữ liệu được lưu trữ trong thư mục /data sẽ được lưu trữ trên PV. Dữ liệu này sẽ tồn tại ngay cả khi Pod bị xóa hoặc tái tạo.

3.2.4. Quản lý PV và PVC

Bạn có thể quản lý PV và PVC thông qua các lệnh kubectl. Để xem danh sách các PV và PVC hiện có, sử dụng các lệnh sau:

kubectl get pv
kubectl get pvc

Để xem chi tiết về một PV hoặc PVC cụ thể, sử dụng lệnh kubectl describe:

kubectl describe pv my-pv
kubectl describe pvc my-pvc

3.2.5. Xóa PV và PVC

Khi bạn không còn cần sử dụng PV và PVC, bạn có thể xóa chúng bằng cách sử dụng lệnh kubectl delete:

kubectl delete pvc my-pvc
kubectl delete pv my-pv

Lưu ý rằng việc xóa PVC có thể ảnh hưởng đến dữ liệu trên PV tùy thuộc vào chính sách persistentVolumeReclaimPolicy của PV. Hãy đảm bảo rằng bạn đã xem xét kỹ chính sách này trước khi xóa PVC.

Kết luận, thông qua việc sử dụng PV và PVC, bạn có thể linh hoạt quản lý và cấp phát bộ nhớ cho các ứng dụng Kubernetes. Việc tạo, sử dụng và quản lý PV và PVC giúp đảm bảo hiệu năng và tính ổn định của ứng dụng, đồng thời đơn giản hóa quá trình quản lý storage trong môi trường Kubernetes.

(... còn tiếp)


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.