k8s-持久化存储

k8s持久化存储:emptyDir

k8s**emptyDir类型的Volume是在Pod分配到Node上时被创建,Kubernetes会在Node上自动分配一个目录,因此无需指定宿主机Node上对应的目录文件。 这个目录的初始内容为空,当Pod从Node上移除时,emptyDir中的数据会被永久删除。emptyDir Volume主要用于某些应用程序无需永久保存的临时目录,多个容器的共享目录等。**

创建一个pod,挂载临时目录emptyDir

vim emptydir.yaml

apiVersion: v1

kind: Pod

metadata:

name: pod-empty

spec:

containers:

  • name: container-empty

image: nginx

imagePullPolicy: IfNotPresent

volumeMounts:

  • mountPath: /cache

name: cache-volume ##与volumes中的name保持一致

volumes:

  • emptyDir: {}

name: cache-volume

持久化存储:hostPath

hostPath Volume是指Pod挂载宿主机上的目录或文件。 hostPath Volume使得容器可以使用宿主机的文件系统进行存储,hostpath(宿主机路径):节点级别的存储卷,在pod被删除,这个存储卷还是存在的,不会被删除,所以只要同一个pod被调度到同一个节点上来,在pod被删除重新被调度到这个节点之后,对应的数据依然是存在的。

创建一个pod,挂载hostPath存储卷

vim hostpath.yaml

用 kubectl get pod -owide 查看挂在哪个node上,在该node上的挂载目录上创建文件或写入内容,

再回到master服务器上查看kubectl exec test-hostpath -- ls /usr/share/nginx/html

**hostpath存储卷缺点 **

单节点,pod删除之后重新创建必须调度到同一个node节点,数据才不会丢失

k8s持久化存储:nfs

nfs支持多个客户端挂载,可以创建多个pod,挂载同一个nfs服务器共享出来的目录;但是nfs如果宕机了,数据也就丢失了,所以需要使用分布式存储,常见的分布式存储有glusterfs和cephfs

以k8s的控制节点作为NFS服务端(每个节点都要安装)

yum install -y nfs-utils

在宿主机创建NFS需要的共享目录mkdir /data

配置nfs共享服务器上的/data目录 vim /etc/exports

/data 192.168.166.0/24(rw,sync,no_root_squash,no_subtree_check)

启服务:systemctl start nfs

查看共享节点是否启用exportfs -arv

再node节点上查看showmount -e 192.168.11.160

*创建Pod,挂载NFS共享出来的目录

vim nfs.yml

k8s持久化存储: PVC

PersistentVolume(PV)是群集中的一块存储,由管理员配置或使用存储类动态配置。 它是集群中的资源,就像pod是k8s集群资源一样。 PV是容量插件,如Volumes,其生命周期独立于使用PV的任何单个pod。
pv是集群级别资源

PersistentVolumeClaim(PVC)是用户使用存储的请求。 它类似于pod。Pod消耗节点资源,PVC消耗存储资源。 pod可以请求特定级别的资源(CPU和内存)。 pvc在申请pv的时候也可以请求特定的大小和访问模式(例如,可以一次读写或多次只读)

在宿主机创建NFS需要的共享目录 mkdir /data/v{1..10} -p

配置nfs共享宿主机上的/data/v1..v10目录 vim /etc/exports

重新加载配置,使配置成效 exportfs -arv
创建pv vim pv.yaml

apiVersion: v1

kind: PersistentVolume

metadata:

name: v1

spec:

capacity:

storage: 1Gi #pv的存储空间容量

accessModes: ["ReadWriteOnce"]

nfs:

path: /data/v1 #把nfs的存储空间创建成pv

server: 192.168.11.160 #nfs服务器的地址


apiVersion: v1

kind: PersistentVolume

metadata:

name: v2

spec:

capacity:

storage: 2Gi

accessModes: ["ReadWriteMany"]

nfs:

path: /data/v2

server: 192.168.11.160


apiVersion: v1

kind: PersistentVolume

metadata:

name: v3

spec:

capacity:

storage: 3Gi

accessModes: ["ReadOnlyMany"]

nfs:

path: /data/v3

server: 192.168.11.160


apiVersion: v1

kind: PersistentVolume

metadata:

name: v4

spec:

capacity:

storage: 4Gi

accessModes: ["ReadWriteOnce","ReadWriteMany"]

nfs:

path: /data/v4

server: 192.168.11.160


apiVersion: v1

kind: PersistentVolume

metadata:

name: v5

spec:

capacity:

storage: 5Gi

accessModes: ["ReadWriteOnce","ReadWriteMany"]

nfs:

path: /data/v5

server: 192.168.11.160


apiVersion: v1

kind: PersistentVolume

metadata:

name: v6

spec:

capacity:

storage: 6Gi

accessModes: ["ReadWriteOnce","ReadWriteMany"]

nfs:

path: /data/v6

server: 192.168.11.160


apiVersion: v1

kind: PersistentVolume

metadata:

name: v7

spec:

capacity:

storage: 7Gi

accessModes: ["ReadWriteOnce","ReadWriteMany"]

nfs:

path: /data/v7

server: 192.168.11.160


apiVersion: v1

kind: PersistentVolume

metadata:

name: v8

spec:

capacity:

storage: 8Gi

accessModes: ["ReadWriteOnce","ReadWriteMany"]

nfs:

path: /data/v8

server: 192.168.11.160


apiVersion: v1

kind: PersistentVolume

metadata:

name: v9

spec:

capacity:

storage: 9Gi

accessModes: ["ReadWriteOnce","ReadWriteMany"]

nfs:

path: /data/v9

server: 192.168.11.160


apiVersion: v1

kind: PersistentVolume

metadata:

name: v10

spec:

capacity:

storage: 10Gi

accessModes: ["ReadWriteOnce","ReadWriteMany"]

nfs:

path: /data/v10

server: 192.168.11.160

更新资源清单文件 kubectl apply -f pv.yaml

创建pvc,和符合条件的pv绑定 *vim pvc.yml

vim pod-pvc.yml

kubectl create -f pod-pvc.yml

相关推荐
H_老邪1 小时前
虚拟机-docker版本-1.0
运维·docker·容器
苍煜11 小时前
Docker容器网络详解+端口映射原理(系列第二篇:实战核心)
网络·docker·容器
gwjcloud15 小时前
Kubernetes从入门到精通(高级篇)04
云原生·容器·kubernetes
阿里云云原生15 小时前
阿里云微服务引擎 MSE 及 API 网关 2026 年 4 月产品动态
微服务·云原生
张文君16 小时前
上古世纪服务端编译安装AAEmu docker编译安装
运维·docker·容器
阿里云云原生17 小时前
从“对话式编程”到“规格驱动”:民生银行企业级AI研发范式重构实践
云原生
苍煜17 小时前
现代生产级微服务+容器治理完整技术栈与架构方案详解(国内主流完整云原生微服务闭环架构)
微服务·云原生·架构
小猿姐17 小时前
GitLab on Kubernetes:使用 KubeBlocks 部署生产级高可用 PostgreSQL 和 Redis
redis·postgresql·kubernetes