【笔记12】K8S中的存储(2)
PV 持久卷是用插件的形式来实现的。以下的持久卷已被弃用。这意味着当前仍是支持的,但是 Kubernetes 将来的发行版会将其移除。
·
持久卷的类型
PV 持久卷是用插件的形式来实现的。Kubernetes 目前支持以下插件:
- csi - 容器存储接口 (CSI)
- fc - Fibre Channel (FC) 存储
- hostPath - HostPath 卷 (仅供单节点测试使用;不适用于多节点集群;请尝试使用 local 卷作为替代)
- iscsi - iSCSI (SCSI over IP) 存储
- local - 节点上挂载的本地存储设备
- nfs - 网络文件系统 (NFS) 存储
以下的持久卷已被弃用。这意味着当前仍是支持的,但是 Kubernetes 将来的发行版会将其移除。
- azureFile - Azure File (于 v1.21 弃用)
- flexVolume - FlexVolume (于 v1.23 弃用)
- portworxVolume - Portworx 卷 (于 v1.25 弃用)
- vsphereVolume - vSphere VMDK 卷 (于 v1.19 弃用)
- cephfs - CephFS 卷 (于 v1.28 弃用)
- rbd - Rados Block Device (RBD) 卷 (于 v1.28 弃用)
旧版本的 Kubernetes 仍支持这些“树内(In-Tree)”持久卷类型:
- awsElasticBlockStore - AWS Elastic Block Store (EBS) (v1.27 开始不可用)
- azureDisk - Azure Disk (v1.27 开始不可用)
- cinder - Cinder (OpenStack block storage) (v1.27 开始不可用)
- photonPersistentDisk - Photon 控制器持久化盘。(从 v1.15 版本开始将不可用)
- scaleIO - ScaleIO 卷(v1.21 之后不可用)
- flocker - Flocker 存储 (v1.25 之后不可用)
- quobyte - Quobyte 卷 (v1.25 之后不可用)
- storageos - StorageOS 卷 (v1.25 之后不可用)
常见回收策略:
- 回收策略 Retain 使得用户可以手动回收资源。当 PersistentVolumeClaim
对象被删除时,PersistentVolume 卷仍然存在,对应的数据卷被视为"已释放(released)"。
由于卷上仍然存在这前一申领人的数据,该卷还不能用于其他申领。 - 回收策略 Delete 可以让卷插件自动回收资源,删除动作会将 PersistentVolume 对象从 Kubernetes
中移除,同时也会从外部基础设施中移除所关联的存储资产。 - 回收策略 Recycle (已经废弃)会在卷上执行一些基本的擦除 (rm -rf /thevolume/*)操作,之后允许该卷用于新的 PVC 申领。
local卷
本地存储类型的PV是Kubernetes中一种比较特殊的持久化存储,它允许将节点上的本地磁盘或目录用作PV。与其他PV类型(例如NFS、Ceph或云存储)不同,本地存储类型的PV直接使用节点上的存储资源,因此具有更低的延迟和更高的性能。
使用本地存储类型的PV时,需注意以下几个关键点:
- 节点特性:本地存储类型的PV与特定的节点绑定,因为它直接使用节点上的存储资源。
- 数据持久性:由于本地存储类型的PV与特定节点关联,当该节点发生故障时,存储在PV中的数据可能无法访问。
- 调度限制:Pod使用本地存储类型的Persistent Volume
Claim(PVC)时,Kubernetes会尝试将Pod调度到关联PV的节点上。 - 回收策略:当PVC被删除时,PV的回收策略将决定如何处理关联的本地存储。
示例:
apiVersion: v1
kind: PersistentVolume
metadata:
name: example-pv
spec:
capacity:
storage: 100Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: local-storage
local:
path: /mnt/disks/ssd1
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- example-node
nfs卷
nfs 卷能将 NFS (网络文件系统) 挂载到你的 Pod 中。 不像 emptyDir 那样会在删除 Pod 的同时也会被删除,nfs 卷的内容在删除 Pod 时会被保存,卷只是被卸载。 这意味着 nfs 卷可以被预先填充数据,并且这些数据可以在 Pod 之间共享。
示例:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs-storage
nfs:
path: /data/kubernetes
server: 192.168.129.128
StorageClass
StorageClass(SC)的主要作用在于,自动创建PV,从而实现PVC按需自动绑定PV。
下面我们通过创建一个基于NFS的SC来演示SC的作用。
要想使用NFS的SC,还需要安装一个NFS provisioner,provisioner里会定义NFS相关的信息(服务器IP、共享目录等)
部署步骤:
helm repo add stable https://kubernetes-charts.storage.googleapis.com
helm repo update
helm install nfs-client-provisioner stable/nfs-client-provisioner --set storageClass.name=nfs-client --set nfs.server=192.168.129.128 --set nfs.path=/data/kubernetes --set storageClass.defaultClass=true
创建pvc:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfspvc
spec:
storageClassName: nfs-client
accessModes:
- ReadWriteMany
resources:
requests:
storage: 500Mi
创建pod:
apiVersion: v1
kind: Pod
metadata:
name: nfspod
spec:
containers:
- name: nfspod
image: nginx:1.23.2
volumeMounts:
- name: nfspv
mountPath: "/usr/share/nginx/html"
volumes:
- name: nfspv
persistentVolumeClaim:
claimName: nfspvc
更多推荐
已为社区贡献4条内容
所有评论(0)