kubernetes系列教程之 nfs-client-provisioner部署

这篇具有很好参考价值的文章主要介绍了kubernetes系列教程之 nfs-client-provisioner部署。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Kubernetes版本 v1.19.14

在 Kubernetes 上部署 NFS Client Provisioner

NFS Client Provisioner 是一个 Kubernetes 存储类的实现,它利用 NFS(Network File System)来动态创建持久卷(Persistent Volume)。在本篇博客中,我们将介绍如何在 Kubernetes 集群上部署和配置 NFS Client Provisioner。

步骤一:部署 NFS 服务器

首先,我们需要准备一个 NFS 服务器来提供存储服务。可以使用一个现有的 NFS 服务器或者自己搭建一个。

  1. 安装并配置 NFS 服务器:
# 在 Ubuntu 上安装 NFS 服务器
sudo apt update
sudo apt install nfs-kernel-server

# 创建共享目录
sudo mkdir /shared_directory

# 配置 NFS 导出
sudo nano /etc/exports
# 在文件中添加以下行
/shared_directory *(rw,sync,no_subtree_check)

# 重新加载 NFS 配置
sudo exportfs -a

# 启动 NFS 服务
sudo systemctl start nfs-kernel-server
sudo systemctl enable nfs-kernel-server

确保将 /shared_directory 替换为实际的共享目录路径,并根据需要调整其他配置。

  1. 验证 NFS 服务器是否正常运行:
shellCopy code# 检查 NFS 服务状态
sudo systemctl status nfs-kernel-server

# 确保 NFS 导出可用
showmount -e localhost

确保显示出 /shared_directory 的导出信息。

更多内容可参考作者NFS介绍,或者官方网站内容

步骤二:部署 NFS Client Provisioner

在部署 NFS Client Provisioner 之前,确保你的 Kubernetes 集群已经配置好,并且具有可用的存储类。

  • 编写rbac.yaml文件,进行权限分配
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
  namespace: kube-system
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
rules:
  - apiGroups: [""]
    resources: ["nodes"]
    verbs: ["get", "list", "watch"]
  - 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"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: kube-system
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
  namespace: kube-system
rules:
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
  namespace: kube-system
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: kube-system
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io
  • 编写storageclass.yaml文件
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-storage
  annotations:
    storageclass.kubernetes.io/is-default-class: "false"
provisioner: "k8s-sigs.io/nfs-subdir-external-provisioner"                 
parameters:
  archiveOnDelete: "true"
  • 编写deployment.yaml文件

    修改配置
    将 替换为 NFS 服务器的 IP 地址
    将 替换为 NFS 服务器上的共享目录路径
    可根据需要修改其他配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client-provisioner
  namespace: kube-system
  labels:
    app: nfs-client-provisioner
spec:
  replicas: 1
  strategy: 
    type: Recreate                   ## 设置升级策略为删除再创建(默认为滚动更新)
  selector:
    matchLabels:
      app: nfs-client-provisioner
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner
      containers:
      - name: nfs-client-provisioner
        image: eipwork/nfs-subdir-external-provisioner:4.0.2
        volumeMounts:
        - name: nfs-client-root
          mountPath: /persistentvolumes
        env:
        - name: PROVISIONER_NAME 
          value: k8s-sigs.io/nfs-subdir-external-provisioner
        # 设置高可用允许选举
        #- name: ENABLE_LEADER_ELECTION
        #  value: "True"
        - name: NFS_SERVER 
          value: 192.168.0.80
        - name: NFS_PATH 
          value: /data/nfs
      imagePullSecrets:
      - name: default-secret
      volumes:
      - name: nfs-client-root
        nfs:
          server: nfs-server-ip
          path: shared-directory
  1. 部署 NFS Client Provisioner:
kubectl apply -f rbac.yaml
kubectl apply -f storageclass.yaml
kubectl apply -f deployment.yaml
  1. 验证部署是否成功:
kubectl get pods -n  kube-system

确保 NFS Client Provisioner 的 Pod 运行正常。

步骤三:创建持久卷

现在,你可以创建使用 NFS Client Provisioner 的持久卷了。下面是一个示例的持久卷声明 YAML 文件的例子 pvc.yaml:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-pvc
spec:
  storageClassName: nfs-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Mi

根据需要,调整存储容量、访问模式等配置。然后,使用 kubectl apply -f pvc.yaml 命令创建持久卷声明。

测试挂载卷,编写pod.yaml

kind: Pod
apiVersion: v1
metadata:
  name: test-pod
spec:
  containers:
  - name: test-pod
    image: busybox:latest
    command:
      - "/bin/sh"
    args:
      - "-c"
      - "touch /mnt/SUCCESS && exit 0 || exit 1"  ## 创建一个名称为"SUCCESS"的文件
    volumeMounts:
      - name: nfs-pvc
        mountPath: "/mnt"
  restartPolicy: "Never"
  volumes:
    - name: nfs-pvc
      persistentVolumeClaim:
        claimName: test-pvc

根据需要,调整镜像、测试命令、挂载路径等配置。然后,使用 kubectl apply -f pod.yaml 命令创建持久卷声明。

结论

通过部署和配置 NFS Client Provisioner,你可以在 Kubernetes 集群中轻松创建动态的 NFS 持久卷。这提供了一种方便且可扩展的方式来管理存储,并为应用程序提供持久化的存储支持。

希望这篇博客对你部署 NFS Client Provisioner 有所帮助!

参考资源:文章来源地址https://www.toymoban.com/news/detail-567402.html

  • Kubernetes NFS Client Provisioner GitHub 仓库
  • Kubernetes NFS 存储类文档
  • NFS 官方文档

到了这里,关于kubernetes系列教程之 nfs-client-provisioner部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【SA8295P 源码分析】51 - QNX NFS Server + Android NFS Client 完整配置

    【源码分析】 因为一些原因,本文需要移除, 对于已经购买的兄弟,不用担心,不是跑路, 我会继续持续提供技术支持, 有什么模块想学习的,或者有什么问题有疑问的, 请私聊我,我们 +VX 沟通技术问题,一起学习,一起进步 接下来,我一一私聊已经购买的兄弟添加V

    2024年02月12日
    浏览(35)
  • k8s使用新版nfs-client

    nfs-client 官方github地址 安装NFS helm安装nfs-client

    2024年02月11日
    浏览(29)
  • k8s nfs-client 添加挂载参数 —— 筑梦之路

    为什么要使用 noresvport 参数挂载NAS?不重新挂载会有什么后果? 如果发生网络切换或者后端服务的HA倒换,小概率会造成NFS文件系统阻塞,那就可能需要几分钟时间连接才会自动恢复,极端情况下甚至需要重启ECS才能恢复。使用 noresvport 参数后,这个恢复几秒就可以自动完成

    2024年02月10日
    浏览(33)
  • kubernetes 系列教程之部署 BusyBox 容器

    Kubernetes版本 v1.19.14 BusyBox 是一个轻量级的 Unix 工具集合,它将许多常用的 Unix 工具打包在一个可执行文件中。在 Kubernetes 中,可以使用 BusyBox 容器作为调试工具,快速执行命令或检查容器内部的状态。本篇博客将介绍如何在 Kubernetes 集群上部署和使用 BusyBox 容器。 步骤一:

    2024年02月16日
    浏览(51)
  • Kubernetes pv-pvc-nfs-service综合实验

    目录 实验:pv-pvc-nfs-service综合实验 实验环境 实验描述 实验拓扑图:  实验步骤: 1、修改nfs服务器的主机名: 2、搭建nfs服务器:(131条消息) 搭建NFS服务器_搭建nfs存储_Claylpf的博客-CSDN博客 3、测试k8s上所有节点服务器是否可以挂载到NFS服务器上去 4、在master机器上创建pv使用

    2024年02月16日
    浏览(43)
  • Kubernetes(k8s)安装NFS动态供给存储类并安装KubeSphere

    它是一款全栈的 Kubernetes 容器云 PaaS 解决方案(来源于官网),而我觉得它是一款强大的Kubernetes图形界面,它继承了如下组件 (下面这段内容来自官网): Kubernetes DevOps 系统 基于 Jenkins 为引擎打造的 CI/CD,内置 Source-to-Image 和 Binary-to-Image 自动化打包部署工具 基于 Istio 的微

    2024年02月09日
    浏览(34)
  • Kubernetes: client-go 源码剖析(二)

    kubernetes:client-go 系列文章: Kubernetes: client-go 源码剖析(一) Kubernetes: client-go 源码剖析(二) 运行 informer 将 Reflector , informer 和 indexer 组件关联以实现 informer 流程图的流程。 运行 informer : 首先,创建队列 Delta FIFO : 该队列中存储的是 Delta 资源对象,其存储结构为: 为什

    2024年02月04日
    浏览(39)
  • Kubernetes operator(一)client-go篇【更新中】

    云原生学习路线导航页(持续更新中) 本文是 Kubernetes operator学习 系列第一篇,主要对client-go进行学习,从源码阅读角度,学习client-go各个组件的实现原理、如何协同工作等 参考视频:Bilibili 2022年最新k8s编程operator篇,UP主:白丁云原生 本文参考资料 https://pan.baidu.com/s/1Bi

    2024年01月24日
    浏览(29)
  • Kubernetes Volume及其类型(NFS、SAN) - PV - PVC - PV与PVC与Pod的关系

    目录 volume 卷 官方文档:卷 | Kubernetes 一、emptyDir(临时卷) 二、hostPath卷 type字段参数  hostPath 实验: 三、第3方提供的存储卷(百度云、阿里云、亚马逊云、谷歌云等) 四、local卷 五、NFS卷 参考文档:https://github.com/kubernetes/examples/tree/master/staging/volumes/nfs 六、SAN卷 七、NA

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包