Kubernetes学习之存储卷

本文介绍了Kubernetes中的存储卷概念,包括emptyDir(临时存储卷)和hostPath(节点存储卷)的使用,强调了数据持久化的重要性。还探讨了NFS网络存储卷作为持久化解决方案的特性,并给出了配置示例。

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

一、存储卷概述
  应用程序在处理请求时,可根据其对当前请求的处理是否受影响与此前的请求,将应用划分为有状态和无状态应用两种。微服务体系中,各种应用均被拆分了众多微服务或更小的应用模块,因此往往会存在为数不少的有状态应用,于是数据持久化几乎是必然只需。
  Kubernetes提供的存储卷(volume)隶属于Pod资源,共享于Pod内的所有容器,可用于在容器的文件系统之外存储应用程序的相关数据,甚至还可以独立于Pod的生命周期之外实现数据持久化。
  Pod本身具有生命周期,故其内部运行的容器及其相关数据自身均无法持久存在。Docker支持配置容器使用存储卷将数据持久存储于容器自身文件系统之外的存储空间中,它们可以是节点文件系统或网络文件系统之上的存储系统,不过,其存储卷是与Pod资源绑定而非容器。简单来说,存储卷是定义在Pod资源之上的、可被其内部的所有容器挂载的共享目录,它关联至某外部的存储设备之上的存储空间,从而独立于容器自身的文件系统,而数据是否具有持久化能力则取决于存储卷自身是否支持持久机制。
在这里插入图片描述

Kubernetes支持的存储卷类型

在这里插入图片描述

二、临时存储卷
  Kubernetes支持存储卷类型,emptyDir存储卷的生命周期与其所属的Pod对象相同,它无法脱离Pod对象的生命周期提供数据存储功能,因此emptyDir通常仅用于数据缓存或临时存储。不过,基于emptyDir构建的gitRepo存储卷可以在Pod对象的生命周期起始时从相应的Git仓库中复制相应的数据文件到底层的emptrDir中,从而使得它具有一定意义上的持久性;但是,自Kubernetes 1.12版本起,girRepo存储卷已被废弃,所以不再进行说明。
  emptyDir存储卷是Pod对象生命周期中的一个临时存储目录,类似于Docker上的"docker挂载卷",在Pod对象启动时即被创建,而在Pod对象被移除时会被一并删除。不具持久能力的emptyDir存储卷只能用于某些特殊场景。例如,同一Pod内的多个容器间文件共享,或者作为容器数据的临时存储目录用于数据缓存系统等等。
  emptyDir存储卷则定义于.spec.volumes.emptyDir嵌套字段中,可用字段主要包含两个,具体如下:
  medium:此目录所在的存储介质的类型,可取值为"default"或"Memory",默认为default,表示使用节点的默认存储介质;"Memory"表示使用基于RAM的临时文件系统tmpfs,空间受限于内存,但是性能非常好,通过用于为容器中的应用提供缓存空间。
  sizeLimit:当前存储卷的空间限额,默认值为nil,表示不限制;不过在medium字段值为"Memory"时建议务必使用此限额。

1)编写emptyDir的yaml文件

]# cat emptydir.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: vol-emptydir-pod
spec:
  volumes:
  - name: html
    emptyDir: {
   }
  containers:
  - name: nginx
    image: nginx:1.12-alpine
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
  - name: pagegen
    image: alpine
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: html
      mountPath: /html
    command: ["/bin/sh", "-c"]
    args:
    - while true; do
        echo $(homename) $(date) >> /html/index.html;
        sleep 10;
      done

]# kubectl apply -f emptydir.yaml 
pod/vol-emptydir-pod created

2)查看Pod详细信息

]# kubectl get pods -o wide 
NAME               READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
vol-emptydir-pod   2/2     Running   0          4s    10.244.1.95   node1   <none>           <none>

]# kubectl describe pods vol-emptydir-pod 
Name:         vol-emptydir-pod
Namespace:    default
Priority:     0
Node:         node1/172.16.2.101
Start Time:   Thu, 27 Aug 2020 19:18:58 +0800
Labels:       <none>
Annotations:  Status:  Running
IP:           10.244.1.95
IPs:
  IP:  10.244.1.95
Containers:
  nginx:
    Container ID:   docker://3f912041344a89bc846b0b0b669e7a8f5a23b121d07600a79f8eb3deaea937ec
    Image:          nginx:1.12-alpine
    Image ID:       docker-pullable://nginx@sha256:db5acc22920799fe387a903437eb89387607e5b3f63cf0f4472ac182d7bad644
    Port:           <none>
    Host
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值