k8s--基础--18.6--存储卷--类型--PVC实践

k8s–基础–18.6–存储卷–类型–PVC实践


1、创建pv

master1节点操作

1.1、在nfs中创建多个存储目录,在nfs服务器上操作

# 创建目录
mkdir /nfs/share3/v{1,2,3,4} -p 

# 设置共享文件配置
cat >> /etc/exports <<EOF
/nfs/share3/v1 192.168.187.0/24(rw,no_root_squash)
/nfs/share3/v2 192.168.187.0/24(rw,no_root_squash)
/nfs/share3/v3 192.168.187.0/24(rw,no_root_squash)
/nfs/share3/v4 192.168.187.0/24(rw,no_root_squash)
EOF

# 使配置文件生效
exportfs -arv 
# 重启nfs
service nfs restart

在这里插入图片描述

1.2、怎么把上面存储目录做成pv

# 查看pv的创建方法
kubectl explain pv 
# 查看怎么把nfs定义成pv
kubectl explain pv.spec.nfs 

1.3、创建pv

pv是集群级别的资源,不需要定义namespace

1.3.1、脚本

vi /root/test2/pv.yaml  

内容


apiVersion: v1
kind: PersistentVolume
metadata:
  name:  v1
spec:
  capacity:
    # pv的存储空间容量
    storage: 100Mi
    # 访问模板
  accessModes: ["ReadWriteOnce"]
  nfs:
    # 把nfs的存储空间创建成pv
    path: /nfs/share3/v1
    server: 192.168.187.154
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name:  v2
spec:
  capacity:
      storage: 200Mi
  accessModes: ["ReadWriteMany"]
  nfs:
    path: /nfs/share3/v2
    server: 192.168.187.154
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name:  v3
spec:
  capacity:
      storage: 300Mi
  accessModes: ["ReadOnlyMany"]
  nfs:
    path: /nfs/share3/v3
    server: 192.168.187.154
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name:  v4
spec:
  capacity:
      storage: 400Mi
  accessModes: ["ReadWriteOnce","ReadWriteMany"]
  nfs:
    path: /nfs/share3/v4
    server: 192.168.187.154

1.3.1.1、accessModes字段说明
kubectl explain pv.spec.accessModes

在这里插入图片描述

1.3.2、执行

kubectl  apply  -f /root/test2/pv.yaml  
# 查看
kubectl   get pv   

在这里插入图片描述

2、创建pvc

master1节点操作

2.1、查看字段定义

# 其他字段不懂通过explain来查看
kubectl explain pvc

2.2、创建脚本

vi /root/test2/pvc-v1.yaml

内容

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  # pvc名称
  name: pvc-v1
spec:
  # 访问模式
  accessModes: ["ReadWriteMany"]
  resources:
    requests:
      # pvC的存储空间容量
      storage: 190Mi
 

2.3、执行

kubectl apply -f /root/test2/pvc-v1.yaml

# 查看pv
kubectl   get pv   
# 查看pvc
kubectl   get pvc   

在这里插入图片描述

pvc从pv中选择一个 accessModes包含ReadWriteMany,且容量>=190M的pv。
上面选择了v2

3、创建pod

  1. master1节点操作
  2. 如果原先pod-nginx-volume.yaml已经被使用,需要先删除
kubectl delete -f /root/test2/pod-nginx-volume.yaml  

3.1、创建脚本

vi /root/test2/pod-nginx-volume.yaml

内容

apiVersion: v1
kind: Pod
metadata:
  # pod的名称
  name: pod-nginx-volume
spec: 
  containers:
  - name: c-nginx
    image: nginx:1.14
    # 容器挂载存储卷
    volumeMounts:
    # 容器存储卷目录
    - mountPath: /usr/share/nginx/html
      # 引入名称为nginx-volume的存储定义
      name: nginx-volume
  # 设置存储卷定义
  volumes: 
    # 存储卷类型
    - persistentVolumeClaim:
        # pvc名称
        claimName: pvc-v1
      # 存储卷名称
      name: nginx-volume   
 

3.2、执行

kubectl apply -f /root/test2/pod-nginx-volume.yaml 
kubectl get pods pod-nginx-volume -o wide

在这里插入图片描述

4、测试

4.1、在容器存储卷目录 创建文件

kubectl -it exec  pod-nginx-volume -c c-nginx -- /bin/sh
cd /usr/share/nginx/html
echo 'hello' > index.html

在这里插入图片描述

4.2、验证回收策略retain

pvc和pv绑定,如果使用默认的回收策略retain,那么删除pvc之后,pv会处于released状态
# 先删除Pod
kubectl delete -f /root/test2/pod-nginx-volume.yaml  

# 再删除pvc
kubectl delete -f /root/test2/pvc-v1.yaml 
# 查看
kubectl get pv

在这里插入图片描述

我们想要继续使用这个pv,需要手动删除pv,删除pv,不会删除pv里的数据,删除后,在创建pv
kubectl delete pv v2
# 查看
kubectl get pv

在这里插入图片描述
在这里插入图片描述

删除后,在创建pv


kubectl  apply  -f /root/test2/pv.yaml  
# 查看
kubectl get pv

在这里插入图片描述

当我们重新创建pvc时还会和这个最匹配的pv绑定,数据还是原来数据,不会丢失。
# 创建pvc
kubectl apply -f /root/test2/pvc-v1.yaml
# 查看
kubectl   get pvc   
# 进入容器,查看数据是否存在
kubectl apply -f /root/test2/pod-nginx-volume.yaml 
kubectl -it exec  pod-nginx-volume -c c-nginx -- /bin/sh
cd /usr/share/nginx/html
cat index.html

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值