关于k8s集群的存储卷

news2024/11/15 21:52:17

目录

1.emptyDir存储卷

2.hostPath存储卷

3.nfs共享存储卷


容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。其次,在Pod中同时运行多个容器时,这些容器之间通常需要共享文件。Kubernetes 中的Volume抽象就很好的解决了这些问题。Pod中的容器通过Pause容器共享Volume。

1.emptyDir存储卷

容器之间共享数据无持久化

当Pod被分配给节点时,首先创建emptyDir卷,并且只要该Pod在该节点上运行,该卷就会存在。正如卷的名字所述,它最初是空的。Pod 中的容器可以读取和写入emptyDir卷中的相同文件,尽管该卷可以挂载到每个容器中的相同或不同路径上。当出于任何原因从节点中删除 Pod 时,emptyDir中的数据将被永久删除。

示例:

vim pod.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: demo.pod
  name: demo.pod
spec:                      
  volumes:                    #定义一个存储卷
  - name: tan-vol             #定义存储卷名字
    emptyDir: {}
  containers:
  - image: soscscs/myapp:v1
    name: myapp
    ports:
    - containerPort: 80
    resources: {}
    volumeMounts:
    - name: tan-vol
      mountPath: /mnt/
  - image: busybox:1.28
    name: busybox
    volumeMounts:             #设置挂载数据卷
    - name: tan-vol           #设置挂载数据卷名字
      mountPath: /data/       #设置挂载目录(容器内)
    command:                  #设置操作命令
    - sh
    - -c
    - "while true; do echo '123' >> /data/scj.txt; sleep 2; done"

  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

kubectl apply -f pod.yaml


验证数据持久化:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: demo.pod
  name: demo.pod
spec:
  volumes:
  - name: tan-vol
    emptyDir: {}
  containers:
  - image: soscscs/myapp:v1
    name: myapp
    ports:
    - containerPort: 80
    resources: {}
    volumeMounts:
    - name: tan-vol
      mountPath: /mnt/
  - image: busybox:1.28
    name: busybox
    volumeMounts:
    - name: tan-vol
      mountPath: /data/
    command:
    - sh
    - -c
    - "while true; do echo '456' >> /data/scj.txt; sleep 2; done"     #修改内容重新生成

  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}


kubectl delete -f pod.yaml && kubectl apply -f pod.yaml   #更新数据

2.hostPath存储卷

挂载宿主机文件/目录,实现数据共享,只能在单机上实现持久化

hostPath卷将 node 节点的文件系统中的文件或目录挂载到集群中。
hostPath可以实现持久存储,但是在node节点故障时,也会导致数据的丢失。

示例:

vim demo3.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: demo3
  name: demo3
spec:
  volumes:
  - name: tan-vol
    hostPath:
      path: /opt/tan
      type: DirectoryOrCreate
  containers:
  - image: soscscs/myapp:v1
    name: demo
    ports:
    - containerPort: 80
    resources: {}
    volumeMounts:
    - name: tan-vol
      mountPath: /usr/share/nginx/html
      readOnly: false
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
 
kubectl apply -f demo3.yaml 



测试不同节点数据是否能共享

vim demo3.yaml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: demo3
  name: demo4               #修改资源名
spec:
  nodeName: node01          #指定node节点创建资源
  volumes:
  - name: tan-vol
    hostPath:
      path: /opt/tan
      type: DirectoryOrCreate
  containers:
  - image: soscscs/myapp:v1
    name: demo
    ports:
    - containerPort: 80
    resources: {}
    volumeMounts:
    - name: tan-vol
      mountPath: /usr/share/nginx/html
      readOnly: false
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

kubectl apply -f demo3.yaml

3.nfs共享存储卷

跨node节点的Pod共享数据

配置nfs,任选一台服务器

systemctl disable --now firewalld.service
setenforce 0

yum install -y rpcbind nfs-utils
systemctl enable --now rpcbind nfs
mkdir /opt/nfs  #创建共享目录
vim /etc/exports
/opt/nfs 192.168.9.0/24(rw,sync,no_root_squash)

exportfs -avr   #共享
     

确保两台node节点的rpcbind是开启状态

vim demo4.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: demo4
  name: demo4
spec:
  volumes:                            #定义一个存储卷
  - name: tc-vol                      #定义存储卷名字
    nfs:                              #存储卷类型为nfs
      path: /opt/nfs                  #NFS服务器上的共享目录路径
      server: 192.168.9.116           #NFS服务器的IP地址
  containers:
  - image: soscscs/myapp:v1
    name: demo
    ports:
    - containerPort: 80
    resources: {}
    volumeMounts:                    #存储卷挂载
    - name: tc-vol                   #挂载的存储卷
      mountPath: /mnt                #存储卷挂载目录
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

kubectl apply -f demo4.yaml


实现跨节点通信

vim demo4.yaml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: demo4
  name: demo5
spec:
  nodeName: node01            #指定节点创建
  volumes:
  - name: tc-vol
    nfs:
      path: /opt/nfs
      server: 192.168.9.116
  containers:
  - image: soscscs/myapp:v1
    name: demo
    ports:
    - containerPort: 80
    resources: {}
    volumeMounts:
    - name: tc-vol
      mountPath: /mnt
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

kubectl apply -f demo4.yaml

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

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

相关文章

大神器! 直接显示中英文期刊的等级, 及该期刊在中国顶级大学的认可度!

今天,推荐一款学术神器——easyScholar,别看这个插件小小的,它的功能非常强大。 它可以显示期刊的影响因子、中科院分区、JCR分区等信息! 比如,它可以在知网数据库中显示期刊等级信息。 也能够在万方数据库中显示期刊等…

【Linux WEB】Linux嵌入式WEB服务器(BOA)部署

1. 下载boa源码 进入官网下载http://www.boa.org/news.html,版本为0.94.13 2. 交叉编译boa源码 2.1 解压boa源码压缩包   将下载好的压缩包放入到Ubuntu系统中进行解压 tar -zxvf boa-0.94.13.tar.gz 2.2 生成并配置Makefile文件 (1)将…

交换机常用的贴片网络变压器,滤波器H5084NL / H82409S

华强盛电子导读千兆交换机: 199/2643/0038 在交换机行业中,常用的贴片网络变压器和滤波器型号会根据具体的应用需求、性能指标、成本考量等因素而有所不同。通常,这些器件需要满足网络通信中的高频传输、阻抗匹配、信号隔离、电磁兼容&…

【C++】vector 的模拟实现

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

⌈ 传知代码 ⌋ CNN实现脑电信号的情感识别

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

怎么压缩ppt文件?4个常用的PPT压缩技巧分享!

在当今数字化的工作和学习环境中,PPT已经成为我们表达观点、展示成果的重要工具。然而,有时PPT文件的体积过大,给我们的分享和存储带来了诸多不便,表现在:无端占用宝贵的磁盘空间,接收下载耗费时间长等。 …

KSV1(KSU1)/KSV5(KSU5)-创建分配(分摊)规则/运行分配

将A成本中心费用分摊给B、C两个成本中心: 将B、C两个成本中心建一个成本中心组KSV1-创建分配规则 选择发送方的成本中心,选择接收方的成本中心 给不同成本中心分配比例。 点击保存 点击概览可以看到该条规则,可以在系统中创建多条规则。 K…

优阅达携手 HubSpot 助力出海企业营销、销售和服务自动化

2024 年 6 月 17 - 18 日,GTC 2024 全球流量大会在深圳福田会展中心圆满举办。作为跨境出海行业产业链最全、资源最丰富、规模最大的专业展会之一,本次大会聚集了近 3 万名从业者、超过 200 家海内外优质开发厂商,品牌方、服务商,…

【海贼王航海日志:前端技术探索】CSS你了解多少?(二)

目录 1 -> 字体属性 1.1 -> 设置字体 1.2 -> 字体大小 1.3 -> 字体粗细 1.4 -> 文字样式 2 -> 文本属性 2.1 -> 文本颜色 2.1.1 -> 认识RGB 2.1.2 -> 设置文本颜色 2.2 -> 文本对齐 2.3 -> 文本装饰 2.4 -> 文本缩进 2.5 -&g…

Go开发后端和Vue3开发前端的前后端分离框架中自己手戳一个OA流程审批、工作流引擎给新时代一个漂亮便捷的工作流引擎

前言 在软件项目开发中,我们都会接触到流程审批的需要业务,我们以往用的最多就是如下图这种流程编辑引擎插件: 以上截图中的流程工具是不是大家常见的呀!感觉很丑拿不出手呀!在当前行业内卷及竞争激烈情况下&#xff…

uniapp免费申请苹果证书教程每次7天可用于测试

准备一个苹果账号没有加入过任何组织的 然后下载appuploader下载链接 登录上去切记勾选上未付苹果688 然后点击苹果证书创建p12证书 创建描述文件 uniapp打包自定义基座 这就打包好了可以愉快地开发了,但每次生成只有7天,设备限制3个&#xff0c…

【C++】STL | priority_queue 堆(优先级队列)详解(使用+底层实现)、仿函数的引入、容器适配器的使用

目录 前言 总代码 堆的简介 仿函数 堆的基础框架建立size、empty、top、 向上调整法 and push 向上调整 push 向下调整法 and pop 向下调整法 pop 迭代器区间初始化(构造) 逻辑讲解 为何选择向下建堆? 建堆代码实现 结语 前言…

区块链的搭建和运维4

区块链的搭建和运维4 (1) 搭建基于MySQL分布式存储的区块链 1.构建单群组网络节点 使用开发部署工具构建单群组网络节点,命令如下: bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,85452. 启动 MySQL 并设置账户密码 输入如下命令,…

【mysql 第一篇章】系统和数据库的交互方法

一、宏观的查看系统怎么和数据库交互 在我们刚刚接触系统和数据库的时候不明白其中的原理,只知道系统和数据库是需要交互的。所以我们会理解成上图的形式。 二、MYSQL 驱动 随着我们的学习时间的加长以及对程序的了解,发现链接数据库是需要有别的工具辅…

免费【2024】springboot 高校毕业生信息管理系统的设计与实现

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

安卓Termux系统设备安装内网穿透工具实现远程使用SFTP传输文件

文章目录 前言1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 前言 本教程主要介绍如何在安卓 Termux 系统中使用 SFTP 文件传输,并结合cpolar内网穿透工具生成公网地址,轻松实现无公网IP环境远程传输&#xf…

用 echarts 开发地图、点击展示自定义信息框

1、下载所需地市的json 链接&#xff1a;DataV.GeoAtlas地理小工具系列 在右侧输入需要的名称&#xff0c;然后下载json文件到本地 2、在html 中准备容器&#xff0c;并设置宽高 <div id"mapContent"> <div ref"mapChart" style"width:10…

全网详解LVS的四种工作模式及案例

目录 LVS&#xff08;Linux virual server&#xff09; 一、集群和分布式的简介 二、LVS的运行原理 1、LVS简介 2、LVS 相关术语 3、LVS的集群类型 三、LVS-NAT工作模式 部署NAT工作模式案例&#xff1a; 1、实验环境 2、实验环境说明 3、配置 四、LVS-DR工作模式 …

Http:八股

1、Https加密方式 1.1Https通过 摘要算法保证数据的完整性&#xff0c; 1、服务器将公钥注册到CA&#xff0c; CA用自己的私钥给 服务器的公钥进行数字签名。 2、客户端拿到服务器证书后&#xff0c;用CA的公钥确认数字证书的真实性。 3、获取服务器的公钥&#xff0c;使用它对…

SpringBoot Actuator

对应用进行观测,监控,预警 健康状况[组件状态,存活状态] health 健康端点:返回存活,死亡. Health对象 运行指标[CPU,内存,垃圾回收,吞吐量,响应成功率] Metrics 指标监控端点:访问次数/率等等 链路追踪等等 引入web和actuator依赖 在…