首页 > 其他分享 >k8s创建nfs+StorageClass

k8s创建nfs+StorageClass

时间:2024-09-04 16:24:43浏览次数:14  
标签:kind name namespace client nfs StorageClass provisioner k8s

什么是StorageClass

image.png

前置准备

  1. nfs server

nfs server地址:192.168.2.152

nsf path:/data

  1. k8s集群

集群版本:1.22

容器:containerd 1.6

创建rbac

参考https://github.com/kubernetes-retired/external-storage/blob/master/nfs-client/deploy/rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default        #根据实际环境设定namespace,下面类同
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-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"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    # replace with namespace where provisioner is deployed
    namespace: default
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
    # replace with namespace where provisioner is deployed
  namespace: default
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
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    # replace with namespace where provisioner is deployed
    namespace: default
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io
kubectl apply -f rbac.yaml

创建nfs的StorageClass类

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-nfs-storage
provisioner: test-nfs-storage #这里的名称要和provisioner配置文件中的环境变量PROVISIONER_NAME保持一致
parameters:  
  archiveOnDelete: "false"
kubectl apply -f nfs-StorageClass.yaml

创建NFS provisioner

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client-provisioner
  labels:
    app: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default  #与RBAC文件中的namespace保持一致
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nfs-client-provisioner
  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: simonrupf/k8s-nfs-client-provisioner:latest
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: test-nfs-storage  #provisioner名称,请确保该名称与 nfs-StorageClass.yaml文件中的provisioner名称保持一致
            - name: NFS_SERVER
              value: 192.168.2.152   #NFS Server IP地址
            - name: NFS_PATH  
              value: /data    #NFS挂载卷
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.2.152  #NFS Server IP地址
            path: /data     #NFS 挂载卷
kubectl apply -f nfs-provisioner.yaml

创建使用pvc的pod,验证StorageClass是否创建成功

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-claim
  annotations:
    volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"   #与nfs-StorageClass.yaml metadata.name保持一致
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi

kind: Pod
apiVersion: v1
metadata:
  name: test-pod
spec:
  containers:
  - name: test-pod
    image: busybox
    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-claim  #与PVC名称保持一致

成功在nfs服务器创建文件

标签:kind,name,namespace,client,nfs,StorageClass,provisioner,k8s
From: https://blog.51cto.com/u_2961271/11918781

相关文章

  • K8S安装部署
    一、准备工作在vmware中安装,创建三台centos服务器主机ip配置master192.168.42.1884核,6g内存,40g硬盘node1192.168.42.1892核,2g内存,20g硬盘node2192.168.42.1902核,2g内存,20g硬盘二、环境配置1、修改hosts配置(所有节点执行)vim/etc/hosts192.168.42.188master192.168.4......
  • USB gadget functionfs
    FunctionFS(FunctionFilesystem)是LinuxUSBGadget框架的一部分,专门用于从用户空间实现和控制自定义的USB功能。它提供了一种文件系统接口,使用户能够在用户空间中直接定义USB设备的接口、端点和描述符,并管理USB数据的传输。FunctionFS常用于需要用户空间控制的复杂U......
  • K8s使用cephfs(静态和动态两种)
    一、K8s节点安装ceph-commonCephFS是Ceph中基于RADOS(可扩展分布式对象存储)构建,通过将文件数据划分为对象并分布到集群中的多个存储节点上来实现高可用性和可扩展性。首先所有k8s节点都需要安装ceph-common工具:yum-yinstallepel-releaseceph-common二、静态供给方......
  • k8s核心组件etcd备份与恢复
    etcd在k8s集群中的身份以及重要性介绍在Kubernetes(K8s)集群中,etcd扮演着至关重要的角色,它是集群状态存储的核心组件。以下是etcd在K8s集群中的角色、作用及其重要性的详细说明:角色:etcd是K8s集群的“大脑”,存储和管理了整个集群的状态信息。重要性:etcd是K8s集群中不可或缺......
  • Vmware 上安装部署免费开源NAS系统FreeNAS11.3操作系统(支持CIFS (samba), FTP, NFS,
    说明FreeNAS®于2005年首次跃上互联网,在过去的十年里,它已成为一个家喻户晓的名字,在全球拥有超过1000万次下载和100万次部署。FreeNAS是一套免费的NAS(网络附加存储)服务器解决方案,它基于FreeBSD和Python开发,能够将一台普通的PC转变为功能强大的网络存储服务器。概述类型:NA......
  • k8s 配置管理中心Configmap 和 Secret 实现微服务配置管理
    一、Configmap1.1关于ConfigmapConfigmap是k8s中的资源对象,用于保存非机密性的配置的,数据可以用key/value键值对的形式保存,也可以使用文件的形式保存。 k8s中的pod(服务)都有自己的配置文件,如果需要扩容时,为保证服务的一致性,可以将Configmap做成volume,并挂载到新扩容的服务上。1.2......
  • 【K8s】专题十二(4):Kubernetes 存储之 StorageClass
    本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发、订阅专栏!专栏订阅入口Linux专栏 | Docker专栏 | Kubernetes专栏往期精彩文章【Docker】(全网首发)KylinV10下MySQL容器内存占用异常的解决方法【Docker】(全网首发)Kyli......
  • k8s中pod获取宿主机IP地址
    在Pod内部的Java环境中,你可以通过KubernetesAPI或KubernetesDownwardAPI来获取节点的IP地址。以下是几种方法来实现这一点:个人使用的第一种方法1:使用KubernetesDownwardAPI如果你已经在Pod配置中使用了DownwardAPI,将节点的IP地址注入到环境变量中,你可......
  • 解决rancher部署k8s集群问题
    一.问题概述国内网络使用docker部署,local集群会报错,并在创建rke2自定义集群时不成功,会卡住;二.问题分析这个问题主要是由于在使用dockerrun命令启动Rancher容器时,错误地映射了数据目录/var/lib/rancher到宿主机所导致的。下面是详细的问题分析和解决方案整理:1.内置镜像的tar......
  • k8s的组件以及安装
    目录概念k8s的使用场景k8s的特点核心组件master主组件1.kube-apiserver2.etcd3.kube-controller-manager控制器4.kube-schedulernode从节点组件1.kubelet2.kube-proxy3.docker总结k8s的核心概念安装k8s架构安装步骤实验:创建pod概念全写:Kubernetsk8s作......