Kubernetes 上的 PVC 如何与 MYSQL 一起工作?
how does PVC on Kubernetes work with MYSQL?
我是一名计算机工程专业的学生。在空闲时间我正在做一个 K8s 项目。
我想知道 PVC 是如何工作的,我了解基本概念。但这是我的问题。
所以这是带有 mysql 应用程序的基本 wordpress 代码。
我想知道如果我想制作这个应用程序的多个实例,我需要更改安装路径吗?或者 mountpath 是容器内的位置。
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
labels:
app: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
如果你真的想要 运行 不同的实例,你真的很想为它们创建不同的数据目录。在这种情况下使用部署绝非好主意。如果您使用 statefulset
来管理数据库会更好。 statefulset会自动为不同的pods生成不同的pvc。你可以用 kubectl get pvc
检查一下。这里,statefulset volumeClaimTemplates
是 pvc
.
的模板
pvc 名字会像那样<pvc_template_name>-<statefulset_name>-<podnumber>
.
例如:mysql-pv-claim-wordpress-mysql-0
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
clusterIP: None
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
serviceName: wordpress-mysql
replicas: 1
selector:
matchLabels:
app: wordpress
tier: mysql
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-pv-claim
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: mysql-pv-claim
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: standard
resources:
requests:
storage: 20Gi
我是一名计算机工程专业的学生。在空闲时间我正在做一个 K8s 项目。
我想知道 PVC 是如何工作的,我了解基本概念。但这是我的问题。 所以这是带有 mysql 应用程序的基本 wordpress 代码。
我想知道如果我想制作这个应用程序的多个实例,我需要更改安装路径吗?或者 mountpath 是容器内的位置。
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
labels:
app: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
如果你真的想要 运行 不同的实例,你真的很想为它们创建不同的数据目录。在这种情况下使用部署绝非好主意。如果您使用 statefulset
来管理数据库会更好。 statefulset会自动为不同的pods生成不同的pvc。你可以用 kubectl get pvc
检查一下。这里,statefulset volumeClaimTemplates
是 pvc
.
pvc 名字会像那样<pvc_template_name>-<statefulset_name>-<podnumber>
.
例如:mysql-pv-claim-wordpress-mysql-0
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
clusterIP: None
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
serviceName: wordpress-mysql
replicas: 1
selector:
matchLabels:
app: wordpress
tier: mysql
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-pv-claim
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: mysql-pv-claim
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: standard
resources:
requests:
storage: 20Gi