存储卷..

文章介绍了K8S中的四种存储卷类型:本地存储卷(包括emptyDir和HostPath),网络存储卷,持久存储卷和配置存储卷。本地存储卷用于Pod内容器间或Pod与Node间的数据共享,emptyDir在Pod生命周期内存在,而HostPath持久化主机目录。持久存储卷提供与具体存储系统解耦的存储解决方案。配置存储卷则用于向Pod注入配置信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义存储卷与配置

在K8S中定义的存储卷主要包含了四种类型。

(1)本地存储卷:主要适用于Pod中容器之间的数据共享,或者实现Pod与Node数据存储和共享

(2)网络存储卷:主要是用于多个Pod之间或者多个Node之间的数据存储和共享。

(3)持久存储卷:基于网络存储卷,用户无需关心存储卷所使用的存储系统,只需要定义所需要消费的资源,可以将Pod与具体的存储系统解耦。

(4)配置存储卷:用于向各个Pod注入配置信息。

1.本地存储卷

本地存储卷包含了emptyDir和HostPath两种类型,都会使用本地文件系统,用于Pod中容器之间的数据共享,或者Pod与Node中的数据存储和共享。

(1)emptyDir(干净的空目录)

把这个目录来映射到主机的一个临时目录下,Pod中的所有的容器都可以读写这个目录,对其生命周期管理和Pod完全一致。其作用主要是用于存放和共享Pod的不同容器之间在运行过程中产生的文件。

[root@master ~]# vi testemptyDir.yaml

apiVersion: v1

kind: Pod

metadata:

  name: testemptydir

spec:

apiVersion: v1

kind: Pod

metadata:

  name: testemptydir

spec:

  containers:

  - name: containerwrite

    image: busybox

    imagePullPolicy: IfNotPresent

    command: ['sh','-c']

    args: ['echo "This is a test data!" >/write_dir/data; sleep 3600']

    volumeMounts:

    - name: filedata

      mountPath: /write_dir

  - name: containerread

    image: busybox

    imagePullPolicy: IfNotPresent

    command: ['sh','-c']

    args: ['cat /read_dir/data; sleep 3600']

    volumeMounts:

    - name: filedata

      mountPath: /read_dir

  volumes:

  - name: filedata

    emptyDir: {}

[root@master ~]# kubectl  apply -f testemptyDir.yaml

pod/testemptydir created

[root@master ~]# kubectl  get pod

NAME                                       READY   STATUS    RESTARTS       AGE

testemptydir                               1/1     Running   0              20s

[root@master ~]# kubectl  logs testemptydir containerread

This is a test data!

(2)HostPtah

把主机上指定的目录映射到Pod中的容器上,如果Pod需要在主机上存储或共享文件,或者使用主机上的文件,就可以采用这种方式。存放在主机上的文件不会被销毁,会永久保存。Pod被销毁后,如果在这条台机器上重建,可以再次读取原来的内容,但是如果这台机器出现故障或者Pod被调度在了其他节点上,就无法再次读取原来内容。

这种方式比较适合DaemonSet控制器,运行于DaemonSet控制器下的Pod可以直接操作或者使用主机上的文件。

[root@master ~]# vi testhostpath.yaml

apiVersion: v1

kind: Pod

metadata:

  name: testhostpath

spec:

  containers:

  - name: containerhostpath

    image: busybox

    imagePullPolicy: IfNotPresent

    command: ['sh','-c']

    args: ['echo "This is a test data!" >/write_dir/data; sleep 3600']

    volumeMounts:

    - name: filedata

      mountPath: /write_dir

  volumes:

  - name: filedata

    hostPath:

      path: /home/k8sadmin/testhostpath

//在这个yaml文件中,我们创建了一个名字为containerhostpath的容器,然后需要向这个容器中写入数据,数据为“This is a test data!”,容器内数据卷的地址为/write_dir,引用的存储卷为filedata。在这个例子中存储卷的名字为filedata,这个存储卷会被容器设置的数据卷所引用。存储卷的类型为hostPath,代表主机上指定的目录,路径为/home/k8sadmin/testhostpath,容器中的 /write_dir会映射到主机的 /home/k8sadmin/testhostpath目录下。

[root@master ~]# kubectl  apply -f testhostpath.yaml

pod/testhostpath created

[root@master ~]# kubectl  get pod

NAME                                       READY   STATUS    RESTARTS       AGE

testhostpath                               1/1     Running   0              15s

[root@master ~]# kubectl  describe pod testhostpath |grep Node

Node:         worker2/192.168.200.13

//可以从pod详细信息中查看到pod调度的位置在worker2节点,所以需要去worker2节点上,查找宿主机的映射目录

[root@worker2 ~]# cat /home/k8sadmin/testhostpath/data

This is a test data!

//我们可以看到容器中的数据已经被同步映射到宿主机目录下,然后可以对数据进行修改

[root@worker2 ~]# echo  "This is test data! change1" >  /home/k8sadmin/testhostpath/data

//再次查看,容器中的数据

[root@master ~]# kubectl  exec -it testhostpath -- /bin/sh

/ # cat /write_dir/data

This is test data! change1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值