- vừa được xem lúc

[Kubernetes storage] Học cách sử dụng Persistent Volume (PV) và Persistent Volume Claim (PVC)

0 0 36

Người đăng: Thu Nguyen Thi Thanh

Theo Viblo Asia

Mở đầu

Kubernetes Persistent Storage cung cấp cho các ứng dụng triển khai trên Kubernetes một cách thuận tiện để yêu cầu và sử dụng tài nguyên lưu trữ. Nếu như các Ephemeral Storage (lưu trữ tạm thời) có thời gian tồn tại là thời gian tồn tại của pod và nó có thể bị mất đi sau khi pod bị xoá hoặc gặp sự cố, vô tình bị tắt, thì các Persistent Storage (lưu trữ liên tục) có thời gian tồn tại độc lập với pod và không bị mất đi khi pod bị xoá hay gặp sự cố. Persistent Storage là điều cần thiết với các ứng dụng quan trọng cần lưu trữ ổn định, bền bỉ vượt xa pod hoặc thậm chí là node mà pod đang chạy.

Để tạo và sử dụng Persistent Storage, Kubernetes cung cấp cho chúng ta hai loại API resource là PersistentVolume (PV) and PersistentVolumeClaim (PVC). Trên thực tế, Kubernetes hỗ trợ rất nhiều loại volume storage khác nhau và một số các volume thuần vẫn có thể có persistent storage. Tuy nhiên, PV và PVC là rất hữu ích cho việc quản lý tài nguyên lưu trữ cho các dự án lớn. Nó giúp trừu tượng đi các chi tiết cơ sở hạ tầng, có độ phức tạp cao hơn so với chỉ sử dụng volume thuần. Trong phạm vi bài viết này, mình sẽ sùng các bạn có những tìm hiểu cơ bản về PersistentVolume và PersistentVolumeClaim cũng như cách sử dụng chúng nhé.

Persistent Volumes

PersistentVolume (PV) là một phần không gian lưu trữ dữ liệu trong cụm được cấp phát bởi Cluster Admin hoặc được cấp phát linh hoạt. Nó là một loại tài nguyên của của cụm cũng giống như 1 node là tài nguyên của cụm. Các PV này cũng giống như các Volume thuần khác, tuy nhiên nó tồn tại hoàn toàn độc lập với bất kỳ pod nào sử dụng PV. Hiện tại, Kubernetes hỗ trợ rất nhiều các loại PersistentVolume khác nhau được cài đặt dưới dạng plugin như glusterfs, nfs, csi, ... (Bạn có thể xem thêm chi tiết tại đây).

Persistent Volume Claim

Một người dùng muốn sử dụng không gian lưu trữ (PV) thì cần tạo một PersistentVolumeClaim (PVC). Nó chính là một yêu cầu sử dụng không gian lưu trữ (yêu cầu sử dụng PV). Thông thường người dùng sẽ tạo một manifest PersistentVolumeClaim, chỉ định số lượng, loại lớp lưu trữ (storage class), yêu cầu các mức tài nguyên CPU, bộ nhớ,... Ngoài ra, PVC còn có thể xác định các chế độ quyền truy cập cụ thể vào vùng lưu trữ (ví dụ như: ReadWriteOnce, ReadOnlyMany or ReadWriteMany - bạn có thể xem thêm chi tiết về các quyền này tại đây). Kubernetes sau đó sẽ dựa vào các thông tin này để tìm và dự trữ dung lượng lưu trữ cần thiết.

Để hiểu rõ hơn về mối quan hệ giữa PV và PVC, bạn có thể hình dung chúng giống như là node và pod. Nếu như Pod tiêu thụ tài nguyên của node thì ở đây, PVC sẽ tiêu thụ tài nguyên của PV.

Ví dụ về cách tạo, sử dụng Persistent Volume và Persistent Volume Claim

  • Bước 1: Tạo Persistent Volume

Trong ví dụ này, để đơn giản, mình sẽ hướng dẫn các bạn tạo một hostPath PersistentVolume. hostPath là loại volume storage được Kubernetes hỗ trợ để phát triển và thử nghiệm trên một cụm chỉ có 1 node đơn. Một hostPath PersistentVolume sẽ gắn một file hoặc thư mục ngay trên node máy chủ vào pod của bạn để làm không gian lưu trữ.

Ở đây, mình có 1 file cấu hình cho hostPath PersistentVolume là example-pv-volume.yaml như sau:

apiVersion: v1
kind: PersistentVolume
metadata: name: example-pv-volume labels: type: local
spec: storageClassName: hostpath capacity: storage: 10Gi accessModes: - ReadWriteOnce hostPath: path: "/data"

Sau đó, tiến hành apply file cấu hình:

kubectl apply -f example-pv-volume.yaml

Bạn có thể xem thông tin về PersistentVolume vừa mới tạo được bằng câu lệnh:

kubectl get pv example-pv-volume

  • Bước 2: Tạo PersistentVolumeClaim

Tạo một mainifest PersistentVolumeClaim có tên example-pv-claim.yaml để tạo yêu cầu sử dụng tới PersistentVolume đã tạo ở trên như sau:

apiVersion: v1
kind: PersistentVolumeClaim
metadata: name: example-pv-claim
spec: storageClassName: hostpath accessModes: - ReadWriteOnce resources: requests: storage: 4Gi

Tạo PersistentVolumeClaim với câu lệnh:

kubectl apply -f example-pv-claim.yaml

Sau khi bạn tạo PersistentVolumeClaim, Kubernetes sẽ tìm kiếm một PersistentVolume đáp ứng được các yêu cầu của PersistentVolumeClaim. Nếu Kubernetes tìm thấy một PersistentVolume phù hợp, với cùng một lớp lưu trữ (storageClassName), nó sẽ liên kết xác nhận quyền sở hữu của PV với PVC đó.

Bạn sẽ có thể thấy thông tin này sau khi chạy lệnh lấy thông tin mô tả của PV một lần nữa sau khi tạo PVC:

NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE
example-pv-volume 10Gi RWO Retain Bound default/example-pv-claim hostpath 2m
  • Bước 3: Tạo một pod sử dụng PersistentVolumeClaim

Cuối cùng, bạn sẽ tạo một pod sử dụng PersistentVolumeClaim của bạn như là một volume được gắn vào pod.

Dưới đây là file config pod-use-pvc.yaml để tạo một pod nginx đơn giản sử dụng volume:

apiVersion: v1
kind: Pod
metadata: name: example-pv-pod
spec: containers: - name: task-pv-container image: nginx ports: - containerPort: 80 name: "http-server" volumeMounts: - mountPath: "/usr/share/nginx/html" name: example-pv-storage volumes: - name: example-pv-storage persistentVolumeClaim: claimName: example-pv-claim

Và cuối cùng là tạo pod:

kubectl apply -f pod-use-pvc.yaml

Như vậy, bạn đã có được một pod sử dụng persistence volume là hostpath đang hoạt động. Tuy nhiên, một lưu ý cho bạn là trong cấu hình của pod, nó sẽ chỉ định một Persistent Volume Claim (PVC) mà không phải là một Persistent Volume (PV). Như vậy, dưới cái nhìn của một pod thì PVC sẽ là một volume và 1 pod có thể có nhiều volume thuộc nhiều loại khác nhau.

Tạm kết

Trong thực tế sử dụng, việc lưu trữ tạm thời (Ephemeral Storage), sự tồn tại của các volume phụ thuộc vào sự tồn tại của pod là không đủ cho hầu hết các ứng dụng. Để có khả năng phục hồi, đáng tin cậy, khả dụng và có thể thay đổi kích cỡ, các ứng dụng Kubernetes cần có khả năng chạy nhiều phiên bản trên các Pod và chính các Pod này có thể được lên lịch hoặc đặt trên các Node khác nhau trong cluster Kubernetes. Những gì cần là một kho lưu trữ ổn định, bền bỉ vượt xa Pod hoặc thậm chí là Node mà Pod đang chạy. Cho nên Persistent Storage là cần thiết! Hi vọng, qua bài viết của mình, các bạn sẽ phần nào hiểu và nắm được cách sử dụng Persistent Volume (PV) và Persistent Volume Claim (PVC) cơ bản để tạo một Persistent Storage. Cảm ơn các bạn đã theo dõi bài viết của mình.

Reference

Bình luận

Bài viết tương tự

- vừa được xem lúc

Deploying A Containerized Web Application On Kubernetes

1. Overview. Kubernetes is an open source project (available on kubernetes.io) which can run on many different environments, from laptops to high-availability multi-node clusters; from public clouds to on-premise deployments; from virtual machines to bare metal.

0 0 26

- vừa được xem lúc

Kubernetes - Học cách sử dụng Kubernetes Namespace cơ bản

Namespace trong Kubernetes là gì. Tại sao nên sử dụng namespace.

0 0 96

- vừa được xem lúc

[Kubernetes] Kubectl và các command cơ bản

Mở đầu. Kubectl là công cụ quản trị Kubernetes thông qua giao diện dòng lệnh, cho phép bạn thực thi các câu lệnh trong Kubernetes cluster.

0 0 39

- vừa được xem lúc

Triển khai EFK Stack trên Kubernetes

EFK stack on K8S. Giới thiệu. Một hệ thống có thể chạy nhiều dịch vụ hoặc ứng dụng khác nhau, vì vậy việc. theo dõi hệ thống là vô cùng cần thiết.

0 0 54

- vừa được xem lúc

Thực hành Kubernetes (K8S) bằng cách sử dụng lệnh Command

Bài hướng dẫn hôm nay sẽ hướng dẫn sử dụng K8S bằng cách sử dụng câu lệnh thay vì UI trên web. Có 2 lựa chọn để thực hiện:. . Sử dụng Cloud Shell.

0 0 42

- vừa được xem lúc

Kubernetes best practices - Liveness và Readiness Health checks

Mở đầu. Kubernetes cung cấp cho bạn một framework để chạy các hệ phân tán một cách mạnh mẽ.

0 0 35