Skip to main content

持久化 pv pvc nfs configMap

你的 YAML 配置文件已经很好地展示了如何在 Kubernetes 中创建 PersistentVolume (PV)、PersistentVolumeClaim (PVC)、ConfigMap 和一个 MySQL Pod。以下是一个稍作调整和优化的完整示例,以确保所有资源都能正确创建和关联。

创建 PersistentVolume (PV)

apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
spec:
capacity:
storage: 3Gi
accessModes:
- ReadWriteMany
storageClassName: nfs
nfs:
path: /nfs/data/mysql
server: 192.168.0.1

创建 PersistentVolumeClaim (PVC)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: nfs

创建 ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config
data:
mysql.cnf: |
[mysqld]
port=3306
character-set-server=utf8mb4

创建 MySQL Pod

apiVersion: v1
kind: Pod
metadata:
name: mysql-pod
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
ports:
- containerPort: 3306
volumeMounts:
- mountPath: /var/lib/mysql
name: data-volume
- mountPath: /etc/mysql/conf.d
name: conf-volume
volumes:
- name: conf-volume
configMap:
name: mysql-config
- name: data-volume
persistentVolumeClaim:
claimName: mysql-pvc

应用配置文件

将上述内容保存为 mysql-deployment.yaml 文件,然后使用 kubectl apply 命令应用这些配置:

kubectl apply -f mysql-deployment.yaml

验证资源创建

你可以使用以下命令来验证资源是否正确创建:

kubectl get pv
kubectl get pvc
kubectl get configmap
kubectl get pods

确保所有资源的状态都是 BoundRunning

说明

  1. PersistentVolume (PV):定义了一个 NFS 存储卷,容量为 3Gi,访问模式为 ReadWriteMany
  2. PersistentVolumeClaim (PVC):请求 1Gi 的存储空间,访问模式为 ReadWriteMany,并指定 storageClassNamenfs
  3. ConfigMap:存储了 MySQL 的配置文件 mysql.cnf
  4. Pod:包含一个 MySQL 容器,使用上述 PVC 挂载数据卷,并使用 ConfigMap 挂载配置文件。

通过这种方式,你可以确保 MySQL 数据库的持久化存储和配置管理都能在 Kubernetes 集群中正确工作。

volumeMounts 关联的是volume?

是的,volumeMounts 是在 Pod 的容器中定义的,用于将 Pod 的 volumes 中定义的卷挂载到容器的文件系统中。

详细说明:

  • volumes:在 Pod 级别定义,指定了可以被容器使用的存储卷。这些卷可以是 ConfigMap、PersistentVolumeClaim、Secret 等。
  • volumeMounts:在容器级别定义,指定了容器内的哪些路径将挂载 Pod 中定义的卷。

示例解释:

在你的 MySQL Pod 配置中,有以下部分:

定义卷 (volumes)

volumes:
- name: conf-volume
configMap:
name: mysql-config
- name: data-volume
persistentVolumeClaim:
claimName: mysql-pvc

这里定义了两个卷:

  1. conf-volume:引用了名为 mysql-config 的 ConfigMap。
  2. data-volume:引用了名为 mysql-pvc 的 PersistentVolumeClaim。

挂载卷 (volumeMounts)

volumeMounts:
- mountPath: /var/lib/mysql
name: data-volume
- mountPath: /etc/mysql/conf.d
name: conf-volume

这里定义了两个挂载点:

  1. data-volume:挂载到容器内的 /var/lib/mysql 路径。
  2. conf-volume:挂载到容器内的 /etc/mysql/conf.d 路径。

完整的 MySQL Pod 示例

下面是完整的 MySQL Pod 配置文件,包含了卷的定义和挂载:

apiVersion: v1
kind: Pod
metadata:
name: mysql-pod
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
ports:
- containerPort: 3306
volumeMounts:
- mountPath: /var/lib/mysql
name: data-volume
- mountPath: /etc/mysql/conf.d
name: conf-volume
volumes:
- name: conf-volume
configMap:
name: mysql-config
- name: data-volume
persistentVolumeClaim:
claimName: mysql-pvc

总结

  • volumes 定义了 Pod 中可用的存储卷。
  • volumeMounts 将这些存储卷挂载到容器的指定路径。

通过这种方式,你可以将外部存储或配置文件引入到容器中,使得容器能够访问和使用这些资源。