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
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.yamlapiVersion: 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
Tạo PersistentVolumeClaim NFS
2-pvc-nfs.yamlapiVersion: 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
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
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
Ổ đĩ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)