Cài đặt NFS làm Server chia sẻ file (Kubernetes)

Sử dụng Volume để các POD cùng một dữ liệu, cần một loại đĩa mạng, ví dụ này sẽ thực hành dùng NFS. Ta sẽ cài đặt một Server NFS trực tiếp trên một Node của Kubernetes (độc lập, không chạy POD, nếu muốn bạn có thể cài trên một máy khác chuyên chia sẻ file).

Ta sẽ cài vào Node master (Node này là HDH CentOS 7), vậy hãy SSH vào và thực hiện:

Tham khảo: Cài NFS trên CentOS

yum install nfs-utils
systemctl enable rpcbind
systemctl enable nfs-server
systemctl enable nfs-lock
systemctl enable nfs-idmap
systemctl start rpcbind
systemctl start nfs-server
systemctl start nfs-lock
systemctl start nfs-idmap

Tạo (mở) file /etc/exports để soạn thảo, ở đây sẽ cấu hình để chia sẻ thư mục /data/mydata/

vi /etc/exports
/data/mydata  *(rw,sync,no_subtree_check,insecure)

Lưu thông lại, và thực hiện

# Tạo thư mục
mkdir -p /data/mydata
chmod -R 777 /data/mydata

# export và kiểm tra cấu hình chia sẻ
exportfs -rav
exportfs -v
showmount -e

# Khởi động lại và kiểm tra dịch vụ
systemctl stop nfs-server
systemctl start nfs-server
systemctl status nfs-server
kubernetes

Server này có địa chỉ IP 172.16.10.100, giờ vào máy ở Node worker1.xtl (192.168.10.101) thực hiện mount thử ổ đĩa xem có hoạt động không.

ssh root@172.16.10.101
yum install nfs-utils
mkdir /home/data

# Gắn ổ đĩa
mount -t nfs 172.16.10.100:/data/mydata /home/data/

# Kiểm tra xong, hủy gắn ổ đĩa
umount /home/data

Như vậy đã có Server chia sẻ file NFS ở địa chỉ IP 192.168.10.100, đường dẫn chia sẻ file /data/data1

Tạo PersistentVolume NFS

1-pv-nfs.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv1
spec:
  storageClassName: mystorageclass
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: "/data/mydata/"
    server: "172.16.10.100"

Triển khai và kiểm tra

kubectl apply -f 1-pv-nfs.yaml
kubectl get pv -o wide
kubectl describe pv/pv1
kubernetes

Tạo PersistentVolumeClaim NFS

2-pvc-nfs.yaml
apiVersion: v1
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc1
spec:
  storageClassName: mystorageclass
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

Triển khai và kiểm tra

kubectl apply -f 2-pvc-nfs.yaml
kubectl get pvc,pv -o wide
kubernetes

Mount PersistentVolumeClaim NFS vào Container

Ta sẽ triển khai chạy máy chủ web từ image httpd.

SSH vào máy master, vào thư mục chia sẻ /data/mydata tạo một file index.html với nội dung đơn giản, ví dụ:

<h1>Apache is running ...</h1>

Tạo file triển khai, gồm có POD chạy http và dịch vụ kiểu NodePort, ánh xạ cổng host 31080 vào cổng 80 của POD

3-httpd.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd
  labels:
    app: httpd
spec:
  replicas: 1
  selector:
    matchLabels:
      app: httpd
  template:
    metadata:
      labels:
        app: httpd
    spec:
      volumes:
        - name: htdocs
          persistentVolumeClaim:
            claimName: pvc1
      containers:
      - name: app
        image: httpd
        resources:
          limits:
            memory: "100M"
            cpu: "100m"
        ports:
          - containerPort: 80
        volumeMounts:
          - mountPath: /usr/local/apache2/htdocs/
            name: htdocs
---
apiVersion: v1
kind: Service
metadata:
  name: httpd
  labels:
    run: httpd
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
    nodePort: 31080
  selector:
    app: httpd

Sau khi triển khai, truy cập từ một IP của các node và cổng 31080

kubernetes

Ổ đĩa đã hoạt động chính xác, giờ bạn có thể scale, update dù POD ở đâu thì chúng vẫn truy cập một loại ổ đĩa (đọc, ghi)

Đăng ký theo dõi ủng hộ kênh