当前位置: 首页 > news >正文

K8S配置storage-class

简介

Kubernetes支持NFS存储,需要安装nfs-subdir-external-provisioner,它是一个存储资源自动调配器,它可将现有的NFS服务器通过持久卷声明来支持Kubernetes持久卷的动态分配。该组件是对Kubernetes NFS-Client Provisioner的扩展, nfs-client-provisioner已经不提供更新,而且nfs-client-provisioner Github 仓库也已经处于归档状态,已经迁移到nfs-subdir-external-provisioner的仓库
rbac.yamldeployment.yaml创建在任何空间都可以,storage class是集群资源,不受名称空间限制
获取NFS Subdir External Provisioner部署文件

$ wget https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/archive/refs/tags/nfs-subdir-external-provisioner-4.0.18.zip
$ unzip -o nfs-subdir-external-provisioner-4.0.18.zip
$ cd nfs-subdir-external-provisioner-nfs-subdir-external-provisioner-4.0.18/deploy/
$ ls

在这里插入图片描述

创建名称空间

$ kubectl create ns nacos-test

创建RBAC资源

$ sed -i'' "s/namespace:.*/namespace: nacos-test/g"  rbac.yaml  deployment.yaml
$ kubectl create -f  rbac.yaml

在这里插入图片描述

$ vim deployment.yaml

注意:/data/nfs/nacos目录一定要提前创建好
在这里插入图片描述

$ kubectl apply -f  deployment.yaml

在这里插入图片描述

$ kubectl get deployment,pods -n nacos-test

在这里插入图片描述

部署Storage Class

$ vim class.yaml

在这里插入图片描述
注意:Storage class的配置参数一定要提前编辑好,Storage Class一旦被创建,则无法修改,如需更改只能删除原Storage class资源对象并重新创建。"${.PVC.namespace}/${.PVC.name}"添加后,archiveOnDelete的值为true,当删除pvc后,数据目录会被移动到nfs服务器的共享目录下和名称空间同级的以archive开头的目录

$ kubectl apply -f class.yaml

在这里插入图片描述

$ kubectl get sc

在这里插入图片描述

设置默认Storage Class

在这里插入图片描述

$ kubectl get sc

在这里插入图片描述

创建测试PVC

$ vim test-claim.yaml

在这里插入图片描述

$ kubectl apply -f test-claim.yaml
$ kubectl get pvc -n nacos-test

在这里插入图片描述

创建测试pod

$ vim test-pod.yaml

在这里插入图片描述

$ kubectl apply -f test-pod.yaml
$ kubectl get pod -n nacos-test

在这里插入图片描述

查看文件写入

在这里插入图片描述

查看pod内挂载

$ kubectl exec -it test-pod -n nacos-test -- sh -c "df -h"

在这里插入图片描述
注意:在输出结果中可以看到挂载的NFS存储的可用空间为6.1T(这是整个磁盘的大小),而不是PVC中分配的1G,所以storage class申请的是动态资源,只要空间足够大,就不会出现数据卷资源不够的情况。
PV名称格式是pvc+随机字符串,所以每次只要不删除PVC,那么Kubernetes中PV与存储绑定将不会丢失,要是删除PVC也就意味着删除了绑定的文件夹,下次就算重新创建相同名称的PVC,生成的文件夹名称也不会一致,因为PV名是随机生成的字符串,而文件夹命名又跟PV有关,所以删除PVC需谨慎

测试删除pod和pvc

$ kubectl delete -f test-pod.yaml test-claim.yaml
$ kubectl get pod -n nacos-test

在这里插入图片描述

查看NFS数据目录

在这里插入图片描述
从结果中可以看到Kubernetes删除PVC后,在NFS存储层并没有立即删除PVC对应的数据目录及数据,而是将原来的数据目录改名为archived-+原有数据目录名称的形式。 该结果与配置Storage Class时的参数archiveOnDelete的值设置为true的预期相符

Storage Class回收策略

第一种配置

archiveOnDelete: "false"
reclaimPolicy: Delete   #默认没有配置,默认值为Delete

测试结果

  1. pod删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
  2. sc删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
  3. 删除PVC后,PV被删除且NFS Server对应数据被删除

第二种配置

archiveOnDelete: "false"
reclaimPolicy: Retain

测试结果

  1. pod删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
  2. sc删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
  3. 删除PVC后,PV不会被删除,且状态由Bound变为Released,NFS Server对应数据被保留
  4. 重建sc后,新建PVC会绑定新的pv,旧数据可以拷贝到新的PV中

第三种配置

archiveOnDelete: "ture" 
reclaimPolicy: Retain

测试结果

  1. pod删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
  2. sc删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
  3. 删除PVC后,PV不会被删除,且状态由Bound变为Released,NFS Server对应数据被保留
  4. 重建sc后新建PVC会绑定新的pv,旧数据可以通过拷贝到新的PV中

第四种配置

archiveOnDelete: "ture"
reclaimPolicy: Delete 

测试结果

  1. pod删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
  2. sc删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
  3. 删除PVC后,PV不会被删除,且状态由Bound变为Released,NFS Server对应数据被保留
  4. 重建sc后,新建PVC会绑定新的pv,旧数据可以通过拷贝到新的PV中

设置默认的Storage Class

在Kubernetes中,管理员可以为有不同存储需求的PVC创建相应的Storage Class来提供动态的存储资源(PV)供应,同时在集群级别设置一个默认的Storage Class,为那些未指定Storage Class的PVC使用。管理员要明确系统默认提供的Storage Class应满足和符合PVC的资源需求,同时注意避免资源浪费
要在集群中启用默认的Storage Class,就需要在kube-apiserver服务准入控制器–enableadmission-plugins中开启 DefaultStorageClass(从 Kubernetes 1.10版本开始默认开启)

--enable-admission-plugins=.. ., DefaultStorageClass

然后在Storage Class的定义中设置一个annotation

kind: Storageclass
apiVersion: storage.k8s.io/v1 
metadata:name: gold
annotations:storageclass.beta.kubernetes.io/is-default-class="true" 
provisioner: kubernetes.io/gce-pd
parameters:type: pd-ssd

存储绑定模式

Immediate绑定模式

存储绑定模式的默认值为Immediate,表示当一个PersistentVolumeClaim (PVC)创建出来时,就动态创建PV并进行PVC与PV的绑定操作。需要注意的是,对于拓扑受限 (Topology-limited) 或无法从全部Node访问的后端存储,将在不了解Pod调度需求的情况下完成PV的绑定操作,这可能会导致某些Pod无法完成调度

WaitForFirstConsumer绑定模式

WaitForFirstConsumer绑定模式表示PVC与PV的绑定操作延迟到第一个使用PVC的Pod创建出来时再进行。系统将根据Pod的调度需求,在Pod所在的Node上创建PV,这些调度需求可以通过以下条件(不限于)进行设置

  • Pod对资源的需求
  • Node Selector
  • Pod亲和性和反亲和性设置
  • Taint和Toleration设置

目前支持WaitForFirstConsumer绑定模式的存储卷包括:AWSElasticBlockStore、AzureDisk、GCEPersistentDisk。另外有些存储插件通过预先创建好的PV绑定支持WaitForFirstConsumer模式,比如AWSElasticBlockStoreAzureDiskGCEPersistentDiskLocal
在使用WaitForFirstConsumer模式的环境中,如果仍然希望基于特定拓扑信息(Topology)进行PV绑定操作,则在Storage Class的定义中还可以通过allowedTopologies字段进行设置。下面的例子通过matchLabelExpressions设置目标Node的标签选择条件(zone=us-central1-a或us-central1-b)PV将在满足这些条件的Node上允许创建

apiVersion: storage.k8s.io/v1
kind: StorageClass 
metadata:name: standard
provisioner: kubernetes.io/gce-pd 
parameters:type: pd-standard
volumeBindingMode: WaitForFirstConsumer 
allowedTopologies:
- matchLabelExpressions:- key: failure-domain.beta.kubernetes.io/zone vallues:- us-central1-a- us-central1-b

相关文章:

K8S配置storage-class

简介 Kubernetes支持NFS存储,需要安装nfs-subdir-external-provisioner,它是一个存储资源自动调配器,它可将现有的NFS服务器通过持久卷声明来支持Kubernetes持久卷的动态分配。该组件是对Kubernetes NFS-Client Provisioner的扩展&#xff0…...

多线程——线程池

目录 前言 一、什么是线程池 1.引入线程池的原因 2.线程池的介绍 二、标准库中的线程池 1.构造方法 2.方法参数 (1)corePoolSize 与 maximumPoolSize (2)keepAliveTime 与 unit (3)workQueue&am…...

VScode插件:前端每日一题

大文件上传如何做断点续传? 在前端实现大文件上传的断点续传,通常会将文件切片并分块上传,记录每块的上传状态,以便在中断或失败时只上传未完成的部分。以下是实现断点续传的主要步骤和思路: 1. 文件切片 (File Slici…...

Android跨进程通信

1、跨进程通信的几种方式 在 Android 中,跨进程通信 (IPC, Inter-Process Communication) 方式有多种,主要用于在不同的应用或进程之间传递数据。常见的跨进程通信方式包括: AIDL (Android Interface Definition Language) • 描述&#xff…...

【初阶数据结构】计数排序 :感受非比较排序的魅力

文章目录 前言1. 什么是计数排序?2. 计数排序的算法思路2.1 绝对位置和相对位置2.2 根据计数数组的信息来确认 3. 计数排序的代码4. 算法分析5. 计数排序的优缺点6.计数排序的应用场景 前言 如果大家仔细思考的话,可能会发现这么一个问题。我们学的七大…...

前后双差速轮之LQR控制

在之前的代码中,我们实现了前后两对双差速轮AGV的运动学正解和逆解。但为了实现对AGV的精确路径跟踪和姿态控制,我们需要引入控制算法。线性二次型调节器(LQR)是一种常用的最优控制方法,可以有效地将系统的状态误差最小化。本文将详细说明如何在之前的C++代码中加入LQR控制…...

Linux之远程连接服务器

1、远程连接服务器简介 (1)什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录linux主机以取得可操作主机接口(shell),而登录后的操作感觉就像是坐在系统前面…...

k8s 部署 nexus3 详解

创建命名空间 nexus3-namespace.yaml apiVersion: v1 kind: Namespace metadata:name: nexus-ns创建pv&pvc nexus3-pv-pvc.yaml apiVersion: v1 kind: PersistentVolume metadata:name: nfs-pvnamespace: nexus-ns spec:capacity:storage: 3GiaccessModes:- ReadWriteM…...

从“摸黑”到“透视”:AORO A23热成像防爆手机如何改变工业检测?

在工业检测领域,传统的检测手段常因效率低下、精度不足和潜在的安全风险而受到诟病。随着科技的不断进步,一种新兴的检测技术——红外热成像技术,正逐渐在该领域崭露头角。近期,小编对一款集成红外热成像技术的AORO A23防爆手机进…...

让你的 IDEA 使用更流畅 | IDEA内存修改

随着idea使用越来越频繁,笔者最近发现使用过程中有时候会出现卡顿现象,例如,启动软件变慢,打开项目的速度变慢等: 因此如果各位朋友觉得最近也遇到了同样的困惑,不妨跟着笔者一起来设置IDEA的内存大小吧~ …...

docker run 命令解析

docker run 命令解析 docker run 命令用于从给定的镜像启动一个新的容器。这个命令可以包含许多选项,下面是一些常用的选项: -d:后台运行容器,并返回容器ID;-i:以交互模式运行容器,通常与 -t …...

[Unity Demo]从零开始制作空洞骑士Hollow Knight第十七集:制作第一个BOSS苍蝇之母

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、战斗场景Battle Scene相关逻辑处理 1.防止玩家走出战斗场景的门2.制作一个简单的战斗场景二、制作游戏第一个BOSS苍蝇之母 1.导入素材和制作相关动画2.制作…...

【Nginx系列】499错误

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

Springboot项目控制层注释

Springboot主流的 ----------------------- 简略写法 package com.dx.wlmq.controller;import com.dx.wlmq.domain.Address; import com.dx.wlmq.service.AddresssService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.b…...

从Docker容器中备份整个PostgreSQL

问题 现在需要从Docker容器中备份整个PostgreSQL后,然后,使用备份文件在另外一个pg的docker容器中恢复过来。 步骤 备份旧容器中的PG # 登录到旧的PG容器中 docker exec -it postgres bash # 备份数据库 pg_dumpall -c -U postgres > dump_date %…...

从小需求看大格局:如何用技术智慧赢得客户信任

时间:2024年 10月 26日 作者:小蒋聊技术 邮箱:wei_wei10163.com 微信:wei_wei10 音频:从小需求看大格局:如何用技术智慧赢得客户信任 欢迎大家回到“小蒋聊技术”,这是一个不只是教你如何写…...

模型 支付矩阵

系列文章 分享 模型,了解更多👉 模型_思维模型目录。策略选择的收益分析工具。 1 支付矩阵的应用 1.1 支付矩阵在市场竞争策略分析中的应用 支付矩阵是一种强大的决策工具,它在多个领域的应用中都发挥着重要作用。以下是一个具体的应用案例…...

擎创科技声明

近日,我司陆续接到求职者反映,有自称是擎创科技招聘人员,冒用“上海擎创信息技术有限公司”名义,用“126.com”的邮箱向求职者发布招聘信息,要求用户下载注册APP,进行在线测评。 对此,我司郑重…...

二叉树习题其六【力扣】【算法学习day.13】

前言 书接上篇文章二叉树习题其四,这篇文章我们将基础拓展 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一…...

互联网的无形眼睛:浏览器指纹与隐私保护攻略

你是否曾有过这样的经历:在某个电商网站上搜索了某件商品,随后无论你打开哪个网页,都能看到与之相关的广告?或者当你再次访问某个网站时,它居然记得你之前的浏览记录?这一切,背后都有一只“看不…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...