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