k8s 存储卷

  • 作用

1、持久存放数据

2、同一Pod中各容器间共享数据

  • 特点

Kubernetes 卷具有明确的生命周期——与包裹它的 Pod 相同。 因此,卷比 Pod 中运行的任何容器的存活期都长,在容器重新启动时数据也会得到保留。 当然,当一个 Pod 不再存在时,卷也将不再存在。 也许更重要的是,Kubernetes 可以支持许多类型的卷,Pod 也能同时使用任意数量的卷。

卷的核心是包含一些数据的目录,Pod 中的容器可以访问该目录。 特定的卷类型可以决定这个目录如何形成的,并能决定它支持何种介质,以及目录中存放什么内容。

使用卷时, Pod 声明中需要提供卷的类型 (.spec.volumes 字段)和卷挂载的位置 (.spec.containers.volumeMounts 字段).

  • 类型

configMap

  主要作用并不是为pod提供存储空间,而是为pod或容器注入配置信息

创建configMap

基本格式:
kubectl create configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run=server|client|none]
[options]
--from-literal:通过命令行创建
--from-file:通过文件创建
--from-env-file:根据env文件创建    
    env 文件中的每一行必须为 VAR = VAL 格式
    当使用多个 --from-env-file 来从多个数据源创建 ConfigMap 时,仅仅最后一个 env 文件有效

1、根据文件创建
kubectl create configmap configmap_name --from-file=path/to/file
其中configMap名称为指定的configmap_name,key值为文件名,value值为文件内容
2、根据文件夹创建
kubectl create configmap configmap_name --from-file=dir/to/file
其中configMap名称为指定的configmap_name,key值为各个文件名,value值为指定文件的内容
3、根据文字创建
kubectl create configmap configmap_name --from-literal=key1=value1 --from-literal=key2=value2

使用configMap
1、通过挂载存储卷方式
    通过spec.volumes.configMap引用,其中key为文件名,value为文件内容。如果只引用个别key使用spec.volumes.configMap.items引用
    使用此方法注入配置信息可以实时同步数据,但如果想配置生效需要另外配置reload策略。
2、通过变量方式传入
    通过spec.containers[].env[].valueFrom引用。
    使用此方法注入配置信息不能实时同步数据。
View Code

secret

  主要作用并不是为pod提供存储空间,而是为pod或容器注入配置信息

Secret 是一种包含少量敏感信息,例如密码、令牌或密钥的对象。 将这些信息放在 secret 中比放在 Pod 的定义或者容器镜像 中来说更加安全和灵活。
Secret 包含两个映射:data 和 stringData。 data 字段用于存储使用 base64 编码的任意数据。 提供 stringData 字段是为了方便,允许您用未编码的字符串提供机密数据。

secret有3种类型
1、docker-registry 一般保存docker-registry的认证信息
  pod创建时若连接到私有仓库中需要认证,则要创建专用的secret (docker-registry)类型的pod.spec.imagePullSecrets字段中需要指明secret的name 
2、generic 通用的,一般保存一些密码数据
  generic方式的secret,里面的键值虽说不是铭文,但是解码的技术手段要求不高。(echo *** | base64 -d)对于密码类型的信息,最好用数据卷挂载方式来实现信息的注入,然后以文件形式挂载到挂载点,设置权限。
3、tls 一般保存私钥或证书(需了解

创建及使用方法与configMap类似

 

 emptyDir

  pod结束,卷中数据永久丢失

  当 Pod 指定到某个节点上时,首先创建的是一个 emptyDir 卷,并且只要 Pod 在该节点上运行,卷就一直存在。尽管 Pod 中的容器挂载 emptyDir 卷的路径可能相同也可能不同,
但是这些容器都可以读写 emptyDir 卷中相同的文件。
注意: 容器崩溃并不会导致 Pod 被从节点上移除,因此容器崩溃时 emptyDir 卷中的数据是安全的。 emptyDir 的一些用途: 缓存空间,例如基于磁盘的归并排序。 为耗时较长的计算任务提供检查点,以便任务能方便地从崩溃前状态恢复执行。 在 Web 服务器容器服务数据时,保存内容管理器容器获取的文件。

  

hostPath

  将主机节点文件系统上的文件或目录挂载到您的 Pod 中

NFS

  使用nfs网络存储卷永久保存数据

Cephfs 

  分布式存储,重要待补充

原文地址:https://www.cnblogs.com/9host/p/13476865.html