k8s day10 PV&PVC 实战

233 阅读1分钟

准备工作

登录集群中一个节点,创建目录并存放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

参考

kubernetes.io/zh/docs/tas…