1.nfs安装及共享目录配置
执行以下命令安装nfs服务器
#centos
yum -y install nfs-utils
#ubuntu
sudo apt install nfs-kernel-server
在nfs服务器内端新建一个目录作为共享目录,共享给客户端使用
mkdir /data/nfs
目录建立完成后编辑nfs配置文件/etc/exports,将该目录写入/data/nfs *(rw,sync,no_root_squash)
sudo vim /etc/exports
重启nfs后可以看见nfs配置信息
showmount -e localhost
客户端也需要安装nfs客户端
#centos
yum -y install nfs-utils
#ubuntu
sudo apt install nfs-common
安装完成后挂载服务器的共享目录
mount -t nfs <nfs-server-ip>:/data/nfs /data/nfs
验证一下,在服务器挂载路径创建一个文件
在客户端也会存在
2.nfs-csi下载及部署
下载驱动程序源码
git clone https://github.com/kubernetes-csi/csi-driver-nfs.git
运行安装脚本
sudo ./csi-driver-nfs/deploy/install-driver.sh
其中git clone以及脚本部署中的某些镜像国内可能无法直接下载,需要用科技或者找国内镜像资源手动拉取到本地并在yaml文件(csi-nfs-node.yaml csi-nfs-controller.yaml等)里替换
解决后可以看到集群的部署情况
sudo kubectl get po -A
3.集群数据持久化存储
创建storageclass并部署,server替换成nfs服务器的ip,share替换成nfs的挂载目录
storageclass.yaml
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: sc1-hsy
provisioner: nfs.csi.k8s.io
parameters:
server: <nfs-server-ip> #这里替换成nfs服务器的ip
share: /data/nfs/
# csi.storage.k8s.io/provisioner-secret is only needed for providing mountOptions in DeleteVolume
# csi.storage.k8s.io/provisioner-secret-name: "mount-options"
# csi.storage.k8s.io/provisioner-secret-namespace: "default"
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
- nfsvers=4.1
sudo kubectl apply -f storageclass.yaml
查看集群sc
sudo kubectl get sc
创建pvc
pvc-hsy.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-hsy # PVC的名称
spec:
accessModes:
- ReadWriteOnce # 访问模式,可以是ReadWriteOnce, ReadOnlyMany, 或者ReadWriteMany
resources:
requests:
storage: 1Gi # 请求的存储容量
storageClassName: sc1-hsy # 替换成StorageClass名称
部署pvc
sudo kubectl apply -f pvc-hsy.yaml
通过kubectl get pvc 可以看到pvc
可以看到通过pvc和sc动态创建了pv,因此想要存储的话需要在部署程序的yaml文件中进行配置
step3.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: step3-hsy-deployment
namespace: hsy
spec:
replicas: 2
selector:
matchLabels:
app: step3-hsy
template:
metadata:
labels:
app: step3-hsy
spec:
containers:
- name: step3-hsy
image: <image-name:tag> # 确保这里使用的是正确的镜像名
imagePullPolicy: Never
volumeMounts:
- name: data
mountPath: /usr/share
volumes:
- name: data
nfs:
path: /data/nfs/pvc-f241737a-3086-4a0a-8f49-ba90de256c41
server: <nfs-server-ip>
将文件中volumes->nfs的path替换成pv的路径,server替换成nfs服务器的ip;上述的pv在pod的容器内就映射到了volumeMounts的mountPath内里
部署后可以验证一下,在nfs的pv内有template.html:
ls /data/nfs/pvc-f241737a-3086-4a0a-8f49-ba90de256c41
进入pod内,cd到mountPath
kubectl exec -it <pod-name> (-n namespace) -- /bin/sh
cd /usr/share
可以看到nfs共享目录中集群pv内的文件在pod内被看到了