kubernetes 的这几种存储卷,别再傻傻分不清了

3e53e24af368340f772767ceeb2b0c13.gif

作者 | 江小南

来源 | 江小南和他的小伙伴们

存储卷类型

Kubernetes提供的存储卷(volume)属于Pod资源,共享于Pod内的所有容器,存储卷可在容器的文件系统之外存储相关的数据,也可以独立于Pod的生命周期实现数据持久化存储。

按照类型划分,大致分为三类:

15cfe53af411eaf7b1cd77dfec9d50d1.png

如下是工作中使用到的存储卷,持久卷声明对应于持久化数据存储类型。

00f47598853bebc775838dd7e78c3d3c.png

详细说明

1. EmptyDir

EmptyDir字面意思理解为空目录。在容器启动时被创建,在容器移除时一并删除,因此不具有持久化存储的能力,但是如果作为同一个Pod内的多个容器间共享文件,或者作为容器数据的临时存储目录是非常好用的选择。

关键词:生命周期同Pod生命周期;作用域为同一个Pod内。

emptyDir存储卷可用字段主要包含两个:

  • medium:存储介质的类型,可取值为"default"或"Memory","default"使用节点的默认存储介质,占用磁盘空间;"Memory"基于RAM的临时文件系统tmpfs,占用内存空间。

  • sizeLimit:当前存储卷的空间限额,默认值为nil,表示不限制;一般在medium字段值为"Memory"时需要限制。

2. HostPath

hostPath将目录从工作节点的文件系统挂载到pod中,它独立于Pod的生命周期,因而具有持久性,类似于docker中的-v。但是如果发生pod故障转移等情况,将不能获取到数据,除非数据在所有节点中都有。

关键词:某一工作节点的存储。

hostPath存储卷的嵌套字段共有两个:"path"(必选)和"type",它支持的存储卷类型(type)有如下几种:

  • DirectoryOrCreate:宿主机上不存在则创建此目录

  • Directory:宿主机上必须存在此目录

  • FileOrCreate:宿主机上不存在此文件则创建

  • File:宿主机上必须存在此文件

  • Socket:宿主机上必须存在的Socket文件路径

  • CharDevice:宿主机上必须存在的字符设备文件路径

  • BlockDevice:宿主机上必须存在的块设备文件路径

3. ConfigMap&Secret

ConfigMap和Secret作为配置集,以key-value的形式保存于etcd中,通过存储卷或者配置引用的形式在Pod中使用,区别在于Secret是经过加密的字段显示。示例如下:

# 新建configMap
# my-config.yaml
apiVersion: v1
data:redis.conf: |appendonly yesnginx.conf: |welcome nginxproject:edsp
kind: ConfigMap
metadata:name: my-confnamespace: default
[root@k8s-master test]# kubectl apply -f my-config.yaml 
configmap/my-conf created
[root@k8s-master test]# kubectl get cm
NAME               DATA   AGE
kube-root-ca.crt   1      11d
my-conf            3      10s
[root@k8s-master test]#

data是所有真正的数据,key:默认是文件名,value:配置文件的内容。

# 新建secret
[root@k8s-master secret]# echo -n "jiangxiaonan" > user
[root@k8s-master secret]# echo -n "xxcjxn12345" > password
[root@k8s-master secret]# ls
password  user
[root@k8s-master secret]#
kubectl create secret generic db-user-pass \--from-file=user \--from-file=password
# 获取内容查看
[root@k8s-master secret]# kubectl get secrets
NAME                  TYPE                                  DATA   AGE
db-user-pass          Opaque                                2      7s
default-token-dp677   kubernetes.io/service-account-token   3      11d
[root@k8s-master secret]# kubectl get secrets db-user-pass -o=yaml
apiVersion: v1
data:password: eHhjanhuMTIzNDU=user: amlhbmd4aWFvbmFu
kind: Secret
metadata:creationTimestamp: "2022-07-20T14:47:10Z"managedFields:name: db-user-passnamespace: defaultresourceVersion: "140362"uid: 92095b33-385e-48a9-8418-ee5d86817cc3
type: Opaque
[root@k8s-master secret]# echo eHhjanhuMTIzNDU= | base64 -d
xxcjxn12345
[root@k8s-master secret]#

data是所有真正的数据。

4. PV&PVC

PV&PVC是基于文件系统存在的,我们这里使用NFS文件系统,独立于Pod的生命周期实现数据的持久化存储。

NFS文件系统自行安装,这里只准备pv和pvc。

# pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: pv01-10m
spec:capacity:storage: 1GiaccessModes:- ReadWriteManystorageClassName: nfsnfs:path: /nfs/data/01server: 172.31.0.2
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nginx-pvc
spec:accessModes:- ReadWriteManyresources:requests:storage: 500MistorageClassName: nfs
[root@k8s-master test]# kubectl get pv,pvc
NAME                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM               STORAGECLASS   REASON   AGE
persistentvolume/pv01-10m   1Gi        RWX            Retain           Bound    default/nginx-pvc   nfs                     11dNAME                              STATUS   VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/nginx-pvc   Bound    pv01-10m   1Gi        RWX            nfs            11d
[root@k8s-master test]#

完整配置演示

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx-deployname: nginx-deploy
spec:replicas: 2selector:matchLabels:app: nginx-deploytemplate:metadata:labels:app: nginx-deployspec:restartPolicy: Alwayscontainers:- name: mynginximage: nginximagePullPolicy: IfNotPresentenvFrom:- configMapRef:name: my-conf- secretRef:name: db-user-passvolumeMounts:- mountPath: /sams/redis.confname: redisconfsubPath: redis.conf- mountPath: /sams/nginx.confname: nginxconfsubPath: nginx.conf- mountPath: /sams/emptydir/testname: emptydir-test- mountPath: /sams/hostpaht/testname: hostpaht-test- mountPath: /sams/nginxname: my-pvcvolumes:- emptyDir:sizeLimit: 300Miname: emptydir-test- hostPath:path: /sams/hostPaht/testtype: DirectoryOrCreatename: hostpaht-test- configMap:name: my-confname: redisconf- configMap:name: my-confname: nginxconf- name: my-pvcpersistentVolumeClaim:claimName: nginx-pvc

通过yaml可以看出,ConfigMap和Secret使用了配置引用的方式在Pod中使用,其余使用挂载。

[root@k8s-master test]# kubectl apply -f deployment.yaml 
deployment.apps/nginx-deploy created
[root@k8s-master test]# kubectl get pod
NAME                           READY   STATUS    RESTARTS   AGE
nginx-deploy-744dfb6ff-f4px5   1/1     Running   0          56s
nginx-deploy-744dfb6ff-zk5zf   1/1     Running   0          58s
[root@k8s-master test]#

检查验证

进入到容器内部进行验证。

[root@k8s-master test]# kubectl exec -it nginx-deploy-744dfb6ff-f4px5 -c mynginx -- /bin/bash
root@nginx-deploy-744dfb6ff-f4px5:/# cd /sams/
root@nginx-deploy-744dfb6ff-f4px5:/sams# ls
emptydir  hostpaht  nginx  nginx.conf  redis.conf
root@nginx-deploy-744dfb6ff-f4px5:/sams#
  1. EmptyDir

root@nginx-deploy-744dfb6ff-f4px5:/sams# cd /sams/emptydir/test/
root@nginx-deploy-744dfb6ff-f4px5:/sams/emptydir/test# pwd
/sams/emptydir/test
root@nginx-deploy-744dfb6ff-f4px5:/sams/emptydir/test#

EmptyDir挂载成功。

  1. HostPaht

root@nginx-deploy-744dfb6ff-f4px5:/sams/emptydir/test# cd /sams/hostpaht/test/
root@nginx-deploy-744dfb6ff-f4px5:/sams/hostpaht/test# pwd
/sams/hostpaht/test 
root@nginx-deploy-744dfb6ff-f4px5:/sams/hostpaht/test# touch hostpaht.txt
root@nginx-deploy-744dfb6ff-f4px5:/sams/hostpaht/test# ls
hostpaht.txt
root@nginx-deploy-744dfb6ff-f4px5:/sams/hostpaht/test#
# 查看nginx-deploy-744dfb6ff-f4px5所在的节点为k8s-worker1
[root@k8s-master /]# kubectl describe pod nginx-deploy-744dfb6ff-f4px5
...
Events:Type    Reason     Age   From               Message----    ------     ----  ----               -------Normal  Scheduled  15m   default-scheduler  Successfully assigned default/nginx-deploy-744dfb6ff-f4px5 to k8s-worker1Normal  Pulled     15m   kubelet            Container image "nginx" already present on machineNormal  Created    15m   kubelet            Created container mynginxNormal  Started    15m   kubelet            Started container mynginx
[root@k8s-master /]#
# 到 k8s-worker1 验证
[root@k8s-worker1 test]# pwd
/sams/hostPaht/test
[root@k8s-worker1 test]# ll
total 0
-rw-r--r-- 1 root root 0 Jul 21 00:39 hostpaht.txt
[root@k8s-worker1 test]#

存在/sams/hostPaht/test文件夹,并且hostpaht.txt同样存在,HostPaht挂载成功。

  1. ConfigMap&Secret

root@nginx-deploy-744dfb6ff-f4px5:/sams# cat redis.conf 
appendonly yes
root@nginx-deploy-744dfb6ff-f4px5:/sams# cat nginx.conf 
welcome nginx
root@nginx-deploy-744dfb6ff-f4px5:/sams# echo $project
edsp
root@nginx-deploy-744dfb6ff-f4px5:/sams# echo $user
jiangxiaonan
root@nginx-deploy-744dfb6ff-f4px5:/sams#

ConfigMap挂载成功,Secret配置引用成功。

  1. PV&PVC

root@nginx-deploy-744dfb6ff-f4px5:/sams# cd nginx
root@nginx-deploy-744dfb6ff-f4px5:/sams/nginx# touch aaa.txt
root@nginx-deploy-744dfb6ff-f4px5:/sams/nginx#
# 到NFS文件系统查看
[root@k8s-master test]# cd /nfs/data/01
[root@k8s-master 01]# ls
aaa.txt
[root@k8s-master 01]#

pvc挂载成功。

c4a19cab8c00ce2b235d36519840bfd5.gif

往期推荐

Docker 那些事儿:如何安全地停止、删除容器?

掌握 Dowanward API 的妙用,轻松拿捏 kubernetes 环境变量

云原生时代,开发者应具备这5大能力

实战 Kubectl 创建 Deployment 部署应用

1d6f2a9712fcf98ddb54f4958dc6c481.gif

点分享

41c5eb4ec9606042895d08d310ea23e4.gif

点收藏

e78ce5b6c8bb10d9243cfc6aa2f6b4d6.gif

点点赞

b1492cd55ec07e16e4565f18d2d4c44f.gif

点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这群人,用8年讲述体育能有多迷人

望尘科技:专注体育娱乐在线体验的自主研发,致力于让体育迷获得高品质的沉浸式体验。用科技致敬体育,是他们坚持的信仰。 客户故事 望尘科技一心专注深耕体育游戏。他们把自己的计算中心搬到了云上,借助阿里云数字基础设施为程序…

成中集团线下IDC迁移上云

阿里云根据成中集团业务场景入手,提供了上云方案和迁移建议,利用这套架构,保障了公司数据的安全性并且满足了公司对于备份机制的建立的基本诉求,并且降低了业务出现中断的风险。 公司介绍 成中简介: 我们公司是一家…

什么是hpaPaaS平台?

作者 | Gordon Van Huizen,Mendix公司平台战略高级副总裁 供稿 | Mendix Gartner为两种云端应用开发方法创造了两个名称:高生产力应用程序平台即服务(hpaPaaS)和高控制应用平台即服务(hcaPaaS)。本文将对二…

重新认识访问者模式:从实践到本质

简介:访问者模式在设计模式中的知名度虽然不如单例模式,但也是少数几个大家都能叫得上名字的设计模式了。不过因为访问者模式的复杂性,人们很少在应用系统中使用,经过本文的探索,我们一定会产生新的认识,发…

3个案例,详解如何选择合适的研发模式

简介:3个案例,详解如何选择合适的研发模式,研发模式的选择与产品形态、发布方式、团队规模、协作成熟度密切相关。本文我们将根据不同的团队场景,分析如何选择适合团队的研发模式。 策划&编辑|雅纯 上一讲&#x…

如何打造一款极速数据湖分析引擎

简介:本文向读者详细揭秘了数据湖分析引擎的关键技术,并通过 StarRocks 来帮助用户进一步理解系统的架构。 作者: 阿里云 EMR 开源大数据 OLAP 团队 StarRocks 社区数据湖分析团队 前言 随着数字产业化和产业数字化成为经济驱动的重要动…

如何在 Linux 命令行中按大小对文件进行排序

作者 | 刘光录来源 | TIAPls 命令用于显示目录的内容。使用 -l 选项,可以列出文件和目录及其属性。今天我们来分享一下如何根据文件大小对列表进行排序。ls -l 命令可以显示文件大小,但也仅仅是能让我们看到文件的大小,它默认是按照字母顺序显…

福建品品香茶业有限公司业务迁移上云

福建品品香茶业有限公司数据量较大,进行业务迁移上云时阿里云根据其公司需求综合考虑,推荐将原有IOE架构改为分布式架构,使用ECSRDS承载业务,为客户带来极大价值。 企业介绍 福建品品香茶业有限公司是一家集茶叶种植、加工、销售…

璀璨智行:V2X车路协同智慧交通

V2X车用无线通信技术是指车对外界的信息交换,作为未来智能交通运输系统的关键技术,璀璨智行潜心研究V2X技术,致力于V2X车路协同的落地,在智慧交通领域做出了卓越的贡献。 创业机会点 魏军博表示:“面对交通系统效率低…

Databricks 企业版 SparkDelta Lake 引擎助力 Lakehouse 高效访问

简介:本文介绍了Databricks企业版Delta Lake的性能优势,借助这些特性能够大幅提升Spark SQL的查询性能,加快Delta表的查询速度。 作者: 李锦桂(锦犀) 阿里云开源大数据平台开发工程师 王晓龙&#xff08…

深度解析数据湖存储方案Lakehouse架构

简介:从数据仓库、数据湖的优劣势,湖仓一体架构的应用和优势等多方面深度解析Lakehouse架构。 作者:张泊 Databricks 软件工程师 Lakehouse由lake和house两个词组合而成,其中lake代表Delta Lake(数据湖)&…

1688 复杂业务场景下的 Serverless 提效实践

简介:我们主要负责 PC 端 1688.com 以及手机端阿里巴巴 APP,是目前国内最大的 B 类电商交易平台,主要面向 B2B 电商业务的场景,为中小企业提供零售、批发、分销以及加工定制等电商交易渠道。 前言 首先为大家简单介绍一下我们的…

阿里 蚂蚁自研 IDE 研发框架 OpenSumi 正式开源

简介:经历近 3 年时间,在阿里集团及蚂蚁集团共建小组的努力下,OpenSumi 作为国内首个强定制性、高性能,兼容 VS Code 插件体系的 IDE 研发框架,今天正式对外开源。 作者 | OpenSumi 来源 | 阿里技术公众号 经历近 3 …

剖析 kubernetes 集群内部 DNS 解析原理

作者 | 江小南来源 | 江小南和他的小伙伴们引言说到DNS域名解析,大家想到最多的可能就是/etc/hosts文件,并没有什么错,但是/etc/hosts只能做到本机域名解析,如果跨机器的解析就有点捉襟见肘了。在服务器中还有一个配置值得大家注意…

首次公开,阿里云开源PolarDB总体架构和企业级特性

简介:在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云 PolarDB 内核技术专家北侠带来了主题为《PolarDB 总体架构设计和企业级特性》的精彩演讲。 在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云 PolarDB 内核技术专家 北…

阿里云数据库开源发布:PolarDB HTAP的功能特性和关键技术

简介:在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云 PolarDB 内核技术专家严华带来了主题为《PolarDB HTAP详解》的精彩演讲。在PolarDB存储计算分离架构的基础上,我们研发了基于共享存储的MPP分布式执行引擎,解决了单…

倒计时 2 天!2022 中国算力大会:移动云邀您共见算力网络,创新发展

7 月 29 日 - 31 日由工业和信息化部、山东省人民政府主办的首届中国算力大会将在泉城济南盛大举行!中国移动受邀承办“算力网络,创新发展” 论坛并设立展区分享行业前瞻洞察,构建开放共赢生态7 月 29 日下午,邀您共话算力精彩&am…

什么是好的错误消息? 讨论一下Java系统中的错误码设计

简介:一个好的Error Message主要包含三个部分:Context: 什么导致了错误?发生错误的时候代码想做什么?The error itself: 到底是什么导致了失败?具体的原因和当时的数据是什么?Mitigation: 有什么解决方案来…

阿里巴巴在开源压测工具 JMeter 上的实践和优化

简介:Apache JMeter 是 Apach 旗下的开源压测工具,创建于 1999 年初,迄今已有超过 20 年历史。JMeter 功能丰富,社区(用户群体)庞大,是主流开源压测工具之一。 作者:灵苒、涧泉 Ap…

普洛斯荣获两项“数据中心绿色等级评估”5A级认证

7月29日,由工业和信息化部及山东省人民政府主办的首届中国算力大会在济南成功举办,会上同时公布了本年度“数据中心绿色等级评估”评审结果。普洛斯常熟东南数据中心B栋及普洛斯怀来数据中心3号楼均荣获“数据中心绿色等级评估”(规划类/基础…