合肥做网站123cms/电子邮件营销
容器内的目录和宿主机目录进行挂载。
容器在系统上的生命周期是短暂的。
k8s用控制器创建的pod。delete相当于重启。容器的状态也会恢复到初始状态。一旦恢复到初始状态,所有的后天编辑的文件都会消失
容器和节点之间创建一个可以持久化保存容器内文件的存储卷。即使容器被摧毁、删除、重启,节点上存储卷的数据依旧存在。后续也可以继续使用。可以继续讲容器内的目录和宿主机挂载。保存的数据可以继续使用。
存储卷的方式
-
emptyDir:
-
hostPath:
-
NFS:
emptyDir
emptyDir:容器内部共享存储卷。在k8s中表示一个pod当中的多个容器共享一个存储卷目录。
emptyDir卷可以使pod当中的容器在这个存储卷上读取和写入。
emptyDir不能挂载到节点。随着pod生命周期结束。emptyDir也会结束。数据不会保留
主要用于容器内部共享数据
实验举例:
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx1name: nginx1
spec:replicas: 3selector:matchLabels:app: nginx1template:metadata:labels:app: nginx1spec:containers:- image: nginx:1.22name: nginx1volumeMounts:
#开始创建挂载卷- name: html
#定义存储卷的名称mountPath: /usr/share/nginx/html
#mountPath:定义容器内的挂载点。或者其他容器的共享目录- image: nginx:1.22name: nginx2volumeMounts:- name: html
#需要和上面定义的名称保持一致mountPath: /data
#引用上一个挂载的名称。
#表示我将使用/data目录和/usr/share/nginx/html这个目录挂载command: ["/bin/bash", "-c", "while true; do echo $(data) >> /data/index.html; sleep 2; done"]volumes:- name: htmlemptyDir: {}
hostPath
hostPath:将容器内的挂载点和节点上的目录进行挂载。hostPath可以实现数据持久。node节点被销毁,那么数据也会丢失。
污点设置为NoExecute时节点上的pod会被驱逐。文件数据在不在?
文件数据肯定在的。只是pod节点被销毁了。并不是node节点被销毁。所有数据还保留在节点上。
只有基于控制器创建的pod会在其他节点重新部署。他又会在其他节点生成一个新的存储卷。数据依然可以持久化。
驱逐不会使文件数据丢失
实验举例:
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx1name: nginx1
spec:replicas: 3selector:matchLabels:app: nginx1template:metadata:labels:app: nginx1spec:containers:- image: nginx:1.22name: nginx1volumeMounts:
#开始创建挂载卷- name: html
#定义存储卷的名称mountPath: /usr/share/nginx/html
#mountPath:定义容器内的挂载点。或者其他容器的共享目录- image: nginx:1.22name: nginx2volumeMounts:- name: html
#需要和上面定义的名称保持一致mountPath: /data
#引用上一个挂载的名称。
#表示我将使用/data目录和/usr/share/nginx/html这个目录挂载command: ["/bin/bash", "-c", "while true; do echo $(date) >> /data/index.html; sleep 2; done"]volumes:- name: htmlhostPath:path: /opt/testtype: DirectoryOrCreate
#如果节点上没有这个目录则帮你创建这个目录
实现nginx1、nginx2、节点是平级关系实现三方同步
相同pod不同容器的信息
kubectl exec -it pod名称 -c 容器名称 bash
#进入相同pod中的不同容器
kubectl logs pod名称 -c 容器名称
#查看相同pod中的不同容器的日志
nfs共享存储
所有pod内的目录都和节点上的nfs共享目录形成数据卷。所有的数据文件都保存在共享目录当中。集中方便管理
nfs共享的工作流程图:
创建nfs共享目录
mkdir /data/volumes
chmod 777 /data/volumes
vim /etc/exports
/data/volumes 20.0.0.0/24(rw,no_root_squash)
#rw,no_root_squash:给客户机访问本地提供本地root权限
实验举例:
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx1name: nginx1
spec:replicas: 3selector:matchLabels:app: nginx1template:metadata:labels:app: nginx1spec:containers:- image: nginx:1.22name: nginx1volumeMounts:
#开始创建挂载卷- name: html
#定义存储卷的名称mountPath: /usr/share/nginx/html
#mountPath:定义容器内的挂载点。或者其他容器的共享目录- image: nginx:1.22name: nginx2volumeMounts:- name: html
#需要和上面定义的名称保持一致mountPath: /data
#引用上一个挂载的名称。
#表示我将使用/data目录和/usr/share/nginx/html这个目录挂载command: ["/bin/bash", "-c", "while true; do echo $(date) >> /data/index.html; sleep 2; done"]volumes:- name: htmlnfs:path: /data/volumes
#表示将容器和节点目录进行挂载server: 20.0.0.35
#这里可以使用IP地址也可以使用主机名来替代。但是需要做主机名映射
基于yaml文件删除:
kubectl delete -f 文件名称.yaml
#如果是基于这个yaml文件创建的pod。可以使用这种方式删除deployment。
工作中最常见的是hostPath和NFS。推荐使用NFS
PVC和PV
PV:全程Persistent Volume 持久化存储卷。用来描述和定义一个存储卷。
PV是由运维人员来定的。
PVC:全程Persistent Volume Claim 是存储化存储的请求。
PVC是用来描述或者声明我希望使用什么样的PV来进行存储。
PVC和PV是一一对应的关系(描述、存储)
描述:期望的PV的类型是什么
存储:PV存储的大小是什么
PVC请求PV到NFS
PVC发起请求
PV是满足请求的存储卷
在k8s中PVC和PV都是虚拟化的概念。是一种虚拟存储资源。
PVC和PV的结构图:
PVC提供读写方式、存储空间等等。
PV的虚拟存储会通过NFS共享存储的方式挂载到提供共享目录的服务器
PVC发起请求的读写方式会和PV保持一致。
PVC会匹配最完整、最优路径。如果pv3被占用了,则会选择pv4。
PV和PVC静态请求的工作流程:
1、 pod内设定声明一个PVC请求。
2、 PVC请求会找一个最合适的PV来作为pod的存储卷。
3、 PV和共享目录在一一映射。
4、 最终由NFS共享目录来提供实际物理上的共享存储空间。
PV是集群当中的存储资源。PVC请求存储资源。也是对存储资源的一个检索(检查索引),选择一个最合适的PV来存储资源。
PV和PVC的生命周期管理:
-
Provisioning(配置)配置两种方式选择动态还是静态PVC
-
PVC请求request
-
检索。找一个合适的PV
-
PVC和PV会binding(绑定):就是将PV分配给PVC
-
然后开始使用:就是pod通过PVC使用存储资源NFS
删除pod时:
-
pod被删除
-
PV会releasing(释放):pod解除和volume共享挂载卷的关系,删除PVC
-
最后recycling(回收资源):保留PV。保证下一个PVC也可以使用。
PV的状态
-
Available:可用,没有被任何PVC绑定。
-
Bound:绑定,PV已经绑定了PVC,绑定即使用。
-
released:PVC已经被删除了,但是PV的存储资源还没有被集群回收
-
Failed:表示PV的资源回收失败。而且PV不可用状态。
PVC支持的读写方式
ReadWriteOnce:简称RWO。配置文件中是全称。表示存储PV可读可写。但是只能被单个pod挂载
ReadOnlyMany:简称ROX。在配置文件中是全称。表示存储PV可用以只读的方式被多个pod挂载。
ReadWriteMany: 简称RWX。在配置文件中是全称。表示存储可以支持读写的方式被多个pod共享。
NFS:可以支持三种读写和挂载方式
hostPath:只支持ReadWriteOnce方式
SCSI:
ISCSI:不支持ReadWriteMany
环境检擦
lsscsi
#查看当前设备上的SCSI设备
iscsiadm -m session -P 3
#查看服务器是否有iscsi设备
#-m session:指定操作的会话模块,管理iscsi的会话
#-P 3:显示详细信息的级别。级别是3.显示详细信息。
集群回收PV资源的方式
-
Retain:表示保留。pod和挂载点的数据不会被删除。默认方式。
-
Recycle:表示回收。PV上的数据将会被删除。挂载点的数据也会被删除。
-
Delete:表示删除。解绑时自动删除PV上的数据。本地硬盘不能使用只有云平台可以使用(AWS/EBS/GCE)。支持动态卷可用。PV不再使用(云平台自己处理)
当pod运行之后通过PVC请求到PV之后,除非pod被销毁,否则无法删除PVC
PVC和PV静态实验举例:
master01:20.0.0.32
node01:20.0.0.34
node02:20.0.0.35
k8s4主机:20.0.0.36k8s5主机:
mkdir v{1,2,3,4,5}
vim /etc/exports
/data/v1 20.0.0.0/24(rw,no_root_squash)
/data/v2 20.0.0.0/24(rw,no_root_squash)
/data/v3 20.0.0.0/24(rw,no_root_squash)
/data/v4 20.0.0.0/24(rw,no_root_squash)
/data/v5 20.0.0.0/24(rw,no_root_squash)
exportfs -arv
#发布出去
showmount -e
#在每个节点上查看到master01主节点上创建PV.yaml文件
vim pv.yaml
apiVersion: v1
kind: PersistentVolume
#PersistentVolume就是PV但是yaml文件中要用全称
metadata:name: pv001labels:name: pv001
spec:
#设定pv的参数nfs:path: /data/v1
#定义pv的挂载位置server: 20.0.0.36
#声明pv来自哪个IP地址accessModes: ["ReadWriteMany", "ReadWriteOnce"]
#ReadWriteMany表示支持多个pod挂载
#ReadWriteOnly表示只支持单个pod挂载
#支持多种挂载方式capacity:storage: 1Gi
#定义pv的大小---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv002labels:name: pv002
spec:nfs:path: /data/v2server: 20.0.0.36accessModes: ["ReadWriteOnce"]capacity:storage: 2Gi---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv003labels:name: pv003
spec:nfs:path: /data/v3server: 20.0.0.36accessModes: ["ReadWriteMany", "ReadWriteOnce"]capacity:storage: 2Gi---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv004labels:name: pv004
spec:nfs:path: /data/v4server: 20.0.0.36accessModes: ["ReadWriteMany", "ReadWriteOnce"]capacity:storage: 4Gi---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv005labels:name: pv005
spec:nfs:path: /data/v5server: 20.0.0.36accessModes: ["ReadWriteMany", "ReadWriteOnce", "ReadOnlyMany"]capacity:storage: 5Gikubectl apply -f pv.yaml
#创建PV
kubectl get pv
#查看PV状态定义一个请求向PV发起请求
vim pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
#定义这是PVC请求类型
metadata:name: mypvc
spec:
#定义参数accessModes: ["ReadWriteMany"]
#这里表示PVC期望请求的PV的读写挂载类型是什么。我希望能和PV请求到的是ReadWriteMany模式resources:requests:storage: 2Gi
#PVC期望请求PV的存储大小是2Gi
#期望的PV的读写权限模式是ReadWriteMany,并且存储大小最好是2Gi。
#最好是2G。只能比2G不能比2G小---
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx2name: nginx2
spec:replicas: 3selector:matchLabels:app: nginx2template:metadata:labels:app: nginx2spec:containers:- image: nginx:1.22name: nginx2volumeMounts:- name: htmlmountPath: /usr/share/nginx/htmlvolumes:- name: htmlpersistentVolumeClaim:claimName: mypvc
#定义pvc的名称.由mypc获取PVkubectl get pv
#查看PV状态
表示请求成功到k8s
kubectl get pv
cd v3
echo 123 > index.html回到master01主机
kubectl get pod -o wide
curl nginx副本IP测试
PVC发起请求选择使用哪个PV的存储
PV通过挂载的方式和物理存储做映射
最终由物理设备提供存储卷
资源回收的方式实验举例:
保留策略:
kubectl delete pvc mypvc
#pod还存在无法删除PVCkubectl delete deployment nginx
#删除pod后再删除PVC即可出现released表示回收完毕
回到k8s5主机查看共享文件是否存在kubectl edit pv pv003
把claimRef字段的内容全部删除保存推测出即可
kubectl get pv---
回收策略:回到pv.yaml添加回收策略
apiVersion: v1
kind: PersistentVolume
metadata:name: pv003labels:name: pv003
spec:nfs:path: /data/v3server: 20.0.0.36accessModes: ["ReadWriteMany", "ReadWriteOnce"]persistenVolumeReclaimPolicy: Recyclecapacity:storage: 2Gikubectl apply -f pv.yaml
kubectl get pv到k8s5
echo 123 > index.html回到master01
开始删除
kubectl delete deployment nginx
kubectl delete pvc mypvc
#先删除相关联的pod再删除pvc
kubectl get pv
一段时间之后会自动变成正常状态
再回到k8s5查看资源是否被回收---
delete策略:
delete只能在云平台且支持动态卷。本地硬盘并不支持。只能使用无法删除
回到pv.yaml添加回收策略
apiVersion: v1
kind: PersistentVolume
metadata:name: pv003labels:name: pv003
spec:nfs:path: /data/v3server: 20.0.0.36accessModes: ["ReadWriteMany", "ReadWriteOnce"]persistenVolumeReclaimPolicy: Deletecapacity:storage: 2Gikubectl apply -f pv.yaml
kubectl get pv回到k8s5
echo 123 > index.html回到master01
开始删除
kubectl delete deployment nginx
kubectl delete pvc mypvc
#先删除相关联的pod再删除pvc
kubectl get pv
这时会变为Failled状态
kubectl edit pv pv003
把claimRef字段的内容全部删除保存推测出即可
kubectl get pv
PV状态恢复正常
实验完成!!!
总结
k8s中存储卷的模式:
-
emptyDir:容器内存储卷,锁着pod被销毁,他也会被销毁。数据不保留
-
hostPath:节点目录的存储卷,可用实现持久化存储。数据在每个节点上都有。不方便集中管理
-
nfs:共享目录存储卷。既可以实现持久化也可也实现数据集中在一个目录。这样方便管理。
PV和PVC:
-
PVC是一种请求。请求的是PV的存储资源。PV通过挂载的方式与硬盘空间共享资源
-
NFS支持PVC的所有挂载方式和读写模式
-
hostPath只支持ReadWriteOnce模式
-
PVC是以检索的方式找到匹配的PV资源
检索挂载方式和读写模式
检索PV能提供的存储资源的大小
谁合适选谁
资源回收的三种方式:
-
保留:默认可用不写
-
回收:自动回收,节点上的数据会被删除
-
删除:PV会变成failed模式。此时是不可用状态。数据也会被删除。
PVC和PV之间静态请求。一旦成百个PVC负载能力将会下降,这就需要使用动态PVC
静态比较麻烦。动态PVC实现自动的匹配PV资源
相关文章:

k8s的存储卷、数据卷
容器内的目录和宿主机目录进行挂载。 容器在系统上的生命周期是短暂的。 k8s用控制器创建的pod。delete相当于重启。容器的状态也会恢复到初始状态。一旦恢复到初始状态,所有的后天编辑的文件都会消失 容器和节点之间创建一个可以持久化保存容器内文件的存储卷。…...

流星全自动网页生成系统重构版源码
流星全自动网页生成系统重构版源码分享,所有模板经过精心审核与修改,完美兼容小屏手机大屏手机,以及各种平板端、电脑端和360浏览器、谷歌浏览器、火狐浏览器等等各大浏览器显示。 为用户使用方便考虑,全自动网页制作系统无需繁琐…...

vscode打开c_cpp_properties.json文件的一种方式
步骤一 点击win32 步骤二 点击json 自动生成了...

发起人自选-钉钉审批
场景描述 配置一个审批流程,在某些审批节点,不能确定谁具体来审批,所以需要手工选择一个人或者多个人保证流程能得以顺利通过。有些审批流程的做法是,上一个节点来选择指定的人,而钉钉的做法是发起人来指定。 钉钉设…...

电脑DIY-显卡
显卡 英伟达(NVIDIA)RTX系列 英伟达(NVIDIA) 英伟达(NVIDIA)是一家知名的图形处理器制造商,其显卡产品系列众多。以下是英伟达显卡的主要系列: 系列面向客户说明产品GeForce系列个…...

vue3+vite+ts+pinia新建项目(略详细版)
1、新建项目 npm create vite@latest 2、安装依赖 yarn add vue-router yarn add -D @types/node vite-plugin-pages sass sass-loader 3、配置别名 //vite.config.ts import { defineConfig } from vite import path from node:path export default defineConfig({ plu…...

深入理解 Flink(五)Flink Standalone 集群启动源码剖析
前言 Flink 集群的逻辑概念: JobManager(StandaloneSessionClusterEntrypoint) TaskManager(TaskManagerRunner) Flink 集群的物理概念: ResourceManager(管理集群所有资源,管理集群所有从节点) TaskExecutor(管理从节点资源,接…...

SpringCloud Aliba-Nacos-从入门到学废【2】
🥚今日鸡汤🥚 比起不做而后悔,不如做了再后悔。 ——空白《游戏人生》 目录 🧈1.Nacos集群架构说明 🧂2.三种部署模式 🍿3.切换到mysql 1.在nacos-server-2.0.3\nacos\conf里找到nacos-mysql.sql 2.查…...

web前端算法简介之字典与哈希表
回顾 栈、队列 : 进、出 栈(Stack): 栈的操作主要包括: 队列(Queue): 队列的操作主要包括: 链表、数组 : 多个元素存储组成的 简述链表:数组&…...

【uview2.0】Keyboard 键盘 与 CodeInput 验证码输入 结合使用 uview
https://www.uviewui.com/components/codeInput.html (CodeInput 验证码输入) https://www.uviewui.com/components/keyboard.html (Keyboard 键盘) <u-keyboard mode"number" :dotDisabled"true" :show&q…...

解决chromebook kabylake安装linux没有声音问题
chromebook kabylake安装arch没有声音,好长时间没有解决,一直用的蓝牙耳机。 今天搜搜帖子解决了, 分享供参考 git clone https://github.com/eupnea-project/chromebook-linux-audiocd chromebook-linux-audio ./setup-audio提示 I Underst…...

Spring Boot - Application Events 的发布顺序_ApplicationContextInitializedEvent
文章目录 Pre概述Code源码分析 Pre Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent 概述 Spring Boot 的广播机制是基于观察者模式实现的,…...

由jar包冲突导致的logback日志不输出
最近接手一个厂商移交的项目,发现后管子系统不打印日志。 项目使用的logback 本地断点调试发现logback-classic jar冲突导致 打出的war中没有 相关的jar 解决方法: 去除pom 文件中多余的 logback-classic 应用,只保留最新版本的。 重新打…...

app开发——安卓native开发思路记录
我们知道app开发目前有三种方式,第一种是webapp,第二种是hybird app,第三种是native app。 而native-app就是安卓原生app,这里记录一下安卓原生开发的基本思路。 首先,安卓原生开发虽然在当今时代不是那么常见了&…...

黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(1)准备工作、部门管理
一、准备工作 1.明确需求 根据产品经理绘制的页面原型,对部门和员工进行相应的增删改查操作。 2.环境搭建 将使用相同配置的不同项目作为Module放入同一Project,以提高相同配置的复用性。 准备数据库表(dept, emp) 资料中包含…...

C# .NET SQL sugar中 IsAny进行根据条件判断数据是否存在 IsAny的使用
SQL sugar 中控制器直接判断数据是否存在 首先确保你的Service层继承的表名 控制器中使用IsAny进行根据条件判断数据是否存在...

《Git学习笔记:Git入门 常用命令》
1. Git概述 1.1 什么是Git? Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),在软件开发过程中被广泛使用。 其它的版本控制工具 SVNCVSVSS 1.2 学完Git之后能做…...

小程序跳转安卓会跳转两次 iOS不会的解决方案
原因:元素点击事件在子元素上有绑定,父元素上也有绑定会形成冒泡事件; 原生小程序: bind:tap:会冒泡; <view bind:tap"gotoDetail"><image :src"{{ item2.img }}" mode&qu…...

vue3+ts 中实现压缩图片、blob 转 base64
压缩图片 1.npm 安装 image-compressor.js 2.引入 import ImageCompressor from image-compressor.js 3.使用 const compressImage async (file: any) > {var imageCompressor new ImageCompressor()return new Promise((resolve, reject) > {imageCompressor.comp…...

(框架设计-基础库建设) boost 库
“框架”这个词所有的开发都听过,但是有多少人能理解框架的作用?为什么要花那么大精力去弄一个框架?大家应该都听过各个大厂稍微大点的项目都会有一个“框架组”/“架构组”等。 费这么大人力组建一个组来 做框架/架构 到底值不值呢ÿ…...

将ResultSet转实体类
将ResultSet转实体类 sqlExecutor.executeQuery的执行结果的返回值是ResultSet:package java.sql; 一般在程序中我们需要把查询结果转为实体类返回给前端,此处可以使用的方法: ResultSet转实体类方法1 2 1:resultSet.getXXX(columnIndex)…...

Web后端开发
一、Maven 1.1 简介 1.2 作用 1.3 流程 通过各种插件实现项目的标准化构建。 1.4 安装 1.5 配置环境 1.5.1 当前工程环境 1.5.2 全局环境 1.6 创建 Maven项目 1.7 导入项目 1.8 依赖管理 1.8.1 依赖配置 1.8.2 依赖传递 pom.xml——右键——Diagrams——show dependen…...

CAN201 计网概念收集
Lecture 1 the theoretical basis for networking Network edge and core 地理覆盖范围:广WAN,城MAN,局LAN,个PAN 交换方式,电路,报文,分组 电路交换vs报文vs分组 Network performance pr…...

【占用网络】FlashOcc:快速、易部署的占用预测模型
前言 FlashOcc是一个它只需2D卷积就能实现“占用预测模型”,具有快速、节约内存、易部署的特点。 它首先采用2D卷积提取图形信息,生成BEV特征。然后通过通道到高度变换,将BEV特征提升到3D空间特征。 对于常规的占用预测模型,将…...

239.【2023年华为OD机试真题(C卷)】求幸存者之和(模拟跳数-JavaPythonC++JS实现)
🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-求幸存数之和二.解题思路三.题解代码Python题解…...

Pytorch中的标准维度顺序
在PyTorch中,如果一个张量包括通道数(C)、宽度(W)、高度(H)和批量大小(N),那么它的标准维度顺序是 [N, C, H, W],即: 第一个维度 N 是…...

Nginx的安装配置和使用
最近有好几个地方用到了nginx,但是一直还没时间记录下nginx的安装、配置和使用,这篇文章可以将这块内容整理出来,方便大家一起学习~ 安装 安装是相对简单一些的,直接使用yum即可。 yum install -y nginx 默认安装位置在/usr/sb…...

P1643 完美数 题解
完美数 首先,介绍一下这篇题解的特邀嘉宾:ChatGPT4.0 传送门 题目描述 考古队员小星在一次考察中意外跌入深渊,穿越到了一个神秘的荒漠。这里有许多超越他认识的事物存在,例如许多漂浮在空中的建筑,例如各种奇怪的…...

docker一键安装
1.把docker_compose_install文件夹放在任意路径; 2.chmod -R 777 install.sh 3.执行./install.sh 兼容:CentOS7.6、麒麟V10服务器版、统信UOS等操作系统。 下载地址(本人上传,免积分下载):https://downlo…...

模板管理支持批量操作,DataEase开源数据可视化分析平台v2.2.0发布
2024年1月8日,DataEase开源数据可视化分析平台正式发布v2.2.0版本。 这一版本的功能升级包括:在“模板管理”页面中,用户可以通过模板管理的批量操作功能,对已有模板进行快速重新分类、删除等维护操作;数据大屏中&…...