k8s 之storageclass使用nfs动态申请PV

要在 Kubernetes 中使用 StorageClass 来创建 NFS 存储,首先你需要确保 NFS 服务器已经设置好并且可以访问。然后,你可以创建一个自定义的 StorageClass,并利用它来动态创建多个 PersistentVolume (PV),每个 PersistentVolume 都会使用 NFS 存储。

配置角色权限

就是用户通过角色与权限进行关联。

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: nfs-provisioner-runner
rules:- apiGroups: [""]resources: ["persistentvolumes"]verbs: ["get", "list", "watch", "create", "delete"]- apiGroups: [""]resources: ["persistentvolumeclaims"]verbs: ["get", "list", "watch", "update"]- apiGroups: ["storage.k8s.io"]resources: ["storageclasses"]verbs: ["get", "list", "watch"]- apiGroups: [""]resources: ["events"]verbs: ["create", "update", "patch"]- apiGroups: [""]resources: ["services", "endpoints"]verbs: ["get"]- apiGroups: ["extensions"]resources: ["podsecuritypolicies"]resourceNames: ["nfs-provisioner"]verbs: ["use"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: run-nfs-provisioner
subjects:- kind: ServiceAccountname: nfs-provisioner# replace with namespace where provisioner is deployednamespace: default
roleRef:kind: ClusterRolename: nfs-provisioner-runnerapiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-provisioner
rules:- apiGroups: [""]resources: ["endpoints"]verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-provisioner
subjects:- kind: ServiceAccountname: nfs-provisioner# replace with namespace where provisioner is deployednamespace: default
roleRef:kind: Rolename: leader-locking-nfs-provisionerapiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-provisionernamespace: default
kubectl apply -f rbac.yaml 

部署nfs-client-provisioner

新增 nfs 的 Deployment 配置 deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: nfs-client-provisionerlabels:app: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
spec:replicas: 1strategy:type: Recreateselector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-provisionercontainers:- name: nfs-client-provisionerimage: gmoney23/nfs-client-provisionerimagePullPolicy: IfNotPresentvolumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: nfs-diy # StorageClass 三个重要字段之一 Provisioner,名字自己指定- name: NFS_SERVERvalue: 192.168.56.115 # nfs 服务器地址- name: NFS_PATHvalue: /mnt/nfs # nfs 共享文件夹volumes:- name: nfs-client-rootnfs:server: 192.168.56.115 # nfs 服务器地址path: /mnt/nfs # nfs 共享文件夹

创建 NFS StorageClass

首先,我们需要创建一个 StorageClass,它指定使用 NFS 存储后端。以下是一个示例 YAML 文件,它定义了一个名为 nfs-storageStorageClass,使用 NFS 动态 Provisioning 来创建 PV。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-storage
provisioner: nfs-diy # 和 deployment.yaml 中 env.PROVISIONER_NAME 保持一致
reclaimPolicy: Retain
parameters:archiveOnDelete: "false"

创建 PVC 来动态申请 PV

你可以创建一个 PersistentVolumeClaim (PVC),它会根据指定的 StorageClass 动态申请一个 PV。以下是一个示例 YAML 文件,它请求一个大小为 1Mi 的 PVC,并且使用刚才创建的 nfs-storage StorageClass

kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: test-claimannotations:volume.beta.kubernetes.io/storage-class: "nfs-storage"
spec:accessModes:- ReadWriteManyresources:requests:storage: 1MistorageClassName: nfs-storage  # 使用我们创建的 StorageClass

在 Pod 中使用 PVC

当你有了 PVC 和 PV 后,可以在 Pod 中使用 PVC 来挂载存储。以下是一个示例 Pod,它使用了 test-claim PVC 来挂载 NFS 存储:

kind: Pod
apiVersion: v1
metadata:name: test-pod-nginx
spec:containers:- name: test-pod-nginx-containersimage: nginx:latestports:- containerPort: 80name: "http-server"hostPort: 80volumeMounts:- name: test-pod-nginx-storagemountPath: "/usr/share/nginx/html"restartPolicy: "Never"volumes:- name: test-pod-nginx-storagepersistentVolumeClaim:claimName: test-claim

验证存储是否正确挂载

部署 Pod 后,你可以通过执行 kubectl exec 命令进入 Pod,检查 NFS 存储是否正确挂载:

kubectl exec -it test-pod-nginx /bin/bash
cd /mnt/nfs/default-test-claim-pvc-d07ea120-55ca-40d1-8fa3-01d01eb32193
echo "hello" > index.html

访问 http://192.168.56.115/

使用 kubectljq 筛选 PVC

你也可以通过 kubectl get pvc -o json 并结合 jq 工具来筛选所有使用指定 StorageClass 的 PVC。例如:

kubectl get pvc -o json | jq '.items[] | select(.spec.storageClassName == "nfs-storage") | .metadata.name'

这将输出所有使用 nfs-storage StorageClass 的 PVC 名称。

waiting for a volume to be created, either by external provisioner “nfs-diy” or manually created by system administrator

如果是 v1.20 版本以上 apiserver 默认禁止使用 selfLink,需要手动配置- --feature-gates=RemoveSelfLink=false 开启。

修改kube-apiserver.yaml 文件:

[root@master nfs]# cat /etc/kubernetes/manifests/kube-apiserver.yaml
apiVersion: v1
kind: Pod
metadata:annotations:kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: 192.168.25.100:6443creationTimestamp: nulllabels:component: kube-apiservertier: control-planename: kube-apiservernamespace: kube-system
spec:containers:- command:- kube-apiserver- --advertise-address=192.168.25.100- --feature-gates=RemoveSelfLink=false   # 添加这条信息- --allow-privileged=true

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

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

相关文章

《网络安全》相关知识点总结

第一章 安全现状及趋势 第二章 网络安全概述 2.1 信息保障阶段 信息保障技术框架IATF: 由美国国家安全局制定,提出“纵深防御策略” DiD(Defense-in-Depth Strategy) 在信息保障的概念下,信息安全保障的PDRR模型的内涵…

DApp浏览器能否集成在自己开发的DApp里?

答案是肯定的。在技术层面,DApp浏览器可以完全集成到你自己开发的DApp中,从而提供一个一体化的用户体验。本文将详细分析如何实现这一目标,以及其中的技术实现、优势和需要注意的问题。 一、什么是DApp浏览器? DApp浏览器是一种支…

MySQL--用户权限

1.使用root用户登录MySQL客户端,创建一个名为userl的用户,初始密码为123456;创建一个名为user2的用户,无初始密码。然后,分别使用uesr1、user2登录MySQL 客户端。 创建两个用户 使用user1登录 使用user2登录 2.使用root用户登录&a…

星海智算:skl-videolingo-2.0(AI视频翻译)使用教程

(一)项目介绍 VideoLingo是一款专为视频创作者设计的开源自动化工具,旨在提供从视频字幕生成到声音克隆配音的一站式服务。以下是对VideoLingo的详细介绍: 1、核心功能​ 1.1、一键全自动视频搬运​ 支持从YouTube等平台下载视…

SQL靶场第八关攻略

一.判断类型 输入?id1 and 11-- 输入?id1 and 12--页面都正常,说明不是数值型 输入?id1页面没有回显 加上--页面正常,说明是字符型注入 二.判断列数 输入?id1 order by 3--页面正常 输入?id1 order by 4--页面没有回显,说明一共有三列…

华为HCIP-Datacom H12-821H12-831 (12月最新题库)

备考HCIP-datacom的小伙伴注意啦 !!! 2024年下半年12月份最新(H12-821和H12-831)题库带解析,有需要的小伙伴移动至文章末 H12-821: H12-831: 1.BGP 邻居建立过程的状态存在以下几种:那么建立一个成功的连接所经历的状态机顺序是 A、3-1-2-5-4 B、1-3-5-2-4 C、…

Flask使用长连接

Flask使用flask_socketio实现websocket Python中的单例模式 在HTTP通信中,连接复用(Connection Reuse)是一个重要的概念,它允许客户端和服务器在同一个TCP连接上发送和接收多个HTTP请求/响应,而不是为每个新的请求/响…

MR30分布式 I/O 模块助力 CNC 设备产能飞跃

背景分析 在现代制造业中,CNC 设备扮演着极为关键的角色。然而,CNC 设备在运行过程中也存在着诸多痛点。传统的 CNC 设备往往在控制与通信方面存在局限,其内部的 I/O 系统大多采用集中式架构。这种架构下,一旦需要处理大量的输入输…

远程修改ESXi 6.7管理IP地址

1.启用安全Shell(也就是EXSi可以被SSH访问的功能) 2.使用SecureCRT SSH2连接ESXi主机,现在使用dcui并没有任何反应,在Session标签栏右键点击Disconnect。 The time and date of this login have been sent to the system logs.WA…

Vulnhub靶场 Kioptrix: Level 1 (#1) 练习

目录 0x00 环境准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用1. 方法一:mod_ssl 2.8.42. 方法二:CVE-2003-02013. 方法三:Samba 0x04 总结 0x00 环境准备 下载链接:http://www.kioptrix.com/dlvm/Kioptrix_Level_1.…

消息中间件-Kafka3-kafkaJavaClient小例

消息中间件-Kafka3-kafkaJavaClient小例 Kafak Java Client private static final String KAFKA_TOPIC "kafak-test";private static String bootstrapServers "localhost:9092";private static AdminClient client null;static {Properties config n…

关于光耦合器的常见误解

光耦合器以其提供电气隔离的能力而闻名,广泛应用于从电源到通信系统的各种应用。尽管光耦合器非常普遍,但人们对其特性和用途存在一些常见的误解。本文将揭穿一些最常见的误解,以帮助工程师和爱好者做出更明智的决策。 误解1:光耦…

【简洁明快】使用python读取数据建立pptx (python-pptx图文调整案例)

使用python自动读取数据建立pptx 前言如何使用 Python 自动生成 PPTX第一步:安装所需库第二步:创建一个新的 PPTX第三步:添加幻灯片第四步:添加内容添加文本添加图片第五步:保存 PPTX 图文实操案例(自动读取…

【智体OS】官方上新发布rtphone分布式安卓设备远程控制插件:实现远程访问和管理手机

【智体OS】官方上新发布rtphone分布式安卓设备远程控制插件:实现远程访问和管理手机 dtns.network是一款主要由JavaScript编写的智体世界引擎(内嵌了three.js编辑器的定制版-支持以第一视角浏览3D场馆),可以在浏览器和node.js、d…

Vue智慧商城项目

创建项目 vue组件库 — vant-ui(常用于移动端) Vant 2 - 轻量、可靠的移动端组件库 安装vant npm i vantlatest-v2 -S 引入组件 按需导入和全部导入 全部导入 整个组件库的所有组件都导进来,缺点是增加了代码包体积 main.js import…

提升网站流量的关键:AI在SEO关键词优化中的应用

内容概要 在当今数字时代,提升网站流量已成为每个网站管理员的首要任务。而人工智能的技术进步,为搜索引擎优化(SEO)提供了强有力的支持,尤其是在关键词优化方面。关键词是连接用户需求与网站内容的桥梁,其…

以MP6924A为核心的LLC拓扑学习【一】

PFCLLC: 在PFC(功率因数校正)和LLC(谐振变换器)组成的电源系统中,各个电路有特定的作用,它们协同工作以实现高效率和高功率因数的电能转换。 1. PFC(功率因数校正)电路的作用 PFC电…

实践教程|Transformer Decoder-Only 模型批量生成 Trick

导读 本文给出了一个用单Transformer decoder( GPT)模型进行批量生成时的解决方法。 发现用单 Transformer decoder (Aka GPT)模型进行生成时,因为位置对齐等问题,进行批量生成时十分麻烦。 训练时&#…

DevExpress WPF v24.2新功能预览 - 键盘导航和屏幕阅读器功能增强

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

threejs相机辅助对象cameraHelper

为指定相机创建一个辅助对象,显示这个相机的视锥。 想要在场景里面显示相机的视锥,需要创建两个相机。 举个例子,场景中有个相机A,想要显示相机A的视锥,那么需要一个相机B,把B放在A的后面,两个…