Kubernetes 集群部署 MySQL
在Kubernetes 集群部署 MySQL的必要性
1.在 Kubernetes 上部署 MySQL 的主要目的在于利用 Kubernetes 提供的弹性和高可用性。通过容器化管理,MySQL 的实例能够自动扩展和故障恢复,从而确保服务的稳定性和性能。这种自动化的特性可以减少系统的停机时间,同时让运维团队更专注于其他重要的任务。
2.Kubernetes 的动态存储管理为 MySQL 数据提供了持久化存储的解决方案。使用持久化卷(PVC),MySQL 的数据在 Pod 重新创建或迁移时不会丢失。Kubernetes 还允许对存储卷的自动分配和管理,这简化了存储资源的管理过程,使得运维变得更加高效。
3.Kubernetes 提供的服务发现和负载均衡机制,使得其他应用程序能够轻松找到并连接到 MySQL 服务。这种集成能力提高了系统的灵活性和可扩展性,特别是在需要多个 MySQL 副本的场景中。Kubernetes 可以智能地将请求分发到不同的副本,从而实现负载均衡,提高整体性能。
4.Kubernetes 的生态系统与现代 DevOps 工具链无缝集成,使得 MySQL 的部署和管理可以更容易地融入 CI/CD 流程中。这种集成不仅提高了开发和运维的效率,还增强了系统的监控和可观察性,使团队能够及时发现和解决潜在问题。这一切都使得在 Kubernetes 上部署 MySQL 成为一种理想选择,特别是在云原生架构中。
创建持久存储 (PersistentVolumeClaim)
注意:下面的所有文件夹为.yaml后缀。举个例子吧例“mysql-deployment.yaml”
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
labels:
app: mysql
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
创建 MySQL 部署 (Deployment)
创建 MySQL 部署,并挂载之前创建的 PVC
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
labels:
app: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:8.0
env:
- name: MYSQL_ROOT_PASSWORD
value: "password" # 换为你的 MySQL 密码
- name: MYSQL_DATABASE
value: "database" # 可有可无,自动创建数据库
- name: MYSQL_USER
value: "user" # 可有可无,创建的数据库用户
- name: MYSQL_PASSWORD
value: "password" # 可有可无,数据库用户密码
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pvc
创建 MySQL 服务 (Service)
创建一个 Service 来暴露 MySQL 的端口,为了能够从集群内部或外部访问 MySQL
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
app: mysql
spec:
ports:
- port: 13307
targetPort: 3306
selector:
app: mysql
最后!!
需要使用命令进行配置,注意一定要配置完,上面三个都需要配置,根据你的文件名修改.yaml前缀,如下:
kubectl apply -f mysql-deployment.yaml
通过以下命令检查 MySQL Pod 是否运行正常:
kubectl get pods -l app=mysql
并查看 MySQL 服务的状态:
kubectl get svc mysql