9. kubernetes资源——pv/pvc持久卷

kubernetes资源------pv/pvc持久卷

一、volume数据卷

用于pod中的数据的持久化存储

支持很多的卷类型, 例如EmptyDir、hostPath、NAS、SAN、CEPH

1、hostPath

挂载物理机上的目录做持久化

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
    name: test1-hostpath
spec:
    replicas: 1
    selector:
         matchLabels:
             app: hostpath
    template:
       metadata:
           labels:
              app: hostpath
       spec:
           containers:
           - name: test1-hostpath
             image: centos:7
             imagePullPolicy: IfNotPresent
             command:
             - sleep
             - "3600"
             volumeMounts:													// 挂载卷
                 - name: test1-volume
                   mountPath: /test1
           volumes:																	// 创建卷,名称为test1-volume, 类型为hostpath
              - name: test1-volume
                hostPath:
                   path: /test/data
bash 复制代码
[root@k8s-master ~]# kubectl get pod -o wide
NAME                              READY   STATUS    RESTARTS   AGE    IP              NODE                   NOMINATED NODE   READINESS GATES
test1-hostpath-584f599fcf-wzt2q   1/1     Running   0          117s   10.88.201.193   k8s-node01.linux.com   <none>           <none>
[root@k8s-master ~]# 
[root@k8s-master ~]# kubectl exec -ti test1-hostpath-584f599fcf-wzt2q bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
[root@test1-hostpath-584f599fcf-wzt2q /]# 
[root@test1-hostpath-584f599fcf-wzt2q /]# touch /test1/{1..10}
[root@test1-hostpath-584f599fcf-wzt2q /]# ls /test1/
1  10  2  3  4  5  6  7  8  9
[root@test1-hostpath-584f599fcf-wzt2q /]# 
[root@test1-hostpath-584f599fcf-wzt2q /]# exit
exit

2、挂载nfs实现持久化

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
    name: test2-pod-nfs
spec:
    replicas: 1
    selector:
         matchLabels:
             app: nfs
    template:
       metadata:
           labels:
              app: nfs
       spec:
           containers:
           - name: test2-pod-nfs
             image: centos:7
             imagePullPolicy: IfNotPresent
             command:
             - sleep
             - "3600"
             volumeMounts:
                 - name: test2-nfs-volume
                   mountPath: /test2
           volumes:
              - name: test2-nfs-volume
                nfs:
                   server: "192.168.140.13"
                   path: "/test2"

二、pv/pvc 持久卷/持久卷声明

1、pv/pvc介绍

pv, 持久卷,后端真实存储空间的映射

pvc, 持久卷声明,使用存储的申请

使用流程:

1、创建pv,描述后端真实的存储空间

2、创建pvc,描述使用存储的申请

3、创建pod,挂载pvc使用存储

2、pv/pvc的使用流程

2.1 创建pv

yaml 复制代码
apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv-2g
spec:
    capacity:
        storage: 2G
    accessModes:
        - ReadWriteMany
    persistentVolumeReclaimPolicy: Recycle
    nfs:
       server: "192.168.140.13"
       path: "/test6"
yaml 复制代码
apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv-3g
spec:
    capacity:
        storage: 3G
    accessModes:
        - ReadWriteOnce
    persistentVolumeReclaimPolicy: Recycle
    nfs:
       server: "192.168.140.13"
       path: "/test7"

accessModes:用于指定PV的访问模式,共有四种

  • ReadWriteOnce

    被单个节点以读写模式挂载

  • ReadWriteMany

    被多个节点以读写模式挂载

  • ReadOnlyMany

    被多个节点以只读模式挂载

  • ReadOnlyOnce, k8s 1.29

    被单节点以只读模式挂载

persistentVolumeReclaimPolicy:

指定回收模式是自动回收,当空间被释放时,K8S自动清理,然后可以继续绑定使用

bash 复制代码
[root@k8s-master pvTest]# kubectl get pv
NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
pv-2g   2G         RWX            Recycle          Available                          <unset>                          2m26s
pv-3g   3G         RWO            Recycle          Available                          <unset>                          46s

2.2 创建pvc

yaml 复制代码
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: pvc-1g
spec:
    accessModes:
        - ReadWriteMany
    resources:
        requests:
            storage: 1G
bash 复制代码
[root@k8s-master pvTest]# kubectl get pvc
NAME     STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
pvc-1g   Bound    pv-2g    2G         RWX                           <unset>                 10s

```bash
[root@k8s-master pvTest]# kubectl get pv
NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM            STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
pv-2g   2G         RWX            Recycle          Bound       default/pvc-1g                  <unset>                          10m
pv-3g   3G         RWO            Recycle          Available                                   <unset>                          8m34s

2.3 创建pod,使用pv做持久化

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
    name: test1-pod
spec:
    replicas: 1
    selector:
         matchLabels:
             app: pv
    template:
       metadata:
           labels:
              app: pv
       spec:
           containers:
           - name: test1-pod
             image: centos:7
             imagePullPolicy: IfNotPresent
             command:
             - sleep
             - "3600"
             volumeMounts:
                 - name: test1-pod-pv-volume
                   mountPath: /test1
           volumes:
              - name: test1-pod-pv-volume
                persistentVolumeClaim:														// 通过关联pvc创建数据卷
                     claimName: pvc-1g
相关推荐
为什么这亚子1 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
ZHOU西口3 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
牛角上的男孩4 小时前
Istio Gateway发布服务
云原生·gateway·istio
JuiceFS5 小时前
好未来:多云环境下基于 JuiceFS 建设低运维模型仓库
运维·云原生
景天科技苑6 小时前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统
wclass-zhengge6 小时前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇6 小时前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
川石课堂软件测试8 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
昌sit!15 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
A ?Charis17 小时前
Gitlab-runner running on Kubernetes - hostAliases
容器·kubernetes·gitlab