首页 > 其他分享 >k8s中创建nfs外部供应商(provisioner)

k8s中创建nfs外部供应商(provisioner)

时间:2022-11-17 22:34:37浏览次数:55  
标签:yaml pvc nfs provisioner master k8s root

1、环境说明

操作系统:cenots7.9
k8s版本:1.25
容器运行时:containerd
nfs:1.3.0

2、搭建nfs服务

1、服务端

1、安装nfs服务
yum install -y nfs-utils rpcbind net-tools

2、修改配置文件
vim /etc/exports
/data/nfs  *(rw,no_root_squash,sync)

3、创建共享目录
mkdir /data/nfs -p

4、授权
chmod 755 -R /data/nfs

5、启动nfs服务
systemctl enable rpcbind --now
systemctl enable nfs --now

6、常用命令
exportfs -avr		#重新加载配置文件
showmount -e 		#查看本地nfs共享的目录

2、客户端

1、安装软件
yum install nfs-utils
ps: 不需要启动服务

2、查看nfs服务器上可用的共享目录
showmount -e 192.168.100.40		
ps:ip为nfs服务器的ip,nfs的客户端安装在k8s的所有worker节点

3、在K8s的==master==节点上创建sa并授权

1、创建sa
vim /yaml/nfs-sa.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-provisioner

2、应用服务
[root@master yaml]# kubectl apply -f /yaml/nfs-sa.yaml
[root@master yaml]# kubectl get sa nfs-provisioner 
NAME              SECRETS   AGE
nfs-provisioner   0         59m

3、给sa授权
[root@master yaml]# kubectl create clusterrolebinding nfs-provisioner-clusterrolebinding --clusterrole=cluster-admin --serviceaccount=default:nfs-provisioner
[root@master yaml]# kubectl get clusterrolebindings.rbac.authorization.k8s.io nfs-provisioner-clusterrolebinding 
NAME                                 ROLE                        AGE
nfs-provisioner-clusterrolebinding   ClusterRole/cluster-admin   60m

4、创建nfs外部提供商

1、使用deployment资源进行创建
[root@master yaml]# cat nfs-deployment-provisioner.yaml 
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-provisioner
spec:
  selector:
    matchLabels:
       app: nfs-provisioner
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nfs-provisioner
    spec:
      serviceAccount: nfs-provisioner		#使用创建的sa
      containers:
      - name: nfs-provisioner
        image: registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: nfs-client-root
          mountPath: /persistentvolumes
        env:				#设置容器环境变量
        - name: PROVISIONER_NAME
          value: example.com/nfs	
        - name: NFS_SERVER
          value: 192.168.100.40		#配置nfs服务器的IP地址或者域名
        - name: NFS_PATH
          value: /data/k8s-pro		#配置nfs服务器的共享目录
      volumes:				#在volumes中执行nfs服务器的IP和共享目录
        - name: nfs-client-root
          nfs:
            server: 192.168.100.40	
            path: /data/k8s-pro

ps: registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0
如果配置了阿里云的镜像加速器,这个镜像会在创建deployment后自动拉取

2、创建deployment
[root@master yaml]# kubectl apply -f /yaml/nfs-deployment-privisioner.yaml

3、查看
[root@master yaml]# kubectl get deployments.apps nfs-provisioner 
NAME              READY   UP-TO-DATE   AVAILABLE   AGE
nfs-provisioner   1/1     1            1           38m

6、测试

1、创建StorageClass

[root@master yaml]# vim nfs-storageclass.yaml 
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs
provisioner: example.com/nfs		#指定创建的供应商

[root@master yaml]# kubectl apply -f nfs-storageclass.yaml 
storageclass.storage.k8s.io/nfs created
[root@master yaml]# kubectl get sc
NAME   PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs    example.com/nfs   Delete          Immediate           false                  30m

2、创建pvc

[root@master yaml]# vim nfs-pvc.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
  namespace: default
  labels:
    app: nfs-pvc
spec:
  accessModes:			#指定访问类型
  - ReadWriteOnce
  volumeMode: Filesystem	#指定卷类型
  resources:
    requests:
      storage: 2Gi
  storageClassName: nfs		#指定创建的存储类的名字

[root@master yaml]# kubectl apply -f nfs-pvc.yaml 

查看自动创建的pv和pvc
[root@master yaml]# kubectl get pvc
NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
nfs-pvc   Bound    pvc-310123f1-4727-4591-b18f-59337fab5ec7   2Gi        RWO            nfs            6s
[root@master yaml]# kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS   REASON   AGE
pvc-310123f1-4727-4591-b18f-59337fab5ec7   2Gi        RWO            Delete           Bound    default/nfs-pvc   nfs                     9s

查看你nfs共享目录
[root@nfs ~]# ll /data/k8s-pro/
total 0
drwxrwxrwx 2 root root 6 Nov 17 00:36 default-nfs-pvc-pvc-310123f1-4727-4591-b18f-59337fab5ec7

总结:创建pvc使使用storageclass,那么将会自动创建pv并进行绑定

参考:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

标签:yaml,pvc,nfs,provisioner,master,k8s,root
From: https://blog.51cto.com/u_15743393/5856710

相关文章

  • K8s安装乐维5.0应用部署文档
     乐维产品包具体打包为4个镜像包,分别为:mysql5.7.36.tar、zabbix_server.tar、itops_v1_4_x86_64.tar、bpm0.1.tar,对应的配置文件分别为:data.tar、conf.tar、nginx-v1.3.t......
  • K8s存储管理—volume、pv、pvc
    介绍---------来自官方文档    存储的管理是一个与计算实例的管理完全不同的问题。PersistentVolume子系统为用户和管理员提供了一组API,将存储如何供应的细节从其......
  • K8s集群环境搭建
    K8s集群环境搭建1、环境规划1.1集群类型Kubernetes集群大体上分为两类:一主多从和多主多从一主多从:一台master节点和多台node节点,搭建简单,但是有单机故障风险,适用于......
  • k8s的亲和和反亲和
    亲和和反亲和,包含两种类型:“节点亲和”和“pod间亲和/反亲和”为何要做node亲和我们在日常工作中经常会遇到要在k8s环境下维护多条产品线,甚至在微服务架构中,又有前端......
  • k8s:bootstrap方式部署 kubelet的相关参数设置:【重点一篇文章】
    重点!!相关参数必须适应!!有些参数不可以配置!!!!! kube-apiserver特别注意:使用bootstrap,apiserver中千万 【不可以】 配置以下kubelet认证相关参数--kubelet-certifica......
  • Kubernetes(K8S) 安装Nacos,报 No DataSource set
    原因,数据库为MySQL5.7需要在yaml加上参数mysql.db.param:"characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&server......
  • CentOS 卸载 K8S
    1、删除 k8s 组件kubeadmreset-f2、删除其它容器和所有镜像dockerkill$(dockerps-a-q)dockerrm$(dockerps-a-q)dockerrmi-f$(dockerimages-q)3、清除ip......
  • K8s如何启用cgroup2支持?
    什么是cgroup......
  • k8s集群搭建
    1准备三台linux服务器2docker安装三台机器全部执行docker安装操作2.1移除以前docker相关包sudoyumremovedocker\docker-client\......
  • 开发访问k8s集群的几种方法(路由和kt)
    现状k8s集群内是有一套完整网络环境,我们不能直接通过IP访问到k8s集群内的pod或者service,只能通过nodeport或者ingress才能访问到服务.痛点开发人员进行微服务开发的......