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/v3exporting 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.yamlapiVersion: 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.yamlkubectl apply -f deployment.yaml
kubectl apply -f rbac.yaml
kubectl apply -f test-claim.yaml (测试文件随意,我是没安装这个文件,其它都安装了)
4.查看服务
kubectl get podsNAME READY STATUS RESTARTS AGE
nfs-client-provisioner-6d4469b5b5-bh6t9 1/1 Running 0 73m
5.列出你的集群中的StorageClass
kubectl get storageclassNAME 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 storageclassNAME 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