kubernetes dynamic storage based on nfs

1 create nfs

Deploy the nfs service on the kubernetes master node and execute on the master node

#master node install nfs
yum -y install nfs-utils

#Create nfs directory
mkdir -p /nfs/data/

#Modify permission
chmod -R 777 /nfs/data

#Edit the export file, which is the default configuration file of nfs
vim /etc/exports
/nfs/data *(rw,no_root_squash,sync)

#Configuration takes effect
exportfs -r
#View effective
exportfs

#Start rpcbind and nfs services
systemctl restart rpcbind && systemctl enable rpcbind
systemctl restart nfs && systemctl enable nfs

#View the registration status of RPC service
rpcinfo -p localhost

#showmount test
showmount -e 192.168.11.145

All kubernetes node nodes install the client and start up

yum -y install nfs-utils
systemctl start nfs && systemctl enable nfs

2 create dynamic storage

How External NFS drivers work The external NFS driver of K8S can be divided into two types according to its working mode (as NFS server or as NFS client): 1.nfs-client: That's what we'll show next. It uses K8S's built-in NFS driver to mount the remote NFS server to the local directory, and then uses itself as the storage provider to associate the storage class. When the user creates the corresponding PVC to apply for PV, the provider compares the requirements of PVC with its own attributes. Once the requirements are met, the sub directory of PV will be created in the locally mounted NFS directory to provide dynamic storage services for Pod. 2.nfs: Unlike NFS client, this driver does not use k8s's NFS driver to mount the remote NFS to the local redistribution, but directly maps the local file to the inside of the container, and then uses it in the container ganesha.nfsd To provide external services for NFS; each time PV is created, the corresponding folder is directly created in the local NFS root directory, and the subdirectory is export ed.

From: https://www.jianshu.com/p/5e565a8049fc.

Here's how to create nfs dynamic storage through nfs client

First download the k8s external driver code: https://github.com/kubernetes-incubator/external-storage

Under the NFS client / deploy directory of the directory

One rbac.yaml The file does not need to be modified. This file is used to create RBAC permissions

Two class.yaml The file is used to create a StorageClass. You can modify the name value according to your own needs. In this paper, change the name: managed NFS storage to name: NFS storage

Three deployment.ymal The file is used to create an NFS client provider, as follows

apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: nfs-client-provisioner
spec:
  replicas: 1
  strategy:
    type: Recreate
  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
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              value: 10.10.10.60 (Change to your own) 
            - name: NFS_PATH
              value: /ifs/kubernetes(Change to your own)
      volumes:
        - name: nfs-client-root
          nfs:
            server: 10.10.10.60(Change to your own)
            path: /ifs/kubernetes(Change to your own)

The service account creation section needs to be removed because rbac.yaml Already created in the file. Other nfs values are changed to their own values according to their own deployment.

Execute the following command to create

kubectl apply -f rbac.ymal
kubectl apply -f class.ymal
kubectl apply -f deployment.ymal

3 test

Under the NFS client / deploy directory, according to the class.yaml Create StorageClass name modify test-claim.yaml The corresponding value in the file

After

kubectl apply -f test-claim.yam
[root@k8s-1 ~]# kubectl get pvc
NAME        STATUS   VOLUME                            CAPACITY ACCESS MODES STORAGECLASS   
test-claim   Bound  pvc-bae936cd-c4c4-11e9-a743-fa163e955143   1Mi     RWX    nfs-storage    

Check that pvc is already bound.

Tags: Programming Kubernetes yum vim github

Posted on Tue, 16 Jun 2020 03:04:15 -0400 by snk