持久化 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
确保所有资源的状态都是 Bound 或 Running。
说明
- PersistentVolume (PV):定义了一个 NFS 存储卷,容量为 3Gi,访问模式为
ReadWriteMany。 - PersistentVolumeClaim (PVC):请求 1Gi 的存储空间,访问模式为
ReadWriteMany,并指定storageClassName为nfs。 - ConfigMap:存储了 MySQL 的配置文件
mysql.cnf。 - 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
这里定义了两个卷:
conf-volume:引用了名为mysql-config的 ConfigMap。data-volume:引用了名为mysql-pvc的 PersistentVolumeClaim。
挂载卷 (volumeMounts)
volumeMounts:
- mountPath: /var/lib/mysql
name: data-volume
- mountPath: /etc/mysql/conf.d
name: conf-volume
这里定义了两个挂载点:
data-volume:挂载到容器内的/var/lib/mysql路径。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将这些存储卷挂载到容器的指定路径。
通过这种方式,你可以将外部存储或配置文件引入到容器中,使得容器能够访问和使用这些资源。