k8s 使用 nfs 做动态存储卷创建

手工部署内容参考 https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client/deploy

下面写一下使用helm 部署的方法

 

helm charts 在这里 https://github.com/helm/charts/tree/master/stable/nfs-client-provisioner

手工下载并部署到我们自己的helm 仓库

cd /home/nfs/html

helm package nfs-client-provisioner --save=false

helm repo index --url=http://192.168.220.128:32598 .

 helm repo update

 下面开始安装

首先准备好nfs

参考 https://mp.csdn.net/postedit/93199622

mkdir -p /k8s/nfs

vi /etc/exports

添加记录

/k8s/nfs *(rw,no_root_squash)

exportfs -r

exportfs

 

然后执行helm install命令 , 这里面的空格都得英文的, 如果有不对的会报错 Error: This command needs 1 argument: chart name

helm install --set nfs.server=192.168.220.128 --set nfs.path=/k8s/nfs my/nfs-client-provisioner

 

运行测试看一下效果

测试文件 https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client/deploy

这里面有一个测试 pod , 一个pvc claim

 

claim文件  test-claim.yaml , 注意 storeage-class 是 nfs-client  , 在使用helm创建的时候,默认值是这个, 如果写错了,pvc会pending

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-claim
  annotations:
    volume.beta.kubernetes.io/storage-class: "nfs-client"
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi

 

创建pvc , 如果从页面复制, test-claim.yaml前面带不规范的空白字符的话, 会报错 error: the path "\u00a0test-claim.yaml" does not exist, 清掉字符重新输入就好了

kubectl apply -f test-claim.yaml

查看pvc

kubectl get pvc

 

 

此时打开k8s监控持久化卷动态创建一个

 

声明也存在了

 

至此自动创建nfs存储卷完成

 

 

 

使用应用商店安装遇到问题

"message": "pods \"nfs-client-nfs-client-provisioner-76d4d74dbf-\" is forbidden: unable to validate against any pod security policy: [spec.volumes[0]: Invalid value: \"nfs\": nfs volumes are not allowed to be used]"

"message": "ReplicaSet \"nfs-client-nfs-client-provisioner-76d4d74dbf\" has timed out progressing."

 

看起来像权限问题

检查权限, 没发现问题,原来的名字是 /data/nfs, 换成 /data/k8sdata

主机上执行

sudo vi /etc/exports

/data/k8sdata/ 192.168.106.0/24(rw,no_root_squash)

sudo exportfs -r

从机上执行

sudo mount -t nfs 192.168.106.140:/data/k8sdata /data/k8sdata

 

按目录也不行,192.168.106.0/24换成*也不行

换下面这个参数才可以

podSecurityPolicy.enabled true

 

 

报错

 

E1031 03:45:46.275571 1 leaderelection.go:234] error retrieving resource lock kube-system/cluster.local-nfs-nfs-client-provisioner: endpoints "cluster.local-nfs-nfs-client-provisioner" is forbidden: User "system:serviceaccount:paas-test:nfs-nfs-client-provisioner" cannot get resource "endpoints" in API group "" in the namespace "kube-system"

使用版本 v3.0.1-k8s1.11

 

升级版本使用latest标签就可以使用了

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要安装一个 NFS 服务器,并且在 Kubernetes 集群中安装一个 NFS 客户端。 然后,你可以按照以下步骤创建一个动态 NFS 存储的 PV: 1. 创建一个 NFS 存储类: ``` apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-storage provisioner: my-nfs-provisioner ``` 其中,`provisioner` 是你的 NFS 存储服务提供的动态插件的名称。这个名称需要在你的 Kubernetes 集群中注册过。 2. 创建一个 PVC: ``` apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc spec: accessModes: - ReadWriteMany storageClassName: nfs-storage resources: requests: storage: 1Gi ``` 在这个 PVC 中,`accessModes` 指定了多个 Pod 可以同时读写这个 PV,`storageClassName` 指定了使用存储类,`resources.requests.storage` 指定了这个 PV 的大小。 3. 创建一个 Pod 并挂载这个 PVC: ``` apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: nginx volumeMounts: - name: nfs-volume mountPath: /mnt/nfs volumes: - name: nfs-volume persistentVolumeClaim: claimName: nfs-pvc ``` 在这个 Pod 中,`volumeMounts` 指定了挂载的路径,`volumes` 中通过 `persistentVolumeClaim.claimName` 指定了要使用的 PVC。 完成以上步骤后,Kubernetes 会自动创建一个 NFS 存储的 PV,并且将其绑定到这个 PVC 上。当这个 PVC 被挂载到一个 Pod 中时,Kubernetes 会自动将这个 PV 挂载到这个 Pod 中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值