Kubernetes: Volume, PVC, PV và NFS - Triển khai SQL Server với NFS tĩnh và động

Lý do cần sử dụng Volume

Hệ thống tệp tin trong container có tính tạm thời, gây khó khăn khi triển khai ứng dụng quan trọng. Khi container crash, kubelet khởi động lại nhưng dữ liệu sẽ bị mất. Ngoài ra, các container cùng Pod thường cần chia sẻ tệp tin. Volume trong Kubernetes giải quyết vấn đề này bằng cách cung cấp không gian lưu trữ chung.

Các loại Volume

Kubernetes hỗ trợ nhiều loại Volume, bao gồm:

emptyDir

# emptyDir tồn tại trong suốt vòng đời Pod, nhưng bị xóa khi Pod bị xóa
apiVersion: v1
kind: Pod
metadata:
  name: pod-empty-volume
spec:
  containers:
  - name: app-container
    image: myapp:latest
    volumeMounts:
    - mountPath: /shared-data
      name: shared-volume
  - name: helper-container
    image: busybox:latest
    command: ["sh", "-c", "sleep 3600"]
    volumeMounts:
    - mountPath: /common-data
      name: shared-volume
  volumes:
  - name: shared-volume
    emptyDir: {}

NFS (Network File System)

NFS là giao thức chia sẻ tệp tin mạng dựa trên RPC, cho phép truy cập tệp tin từ xa như tệp tin cục bộ. Đặc điểm nổi bật:

  • Tính ổn định cao
  • Hỗ trợ ghi đồng thời
  • Khả năng mở rộng tốt

Nguyên lý hoạt động NFS sử dụng cơ chế RPC để thực hiện gọi thủ tục từ xa. Qua hệ điều hành, các yêu cầu truy cập tệp tin được gửi qua TCP/IP đến server NFS, nơi xử lý và trả về kết quả.

emptyDir và hostPath có thể chia sẻ dữ liệu giữa container nhưng bị giới hạn về tính bền vững và khả năng chia sẻ qua node. Khi cần lưu trữ bền vững và chia sẻ qua nhiều node, nên sử dụng hệ thống lưu trữ mạng (NAS).

Cài đặt server NFS

# Cấu hình server NFS
mkdir -pv /data/nfs-shared
chmod a+rw /data/nfs-shared

# Trên Ubuntu
sudo apt update
sudo apt install nfs-kernel-server
echo "/data/nfs-shared 192.168.1.0/24(rw,sync,no_subtree_check)" >> /etc/exports
sudo exportfs -ra
sudo systemctl restart nfs-kernel-server

# Trên CentOS
sudo yum install nfs-utils rpcbind
sudo systemctl enable --now nfs-server rpcbind
echo "/data/nfs-shared *(rw,sync,no_root_squash)" >> /etc/exports
sudo exportfs -ra
sudo systemctl restart nfs-server

# Các tùy chọn cấu hình:
# rw: Cho phép ghi
# sync: Đồng bộ hóa thao tác
# no_root_squash: Giữ nguyên quyền root từ client

Thẻ: Kubernetes NFS PVC PV SQL Server

Đăng vào ngày 28 tháng 5 lúc 15:58