Local Path Provisioner
是一個 Container Storage Interface (CSI)
,也就是用來提供k8s環境下建立Persistent Volume (PV)
的插件
安裝
command
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.24/deploy/local-path-storage.yaml
會建立local-path-storage
這個namespace,要查看運行狀態,可以到裡面看log
kubectl -n local-path-storage logs pods/local-path-provisioner-7f8667b75c-hjrrb
使用configmap來給予設定
kind: ConfigMap
apiVersion: v1
metadata:
name: local-path-config
namespace: local-path-storage
data:
config.json: |-
{
"nodePathMap":[
{
"node":"DEFAULT_PATH_FOR_NON_LISTED_NODES",
"paths":["/opt/local-path-provisioner"]
},
{
"node":"yasker-lp-dev1",
"paths":["/opt/local-path-provisioner", "/data1"]
},
{
"node":"yasker-lp-dev3",
"paths":[]
}
]
}
setup: |-
#!/bin/sh
set -eu
mkdir -m 0777 -p "$VOL_DIR"
teardown: |-
#!/bin/sh
set -eu
rm -rf "$VOL_DIR"
helperPod.yaml: |-
apiVersion: v1
kind: Pod
metadata:
name: helper-pod
spec:
containers:
- name: helper-pod
image: busybox
config.json說明
nodePathMap
用來表示在各自的Node上,存資料的位置,規則如下
- 沒有設定path的node會套用
DEFAULT_PATH_FOR_NON_LISTED_NODES
的設定 - 如果有列出來,但path是空的,代表這個Node不會允許用local-path-provisioner來建pv
- 每個node的path可以給好幾個位置,當裡面超過一個位置,每次建的時候會隨機選一個來用。
- path一定要是絕對路徑
- 在同個node裡面,同一個path不能重複列。
- 同一個node不能重複列出來。
- 不允許使用
/
根目錄
sharedFileSystemPath
- 假如有一個file system有被mount在所有的Node上時,可以使用這個設定來指定,指定都用同一個位置。
- 和nodePathMap互斥,所以當有使用
sharedFileSystemPath
時,nodePathMap
一定要是[]
- 只有使用了
sharedFileSystemPath
時,才會支援ReadOnlyMany
、ReadWriteMany
setup
每個volume在建立之前會先做的script,用來準備node上volume資料夾用。
teardown
每個volume在被刪掉後會做的script,用來清掉node上volume資料夾用。
helperPod.yaml
用來執行setup和teardown的pod template
setup和teardown上面可以使用的環境變數
環境變數 | 說明 |
---|---|
VOL_DIR | 放置volume的路徑(nodePath寫的) |
VOL_MODE | The PersistentVolume mode (Block or Filesystem). |
VOL_SIZE_BYTES | Requested volume size in bytes. |
設定storageClass來驅動local-path-provisioner
provisioner欄位,官方Github寫的cluster.local/local-path-provisioner
沒有用,反而要用rancher.io/local-path才有用。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: incloud-lvm
provisioner: rancher.io/local-path
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain