在K8s中部署动态nfs存储provisioner

news/2025/2/1 0:16:10 标签: kubernetes, 容器, 云原生, nfs

背景

之前,我已经在一台worker node上安装了local lvm 的provisioner来模拟需要本地高IOPS的数据库等stafeful应用的实现。
为了后续给虚拟机里的K8s集群安装可用的metrics和logs监控系统(metrics和logs的时序数据库需要永久存储),特为K8s 集群提供基于nfs的文件服务器一台,并安装nfs provisioner, 以便实现动态分配nfs volume给pods使用的目的。

nfs_serverclient__4">实现一套nfs server/client 系统

nfs_server_installation_5">Step1 nfs server installation

Target :File server
IP: 192.168.80.223
NFS folder:/mnt/nfs_share

   # 安装nfs server
   25  sudo apt install -y nfs-kernel-server 
   #创建目录
   26  sudo mkdir -p /mnt/nfs_share  
   27  sudo chmod 777 /mnt/nfs_share 
   28  sudo vim /etc/exports 
   #添加一行  /mnt/nfs_share *(rw,sync,no_root_squash,no_subtree_check)
   30  sudo exportfs -ra
   # 重启nfs服务
   33  sudo systemctl restart nfs-server
    # 确保开机自启动
   34  sudo systemctl enable nfs-server 

nfsclients_installation_28">Step2 nfs-clients installation

Target :K8s worker nodes
NFS folder:/mnt/nfs_client

  157  sudo apt install -y nfs-common
  158  sudo mkdir -p /mnt/nfs_client
  159  sudo mount -t nfs 192.168.80.223:/mnt/nfs_share /mnt/nfs_client
  160  vim /etc/fstab
#添加一行 192.168.80.223:/mnt/nfs_share  /mnt/nfs_client  nfs  defaults  0  0

nfs_provisioner_42">实现nfs provisioner

step1 installing

Target:K8s cp(master) node

#通过Helm 添加nfs provisioner,先添加相应chart的repo
  564  helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/ 
  565  helm repo update
   # 安装nfs provisioner,我忘记将这个nfs provisioner需要的controller等资源单独放一个namespace了。
  566  helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner   \
  --set nfs.server=192.168.80.223  \
  --set nfs.path=/mnt/nfs_share

step2 验证

# sc是cluster wide的资源,所以不用-n 指定namespace
root@master:/opt/k8sconfig$sudo kubectl get sc 
NAME                  PROVISIONER                                                     RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
nfs-client            cluster.local/nfs-provisioner-nfs-subdir-external-provisioner   Delete          Immediate              true                   36m
topolvm-provisioner   topolvm.io                                                      Delete          WaitForFirstConsumer   true                   5d19h
# 查看controller的pod 是否在运行
root@master:/opt/k8sconfig$sudo kubectl get pods 
NAME                                                              READY   STATUS             RESTARTS   AGE
nfs-provisioner-nfs-subdir-external-provisioner-5796dc5fcfq6k2c   1/1     Running            0          36m

http://www.niftyadmin.cn/n/5838921.html

相关文章

初始化mysql报错cannot open shared object file: No such file or directory

报错展示 我在初始化msyql的时候报错:mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory 解读: libaio包的作用是为了支持同步I/O。对于数据库之类的系统特别重要,因此…

第32篇:Python开发进阶:机器学习与人工智能

第32篇:机器学习与人工智能 目录 机器学习概述 什么是机器学习机器学习的应用领域 Python中的机器学习库 Scikit-learnTensorFlowKerasPyTorchXGBoost 机器学习的基本概念 监督学习与无监督学习特征工程模型评估与选择 人工智能的核心算法 线性回归逻辑回归决策树…

赛博算卦之周易六十四卦JAVA实现:六幺算尽天下事,梅花化解天下苦。

佬们过年好呀~新年第一篇博客让我们来场赛博算命吧! 更多文章:个人主页 系列文章:JAVA专栏 欢迎各位大佬来访哦~互三必回!!! 文章目录 #一、文化背景概述1.文化起源2.起卦步骤 #二、卦象解读#三、just do i…

unity使用内置videoplayer打包到安卓手机进行视频播放

1.新建UI,新建RawImage在画布当作视频播放的显示载体 2.新建VideoPlayer 3.新建Render Texture作为连接播放器视频显示和幕布的渲染纹理 将Render Texture同时挂载在VideoPlayer播放器和RawImage上。这样就可以将显示的视频内容在RawImage上显示出来了。 问题在于&a…

芯片AI深度实战:进阶篇之vim内verilog实时基于AST的自定义检视

本文基于Editor Integration | ast-grep,以及coc.nvim,并基于以下verilog parser(my-language.so,文末下载链接), 可以在vim中实时显示自定义的verilog 匹配。效果图如下: 需要的配置如下: 系列文章: 芯片…

【Block总结】动态蛇形卷积,专注于细长和弯曲的局部结构|即插即用

论文信息 标题: Dynamic Snake Convolution based on Topological Geometric Constraints for Tubular Structure Segmentation 作者: 戚耀磊、何宇霆、戚晓明、张媛、杨冠羽 会议: 2023 IEEE/CVF International Conference on Computer Vision (ICCV) 发表时间: 2023年10月…

GaussDB高级压缩,破解业务数据激增难

目录 一、数据库压缩不应只是压缩率 二、不同存储引擎架构下的压缩技术特点 三、一个典型场景的对比效果 四、面向数据库全场景的压缩解决方案 五、GaussDB高级压缩,一个更优的选项 六、总结 随着企业业务的迅猛发展,数据库系统中的数据量急剧膨胀…

SpringBoot 日志与配置文件

SpringBoot 配置文件格式 Properties 格式 Component ConfigurationProperties(prefix "person") //和配置文件person前缀的所有配置进行绑定 Data public class Person {private String name;private Integer age;private Date birthDay;private Boolean like;pr…