Kubernetes 将 mysql 数据库的数据保存在一个卷中
Kubernetes save mysql database's data inside a volume
我是 kubernetes 的新手(使用 minikube),我想部署一个使用 mysql 存储数据的 springboot 应用程序。
我 运行 我的应用程序在一个带有 2 个容器的 pod 中(一个用于我的应用程序,一个用于 mysql),它工作正常并且正如预期的那样,我的数据在我重新启动后丢失pods(例如规模 --replicas=0;规模 --replicas=1)。
我正在使用 PersistentVolumeClaim,但仍然没有存储数据,我肯定遗漏了一些重要的东西。
这是我的配置文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: esse-deployment-1
labels:
app: esse-1
spec:
replicas: 1
selector:
matchLabels:
app: esse-1
template:
metadata:
labels:
app: esse-1
spec:
containers:
- image: mysql:5.7
name: esse-datasource
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: root
volumeMounts:
- name: mysql-persistent-storage-esse-1
mountPath: /home/esse-1/data/mysql
- image: esse-application
name: esse-app
imagePullPolicy: Never
ports:
- containerPort: 8080
env:
- name: ESSE_DATABASE_USERNAME
value: root
- name: ESSE_DATABASE_PASSWORD
value: root
- name: ESSE_APPLICATION_CONTEXT
value: /esse-1
volumes:
- name: mysql-persistent-storage-esse-1
persistentVolumeClaim:
claimName: mysql-persistent-volume-claim-esse-1
---
apiVersion: v1
kind: Service
metadata:
name: esse-service-1
labels:
app: esse-1
spec:
selector:
app: esse-1
ports:
- protocol: TCP
port: 8080
targetPort: 8080
type: NodePort
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-persistent-volume-claim-esse-1
labels:
app: esse-1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
您需要将持久卷挂载到 mysql 实际写入数据库数据的目录(为容器调整 mountPath
)。在这种情况下是 /var/lib/mysql
。
我是 kubernetes 的新手(使用 minikube),我想部署一个使用 mysql 存储数据的 springboot 应用程序。
我 运行 我的应用程序在一个带有 2 个容器的 pod 中(一个用于我的应用程序,一个用于 mysql),它工作正常并且正如预期的那样,我的数据在我重新启动后丢失pods(例如规模 --replicas=0;规模 --replicas=1)。
我正在使用 PersistentVolumeClaim,但仍然没有存储数据,我肯定遗漏了一些重要的东西。
这是我的配置文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: esse-deployment-1
labels:
app: esse-1
spec:
replicas: 1
selector:
matchLabels:
app: esse-1
template:
metadata:
labels:
app: esse-1
spec:
containers:
- image: mysql:5.7
name: esse-datasource
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: root
volumeMounts:
- name: mysql-persistent-storage-esse-1
mountPath: /home/esse-1/data/mysql
- image: esse-application
name: esse-app
imagePullPolicy: Never
ports:
- containerPort: 8080
env:
- name: ESSE_DATABASE_USERNAME
value: root
- name: ESSE_DATABASE_PASSWORD
value: root
- name: ESSE_APPLICATION_CONTEXT
value: /esse-1
volumes:
- name: mysql-persistent-storage-esse-1
persistentVolumeClaim:
claimName: mysql-persistent-volume-claim-esse-1
---
apiVersion: v1
kind: Service
metadata:
name: esse-service-1
labels:
app: esse-1
spec:
selector:
app: esse-1
ports:
- protocol: TCP
port: 8080
targetPort: 8080
type: NodePort
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-persistent-volume-claim-esse-1
labels:
app: esse-1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
您需要将持久卷挂载到 mysql 实际写入数据库数据的目录(为容器调整 mountPath
)。在这种情况下是 /var/lib/mysql
。