数据持久化 - 二

准备 PV 与 PVC

准备创建 PV 所需的 yaml 文件

准备3个 yaml 文件 pv1.yaml、pv2.yaml、pv3.yaml

cat > pv1.yaml << EOF
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv1
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    server: 10.0.0.31
    path: "/data/pv1"
    readOnly: false
EOF
cat > pv2.yaml << EOF
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv2
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    server: 10.0.0.31
    path: "/data/pv2"
    readOnly: false
EOF
cat > pv3.yaml << EOF
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv3
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    server: 10.0.0.31
    path: "/data/pv3"
    readOnly: false
EOF

准备创建 PVC 所需的 yaml 文件

此处的 pvc的yaml 文件名为 mysql-pvc.yaml

# 此 PVC 属于命名空间 database
cat > mysql-pvc.yaml << EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql
  namespace: database
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 3Gi
EOF

创建 PV PVC

# 创建 PV
kubectl create -f pv1.yaml
kubectl create -f pv2.yaml
kubectl create -f pv3.yaml

# 创建命名空间 database
kubectl create namespace database

# 创建 PVC
kubectl create -f mysql-pvc.yaml

查看 PV 与 PVC

kubectl get pv

kubectl -n database get pvc

使用 PVC

准备 Deployment 资源的 yaml 文件

cat > mysql-dep.yaml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: database
  name: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      system: mysql
  template:
    metadata: 
      labels:
        system: mysql
    spec:
      volumes:                           # 此处定义数据卷
        - name: mysql-vol                #数据卷的名称
          persistentVolumeClaim:
            claimName: mysql
      containers:
        - name: mysql
          image: mysql:latest
          imagePullPolicy: IfNotPresent
          ports:
          - containerPort: 3306
          volumeMounts:
            - name: mysql-vol            # 此处挂载数据卷,名称为上方定义的数据卷名称
              mountPath: /var/lib/mysql  # 容器内的挂载目录
          env:
          - name: MYSQL_ROOT_PASSWORD
            value: '123456'
EOF

创建 Deployment 资源

kubectl create -f mysql-dep.yaml

kubectl -n database get deployment

kubectl -n database get pod

检验数据持久化结果

方式一:

kubectl get pvc -n database

kubectl get pv

# 根据结果查看对应文件夹下的文件
ls -lh /data/pv*

方式二:

# 查看 pod 调度到哪个节点
kubectl -n database get pod -o wide

# 在对应节点执行
sudo df -hT | grep nfs
# 10.0.0.31:/data/pv3 nfs4       20G   11G  8.2G  56% /var/lib/kubelet/pods/1bcc66fe-02cf-4682-a9ad-765890c36f0a/volumes/kubernetes.io~nfs/pv3

# 根据上方结果在 nfs 服务器上查看,此处为 10.0.0.31 服务器上的 /data/pv3 文件夹
ls -lh /data/pv3

Last updated