StatefulSet 使用nfs pv
NFS服务安装
# 选择一台机器安装nfs服务,此处机器的IP为:192.168.1.29
# 安装 nfs-utils,若下面pod创建不成功则在每个worker节点安装nfs-utils程序
dnf install -y nfs-utils
systemctl enable --now nfs-server
systemctl status nfs-server
# 准备 nfs 的共享目录
ll /mnt/
mkdir -p /mnt/nfs_share_{1..3}
cat /etc/exports
chmod 777 /mnt/nfs_share_{1..3}
chown -R nobody:nobody /mnt/nfs_share_{1..3}
ls -lh /mnt/
# 编辑 nfs 配置文件
vim /etc/exports
cat /etc/exports
/mnt/nfs_share_1 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)
/mnt/nfs_share_2 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)
/mnt/nfs_share_3 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)
# 应用配置
exportfs -arv
exportfs -v
systemctl restart nfs-server准备K8s相关YAML文件
pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv1
spec:
capacity:
storage: 5Gi # 指定存储容量
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain # 保留数据
nfs:
path: /mnt/nfs_share_1 # NFS 服务器上的共享路径
server: 192.168.1.29 # NFS 服务器的地址
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv2
spec:
capacity:
storage: 5Gi # 指定存储容量
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain # 保留数据
nfs:
path: /mnt/nfs_share_2 # NFS 服务器上的共享路径
server: 192.168.1.29 # NFS 服务器的地址
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv3
spec:
capacity:
storage: 5Gi # 指定存储容量
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain # 保留数据
nfs:
path: /mnt/nfs_share_3 # NFS 服务器上的共享路径
server: 192.168.1.29 # NFS 服务器的地址nginx_sts.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi创建相关 pv sts 对象
kubectl create -f pv.yaml
kubectl create -f nginx_sts.yaml测试
kubectl exec -it web-0 -- bash
echo 'web-0' > /usr/share/nginx/html/index.html
kubectl exec -it web-1 -- bash
echo 'web-1' > /usr/share/nginx/html/index.html
curl <web-0 ip>
curl <web-0 ip>
kubectl delete pod web-0
kubectl delete pod web-1
kubectl get pod -o wide
curl <web-0 ip>
curl <web-1 ip>Last updated