0x00 TL;DR
今天在使用Helm安装MeterSphere时, 一直卡在pvc 无法绑定, 然后研究了一下pvc相关话题.
结论是: 在K8s中安装 基于NFS的 Storage Classes 后, 可以自动绑定pvc, 无需配置pv.
这个过程, 又叫动态pvc.
0x01 安装NFS
在独立于K8s的任一台主机上, 安装nfs 服务, 指定相关目录,提供对外服务:
yum install nfs-utils -y
配置目录暴露: /data/nfs
vim /etc/exports
/data/ms 10.1.1.0/24(rw,sync,no_root_squash)
0x02 安装NFS驱动
参考文档: https://kubernetes.io/docs/concepts/storage/storage-classes/#nfs
源码仓库: https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
使用helm 安装: 按需添加第一步中的IP和目录
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=x.x.x.x \
--set nfs.path=/data/nfs
安装完成后, 查看 sc
k get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
nfs-client cluster.local/nfs-subdir-external-provisioner Delete Immediate true 4h55m
然后, 添加一个自定义的 sc:
kind: StorageClass
metadata:
name: default
namespace: default
provisioner: cluster.local/nfs-subdir-external-provisioner
parameters:
server: 10.1.1.123
path: /data/nfs
readOnly: "false"
完成后查看sc:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
default cluster.local/nfs-subdir-external-provisioner Delete Immediate false 13m
nfs-client cluster.local/nfs-subdir-external-provisioner Delete Immediate true 4h55m
0x03 验证
提交一个pvc定义
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
spec:
storageClassName: default
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Mi
查看状态:
k get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
test-pvc Bound pvc-772109e2-0b47-4525-9022-a1c6c6e265f3 1Mi RWX default 2s
自动绑定成功.
0x04 相关知识点笔记
-
使用场景: 配合 volumeClaimTemplates 使用, 效果更佳
-
在deploy 中指定域名IP绑定, 解决镜像域名无法解析的问题
spec:
hostAliases:
- ip: "127.0.0.1"
hostnames:
- "foo.local"
网友评论