当前位置: 首页> 健康> 母婴 > 十大平面设计公司_网络运营招聘信息_产品推广平台排行榜_百度天眼查公司

十大平面设计公司_网络运营招聘信息_产品推广平台排行榜_百度天眼查公司

时间:2025/8/23 13:48:06来源:https://blog.csdn.net/u013400314/article/details/147136174 浏览次数:0次
十大平面设计公司_网络运营招聘信息_产品推广平台排行榜_百度天眼查公司

为啥需要数据卷

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

Volume类型

目前,Kubernetes支持以下Volume 类型:
在这里插入图片描述

NFS

NFS是Network File System的缩写,即网络文件系统。分布式文件系统协议,NFS基于RPC(Remote Procedure Call)远程过程调用实现,其允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序就可以像访问本地文件一样访问远程系统上的文件。NFS是一个非常稳定的,可以移植的网络文件。具备可扩展和高性能等特性,达到了企业级应用质量标准。
Kubernetes中通过简单地配置就可以挂载NFS到Pod中,而NFS中的数据是可以永久保存的,同时NFS支持同时写操作。

》》NFS原理
NFS 使用RPC(Remote Procedure Call)的机制进行实现,RPC使得客户端可以调用服务端的函数。同时,由于有VFS的存在,客户端可以像使用其它普通文件系统一样使用NFS文件系统。经由操作系统的内核,将NFS文件系统的调用请求通过TCP/IP 发送至服务端的NFS服务。NFS服务器执行相关的操作,并将操作结果返回给客户端。

在这里插入图片描述
在这里插入图片描述

emptyDir可以提供不同容器间的文件共享,但不能存储;hostPath可以为不同容器提供文件的共享并可以存储,但受制于节点限制,不能跨节点共享;这时需要网络存储 (NAS),即既可以方便存储容器又可以从任何集群节点访问

安装NFS 服务端

# NFS是一个分布式系统,建议单独部署一台主机
# 创建一个共享目录 
mkdir -pv /usr/local/nfs/volumes
# 给这个目录增加RW权限
chomd a+rw /usr/local/nfs/volumes
# Ubuntu 安装NFS 服务端 
sudo apt update
sudo apt install nfs-kernel-server
# centos 安装NFS 服务端
sudo yum install nfs-utils rpcbind
sudo systemctl enable --now nfs-server rpcbind
# 配置NFS服务目录  vim /etc/exports 
追加   /usr/local/nfs/volumes *(rw,sync,no_subtree_check,no_root_squash)
# /usr/local/nfs/volumes 作为服务目录向客户端开放
# 10.244.0.0/16 表示这个网段IP都可以访问,也可以 *  表示任何IP都可以访问
# rw 读写权限
# sync  同步权限
# no_subtree_check  如果输出目录是一个子目录,NFS服务器不检查其父目录的权限
# no_root_squash    客户端连接服务端时如果使用是root用户,那么也拥有对服务端分享的目录的root权限# 重启服务,让上面的配置生效
sudo exportfs -ra  
# 重新加载exports配置
sudo systemctl restart nfs-kernel-server 
##  上面是针对 nfs 服务端的操作  
## 下面对nfs检测是否能使用,可以跟上面同一个节点或另外找一个节点  以下以是在k8s 集群的节点中操作
# 安装客户端
apt update
apt install -y nfs-common
# 创建NFS 客户端挂载目录
mkdir -pv /usr/local/kubernetes/nfs-volumes-mount
# 将NFS服务端/usr/local/nfs/volumes  的目录挂载到NFS 客户端的 /usr/local/kubernetes/nfs-volumes-mount 目录
# 如果报错 mount.nfs: access denied by server while mounting
# 要检查 是否允许ip地址挂载,或是否有读写的权限 
mount 172.30.164.60:/usr/local/nfs/volumes /usr/local/kubernetes/nfs-volumes-mount 
# 查看是否挂载成功
df  | grep mount# 取消NFS 客户端挂载   注意不要直接在挂载目录下执行(就是不能在nfs-volumes-mount目录下执行),否则会报错(device is busy
)
umount /usr/local/kubernetes/nfs-volumes-mount 
# nfs-volumes-mount  这个文件夹也需要手动删除

》》或者在安装nfs客户端节点 机器中 执行
》showmount -e 172.30.164.60 ip地址就是 nfs服务端的ip
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

PV PVC

在这里插入图片描述
》》定义pv

# 只需在master节点执行 
# 创建pv的配置文件
apiVersion: v1
kind: PersistentVolume
metadata:name: nfs-pv-sqlserver
spec:# 设置容量capacity:storage: 5Gi# 访问模式accessModes:# 该卷能够以读写模式被多个节点同时加载- ReadWriteMany# 回收策略,这里是基础擦除  相当于 rm -rf /挂载/persistentVolumeReclaimPolicy: Recyclenfs:# NFS 服务端设置的路径  就是 vim /etc/exportspath: "/usr/local/nfs/volumes"# NFS 服务端地址server: 172.30.164.60readOnly: false
# 
kubectl create -f nfs-pv-sqlserver.yml
# 
kubectl get pv

在这里插入图片描述

》》定义pvc

# 也只需要在 master节点执行 
# nfs-pvc-sqlserver.ymlapiVersion: v1
kind: PersistentVolumeClaim
metadata: name: nfs-pvc-sqlserver-zen
spec:accessModes:# 需要使用和PV 一致的访问模式- ReadWriteMany# 按需分配资源resources:requests:storage: 2Gi# 部署 上面的yml文件
kubectl create -f nfs-pvc-sqlserver.yml 
# 查看
kubectl get pvc 

在这里插入图片描述

》》定义sqlserver 配置文件

# 创建命名空间
apiVersion: v1
kind: Namespace
metadata:name: sqlserver
---
# sqlserver-secret.yaml
apiVersion: v1
kind: Secret
metadata:name: mssql-secretnamespace: sqlserver
type: Opaque
data:MSSQL_SA_PASSWORD: "U3VwZXJTdHJvbmdQYXNzMTIzIQ=="  # Base64 编码的密码(示例:SuperStrongPass123!)
---
# sqlserver 部署文件
apiVersion: apps/v1
kind: Deployment
metadata:name: mssql-deploymentnamespace: sqlserver
spec:replicas: 1selector:matchLabels:app: mssqltemplate:metadata:labels:app: mssqlspec:containers:- name: mssqlimage: mcr.microsoft.com/mssql/server:2022-latestports:- containerPort: 1433env:- name: MSSQL_PIDvalue: "Developer"  # 版本:Developer/Express/Enterprise(按需选择)- name: ACCEPT_EULAvalue: "Y"- name: MSSQL_SA_PASSWORDvalueFrom:secretKeyRef:name: mssql-secretkey: MSSQL_SA_PASSWORDvolumeMounts:- name: mssql-datamountPath: /var/opt/mssqlvolumes:- name: mssql-datapersistentVolumeClaim:claimName: nfs-pvc-sqlserver-zen
---
# sqlserver-service.yaml
apiVersion: v1
kind: Service
metadata:name: mssql-servicenamespace: sqlserver
spec:selector:app: mssqlports:- protocol: TCPport: 1433targetPort: 1433nodePort: 30099type: NodePort  # 生产环境可改为 LoadBalancer 或 NodePort

可用把 PVC、PV、命名空间、应用部署(sqlserver) 放在一个ymal文件

在这里插入图片描述

# 创建命名空间
apiVersion: v1
kind: Namespace
metadata:name: sqlserver
---
# pv配置文件
apiVersion: v1
kind: PersistentVolume
metadata:name: nfs-pv-sqlserver# 由于 PV 是集群级别的资源,即 PV 可以跨 namespace 使用,所以 PV 的 metadata 中不用配置 namespace#namespace: sqlserverlabels:app: kaizen
spec:# 设置容量capacity:storage: 5Gi# 访问模式accessModes:# 该卷能够以读写模式被多个节点同时加载- ReadWriteMany# 回收策略,这里是基础擦除  相当于 rm -rf /挂载/*persistentVolumeReclaimPolicy: Recyclenfs:# NFS 服务端设置的路径  就是 vim /etc/exportspath: "/usr/local/nfs/volumes"# NFS 服务端地址server: 172.30.164.60readOnly: false
---
# pvc  配置文件
apiVersion: v1
kind: PersistentVolumeClaim
metadata: name: nfs-pvc-sqlserver-zennamespace: sqlserver
spec:accessModes:# 需要使用和PV 一致的访问模式- ReadWriteMany# 按需分配资源resources:requests:storage: 2Giselector:matchLabels:app: kaizen
---
# sqlserver-secret.yaml
apiVersion: v1
kind: Secret
metadata:name: mssql-secretnamespace: sqlserver
type: Opaque
data:MSSQL_SA_PASSWORD: "U3VwZXJTdHJvbmdQYXNzMTIzIQ=="  # Base64 编码的密码(示例:SuperStrongPass123!)
---
# sqlserver 部署文件
apiVersion: apps/v1
kind: Deployment
metadata:name: mssql-deploymentnamespace: sqlserver
spec:replicas: 1selector:matchLabels:app: mssqltemplate:metadata:labels:app: mssqlspec:containers:- name: mssqlimage: mcr.microsoft.com/mssql/server:2022-latestports:- containerPort: 1433env:- name: MSSQL_PIDvalue: "Developer"  # 版本:Developer/Express/Enterprise(按需选择)- name: ACCEPT_EULAvalue: "Y"- name: MSSQL_SA_PASSWORDvalueFrom:secretKeyRef:name: mssql-secretkey: MSSQL_SA_PASSWORDvolumeMounts:- name: mssql-datamountPath: /var/opt/mssqlvolumes:- name: mssql-datapersistentVolumeClaim:claimName: nfs-pvc-sqlserver-zen
---
# sqlserver-service.yaml
apiVersion: v1
kind: Service
metadata:name: mssql-servicenamespace: sqlserver
spec:selector:app: mssqlports:- protocol: TCPport: 1433targetPort: 1433nodePort: 30099type: NodePort  # 生产环境可改为 LoadBalancer 或 NodePort

在这里插入图片描述
》》密码:SuperStrongPass123!
服务器名称,可以是集群中任意节点的IP地址

在这里插入图片描述
》》持续化了
在这里插入图片描述
在这里插入图片描述

PV是集群中的资源。 PVC是对这些资源的请求,也是对资源的索引检查。
PVC它属于一个Namespace中的资源
PV是集群中的一种资源,与节点(Node)一样,它属于集群级别资源,不属于任何Namespace。
生命周期管理:PVC有自己的生命周期,独立于任何使用它的容器组。即使容器组被删除或重新调度,PVC及其绑定的PV仍然存在,保证了数据的持久性。
在这里插入图片描述

在这里插入图片描述
》》》静态创建pv
在这里插入图片描述
》》》动态创建pv

上述介绍的PV和PVC模式是需要运维人员创建好PV,然后开发人员定义好PVC进行一对一的Bond,但是如果PVC请求成千上万,那么就需要创建成千上万的PV,对于运维人员来说维护成本很高,Kubernetes提供一种自动创建PV的机制,叫StorageClass,它的作用就是创建PV的模板。

原理:根据PVC的配置通过引用StorageClass(简称SC)资源触发存储卷插件动态的创建PV资源

pvc和pv绑定,才可以给pod使用,StorageClass是创建pv的模板
在这里插入图片描述
》》》PV和PVC的生命周期
在这里插入图片描述
在这里插入图片描述
PV的生命周期包括创建、绑定、使用和释放等阶段。一旦PV被创建并配置好,它就可以被PVC申请和使用。当PVC被删除时,PV会根据回收策略进行相应的处理。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Storage Class (SC)

StorageClass是Kubernetes中用于定义持久卷(Persistent Volume,简称PV)的类型和行为的对象。以下是对StorageClass的详细介绍:一、基本概念
定义:StorageClass是Kubernetes中用于抽象存储资源的定义,它允许管理员设置PVC(Persistent Volume Claim)的后端存储细节,简化用户操作,并自动处理PV的创建和绑定。
功能:通过StorageClass,管理员可以实现存储资源的动态供应和灵活管理,同时满足不同应用程序的存储需求。
二、主要组成
名称:StorageClass的唯一标识符,用于在Kubernetes中区分不同的StorageClass。
Provisioner:定义了用于创建和管理存储卷的后端存储系统。Provisioner可以是自定义的后端存储提供者,也可以是Kubernetes内置支持的存储系统提供者,如AWSElasticBlockStore、AzureDisk、GCEPersistentDisk等。
参数配置:根据所选的Provisioner,管理员可以配置不同的参数来定义存储卷的属性和行为。这些参数通常包括存储类型、容量、性能等。
回收策略:定义了当存储卷不再需要时如何处理。常见的回收策略包括Delete(删除)和Retain(保留)。
挂载选项:指定在挂载持久卷时传递给底层存储的挂载选项。不是所有PV类型都支持挂载选项,如果PV不支持但StorageClass设置了该字段,则PV将会创建失败。
绑定模式:定义了持久卷的绑定模式。目前支持的绑定模式包括Immediate(立即绑定)和WaitForFirstConsumer(延迟绑定)。
三、工作原理
当用户创建一个PVC时,可以指定所需的StorageClass。
Kubernetes会根据指定的StorageClass动态地创建一个符合要求的PV,并将其绑定到PVC上。
这样,用户就可以通过PVC来使用PV提供的持久化存储了。
四、优势与特点
动态资源供应:通过StorageClass,可以实现存储资源的动态供应,无需手动预先创建PV。
存储多样性管理:使用不同的StorageClass,可以为每个应用选择最适合的存储类型,满足多样化的存储需求。
简化管理:StorageClass抽象了存储资源的细节,简化了管理员的管理工作。

在这里插入图片描述

# StorageClass的配置文件
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-sc
provisioner: nfs-subdir-external-provisioner # NFS provisioner的名称
reclaimPolicy: Retain
# 在创建了这个StorageClass之后,用户可以创建一个PVC,并指定使用这个StorageClass:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc
spec:
# 指定 StorageClass 的名称storageClassName: nfs-scaccessModes:- ReadWriteOnceresources:requests:storage: "5Gi"

Kubernetes会根据StorageClass的定义,动态地创建一个5Gi大小的PV,并将其绑定到PVC上,从而实现持久化存储。
StorageClass是Kubernetes中用于定义和管理持久卷的重要对象。通过合理使用StorageClass,
可以实现存储资源的动态供应、多样化管理和简化管理等工作。

关键字:十大平面设计公司_网络运营招聘信息_产品推广平台排行榜_百度天眼查公司

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: