当前位置: 首页 > 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】

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

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

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

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

Django RBAC项目后端实战 - 03 DRF权限控制实现

项目背景 在上一篇文章中&#xff0c;我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统&#xff0c;为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...