EKS集群可以使用EFS插件,自建集群如果对存储要求不是特别高,就可以使用NFS实现
一、安装NFS服务端
1、k8s node节点部署NFS服务
NFS服务端安装服务,可以用node节点,也可以独立一台node只做NFS存储
apt-get install nfs-kernel-server nfs-common -y
2、写入NFS服务配置
我使用/data/kube-nfs作为数据目录
mkdir /data/kube-nfs -p
echo "/data/kube-nfs *(insecure,rw,async,no_root_squash,no_subtree_check)" | sudo tee -a /etc/exports
3、加载 NFS 服务器配置
首次启动nfs可以不做,修改配置后不想重启服务可以执行exportfs -ra
4、启动 NFS 服务器
systemctl start nfs-kernel-server
5、设置 NFS 服务器开机启动
systemctl enable nfs-kernel-server
二、NFS客户端配置
2.1、node节点上都安装好客户端
apt-get install nfs-common -y
2.2、查看mount信息
nfs服务正常
$ showmount -e 192.168.31.111
Export list for 192.168.31.111:
/data/kube-nfs *
三、 k8s部署NFS
3.1、helm安装nfs
添加仓库的时候就会超时,国内只能使用代理了,我宿主机用了Clash x(接受局域网连接)
# 这是master上操作,具体看哪台机器有kubectl命令
export https_proxy=http://192.168.31.154:7890 http_proxy=http://192.168.31.154:7890
添加仓库后更新源,安装时注意更换为自己的nfs服务器地址和nfs路径
helm repo add nfs-subdir-external https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm repo update
# 在安装前取消上面的代理配置
unset https_proxy
unset http_proxy
helm install nfs-client nfs-subdir-external/nfs-subdir-external-provisioner --set nfs.server=192.168.31.111 --set nfs.path=/data/kube-nfs
3.2、处理镜像问题
处理都是在部署NFS节点的那台机器上操作
- 方法1:从网络没问题的地方下载镜像后导入到安装节点上,helm安装时添加如下参数
--set image.repository=registry.k8s.io/sig-storage/nfs-subdir-external-provisioner --set image.tag=v4.0.2
- 方法2:宿主机配置proxy后拉取镜像
export https_proxy=http://192.168.31.154:7890 http_proxy=http://192.168.31.154:7890 all_proxy=socks5://192.168.31.154:7890
# 代理配置好以后拉取镜像
ctr images pull registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2
# 拉取后取消代理
unset http_proxy https_proxy all_proxy
- 方法3:宿主机containerd配置代理
mkdir /etc/systemd/system/containerd.service.d/
cat >/etc/systemd/system/containerd.service.d/http-proxy.conf<<EOF
[Service]
Environment="HTTP_PROXY=http://192.168.31.154:7890"
Environment="HTTPS_PROXY=http://192.168.31.154:7890"
Environment="NO_PROXY=localhost,127.0.0.1,localaddress,.localdomain.com,kubernetes.default.svc.cluster.local,harbor.baga.live,10.0.0.0/8,192.168.0.0/16,172.16.0.0/12"
EOF
#
systemctl daemon-reload
systemctl restart containerd
pod启动成功
四、验证存储可用性
创建测试pvc
cat <<EOF | tee test-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test-claim
annotations:
volume.beta.kubernetes.io/storage-class: "nfs-client"
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Mi
EOF
# 状态Bound说明没问题
root@k8s-master-100:~# kubectl apply -f test-pvc.yaml
persistentvolumeclaim/test-claim created
root@k8s-master-100:~# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
test-claim Bound pvc-d166139e-3436-4dbb-b04f-d8c7a2c88c08 1Mi RWX nfs-client 4s