K8S 指定 nfs 掛載


在項目中,pod 需要掛載外部的文件才可以使用
創建 nfs 掛載點,並把文件放進去

mkdir -p /data2/nfs/test_gc_wms/

vi /etc/exports

/data2/nfs/test_gc_wms          192.168.0.0/24(rw,sync,no_root_squash)

# 重啟 nfs
systemctl restart rpcbind
systemctl restart nfs

# 關閉防火牆
systemctl stop firewalld

# 把需要的文件放入 /data2/nfs/test_gc_wms/

# 測試是否正常提供 nfs 目錄
showmount -e 192.168.0.168

創建 pv 和 pvc

vi nfs.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: kl-test        # pv 名字
  namespace: klvchen
  labels:
    app: kl-test       # 定義 labels ap: kl-test
spec:
  capacity:
    storage: 10Mi      # 定義容量
  accessModes:
    - ReadWriteMany    # 訪問模式
  persistentVolumeReclaimPolicy: Retain # 回收策略
  storageClassName: nfs                 # 定義 storageClassName 只有相同名字的才能綁定在一起
  nfs:
    path: /data2/nfs/test_gc_wms
    server: 192.168.0.168

---

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: kl-test      # pvc 名字
  namespace: klvchen
spec:
  storageClassName: nfs  # Name of Storage Class Name, use same class name defined in pv
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Mi     # amout of Storage request
  selector:
    matchLabels:
      app: kl-test      # 指定 pv 的標簽 kl-test

kubectl apply -f nfs.yaml

創建使用 pvc 的例子

# 注意該 worker 節點需要安裝 nfs-utils 
yum install nfs-utils -y

vi demo.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-pvc
  namespace: klvchen
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nfs-pvc
  template:
    metadata:
      labels:
        app: nfs-pvc
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: kl-test
          mountPath: /usr/share/nginx/html
      volumes:
      - name: kl-test
        persistentVolumeClaim:
          claimName: kl-test

kubectl apply -f demo.yaml

若想把 nfs 一個目錄下兩個文件夾分開掛載,可以使用 subPath, 在 nfs 目錄下必須先包含 subPath 的目錄

cat /etc/exports
/data2/nfs/test_gc_klvchen         172.18.186.0/24(rw,sync,no_root_squash)

ls /data2/nfs/test_gc_klvchen/
certs  sensitive

# pvc 與 pv 不需要改變,在配置 volumeMounts 的時候指定 subPath 即可以讓 nfs 目錄下的 
# certs 掛載到 容器中的 /usr/local/certs;
# sensitive 掛載到容器中的 /usr/local/sensitive

    volumeMounts
      - name: "gc-klvchen"
        mountPath: "/usr/local/certs"
        subPath: "certs"
      - name: "gc-klvchen"
        mountPath: "/usr/local/sensitive"
        subPath: "sensitive"
  volumes:
    - name: "gc-klvchen"
      persistentVolumeClaim:
        claimName: "gc-klvchen"

AccessModes 是用來對 PV 進行訪問模式的設置,用於描述用戶應用對存儲資源的訪問權限,訪問權限包括下面幾種方式:
- ReadWriteOnce(RWO):讀寫權限,但是只能被單個節點掛載
- ReadOnlyMany(ROX):只讀權限,可以被多個節點掛載
- ReadWriteMany(RWX):讀寫權限,可以被多個節點掛載

persistentVolumeReclaimPolicy(回收策略) 這里指定的 PV 的回收策略為 Recycle,目前 PV 支持的策略有三種:
- Retain(保留)- 保留數據,需要管理員手工清理數據
- Recycle(回收)- 清除 PV 中的數據,效果相當於執行 rm -rf /thevoluem/*
- Delete(刪除)- 與 PV 相連的后端存儲完成 volume 的刪除操作,當然這常見於雲服務商的存儲服務,比如 ASW EBS。
不過需要注意的是,目前只有 NFS 和 HostPath 兩種類型支持回收策略。當然一般來說還是設置為 Retain 這種策略保險一點。

PV 的生命周期中的狀態,可能會處於4中不同的階段:
- Available(可用):表示可用狀態,還未被任何 PVC 綁定
- Bound(已綁定):表示 PVC 已經被 PVC 綁定
- Released(已釋放):PVC 被刪除,但是資源還未被集群重新聲明
- Failed(失敗): 表示該 PV 的自動回收失敗

StorageClassName 
相同的PV和PVC才能夠綁定到一起。
例如:PVC 的StorageClassName設置為 "nfs",那么它只會和 StorageClassName 也為 "nfs" 的 PV 綁定到一起。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM