首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 24-03-18 00:47
  • 2960
  • 6928
blog.csdn.net

文章目录

    • 在 Kubernetes 上部署 NFS Client Provisioner
      • 步骤一:部署 NFS 服务器
      • 步骤二:部署 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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

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

# 确保 NFS 导出可用
showmount -e localhost
  • 1
  • 2
  • 3
  • 4
  • 5

确保显示出 /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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 编写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"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 编写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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  1. 部署 NFS Client Provisioner:
kubectl apply -f rbac.yaml
kubectl apply -f storageclass.yaml
kubectl apply -f deployment.yaml
  • 1
  • 2
  • 3
  1. 验证部署是否成功:
kubectl get pods -n  kube-system
  • 1

确保 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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

根据需要,调整存储容量、访问模式等配置。然后,使用 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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

结论

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

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

参考资源:

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

文章目录

    • 在 Kubernetes 上部署 NFS Client Provisioner
      • 步骤一:部署 NFS 服务器
      • 步骤二:部署 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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

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

# 确保 NFS 导出可用
showmount -e localhost
  • 1
  • 2
  • 3
  • 4
  • 5

确保显示出 /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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 编写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"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 编写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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  1. 部署 NFS Client Provisioner:
kubectl apply -f rbac.yaml
kubectl apply -f storageclass.yaml
kubectl apply -f deployment.yaml
  • 1
  • 2
  • 3
  1. 验证部署是否成功:
kubectl get pods -n  kube-system
  • 1

确保 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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

根据需要,调整存储容量、访问模式等配置。然后,使用 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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

结论

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

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

参考资源:

  • Kubernetes NFS Client Provisioner GitHub 仓库
  • Kubernetes NFS 存储类文档
  • NFS 官方文档
注:本文转载自blog.csdn.net的(~ ̄▽ ̄)~凤凰涅槃的文章"https://blog.csdn.net/qq_42704442/article/details/131705031"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

115
云原生
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top