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

相关推荐
武子康2 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
秋播2 天前
国内本地WSL2编译rancher源码
云原生
小猿姐4 天前
MySQL Top 10 热点问题 AI 运维实战:从内核诊断到云原生运维
mysql·云原生·aiops
阿里云云原生5 天前
深入内核:拆解 OpenTelemetry eBPF 探针如何优雅地“透视”多语言微服务?
云原生
2601_961875245 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant
java_cj5 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes
程序员老赵5 天前
服务器没有桌面?Docker 跑个 Chrome,浏览器就能远程用
docker·容器·devops
正经教主5 天前
【docker基础】 第八周:容器监控与应用更新策略
运维·docker·容器
kiros_wang5 天前
Docker 使用完整指南
运维·docker·容器
正经教主5 天前
【docker基础】第九周:Docker安全与镜像优化
运维·docker·容器