虚拟机或物理机都可以,操作系统Ubuntu或centos,这里选择Centos7.9
# 安装 nfs-utils 软件包。 yum install nfs-utils -y # 创建共享目录 mkdir /data/nfs-k8s -p # 配置nfs权限 vim /etc/exports /data/nfs-k8s *(rw,no_root_squash) # 关闭防火墙并禁用SELinux systemctl stop firewalld && setenforce 0 # 启动nfs服务 # systemctl start nfs # 为数据目录添加读写权限 chmod 666 /data/ -R #使nfs配置生效 exportfs -arv 至此,nfs服务器已搭建完成
1、安装nfs驱动
# 在集群所有节点中执行 yum install nfs-utils -y systemctl enable nfs --now
2、编写yaml文件 [root@master ~]# vim nfs.yaml
apiVersion: v1 kind: Pod metadata: name: test-nfs-volume spec: containers: - name: test-nfs image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 protocol: TCP volumeMounts: - name: nfs-volumes mountPath: /usr/share/nginx/html volumes: - name: nfs-volumes nfs: path: /data/nfs-k8s server: 192.168.40.132
这段配置文件的解释如下:
apiVersion: v1 kind: Pod
apiVersion: v1 表示使用的是 Kubernetes API 的第一个版本。 kind: Pod 表示这个资源对象是一个 Pod。
metadata: name: test-nfs-volume
metadata 包含了关于这个 Pod 的元数据。 name: test-nfs-volume 给这个 Pod 设置了一个唯一的名称。
spec 字段定义了 Pod 的期望状态。
containers containers: - name: test-nfs image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 protocol: TCP volumeMounts: - name: nfs-volumes mountPath: /usr/share/nginx/html
containers 字段定义了 Pod 中运行的容器列表。 name: test-nfs 是容器的名称。 image: nginx 指定了容器使用的镜像。 imagePullPolicy: IfNotPresent 表示如果本地没有镜像,则尝试从镜像仓库拉取。 ports 字段定义了容器监听的端口。 containerPort: 80 指定容器监听的端口为 80。 protocol: TCP 表示使用 TCP 协议。 volumeMounts 字段定义了容器内部挂载卷的路径。 name: nfs-volumes 引用下面定义的卷的名称。 mountPath: /usr/share/nginx/html 指定了卷在容器内的挂载路径。
volumes: - name: nfs-volumes nfs: path: /data/nfs-k8s server: 192.168.40.132
volumes 字段定义了 Pod 中可以使用的卷列表。 name: nfs-volumes 给卷设置了一个名称。 nfs 字段定义了 NFS 卷的属性。 path: /data/nfs-k8s 指定了 NFS 服务器上共享的路径。 server: 192.168.40.132 指定了 NFS 服务器的 IP 地址。
在master节点上执行
kubectl apply -f nfs.yaml
在nfs服务器
cd /data/nfs-k8s echo "hello nfs" > index.html
chmod 755 index.html
在k8s master节点上执行
查看pod IP
kubectl get pod -owide
访问测试
curl 10.244.167.134
此处可以看到我们刚刚创建的文件的内容,证明k8s调用nfs作为持久化存储成功
至此,NFS服务器的搭建与k8s中的使用测试完成