Kubernetes学习指南:保姆级实操手册08——持久化存储部署(StorageClass)

news2025/1/15 16:09:57

八、Kubernetes学习指南:保姆级实操手册08——持久化存储部署(StorageClass)

一、NFS for kubernetes特性介绍

NFS(Network File System)卷在Kubernetes中的使用提供了一种将远程文件系统挂载到Pods中的方法。

优化建议:

  • 在创建NFS卷时,明确规划数据的组织结构和访问模式,确保Pods能够高效地访问所需的数据。
  • 监控NFS服务器的性能和健康状况,确保它能够满足Pods的需求。
  • 定期备份NFS卷中的数据,以防数据丢失或损坏。
  • 考虑使用Kubernetes的存储类(StorageClass)自动化NFS卷的配置和管理。
  • 在多租户环境中,使用命名空间(Namespaces)和访问控制策略来隔离和保护NFS卷。
1、NFS安装

本文档使用k8s-master03节点做为NFS的服务器端

# 安装 nfs  
yum install nfs-utils -y  

# 启动 nfs  
systemctl start nfs-server  

# 查看 nfs 版本  
cat /proc/fs/nfsd/versions
2、创建,设置共享目录
# 创建共享目录  
mkdir -p /data/nfs  
cd /data/nfs  
mkdir rw  
mkdir ro  

# 设置共享目录 export  
vim /etc/exports  
/data/nfs/rw 10.255.210.0/24(rw,sync,no_subtree_check,no_root_squash)  
/data/nfs/ro 10.255.210.0/24(ro,sync,no_subtree_check,no_root_squash)
3、重新加载,查看显示可挂载路径
# 重新加载  
exportfs -f  
systemctl reload nfs-server  

#查看显示可挂载路径  
showmount -e  
[root@k8s-master03 ~]# showmount -e 10.255.210.3  
Export list for 10.255.210.3:  
/data/nfs/ro 10.255.210.0/24  
/data/nfs/rw 10.255.210.0/24
4、其他节点安装nfs-utils并挂载测试
yum install nfs-utils.x86_64 -y  

mkdir -p /mnt/nfs/rw  
mount -t nfs 10.255.210.3:/data/nfs/rw /mnt/nfs/rw
df -TH
5、POD挂载测试

新建一个POD的yaml文件,测试挂载

新建nfs-test-pod.yaml的文件
[root@k8s-master01 ~]# cat nfs-test-pod.yaml  
apiVersion: v1  
kind: Pod  
metadata:  
  name: nfs-test-pod  
spec:  
  containers:  
  - image: nginx:1.7.9  
    name: test-container  
    volumeMounts:  
    - mountPath: /my-nfs-data  
      name: nfs-test-volume  
  volumes:  
  - name: nfs-test-volume  
    nfs:  
      server: 10.255.210.3 # 网络存储服务地址  
      path: /data/nfs/rw # 网络存储路径  
      readOnly: true # 是否只读  
      
# 部署pod文件
  kubectl apply -f nfs-test-pod.yaml
#检查挂载:  
查看POD挂载  
kubectl exec -it nfs-test-pod /bin/sh  df -h

二、StorageClass安装

k8s 中提供了一套自动创建 PV 的机制,就是基于 StorageClass 进行的,通过 StorageClass 可以实现仅仅配置 PVC,然后交由 StorageClass 根据 PVC 的需求动态创建 PV。

1、NFS-Previsioner制备器安装

每个 StorageClass 都有一个制备器(Provisioner),用来决定使用哪个卷插件制备 PV。

  • 安装文档
    GitHub - kubernetes-sigs/nfs-subdir-external-provisioner: Dynamic sub-dir volume provisioner on a remote NFS server.
1.1、安装helm

本文中选择通过helm的方式安装nfs-subdir-external-provisioner,这种方式相对简单。

 # curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3  
#chmod 700 get_helm.sh  
# ./get_helm.sh  
Downloading https://get.helm.sh/helm-v3.14.4-linux-amd64.tar.gz  
Verifying checksum... Done.  
Preparing to install helm into /usr/local/bin  
helm installed into /usr/local/bin/helm
1.2、安装nsf-subdir-external-provisioner

方法一:在线安装

$ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/  
$ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner -n kube-system \  
    --set image.repository=dyrnq/nfs-subdir-external-provisioner \  
    --set nfs.server=10.255.210.3 \  
    --set nfs.path=/data/nfs/rw

方法二、离线安装

自行下载nfs-subdir-external-provisioner的安装包
wget "https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/releases/download/nfs-subdir-external-provisioner-4.0.18/nfs-subdir-external-provisioner-4.0.18.tgz"

解压目录
tar -xzf nfs-subdir-external-provisioner-4.0.18.tgz

修改values.yaml文件 
vim values.yaml

[root@k8s-master01 nfs-subdir-external-provisioner]# cat values.yaml
replicaCount: 1
strategyType: Recreate

image:
  repository: harbor.fq.com/public/nfs-provisioner/nfs-subdir-external-provisioner@sha256:f741e403b3ca161e784163de3ebde9190905fdbf7dfaa463620ab8f16c0f6423
  #repository: registry.k8s.io/sig-storage/nfs-subdir-external-provisioner
  tag: v4.0.2
  pullPolicy: IfNotPresent

---添加NFS配置---
nfs:
  server: 10.255.210.3
  path: /data/nfs/rw
image:
  repository: dyrnq/nfs-subdir-external-provisioner

Helmp安装指定包,和指定文件
helm install nfs-provisioner /root/nfs-subdir-external-provisioner-4.0.18.tgz -n kube-system -f /root/nfs-subdir-external-provisioner/values.yaml --set image.repository=dyrnq/nfs-subdir-external-provisioner --set nfs.server=10.255.210.3 --set nfs.path=/data/nfs/rw
1.3、查看安装的pod
kubectl get pod -n kube-system |grep provisioner  
nfs-subdir-external-provisioner-75bfd99f76-6skc8   1/1     Running   0              75m
1.4、测试示例
cat >storageclass-test.yaml <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-storage-1
provisioner: cluster.local/nfs-provisioner-nfs-subdir-external-provisioner 
parameters:
  # 设置为"false"时删除PVC不会保留数据,"true"则保留数据
  archiveOnDelete: "false"
mountOptions:
  # 指定NFS版本,这个需要根据NFS Server版本号设置
  - nfsvers=4
---
# 创建PVC
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nfs-storage-pvc-1
  namespace: default
spec:
  storageClassName: nfs-storage-1    #需要与上面创建的storageclass的名称一致
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Mi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-sc
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nfs-storage-pod-1
        image: nginx:1.7.9
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - mountPath: /tmp/pvc
          name: nfs-pvc
      volumes:
      - name: nfs-pvc
        persistentVolumeClaim:
          claimName: nfs-storage-pvc-1
EOF
1.5、部署,检查测试示例
部署测试示例
kubectl apply -f storageclass-test.yaml

查看storageclass,pvc,pv
[root@k8s-master01 ~]# kubectl get sc
NAME            PROVISIONER                                                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client      cluster.local/nfs-provisioner-nfs-subdir-external-provisioner   Delete          Immediate           true                   25h
nfs-storage-1   cluster.local/nfs-provisioner-nfs-subdir-external-provisioner   Delete          Immediate           false                  43m
[root@k8s-master01 ~]# kubectl get pvc
NAME                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE
nfs-storage-pvc-1   Bound    pvc-f6571669-265c-460b-8cc2-3da1c0ab789c   10Mi       RWO            nfs-storage-1   44m
[root@k8s-master01 ~]# kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                       STORAGECLASS    REASON   AGE
pvc-f6571669-265c-460b-8cc2-3da1c0ab789c   10Mi       RWO            Delete           Bound    default/nfs-storage-pvc-1   nfs-storage-1            44m

查看生成的pod
[root@k8s-master01 ~]# kubectl get pod
NAME                      READY   STATUS    RESTARTS   AGE
nfs-test-pod              1/1     Running   0          4d23h
web-sc-7949d6d5c9-fz8nb   1/1     Running   0          44m
web-sc-7949d6d5c9-m46n7   1/1     Running   0          44m

登进pod并查看挂载路径
[root@k8s-master01 ~]# kubectl exec -it web-sc-7949d6d5c9-fz8nb /bin/sh -- df -TH
Filesystem                                                                                   Type     Size  Used Avail Use% Mounted on
/dev/mapper/vg01-lv_root                                                                     ext4      38G  8.3G   28G  24% /dev/termination-log
10.255.210.3:/data/nfs/rw/default-nfs-storage-pvc-1-pvc-f6571669-265c-460b-8cc2-3da1c0ab789c nfs4      38G  9.2G   27G  26% /tmp/pvc
/dev/mapper/vg01-lv_root                                                                     ext4      38G  8.3G   28G  24% /etc/resolv.conf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2119746.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4.第二阶段x86游戏实战2-CE加强修改移动速度(浮点数存放方式与转换)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

2.3.2 协程调度器实现与性能测试

LINUX 精通 8 day24 20240909 晚19&#xff1a;35 - 20: 47 课程链接地址 老师画图用的是excalidraw 可以在线 本地&#xff01; Excalidraw&#xff1a;开源实用的白板画图工具&#xff08;在线/本地安装&#xff09;-CSDN博客 2.3.2 协程调度器实现与性能测试 复习了上…

HTML/CSS/JS学习笔记 Day3(HTML--网页标签 下)

跟着该视频学习&#xff0c;记录笔记&#xff1a;【黑马程序员pink老师前端入门教程&#xff0c;零基础必看的h5(html5)css3移动端前端视频教程】https://www.bilibili.com/video/BV14J4114768?p12&vd_source04ee94ad3f2168d7d5252c857a2bf358 Day3 内容梳理&#xff1a;…

使用ChatGPT生成爆款小红书文案,有手就行!

小红书&#xff0c;作为当下热门的社交电商平台&#xff0c;以其独特的社区氛围、精准的用户画像和高粘性的互动模式&#xff0c;吸引了大量年轻用户&#xff0c;尤其是女性用户。平台上的内容风格多样&#xff0c;涵盖了美妆、时尚、生活方式等多个领域。 本文将介绍小红书平台…

为何家用无线路由器不能实现PROFINET通信?

家用无线路由器和工业通信设备到底有什么不同&#xff1f;工控人加入PLC工业自动化精英社群 首先&#xff0c;在技术上&#xff0c;两者存在明显的差异。 家用无线路由器主要是为了提供互联网接入和家庭设备间的连接&#xff0c;而PROFINET则是专为工业自动化设计的通信协议。就…

1分钟教你用AI制作美女热舞视频,收益可观,操作简单(附工具及教程资料)

美女跳舞&#xff0c;听着是不是就觉得会很哇塞&#xff1f; 不管是男的女的、老的少的都喜欢看&#xff0c;而且一般美女跳舞的账号涨粉都很快&#xff0c;势头都贼猛。 今天就给大家分享一个很热门的小副业——AI美女跳舞。 更多实操和AI绘画工具&#xff0c;可以扫描下方&…

通过SSH服务远程操作Linux(ubuntu)主机

首先SSH是什么&#xff1f;SSH&#xff08;Secure SHell&#xff09;是Linux、Unix、Mac及其他网络设备最常用的远程CLI管理协议&#xff0c;SSH使用秘钥对数据进行加密&#xff0c;保证了远程管理数据的安全性。Secure Shell (SSH) 是一种网络协议&#xff0c;允许用户通过加密…

OpenCV-轮廓特征

文章目录 一、简介1.意义2.类别 二、代码实现1.数据预处理2.计算周长3.绘制外接圆轮廓4.绘制外接矩阵 三、总结 一、简介 1.意义 在OpenCV中&#xff0c;轮廓检测后得到的轮廓不仅是一系列点的集合&#xff0c;还可以进一步分析以提取有用的特征。这些特征包括但不限于轮廓的…

纷享销客CRM+契约锁:“好应用+电子签” 融合领先实践

9月6日&#xff0c;主题为“智享未来 领创CRM新纪元”的2024纷享销客伙伴大会湖北站圆满结束&#xff0c;此次盛会吸引了来自不同行业的精英代表、技术专家&#xff0c;共同探讨CRM领域的最新趋势、创新实践与未来机遇。纷享销客战略伙伴契约锁受邀参加本次大会&#xff0c;为现…

一区霜冰算法+双向深度学习模型+注意力机制!RIME-BiTCN-BiGRU-Attention

一区霜冰算法双向深度学习模型注意力机制&#xff01;RIME-BiTCN-BiGRU-Attention 目录 一区霜冰算法双向深度学习模型注意力机制&#xff01;RIME-BiTCN-BiGRU-Attention效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现RIME-BiTCN-BiGRU-Attention霜冰算法…

NLP-新词挖掘

一、背景 网络领域的新词发现&#xff08;挖掘&#xff09;是一个非常重要的nlp课题。在处理文本对象时&#xff0c;非常关键的问题在于“切词”这个环节&#xff0c;几乎所有的后续结果都依赖第一步的切词。因此切词的准确性在很大程度上影响着后续的处理&#xff0c;切词结果…

树莓派通过串口驱动SU-03T语音模块

树莓派通过串口驱动SU-03T语音模块 文章目录 树莓派通过串口驱动SU-03T语音模块一、SU-03T语音模块的配置和烧录1.1 PIN引脚配置&#xff1a;1.2 设置唤醒词&#xff1a;1.3 设置控制详情&#xff1a;1.4 下载SDK并烧录到语音模块&#xff1a; 二、测试语音模块三、树莓派通过串…

在这12种场景下会使Spring事务失效--注意防范

在某些业务场景下&#xff0c;如果一个请求中&#xff0c;需要同事写入多张表的数据&#xff0c;但为了保证操作的原子性&#xff08;要么同事插入数据成功&#xff0c;要么同事插入失败&#xff09;&#xff0c;例如&#xff0c;当我们创建用户的时候&#xff0c;往往会给用户…

图的广度优先遍历与深度优先遍历(C语言)

这是结果 #include <stdio.h> #include <stdlib.h> #include <stdbool.h>#define _CRT_SECURE_NO_WARNINGS// 定义边表结点结构 typedef struct EdgeNode {int adjvex; // 邻接顶点域&#xff0c;存储该边所指向的顶点struct EdgeNode* next; // 指向下一条…

Oracle Linux 8.10安装Oracle19c(19.3.0)完整教程

安装前请仔细将文档通读一遍&#xff0c;安装过程中根据安装命令仔细核对&#xff0c;特别留意一些字体加粗或标红的字样&#xff0c;遇到问题请及时咨询公司 1、基础环境 1.1、操作系统 cat /etc/redhat-release 1.2、主机名 医院默认分配的主机名可能跟其他主机会有重复&a…

【阿里云】10分钟在网站上增加一个AI助手

文章目录 方案预览1. 创建大模型问答应用1.1 创建应用1.2 获取调用 API 所需的凭证 2. 搭建示例网站2.1 创建应用2.2 访问网站 3. 为网站增加 AI 助手3.1 增加 AI 助手相关代码3.2 验证网站上的 AI 助手 4. 为 AI 助手增加私有知识4.1 配置知识库 总结应用于生产环境前端代码服…

mysql使用笔记

1、下载mysql,本教程适用于免安装版。 https://dev.mysql.com/downloads/mysql/ 当前最新版本是8.0.27,如果想安装其他版本,选择Achives. 下载后减压到要放置的目录中。 E:\mysql-5.7.35-winx64 这是我的路径,在根目录下建立一个my.ini 文件,用来放置配置信息,保存的时候…

猫咪浮毛有这么严重?你不知道的浮毛清理好物——宠物空气净化器

家人们谁懂啊&#xff0c;男朋友整天和我家猫争宠&#xff0c;最近还上升到了有猫没他的地步。猫咪刚开始接回来的时候压根不掉毛&#xff0c;他们相处的特别好&#xff0c;呆在一起玩的时间比我还多。可是这样温馨的相处没持续多久就变了&#xff0c;之前不掉毛都是猫咪的假象…

MIST:用于组织病理学亚型预测的多实例选择性Transformer|文献速递--基于深度学习的医学影像病灶分割

Title 题目 MIST: Multi-instance selective transformer for histopathological subtype prediction MIST&#xff1a;用于组织病理学亚型预测的多实例选择性Transformer 01 文献速递介绍 组织病理学亚型预测在癌症疾病的诊断和治疗中具有重要的临床意义。组织病理学亚型…

反序列化漏洞练习1

根据代码可以看出来sis类只是接收了参数cmd&#xff0c;下边是通过get获得cmd的值&#xff0c;所以可以在序列化过程中直接为cmd赋值。 根据源码编写序列化代码 <?php class sis{public $cmdsystem("whoami");?>;public function __wakeup(){eval($this-&g…