Day 5: Kubernetes 基本架構及安裝
Day 6: 使用 kubectl 指令管理 Kubernetes 集群
Day 7: Kubernetes Pod 與 Deployment 深入解析
Day 8: Kubernetes Service 與負載均衡機制
Day 9: Kubernetes Persistent Volumes (PV) 與 Persistent Volume Claims (PVC)
Kubernetes 中的 Persistent Volume(PV)和 Persistent Volume Claim(PVC)是用來管理持久性存儲的。PV 是集群中的一塊存儲資源,可以被 Pod 使用,而 PVC 是用來請求這些存儲資源的聲明。PVC 允許 Pod 動態請求存儲,而不需要知道底層存儲的具體實現方式。這種機制確保了數據在 Pod 重啟或遷移時依然保留。
打開編輯器 pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
打開編輯器 pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
兩個文件長得超級像齁
區分的方法可以想做pv對應到了本地的/mnt/data目錄(或你的NAS,你的雲端存儲)
而pvc待會下面會呼叫到
如何應用他?還留著前兩篇部署的apache嗎?
打開編輯器 deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: apache-deployment
spec:
replicas: 3
selector:
matchLabels:
app: apache
template:
metadata:
labels:
app: apache
spec:
containers:
- name: apache
image: httpd:2.4
ports:
- containerPort: 80
volumeMounts:
- name: apache-storage
mountPath: /usr/local/apache2/htdocs # 指定容器中的掛載路徑
volumes:
- name: apache-storage
persistentVolumeClaim:
claimName: my-pvc # PVC 的名稱
套用上面的建立與修改
kubectl apply -f pv.yml
kubectl apply -f pvc.yml
kubectl apply -f deployment.yml
至此,容器將使用 my-pvc 中的存儲
這樣即使 Pod 重啟或被重新調度或發生其他意外中斷
容器內 /usr/local/apache2/htdocs 的數據也會保留在 PV 裡面
驗證
kubectl get pods
kubectl get pvc
kubectl get pv
#安裝nfs軟體包
sudo apt install nfs-common
showmount -e 你的NAS域名
mount.nfs4 -o intr,nolock,noatime,proto=tcp 你的NAS域名:/路徑
#
sudo nano /etc/fstab
貼入以下內容(/mnt/public是想掛回來本地的目標路徑)
你的NAS域名:/路徑 /mnt/public nfs4 defaults,timeo=900,retrans=5,_netdev,auto 0 0
PVC這樣寫
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nfs-claim
namespace: nfs
spec:
accessModes:
- ReadWriteMany
storageClassName: nfs-client
resources:
requests:
storage: 2Gi
記得deployment.yml的尾段也要加上volumeMounts:跟volumes:喔!