在这里分为k8s1.26以下及以上,两种方式
rbac
[root@k8s-master /date/jumpserver/jumpserver-yaml/sc]# cat rbac.yaml
kind: ServiceAccount
apiVersion: v1
metadata:
name: nfs-client-provisioner
namespace: jumpserver #换成自己的
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: nfs-client-provisioner-runner
rules:
- apiGroups: [""]
resources: ["persistentvolumes"]
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
verbs: ["get", "list", "watch", "update"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["events"]
verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: run-nfs-client-provisioner
subjects:
- kind: ServiceAccount
name: nfs-client-provisioner
namespace: jumpserver #替换成你要部署NFS Provisioner的 Namespace
roleRef:
kind: ClusterRole
name: nfs-client-provisioner-runner
apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leader-locking-nfs-client-provisioner
rules:
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leader-locking-nfs-client-provisioner
namespace: jumpserver #换成自己的
subjects:
- kind: ServiceAccount
name: nfs-client-provisioner
namespace: jumpserver #替换成你要部署NFS Provisioner的 Namespace
roleRef:
kind: Role
name: leader-locking-nfs-client-provisioner
apiGroup: rbac.authorization.k8s.io
nfs-deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-client-provisioner
namespace: jumpserver #替换
labels:
app: nfs-client-provisioner
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: nfs-client-provisioner
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccount: nfs-client-provisioner
containers:
- name: nfs-client-provisioner
image: registry.cn-hangzhou.aliyuncs.com/open-ali/nfs-client-provisioner
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: jumpserver-test #这里注意,后面的storageclass资源会用到这个参数,要保持一致
- name: NFS_SERVER
value: 10.0.0.160 #nfs服务器地址
- name: NFS_PATH
value: /mnt/jenkins #nfs共享目录,不是你容器内的目录,是你外部nfs服务器的目录
volumes:
- name: nfs-client-root
nfs:
server: 10.0.0.160 #同上
path: /mnt/jenkins #同上
storageclass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: storageclass
provisioner: jumpserver-test #和nfs-deploy PROVISIONER_NAME 保持一致
parameters:
archiveOnDelete: "true"
reclaimPolicy: Retain
allowVolumeExpansion: True
创建pvc测试
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: jumpserver-pvc
namespace: jumpserver
spec:
storageClassName: storageclass #这里写storageclass名字
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 200Mi
创建pvc
kubectl apply -f pvc.yaml
查看
kubectl apply -f pvc.yaml
但在这里发现pvc一直处于peding状态
用 kubectl describe pvc -n jumpserver jumpserver-pvc
来查看详细信息发现以下提示
解决办法
修改k8sapiserver文件
vim /etc/kubernetes/manifests/kube-apiserver.yaml
加入以下配制
- --feature-gates=RemoveSelfLink=false
保存退出即可,配制会自动更新,这是再看pvc状态已经是bound状态,在查看pv已经自动创建出来
没图,这里我也不确定对不对,因为我的是k8s1.27版本,
改了也没关系,添加的操作删除后等一会就好了
如果上述方法不好使使用下述方法,就不用管什么版本,用就完了
跟着上面来就ok
我下载的是这个
完成上述操作后输入helm
,有提示命令就代表helm可以正常使用
#添加helm源
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner
# 安装nfs驱动
helm install nfs nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --set storageClass.name=storageclass1 --set nfs.server=10.0.0.160 --set nfs.path=/mnt/jenkins --set storageClass.defaultClass=true -n nfs-sc-default
解释
helm install nfs \ #helm的名字
nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ #源地址名字
--set storageClass.name=storageclass1 \ #storageclass名字
--set nfs.server=10.0.0.160 \ #nfs服务器地址
--set nfs.path=/mnt/jenkins \ #nfs共享目录
--set storageClass.defaultClass=true \ #默认
-n nfs-sc-default #指定名称空间
执行完成,需要下载镜像,请耐心等待
查看nfs-sc-default名称空间下的资源
镜像下载失败请手动下载镜像,镜像非国内镜像
实在下载不下来就用我这个共享的
链接:https://pan.baidu.com/s/1KO70SPdt8RI4T9SfXZrBeg?pwd=dgds
提取码:dgds
下载下来上传到k8sndoe服务器
docker load -i nfs.tar.gz
如果这时docker images 命令显示nfs镜像名字和版本为none手动修改镜像名字和版本
docker tag IMAGE ID(注:没名字的那个镜像id,docker images可查看) nfs-subdir-external-provisioner:v4.0.2(你要定义的镜像名字:就是这个,不用改)
如果镜像上传成功还是提示下载镜像失败,直接改deployment文件
kubectl edit -n nfs-sc-default deployments.apps nfs-nfs-subdir-external-provisioner
镜像这里直接改成本地镜像名字
保存退出
删除pod
kubectl delete pod -n nfs-sc-default nfs-nfs-subdir-external-provisioner-7bcdc959fb-r5b59
再次查看已经部署好了
sc也没什么问题
创建一个pvc进行测试
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: ceshi
namespace: jumpserver
spec:
storageClassName: storageclass1 #改成你刚才创建的sc的名字
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 200Mi
kubectl
可以看到pvc已经绑定了pv
pv已经自动创建好了
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有