7.存储卷(Volume)

一、存储卷

Pod自己是有生命周期的,如果将数据放到容器内的自有名称空间当中,则Pod的生命周期结束,数据也就消失了。

节点上提供存储集是不能解决K8S的数据存储问题,因为集群是调度的。并且节点挂掉,数据也就丢了。

集群应该使用脱离节点而存在的共享存储设备。K8S提供各种类型的存储卷来使用。对K8S来说,存储卷属于Pod,而不是容器。

持久存储卷(PersistentVolume -- pv)

持久存储卷请求(PersistentVolumeClaim -- pvc)

Pv的动态供给,需要定义好存储类。

1、存储卷(PV)类型

emptyDir:只在节点本地使用的,Pod被删,数据也会被清掉的存储卷,临时使用,或缓存(内存),没有任何持久性。

gitRepo:

hostPath:在宿主机上找一个目录与Pod建立关联关系。

传统意义上的存储设备:

SAN(存储区域网络):iSCSI …

NAS(网络附加存储):nfs,cifs,http

分布式存储:glusterfs,ceph(rbd),cephfs…

云存储:EBS(Amazon),Azure Disk(microsoft),…

[[email protected] ~]$ kubectl explain pod.spec.volumes # 查看支持的存储卷的类型

emptyDir示例:

gitRepo:本质上还是emptyDir

hostPath: 在宿主机上找一个目录与Pod建立关联关系。节点级持久。

[[email protected] ~]$  kubectl explain pod.spec.volumes.hostPath

nfs:

2、Pv and Pvc

持久存储卷(PersistentVolume -- pv):PV是集群级别的资源,不属于名称空间级别的,不能定义命名空间。

持久存储卷请求(PersistentVolumeClaim -- pvc):PVC是属于名称空间级别的资源。

Pvc消耗PV的资源,PVC可以向pv申请指定大小的存储资源,并设置访问模式;只有pv的存储空间大于等于PVC申请的存储大小,才能被分配给该PVC。

二者都是标准的K8S资源,Pv和PVC是一一对应的关系,但一个PVC可以被多个Pod访问(访问模式控制)。

(1)、PV和PVC的生命周期

供应准备 => 绑定 => 使用 => 释放 => 回收(Retain保留,Recycle回收,Delete删除)

[[email protected] ~]$ kubectl explain pv.spec
[[email protected] ~]$ kubectl explain pod.spec.volumes.persistentVolumeClaim

(2)、PV的属性

PV的访问模式(accessModes):需要看底层存储设备是否支持。

ReadWriteOnce(RWO):单节点读写

ReadOnlyMany(ROX):多节点只读

ReadWriteMany(RWX):多节点读写

PV的存储容量(capacity):

[[email protected] ~]$ kubectl explain pv.spec.capacity

Pv的回收策略(RECLAIM POLICY):

Retain:保留

Recycle:回收

Delete:删除

PV的生命周期阶段:

Available,Bound,Released,Failed=>自动回收失败

PV定义示例:

(3)、PVC的属性

访问模式(accessModes):与pv语义相同,PVC的访问模式一定是pv的子集。

资源(resources):申请的存储资源数量

requests:

storage:3Gi

PVC示例:

[[email protected] ~]$ kubectl explain pvc.spec

动态供给: 当用户申请PVC时才去创建符合用户请求的PV。

StorageClass:存储类,K8S的上的标准资源。

PVC在申请资源时,不向某个具体的pv申请,而是向存储类申请。

存储设备需要支持restful风格的接口。才能实现动态供给。

二、容器化应用配置的方式

  1. 自定义命令行参数 args
  2. 把配置文件直接放在镜像里,适用性窄。
  3. 环境变量,Cloud Native应用程序支持直接从环境变量加载配置;entrypoint脚本通过预处理环境变量为配置文件中的配置信息。
  4. 存储卷(特殊的configMap,secret存储卷)

三、Pod中容器获取环境变量的方式

[[email protected] ~]$ kubectl explain pod.spec.containers.env
[[email protected] ~]$ kubectl explain pod.spec.containers.envFrom

四、ConfigMap:

K8S上的配置中心。明文存储数据。让配置信息与镜像文件解耦,从而增强应用的可移植性和可复用性。

特殊类型的存储卷,目的不是给pod提供存储空间,而是给用户提供从K8S集群外部向Pod内部的应用注入配置信息的方式。

[[email protected] ~]$ kubectl explain configmap

注入的方式有两种

  1. 变量注入的方式

使用环境变量注入时只在系统启动时有效,运行中更改了configmap的值,容器中环境变量不会对应改变。

[[email protected] ~]$ kubectl create configmap nginx-config --from-literal=port=80 --from-literal=server_name=magedu.com

  2.存储卷挂载的形式

使用存储卷传递配置时,可以实时更新。挂载为文件,以键为文件名,以value为文件内容。

示例1:

示例2:

[[email protected] configmap]$ kubectl create cm nginx-www --from-file=nginx-vhost.conf

通过存储卷挂载的形式也可以只挂载configMap的部分键值,而不是全部键值,详情查看:

[[email protected] configmap]$ kubectl explain pod.spec.volumes.configMap.items

创建configmap的方式:

命令行或配置清单

[[email protected] ~]$ kubectl create configmap –help
# kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2
# kubectl create configmap my-config --from-file=path/to/bar

等等

五、Secret:

功能同ConfigMap,不是明文存储,而是编码存储数据(base64编码)。

特殊类型的存储卷,目的不是给pod提供存储空间,而是给用户提供从K8S集群外部向Pod内部的应用注入配置信息的方式。

Secret的几种类型:

docker-registry:认证信息。私有镜像仓库的认证信息。

[[email protected] configmap]$ kubectl explain pod.spec.imagePullSecrets

generic:密码等通用加密信息。

tls:私钥和证书

示例:

[[email protected] configmap]$ kubectl create secret generic mysql-root-pwd --from-literal=password=123456

环境变量注入的方式:

Tips:

/etc/nginx/conf.d # nginx –T   # 查看NGINX加载的配置内容

原文地址:https://www.cnblogs.com/cmxu/p/12097678.html

时间: 2024-09-28 16:02:40

7.存储卷(Volume)的相关文章

邮件监控存储卷空间的脚本

邮件监控存储卷空间的脚本: 说明: 1.显示存储名.ip.卷名.total空间.free空间.1天用空间.已用百分比 2.对卷名字符数的统计(echo aa1 | wc -m) 3.对卷名部分的排除,只保留数值部分(/usr/lib64/nagios/plugins/check-netapp-ng2.pl -H 10.0.0.16 -C public -T DISKUSED -v /vol/$eNas/ -w 80 -c 90 | awk -F[:" "]+ '{print $5}'

glusterfs 的存储卷类型

glusterfs是一个流行的分布式文件系统,它的存储卷分为几种 一.分布式卷(Distributed volume) 近似于raid0,文件没有分片,将文件逐个写入各个硬盘上,优点是容量大,缺点是没冗余. 二.条带卷(Striped volume) 相当于raid0,文件是分片均匀写在各个硬盘上的,优点是分布式读写,性能整体较好.缺点是没冗余,分片随机读写可能会导致硬盘IOPS饱和. 三.复制卷(Replicated volume) 相当于raid1,复制的份数,决定集群的大小,通常与分布式卷

理解 QEMU/KVM 和 Ceph(3):存储卷挂接和设备名称

本系列文章会总结 QEMU/KVM 和 Ceph 之间的整合: (1)QEMU-KVM 和 Ceph RBD 的 缓存机制总结 (2)QEMU 的 RBD 块驱动(block driver) (3)存储卷挂接和设备名称 这篇文章分析一下一个 Ceph RBD 卷是如何被映射到一个 QEMU/KVM 客户机的,以及客户机中设备的命名问题. 1. 遇到的设备命名问题 1.1 通过 Nova 和 Cinder 做 Ceph RDB 卷挂接和卸载步骤 挂接一个卷: #运行nova-attach 命令no

Apache Stratos Mock架构及持久化存储卷的映射

Apache Stratos Mock IaaS 简介 Apache Stratos 支持许多基础设施作为服务 (IaaS) 的平台:EC2,OpenStack,vCloud,CloudStack,Docker等.然而,设立IaaS 或购买公共 IaaS 服务对于尝试Stratos来说是额外的开销.此外,设置本地 IaaS 需要大量的硬件资源和购买公有云上的IaaS账户所涉及的成本.这些对尝试Stratos带来了障碍 Stratos. 通过引入Docker/Kubernetes来支持Linux容

利用AWS boto实现EC2 存储卷的自动快照

boto是AWS的Python SDK,可以利用boto自动生成ec2的存储卷快照,实现ec2数据的备份 1.安装boot pip install boto ,如果没有安装pip,需要提前安装 2.配置boto配置文件 ~/.aws/credentials  #设置aws认证凭据   [default]  aws_access_key_id = AAAAAAAAAAAAAAA  aws_secret_access_key = TNAAAAXXXXXXXXXXXXXXXXXXXXXX ~/.aws

Docker之数据卷Volume(七)

一.简介 Docker数据卷(volume)机制.volume是存在于一个或多个容器中的特定文件或文件夹,这个目录以独立于联合文件系统的形式在宿主机中存在,并为数据的共享与持久化提供便利. 1)volume在容器创建时就会初始化,在容器运行时就可以使用其中的文件 2)volume能在不同的容器之间共享和重用 3)对volume中数据的操作会马上生效 4)对volume中数据的操作不会影响到镜像本身 5)volume的生存周期独立于容器的生存周期,即使删除容器,volume仍然会存在,没有任何容器

Kubernetes之存储卷

存储卷概述 容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题.首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失--容器以干净的状态(镜像最初的状态)重新启动.其次,在 Pod 中同时运行多个容器时,这些容器之间通常需要共享文件.Kubernetes 中的 Volume 抽象就很好的解决了这些问题.在原docker环境中也有存储卷的概念,但docker环境的存储卷调度在宿主机上的目录,当docker重新创建的时候存储卷还会挂载统一宿主机上,但我们

Kubernetes学习之路(十六)之存储卷

一.存储卷的概念和类型 为了保证数据的持久性,必须保证数据在外部存储在docker容器中,为了实现数据的持久性存储,在宿主机和容器内做映射,可以保证在容器的生命周期结束,数据依旧可以实现持久性存储.但是在k8s中,由于pod分布在各个不同的节点之上,并不能实现不同节点之间持久性数据的共享,并且,在节点故障时,可能会导致数据的永久性丢失.为此,k8s就引入了外部存储卷的功能. k8s的存储卷类型: [[email protected] ~]# kubectl explain pod.spec.vo

Docker存储卷

docker存储卷: docker容器卷的使用方式: 1 Docker 管理卷: docker run -it --name [名称] -v [docker内部的卷] [镜像名称] 具体使用: docker run -it --name testvolume -d -v /data/mydata 75835a67d134 查看存储卷映射的目录: 命令:docker inspect f878a628f152 "Mounts": [ { "Type": "vo