Skip to main content

Kubernetes - Volume

Volume trong Kubernetes là một tài nguyên quan trọng để quản lý lưu trữ dữ liệu trong các Pod. Nó cho phép các Pod chia sẻ dữ liệu với nhau và lưu trữ dữ liệu khi Pod bị xóa và khởi chạy lại.

kubernetes.png

Một Volume trong Kubernetes được định nghĩa bằng một file YAML, bao gồm các thông tin như tên Volume, loại Volume, và các thông tin khác. Có nhiều loại Volume khác nhau trong Kubernetes, bao gồm:

  • emptyDir: một Volume trống được tạo ra khi một Pod được khởi động và bị xóa khi Pod bị xóa.
  • hostPath: một Volume được gắn kết với một đường dẫn trên máy chủ, cho phép các Pod truy cập dữ liệu trực tiếp trên máy chủ.
  • persistentVolumeClaim: một Volume được yêu cầu từ cụm để sử dụng với một PersistentVolume.

Bạn có thể tạo một Volume mới bằng lệnh kubectl create -f <tên file YAML>. Sau đó, bạn có thể sửa file YAML của Volume bằng lệnh kubectl edit <tên Volume>.

Ví dụ: Sau đây minh họa cách sử dụng Volume trong Kubernetes để chia sẻ dữ liệu giữa hai Pod.

Giả sử bạn có hai Pod chạy trong cùng một cụm Kubernetes. Pod đầu tiên là một Pod Apache chứa tất cả các tệp tin cần thiết để chạy một trang web đơn giản. Pod thứ hai là một Pod MySQL chứa một cơ sở dữ liệu MySQL. Bạn muốn chia sẻ dữ liệu trang web giữa hai Pod này, để trang web có thể truy cập cơ sở dữ liệu.

Đầu tiên, bạn tạo một Volume và định nghĩa nó trong file YAML như sau:

apiVersion: v1
kind: Volume
metadata:
  name: my-volume
spec:
  emptyDir: {}

Sau đó, bạn sửa file YAML của Pod Apache để sử dụng Volume này bằng cách thêm đoạn mã sau:

spec:
  containers:
    - name: apache
      image: httpd
      volumeMounts:
        - name: my-volume
          mountPath: /var/www/html
  volumes:
    - name: my-volume
      emptyDir: {}

Cuối cùng, bạn sửa file YAML của Pod MySQL để sử dụng Volume này bằng cách thêm đoạn mã sau:

spec:
  containers:
    - name: mysql
      image: mysql
      volumeMounts:
        - name: my-volume
          mountPath: /var/lib/mysql
  volumes:
    - name: my-volume
      emptyDir: {}

Sau khi triển khai các file YAML này, Pod Apache và Pod MySQL sẽ có thể truy cập cùng một Volume và chia sẻ dữ liệu trang web.