k8s添加本地存储类
添加存储类
kubectl create -f - <<EOF
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
EOF
kubectl patch storageclass local-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
手动创建PV
#指定主机创建,我的主机名是debian,PV的名字不能重复
kubectl get nodes
kubectl create -f - <<EOF
apiVersion: v1
kind: PersistentVolume
metadata:
name: example-local-pv-1
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /mnt/test
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- debian
EOF
建立PVC
kubectl create -f - <<EOF
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: example-local-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: local-storage
EOF
#注意:此时PVC不会立马绑定到PV,其等待Pod被调度时才会绑定到PV上,当前PVC状态为Pending
kubectl describe pvc example-local-claim
建立应用
kubectl create -f - <<'EOF'
apiVersion: v1
kind: Pod
metadata:
name: localpv-pod
spec:
containers:
- name: localpv-po-container
image: busybox
imagePullPolicy: IfNotPresent
command: [ "/bin/sh", "-c", "while true; do sleep 2; echo $(date) $(hostname)>> /mnt/test/test.log; done" ]
volumeMounts:
- mountPath: "/mnt/test"
name: example-pv-storage
volumes:
- name: example-pv-storage
persistentVolumeClaim:
claimName: example-local-claim
EOF
tail -f /mnt/test/test.log
删除PV时需要按如下流程执行操作:
删除使用这个PV的Pod
从宿主机移除本地磁盘(比如,umount 它)
删除 PVC
删除 PV