准备工作
登录集群中一个节点,创建目录并存放index.html,等会我要挂载他
sudo mkdir /mnt/data
sudo sh -c "echo 'Hello from Kubernetes storage' > /mnt/data/index.html"
# 输出应该是:Hello from Kubernetes storage
cat /mnt/data/index.html
创建一个名为task-pv-volum的PV
pv-volumn.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: task-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
创建一个名为task-pv-claim的PVC
pv-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: task-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
注意他们有共同的storageClassName,这样就建立一一对应的关系
最后定义一个Pod去使用这个PVC
pv-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: task-pv-pod
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: task-pv-claim
containers:
- name: task-pv-container
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage
kubectl create -f pv-volume.yaml
# 输出结果显示该 PersistentVolume 的状态(STATUS) 为 Available。 这意味着它还没有被绑定给 PersistentVolumeClaim。
kubectl get pv task-pv-volume
# 注意 相同的 storageClass pvc会绑定pv
kubectl create -f pv-claim.yaml
# 再次查看 PersistentVolume 信息, 现在输出的 STATUS 为 Bound。
kubectl get pv task-pv-volume
# 输出结果表明该 PersistentVolumeClaim 绑定了你的 PersistentVolume task-pv-volume。
kubectl get pvc task-pv-claim
kubectl apply -f pv-pod.yaml
kubectl get pod task-pv-pod
# 进到一个pod里
kubectl exec -it task-pv-pod -- /bin/bash
root@task-pv-pod:/# apt-get update root@task-pv-pod:/# apt-get install curl root@task-pv-pod:/# curl localhost
输出结果是你之前写到 hostPath 卷中的 index.html 文件中的内容:
Hello from Kubernetes storage
如果你看到此消息,则证明你已经成功地配置了 Pod 使用 PersistentVolumeClaim 的存储。
清理
kubectl delete pod task-pv-pod
kubectl delete pvc task-pv-claim
kubectl delete pv task-pv-volume