【kubernetes】持久化存储 —— 存储类storageclass

2024-09-04 16:04

本文主要是介绍【kubernetes】持久化存储 —— 存储类storageclass,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

PV和PVC模式都是需要先创建好PV,然后定义好PVC和PV进行一对一的Bond后,才可以创建Pod进行使用。

但是如果PVC请求成千上万,那么就需要创建成千上万的PV,对于运维人员来说维护成本很高。因此,Kubernetes提供一种自动创建PV的机制,叫StorageClass。它的作用就是创建PV的模板。k8s集群管理员通过创建storageclass可以动态生成一个存储卷PV供k8s的PVC使用。

StorageClass 对象

每个 StorageClass 都包含 provisioner、parameters 和 reclaimPolicy 字段。
在 StorageClass 需要动态制备 PersistentVolume 以满足 PersistentVolumeClaim (PVC) 时使用到。

StorageClass 对象的命名很重要,用户使用这个命名来请求生成一个特定的类。 当创建 StorageClass 对象时,管理员设置 StorageClass 对象的命名和其他参数。

具体来说,StorageClass会定义以下两部分:
1、PV的属性 ,比如存储的大小、类型等;
2、创建这种PV需要使用到的存储插件,比如Ceph、NFS等

有了这两部分信息,Kubernetes就能够根据用户提交的PVC,找到对应的StorageClass,然后Kubernetes就会调用 StorageClass声明的存储插件,创建出需要的PV。

常用字段

# kubectl explain storageclassallowVolumeExpansion	<boolean>           # 是否允许卷扩展,见下图
allowedTopologies	    <[]Object>
apiVersion	            <string>
kind	                <string>
metadata	            <Object>
mountOptions	        <[]string>
parameters	            <map[string]string>  # 定义相关参数
provisioner	            <string> -required-  # 供应商,指定使用哪种存储来创建pv,见下图
reclaimPolicy	        <string>             # pv的回收策略 默认是Delete
volumeBindingMode	    <string>
  • 每个 StorageClass 都有一个制备器(Provisioner),用来决定使用哪个卷插件制备 PV。 该字段必须指定。
    在这里插入图片描述

  • 当下层 StorageClass 的 allowVolumeExpansion 字段设置为 true 时,以下类型的卷支持卷扩展。
    在这里插入图片描述

案例操作

一,创建存储类storageclass

1,创建sa

sa的全称是serviceaccount。
serviceaccount是为了方便Pod里面的进程调用Kubernetes API或其他外部服务而设计的。

指定了serviceaccount之后,我们把pod创建出来了,我们在使用这个pod时,这个pod就有了我们指定的账户的权限了。

# cat serviceaccount.yaml apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-provisioner
kubectl get sa[ServiceAccount]

2,对sa授权

对创建的账号:nfs-provisioner 进行RBAC授权。

kubectl create clusterrolebinding nfs-provisioner-clusterrolebinding --clusterrole=cluster-admin --serviceaccount=default:nfs-provisioner

3,安装nfs-provisioner程序

# 创建 /data/nfs_pro 成为nfs的共享目录
mkdir /data/nfs_pro -p# 加入共享配置文件中最后
vim /etc/exports
/data/nfs_pro *(rw,no_root_squash)# 加载配置文件
exportfs -arv

4,创建供应商 provisioner

# vim nfs-deployment.yamlapiVersion: apps/v1
kind: Deployment
metadata:name: nfs-provisioner
spec:selector:matchLabels:app: nfs-provisionerreplicas: 1strategy:type: Recreate                     # 定义回收策略,保留template:metadata:labels:app: nfs-provisionerspec:serviceAccount: nfs-provisioner  # 设置账户sacontainers:- name: nfs-provisionerimage: registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0imagePullPolicy: IfNotPresentvolumeMounts:- name: nfs-client-root     # 卷名与volumes卷名一致mountPath: /persistentvolumes   # pod内部共享路径env:- name: PROVISIONER_NAME   # 供应商名value: example.com/nfs   # 供应商值- name: NFS_SERVER         # NFS服务器名value: 192.168.40.180    # NFS自己的宿主机ip- name: NFS_PATH           # NFS共享目录名value: /data/nfs_pro/    # NFS创建的共享目录volumes:- name: nfs-client-root        # 存储卷名 要与加载卷 相同nfs:server: 192.168.40.180     # NFS自己的宿主机ippath: /data/nfs_pro/       # NFS创建的共享目录

5,创建存储类storageclass

# cat nfs-storageclass.yaml apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs                    # 存储类的名字,下一步要用到
provisioner: example.com/nfs   # 供应商要与上一步创建的供应商相同
kubectl get sc[storageclass]

6,创建pvc,采用storageclass动态生成pv

创建pvc的同时,通过storageclass动态也生成了pv

# cat pvc-claim.yaml kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: test-claim1         # pvc名称,下一步创建pod要用
spec:accessModes:  ["ReadWriteMany"]resources:requests:storage: 1GistorageClassName:  nfs    # 与上一步创建的存储类【nfs】名称一致
# 生成了pvc
kubectl get pvc[PersistentVolumeClaim]# 生成了pv
kubectl get pv[PersistentVolume]

【步骤总结】:
1、供应商:创建一个nfs provisioner
2、创建storageclass,storageclass指定刚才创建的供应商
3、创建pvc,这个pvc指定storageclass

二,用存储类storageclass创建pod

1,创建pod

创建pod,挂载storageclass动态生成的pvc:test-claim1

# cat read-pod.yaml kind: Pod
apiVersion: v1
metadata:name: read-pod
spec:containers:- name: read-podimage: nginximagePullPolicy: IfNotPresentvolumeMounts:- name: nfs-pvc                 # volumes名称相同mountPath: /usr/share/nginx/htmlrestartPolicy: "Never"volumes:- name: nfs-pvc                   # 名称要与volumeMounts相同persistentVolumeClaim:claimName: test-claim1        # pvc名称,上一步已经创建    
kubectl apply -f read-pod.yaml 

2,验证存储共享目录

在这里插入图片描述

这篇关于【kubernetes】持久化存储 —— 存储类storageclass的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136395

相关文章

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

什么是Kubernetes PodSecurityPolicy?

@TOC 💖The Begin💖点点关注,收藏不迷路💖 1、什么是PodSecurityPolicy? PodSecurityPolicy(PSP)是Kubernetes中的一个安全特性,用于在Pod创建前进行安全策略检查,限制Pod的资源使用、运行权限等,提升集群安全性。 2、为什么需要它? 默认情况下,Kubernetes允许用户自由创建Pod,可能带来安全风险。

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

kubernetes集群部署Zabbix监控平台

一、zabbix介绍 1.zabbix简介 Zabbix是一个基于Web界面的分布式系统监控的企业级开源软件。可以监视各种系统与设备的参数,保障服务器及设备的安全运营。 2.zabbix特点 (1)安装与配置简单。 (2)可视化web管理界面。 (3)免费开源。 (4)支持中文。 (5)自动发现。 (6)分布式监控。 (7)实时绘图。 3.zabbix的主要功能

【Kubernetes】常见面试题汇总(三)

目录 9.简述 Kubernetes 的缺点或当前的不足之处? 10.简述 Kubernetes 相关基础概念? 9.简述 Kubernetes 的缺点或当前的不足之处? Kubernetes 当前存在的缺点(不足)如下: ① 安装过程和配置相对困难复杂; ② 管理服务相对繁琐; ③ 运行和编译需要很多时间; ④ 它比其他替代品更昂贵; ⑤ 对于简单的应用程序来说,可能不