首页 > 其他分享 >k8s基于NFS部署storageclass实现pv并标记为一个默认的StorageClass

k8s基于NFS部署storageclass实现pv并标记为一个默认的StorageClass

时间:2023-12-18 10:00:38浏览次数:47  
标签:web pv storage pvc NFS storageclass nfs root managed

架构:

k8s基于NFS部署storageclass实现pv并标记为一个默认的StorageClass_3c

一. 搭建storageclass
1、master和node节点安装nfs服务

yum -y install nfs-utils rpcbind

2、启动nfs并设为开机自启:

systemctl start nfs && systemctl enable nfs
systemctl start rpcbind && systemctl enable rpcbind

3、master节点创建共享挂载目录(客户端不需要创建共享目录和编辑配置文件,只安装服务就行)

mkdir -pv /data/volumes/{v1,v2,v3}

4、编辑master节点/etc/exports文件,将目录共享到192.168.200.0/24这个网段中:(网段根据自己的情况写)

[root@master2 ~]# cat /etc/exports
/data/volumes/v1  192.168.200.0/24(rw,no_root_squash,no_all_squash)
/data/volumes/v2  192.168.200.0/24(rw,no_root_squash,no_all_squash)
/data/volumes/v3  192.168.200.0/24(rw,no_root_squash,no_all_squash)

5、发布

[root@master2 ~]# exportfs -arv
exporting 192.168.200.0/24:/data/volumes/v3
exporting 192.168.200.0/24:/data/volumes/v2
exporting 192.168.200.0/24:/data/volumes/v1

6、查看

[root@master2 ~]# showmount -e
Export list for master2:
/data/volumes/v3 192.168.200.0/24
/data/volumes/v2 192.168.200.0/24
/data/volumes/v1 192.168.200.0/24

7、在k8s的master主节点下载 NFS 插件

for file in class.yaml deployment.yaml rbac.yaml test-claim.yaml ; do wget https://raw.githubusercontent.com/kubernetes-incubator/external-storage/master/nfs-client/deploy/$file ; done

8、修改deployment.yaml文件

vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client-provisioner
  labels:
    app: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
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: quay.io/external_storage/nfs-client-provisioner:latest     ##默认是latest版本
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs          ##这里的供应者名称必须和class.yaml中的provisioner的名称一致,否则部署不成功
            - name: NFS_SERVER
              value: 192.168.200.3           ##这里写NFS服务器的IP地址或者能解析到的主机名
            - name: NFS_PATH
              value: /data/volumes/v1        ##这里写NFS服务器中的共享挂载目录(强调:这里的路径必须是目录中最后一层的文件夹,否则部署的应用将无权限创建目录导致Pending)
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.200.3            ##NFS服务器的IP或可解析到的主机名 
            path: /data/volumes/v1           ##NFS服务器中的共享挂载目录(强调:这里的路径必须是目录中最后一层的文件夹,否则部署的应用将无权限创建目录导致Pending)

9、部署yaml文件

kubectl apply -f .

10、查看服务

kubectl get pods
NAME                                      READY   STATUS    RESTARTS   AGE
nfs-client-provisioner-6d4469b5b5-bh6t9   1/1     Running   0          73m

11、列出你的集群中的StorageClass

kubectl get storageclass
NAME                      PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
managed-nfs-storage        fuseim.pri/ifs   Delete          Immediate           false                  77m

12、标记一个StorageClass为默认的 (是storageclass的名字也就是你部署的StorageClass名字是啥就写啥)

kubectl patch storageclass managed-nfs-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

13、验证你选用为默认的StorageClass

kubectl get storageclass
NAME                            PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
managed-nfs-storage (default)   fuseim.pri/ifs   Delete          Immediate           false                  77m

14、测试文件

[root@master1 ~]# cat statefulset-nfs.yaml 
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nfs-web
spec:
  serviceName: "nginx"
  replicas: 3
  selector:
    matchLabels:
      app: nfs-web # has to match .spec.template.metadata.labels
  template:
    metadata:
      labels:
        app: nfs-web
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
      annotations:
        volume.beta.kubernetes.io/storage-class: managed-nfs-storage
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

15、安装

kubectl apply -f statefulset-nfs.yaml

16、查看pod

[root@master1 ~]# kubectl get pods
NAME                                      READY   STATUS    RESTARTS   AGE
nfs-client-provisioner-6d4469b5b5-m6jgp   1/1     Running   1          47h
nfs-web-0                                 1/1     Running   0          44m
nfs-web-1                                 1/1     Running   0          44m
nfs-web-2                                 1/1     Running   0          43m

17、查看pvc

[root@master1 ~]# kubectl get pvc
NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
test-claim      Bound    pvc-5dc58dfa-bd9d-4ad3-98c4-28649c13113c   1Mi        RWX            managed-nfs-storage   47h
www-nfs-web-0   Bound    pvc-7cdcdc4c-e9d2-4848-b434-9caf7e72db5a   1Gi        RWO            managed-nfs-storage   45m
www-nfs-web-1   Bound    pvc-23e3cdb2-a365-43ff-8936-d0e3df30ffac   1Gi        RWO            managed-nfs-storage   44m
www-nfs-web-2   Bound    pvc-2c34b87d-4f09-4063-aea9-9ae1e7567194   1Gi        RWO            managed-nfs-storage   44m

18、查看pv

[root@master1 ~]# kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                                             STORAGECLASS          REASON   AGE
pvc-23e3cdb2-a365-43ff-8936-d0e3df30ffac   1Gi        RWO            Delete           Bound    default/www-nfs-web-1                                             managed-nfs-storage            45m
pvc-2c34b87d-4f09-4063-aea9-9ae1e7567194   1Gi        RWO            Delete           Bound    default/www-nfs-web-2                                             managed-nfs-storage            45m
pvc-5dc58dfa-bd9d-4ad3-98c4-28649c13113c   1Mi        RWX            Delete           Bound    default/test-claim                                                managed-nfs-storage            47h
pvc-7bf72c3c-be16-43ab-b43a-a84659b9c688   20Gi       RWO            Delete           Bound    kubesphere-monitoring-system/prometheus-k8s-db-prometheus-k8s-1   managed-nfs-storage            45h
pvc-7cdcdc4c-e9d2-4848-b434-9caf7e72db5a   1Gi        RWO            Delete           Bound    default/www-nfs-web-0                                             managed-nfs-storage            46m
pvc-dfac2b35-6c22-487e-baee-f381c44a5254   20Gi       RWO            Delete           Bound    kubesphere-monitoring-system/prometheus-k8s-db-prometheus-k8s-0   managed-nfs-storage            45h

19、查看 nfs server 目录中信息

[root@master1 ~]# ll /data/volumes/v1
total 0
drwxrwxrwx 2 root root  6 Feb 11 15:58 default-test-claim-pvc-5dc58dfa-bd9d-4ad3-98c4-28649c13113c
drwxrwxrwx 2 root root  6 Feb 11 10:35 default-test-claim-pvc-b68c2fde-14eb-464a-8907-f778a654e8b8
drwxrwxrwx 2 root root  6 Feb 13 14:30 default-www-nfs-web-0-pvc-7cdcdc4c-e9d2-4848-b434-9caf7e72db5a
drwxrwxrwx 2 root root  6 Feb 13 14:31 default-www-nfs-web-1-pvc-23e3cdb2-a365-43ff-8936-d0e3df30ffac
drwxrwxrwx 2 root root  6 Feb 13 14:31 default-www-nfs-web-2-pvc-2c34b87d-4f09-4063-aea9-9ae1e7567194
drwxrwxrwx 3 root root 27 Feb 13 14:44 kubesphere-monitoring-system-prometheus-k8s-db-prometheus-k8s-0-pvc-dfac2b35-6c22-487e-baee-f381c44a5254
drwxrwxrwx 3 root root 27 Feb 13 14:44 kubesphere-monitoring-system-prometheus-k8s-db-prometheus-k8s-1-pvc-7bf72c3c-be16-43ab-b43a-a84659b9c688

标签:web,pv,storage,pvc,NFS,storageclass,nfs,root,managed
From: https://blog.51cto.com/u_14620403/8868271

相关文章

  • stepValue
    <body><styletype="text/css">*{margin:0;padding:0;}textarea{display:block;margin:50pxauto;padding-left:0;width:40......
  • 一种PVE直通全网卡,不丢管理的小技巧
    参考来源:B站up,非常普通的旅者关键词:PVE小技巧,网卡直通,NAS概要:PVE网络除了常规的物理网络设备外,还存在一个虚拟的网络设备lo没在网络的UI界面显示。我们可以通过桥接lo的方式接入虚拟机主路由的LAN口,形成一个虚拟机的内部网络。再直通所有网卡到虚拟主路由,通过主路由管理所有......
  • PVZ
    #include<iostream>#include<windows.h>usingnamespacestd;/*声明变量*/HWNDhand=NULL;//游戏窗口DWORDpid=0;//游戏进程IDHANDLEhProcess=NULL;//进程对象DWORDBaseValue=0;//游戏数据存放的基础值/*声明方法/函数*/boolstartGame();//初始化游戏数据......
  • APP整合微信APV3支付过程解析
    求个关注和点赞!!!!!谢谢啦~~~~~~~~~~~~~~~~~~~~~1.官方文档:开发指引-APP支付|微信支付商户平台文档中心(qq.com)2.根据官方文档给的SDK进入到相应的文档:https://github.com/wechatpay-apiv3/wechatpay-java3.在idea引入相应的maven依赖:<dependency><groupId>com.github.w......
  • k8s1.26部署etcd集群挂载nfs failed to save Raft hard state and entries","error":"
    背景:使用helm部署apisix时会把etcd也一起部署了,etcd数据需要持久化的,这边因为测试环境使用nfs,挂载nfs时发现只有一个etcd节点启动正常其他两个均报错如下:failedtosaveRafthardstateandentries","error":"input/outputerror截图:排错过程:1查看节点是否都可以挂载nfs  ---......
  • 使用免费内网穿透工具随时随地访问PVE(Proxmox Virtual Environment)
    什么是PVE?ProxmoxVirtualEnvironment(简称ProxmoxVE)是一种开源的虚拟化平台,它集成了虚拟化和容器技术。以下是一些导致越来越多人使用ProxmoxVE的原因:开源性质:ProxmoxVE是开源软件,这意味着用户可以自由地查看、修改和分发其源代码。这种自由度吸引了许多用户,尤其是那些寻求经......
  • 共享存储NFS
    什么是共享存储networkfilesystem网络文件系统NFS主要使用在局域网下,让不同的主机之间可以共享文件、或者目录数据主要用于linux系统上实现文件共享的一种协议,其客户端主要是Linux没有用户认证机制,且数据在网络上传送的时候是明文传送,一般只能在局域网中使用不需要输......
  • pve集群崩塌后的修复过程
    pve集群崩塌后发现pve主机里的虚机还可以用,但集群的功能就不能使用了,这时需要重新部署新的集群来接管旧的集群。新旧集群使用同一个nfs服务器作为共享存储,将旧pve主机里的虚机先停止掉,然后在新集群pve主机新建虚机,然后使用qmimportdisk234/mnt/pve/pve_nfs/images/106/vm-106-di......
  • 制作优盘启动盘,适用于群晖、ESXI、PVE等设备的刷机操作。
    教程:制作优盘启动盘软件准备:下载博客配套软件,找博主要链接1、插入优盘并打开写盘工具2、打开后的样子  3、选择固件包 4、添加镜像写入镜像包5、点开时候后的提示框,确认数据将被清除,没问题就确认 6、跑进度 7、完成后 这样一个启动盘就完成了。 ......
  • 【Kubernetes存储篇】StorageClass存储类动态生成PV详解
    一、StorageClass存储类理论StorageClass的作用主要有以下几个方面:动态存储卷分配:StorageClass可以根据定义的属性动态地创建存储卷,无需手动创建和管理存储卷。存储卷的属性管理:StorageClass可以定义存储卷的属性,如存储类型、存储容量、访问模式等,从而更好地满足应用程序的存储需......