这个provisioner支持用已有的nfs动态的创建PV,下面记录下部署过程。
前提已经有一个k8s集群,一台nfs服务器。我的环境是1master ,2worker的k8s,用work2搭建了nfs
步骤如下:
1. 准备好nfs服务器的信息
确保你的k8s可以正常访问nfs服务器,服务器IP (192.168.157.130) , 共享目录(/public)
2. 下载 provisioner 文件
git clone https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git
#切换到nfs-subdir-external-provisioner目录下
3. 安装RBAC授权相关的账号、角色、绑定
#编辑 deploy/rbac.yaml deployment.yaml
#我把provisioner安装在kube-system命名空间,这个可以自己定义修改
$ NAMESPACE="kube-system"
$ sed -i'' "s/namespace:.*/namespace: $NAMESPACE/g" ./deploy/rbac.yaml ./deploy/deployment.yaml
$ kubectl create -f deploy/rbac.yaml -f deploy/deployment.yaml
4.配置provisioner
编辑deploy/deployment.yaml文件,修改image 为国内镜像,不然下载不下来(比如我的:registry.cn-hangzhou.aliyuncs.com/jimywu/nfs-subdir-external-provisioner:v4.0.0);
修改<YOUR NFS SERVER HOSTNAME> 和 <YOUR PATH>,我的分别为192.168.157.130,/public
其他的都保持默认,kubectl create -f deploy/deployment.yaml 安装
kind: Deployment
apiVersion: apps/v1
metadata:
name: nfs-client-provisioner
spec:
replicas: 1
selector:
matchLabels:
app: nfs-client-provisioner
strategy:
type: Recreate
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccountName: nfs-client-provisioner
containers:
- name: nfs-client-provisioner
image: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: k8s-sigs.io/nfs-subdir-external-provisioner
- name: NFS_SERVER
value: <YOUR NFS SERVER HOSTNAME>
- name: NFS_PATH
value: <YOUR PATH>
volumes:
- name: nfs-client-root
nfs:
server: <YOUR NFS SERVER HOSTNAME>
path: <YOUR PATH>
5.部署 storage class
编辑 deploy/class.yaml 文件,增加5,6两行,把此storageclass设置为系统默认,这样创建PV时不用指明SC的名字。
1 apiVersion: storage.k8s.io/v1
2 kind: StorageClass
3 metadata:
4 name: managed-nfs-storage
5 annotations:
6 "storageclass.kubernetes.io/is-default-class": "true"
7 provisioner: k8s-sigs.io/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
8 parameters:
9 archiveOnDelete: "false"
最后 kubectl create deploy/class.yaml 部署。以上没有出错,基本已经完成部署。
设置默认storageClass
kubectl patch sc managed-nfs-storage -p ‘{“metadata”: {“annotations”:{“storageclass.kubernetes.io/is-default-class”:”true”}}}’
参考链接:官方git : https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner