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

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

一. 搭建storageclass (跟k8s集群同一网段下的主机)

1.搭建NFS服务 (所有节点)

安装nfs服务:(集群中的每个节点也要安装否则不支持)

yum -y install nfs-utils

启动nfs并设为开机自启:

systemctl start nfs && systemctl enable nfs

创建共享挂载目录: mkdir -pv /data/volumes/{v1,v2,v3}

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

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

vim /etc/exports

/data/volume/v1 192.168.200.0/24(rw,no_root_squash)

/data/volume/v2 192.168.200.0/24(rw,no_root_squash)

/data/volume/v3 192.168.200.0/24(rw,no_root_squash)

发布:exportfs -avr

exporting 192.168.200.0/24:/data/volume/v3

exporting 192.168.200.0/24:/data/volume/v2

exporting 192.168.200.0/24:/data/volume/v1

查看:showmount -e

/data/volume/v3 192.168.200.0/24

/data/volume/v2 192.168.200.0/24

/data/volume/v1 192.168.200.0/24

2.在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

修改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)

3.部署yaml文件

kubectl apply -f class.yaml

kubectl apply -f deployment.yaml

kubectl apply -f rbac.yaml

kubectl apply -f test-claim.yaml (测试文件随意,我是没安装这个文件,其它都安装了)

4.查看服务

kubectl get pods

NAME READY STATUS RESTARTS AGE

nfs-client-provisioner-6d4469b5b5-bh6t9 1/1 Running 0 73m

5.列出你的集群中的StorageClass

kubectl get storageclass

NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE

managed-nfs-storag fuseim.pri/ifs Delete Immediate false 77m

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

kubectl patch storageclass <your-class-name> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

7.验证你选用为默认的StorageClass

kubectl get storageclass

NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE

managed-nfs-storage (default) fuseim.pri/ifs Delete Immediate false 77m

以上是 k8s基于NFS部署storageclass实现pv并标记为一个默认的StorageClass 的全部内容, 来源链接: utcz.com/a/77146.html

回到顶部