NFS 组件容器化部署实战指南

news2025/2/28 23:28:14

文章目录

  • 前言
  • 部署NFS服务器
  • K8S部署NFS
  • 问题记录

前言

使用nfs-client-provisioner这个应用,利用nfs server给kubernets提供作为持久化后端,并且动态提供pv。所有节点需要安装nfs-utils组件,并且nfs服务器与kubernets worker节点都能网络连通。

部署NFS服务器

注:这里使用master节点作为nfs服务器,根据自己资源情况进行调整部署。

安装nfs组件及创建数据目录
[root@k8s-master ~]# yum install -y nfs-utils rpcbind 
[root@k8s-master ~]# mkdir -p  /data/nfs_data

编辑exportfs文件
# cat /etc/exports
/data/nfs_data 10.255.82.0/24(rw,no_root_squash)

配置生效
# exportfs -rav

启动rpcbind、nfs服务
[root@k8s-master ~]# systemctl restart rpcbind && systemctl enable rpcbind
[root@k8s-master ~]# systemctl restart nfs && systemctl enable nfs

showmount测试
[root@k8s-master ~]# showmount -e 10.255.82.25
Export list for 10.255.82.25
/data/nfs_data 10.255.82.0/24
[root@k8s-master ~]#

K8S部署NFS

nfs部署资源文件如下
[root@k8s-master nfs]# ls -l
总用量 12
-rw-r--r-- 1 root root  181 12月  8 17:47 class.yaml
-rw-r--r-- 1 root root  987 12月  8 17:43 deployment.yaml
-rw-r--r-- 1 root root 1509 12月  8 17:34 rbac.yaml
[root@k8s-master nfs]#


创建nfs角色权限
[root@k8s-master nfs]# kubectl apply -f rbac.yaml
clusterrole.rbac.authorization.k8s.io/nfs-client-provisioner-runner created
clusterrolebinding.rbac.authorization.k8s.io/run-nfs-client-provisioner created
role.rbac.authorization.k8s.io/leader-locking-nfs-client-provisioner created
rolebinding.rbac.authorization.k8s.io/leader-locking-nfs-client-provisioner created
[root@k8s-master nfs]# 

部署nfs-client-provisioner
[root@k8s-master nfs]# kubectl apply -f deployment.yaml
serviceaccount/nfs-client-provisioner created
deployment.apps/nfs-client-provisioner created
[root@k8s-master nfs]#

创建nfs storageclass
[root@k8s-master nfs]# kubectl apply -f class.yaml
storageclass.storage.k8s.io/managed-nfs-storage created
[root@k8s-master nfs]#

验证nfs部署成功
[root@k8s-master nfs]# kubectl get pod -l app=nfs-client-provisioner
NAME                                      READY   STATUS    RESTARTS      AGE
nfs-client-provisioner-647d8f5c7b-5lk5b   1/1     Running   3 (13h ago)   15h
[root@k8s-master nfs]#

查看nfs storageclass
[root@k8s-master nfs]# kubectl get storageclasses.storage.k8s.io
NAME                  PROVISIONER                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
managed-nfs-storage   fuseim.pri/ifs                  Delete          Immediate           true                   15h


部署nginx服务使用nfs存储持久化

[root@k8s-master nfs]# cat nfs-ngx-sts.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx # has to match .spec.template.metadata.labels
  serviceName: "nginx"
  replicas: 1 # by default is 1
  minReadySeconds: 10 # by default is 0
  template:
    metadata:
      labels:
        app: nginx # has to match .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "managed-nfs-storage"
      resources:
        requests:
          storage: 1Gi
[root@k8s-master nfs]#
[root@k8s-master nfs]# kubectl apply -f nfs-ngx-sts.yaml



查看ngx-pod运行状态
[root@k8s-master nfs]# kubectl get pod | grep web
web-0                                     1/1     Running   0             13h
[root@k8s-master nfs]#


查看pvc状态
[root@k8s-master nfs]# kubectl get pvc -l app=nginx
NAME        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
www-web-0   Bound    pvc-782925cf-307b-4602-a226-871825fa86ac   1Gi        RWO            managed-nfs-storage   13h
[root@k8s-master nfs]#


验证ngx服务存储nfs持久化

[root@k8s-master nfs]# kubectl exec -it web-0 -- bash
root@web-0:/# df -h
Filesystem                                                                                Size  Used Avail Use% Mounted on
overlay                                                                                    17G  5.1G   12G  30% /
tmpfs                                                                                      64M     0   64M   0% /dev
tmpfs                                                                                     2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/sda2                                                                                  17G  5.1G   12G  30% /etc/hosts
shm                                                                                        64M     0   64M   0% /dev/shm
192.168.31.102:/data/nfs_data/default-www-web-0-pvc-782925cf-307b-4602-a226-871825fa86ac   17G  7.5G  9.6G  45% /usr/share/nginx/html
tmpfs                                                                                     3.8G   12K  3.8G   1% /run/secrets/kubernetes.io/serviceaccount
tmpfs                                                                                     2.0G     0  2.0G   0% /proc/acpi
tmpfs                                                                                     2.0G     0  2.0G   0% /proc/scsi
tmpfs                                                                                     2.0G     0  2.0G   0% /sys/firmware
root@web-0:/# ls -lh /usr/share/nginx/html/
total 0
root@web-0:/# echo "nfs storage" > /usr/share/nginx/html/index.html
root@web-0:/# cat /usr/share/nginx/html/index.html
nfs storage
root@web-0:/# exit
exit


nfs服务器端验证数据
[root@k8s-master nfs]# cat /data/nfs_data/default-www-web-0-pvc-782925cf-307b-4602-a226-871825fa86ac/index.html
nfs storage
[root@k8s-master nfs]#



ngx资源删除验证数据是否持久化nfs存储
[root@k8s-master nfs]# kubectl delete -f nfs-ngx-sts.yaml
service "nginx-svc" deleted
statefulset.apps "web" deleted
[root@k8s-master nfs]# cat /data/nfs_data/default-www-web-0-pvc-782925cf-307b-4602-a226-871825fa86ac/index.html
nfs storage
[root@k8s-master nfs]#

问题记录

pvc创建处于pending状态事件描述:Normal ExternalProvisioning 2s (x4 over 48s) persistentvolume-controller waiting for a volume to be created, either by external provisioner “fuseim.pri/ifs” or manually created by system administrator

原因:
Kubernetes v1.20 (opens new window)开始,默认删除了 metadata.selfLink 字段,然而,部分应用仍然依赖于这个字段,例如 nfs-client-provisioner。如果仍然要继续使用这些应用,您将需要重新启用该字段。

解决方法:
通过配置 apiserver 启动参数中的 --feature-gates 中的 RemoveSelfLink=false,可以重新启用 metadata.selfLink 字段。

  1. 如果使用kubeadm安装Kubernetes,请修改/etc/kubernetes/manifests/kube-apiserver.yaml文件,并在其启动参数中增加一行- --feature-gates=RemoveSelfLink=false,如下所示:
    在这里插入图片描述
    然后更新kube-apiserver.yaml即可
    kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml

  2. ② 如果是通过二进制部署kube-apiserver
    通过systemctl status kube-apiserver 这个命令找到 kube-apiserver.service文件,
    最好先备份,然后再修改,即在 kube-apiserver.service中添加 --feature-gates=RemoveSelfLink=false。

# systemctl daemon-reload 
# systemctl restart kube-apiserver

在这里插入图片描述

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

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

相关文章

【江协STM32】10-2/3 MPU6050简介、软件I2C读写MPU6050

1. MPU6050简介 MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合,可进一步得到姿态角,常应用于平衡车、飞行器等需要检测自身姿态的场景3轴加速度计(Accelerometer&#xff…

裸机器搭建k8s部署 1.28.10版本

问了搭建k8s集群踩了很多坑,问题主要出现在网络插件处,因此主要是master节点操作问题。重新走一下流程整理一下笔记。 目录 虚拟机准备 虚拟机 系统版本信息 修改镜像地址 配置静态ip 关闭防火前和交换分区 转发 IPv4 并让 iptables 看到桥接流量…

HCIE-day10-ISIS

ISIS ISIS(Intermediate System-to-Intermediate System)中间系统到中间系统,属于IGP(内部网关协议);是一种链路状态协议,使用最短路径优先SPF算法进行路由计算,与ospf协议有很多相…

70.爬楼梯 python

爬楼梯 题目题目描述示例 1:示例 2:提示: 题解思路分析Python 实现代码空间优化代码解释提交结果 题目 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff…

优质内容在个人IP运营中的重要性:以开源AI智能名片商城小程序为应用实例的深度探讨

摘要:在数字化时代,个人品牌(IP)的塑造与传播已成为各行各业提升影响力、吸引用户关注、促进商业转化的关键策略。优质内容作为连接个人IP与目标受众的桥梁,其在个人IP运营中的重要性不言而喻。本文旨在深入探讨优质内…

有限元分析学习——Anasys Workbanch第一阶段笔记(8)水杯案例的对称与轴对称处理

目录 1 序言 2 对称处理 2.1 模型处理 2.2 网格划分、约束载荷及接触设置 2.3 计算结果 3 轴对称处理 3.1 对称与轴对称概念 3.2 轴对称问题的应用 3.2.1 创建分析案例 3.2.2 导入并处理模型 3.2.3 网格划分、约束载荷及接触设置 3.2.4 后处理计算结果 1 序言 本章…

网络安全-web渗透环境搭建-BWAPP(基础篇)

01--所需系统环境: 虚拟主机系统部署(vmware,虚拟主机创建、虚拟主机网络配置(桥接,便于网络中多个主机都能访问虚拟主机)、虚拟软件功能,快照、克隆、镜像文件加载,ova文件制作&am…

Java 实现 Elasticsearch 查询当前索引全部数据

Java 实现 Elasticsearch 查询当前索引全部数据 需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后 需求背景 通常情况下,Elasticsearch 为了提高查询效率,对于不指定分页查询条数的查询语句,默认会返回10条数据。那么这就会有…

算能AI计算服务器SE5设备树的二次修改实操

目录 1.大纲 2.实操 2.下载对应文件包 3.解包启动文件 4.修改对应的设备树 5.重启后 教程链接:https://github.com/sophgo/sophon-tools/tree/main/source/pmemory_edit 1.大纲 2.实操 2.1 选择串口,波特率115200,重启设备&#xff0…

Python的Matplotlib库应用(超详细教程)

目录 一、环境搭建 1.1 配置matplotlib库 1.2 配置seaborn库 1.3 配置Skimage库 二、二维图像 2.1 曲线(直线)可视化 2.2 曲线(虚线)可视化 2.3 直方图 2.4 阶梯图 三、三维图像 3.1 3D曲面图 3.2 3D散点图 3.3 3D散…

Flutter:封装一个自用的bottom_picker选择器

效果图&#xff1a;单列选择器 使用bottom_picker: ^2.9.0实现&#xff0c;单列选择器&#xff0c;官方文档 pubspec.yaml # 底部选择 bottom_picker: ^2.9.0picker_utils.dart AppTheme&#xff1a;自定义的颜色 TextWidget.body Text() <Widget>[].toRow Row()下边代…

牛客网刷题 ——C语言初阶(6指针)——BC106 上三角矩阵判定

1. 题目描述——BC106 上三角矩阵判定 牛客网OJ题链接 描述 KiKi想知道一个n阶方矩是否为上三角矩阵&#xff0c;请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵&#xff0c;主对角线为从矩阵的左上角至右下角的连线。 示例 输入&#xff1a; 3 1 2 3 0 4 5 0 0…

力扣刷题:数组OJ篇(下)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 目录 1.轮转数组&#xff08;1&#xff09;题目描述…

《(限)战斗天赋VR》V02122024官方中文学习版

《(限)战斗天赋VR》官方中文版https://pan.xunlei.com/s/VODaeHDXSxw4BNDNl39dxJXnA1?pwdusm5# 一款具有挑战性的基于物理的roguelite剑术格斗游戏&#xff0c;你可以在一个超级无缝的程序地牢中创造自己的战斗风格&#xff0c;体验无与伦比的游戏体验。有80多种敌人变种、10…

《Spring Framework实战》3:概览

欢迎观看《Spring Framework实战》视频教程 Spring Framework 为基于现代 Java 的企业应用程序提供了全面的编程和配置模型 - 在任何类型的部署平台上。 Spring 的一个关键要素是应用程序级别的基础设施支持&#xff1a;Spring 专注于企业应用程序的 “管道”&#xff0c;以便…

基于SpringBoot+Vue动漫交流系统平台设计和实现

系统介绍&#xff1a; 免费的源码&#xff0c;我刚找到的&#xff0c;给大家推荐一下源码下载 动漫交流系统平台是一个专为动漫爱好者设计的在线社区平台&#xff0c;旨在为用户提供一个便捷的环境来分享动漫。这个系统包含了多种功能&#xff0c;如动漫分类、动漫视频、动漫…

微信小程序获取图片使用session(上篇)

概述&#xff1a; 我们开发微信小程序&#xff0c;从后台获取图片现实的时候&#xff0c;通常采用http get的方式&#xff0c;例如以下代码 <image class"user_logo" src"{{logoUrl}}"></image>变量logoUrl为ur图片l的请求地址 但是对于很多…

HTML5实现好看的中秋节网页源码

HTML5实现好看的中秋节网页源码 前言一、设计来源1.1 网站首页界面1.2 登录注册界面1.3 节日由来界面1.4 节日习俗界面1.5 节日文化界面1.6 节日美食界面1.7 节日故事界面1.8 节日民谣界面1.9 联系我们界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现好看…

Redis 数据库源码分析

Redis 数据库源码分析 我们都知道Redis是一个 <key,value> 的键值数据库&#xff0c;其实也就是一个 Map。如果让我来实现这样一个 Map&#xff0c;我肯定是用数组&#xff0c;当一个 key 来的时候&#xff0c;首先进行 hash 运算&#xff0c;接着对数据的 length 取余&…

【海南省】乡镇界arcgis格式shp数据乡镇名称和编码gis矢量数据

《海南省乡镇界GIS矢量数据详解》 GIS&#xff08;Geographic Information System&#xff09;是一种强大的地理信息系统&#xff0c;它结合了地图、数据库和计算机技术&#xff0c;用于管理和分析空间数据。在本篇中&#xff0c;我们将聚焦于一个特定的GIS数据集——“最新海…