Kubernetes单实例有状态应用部署实战:以MySQL为例
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
概述
在Kubernetes中部署有状态应用与无状态应用有着显著区别,需要特别考虑数据持久化问题。本文将通过MySQL数据库的部署案例,详细介绍如何在Kubernetes中运行单实例有状态应用。
核心概念
在开始部署前,我们需要理解几个关键概念:
- PersistentVolume (PV):集群中的一块持久化存储资源
- PersistentVolumeClaim (PVC):用户对存储资源的请求
- Deployment:描述应用期望状态的Kubernetes对象
部署准备
环境要求
- 已安装配置好的Kubernetes集群
- 集群已配置默认StorageClass(用于动态存储供应)
详细部署步骤
1. 创建持久化存储
首先需要为MySQL数据创建持久化存储。我们通过YAML文件定义PV和PVC:
# mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
应用这个配置:
kubectl apply -f mysql-pv.yaml
2. 部署MySQL应用
接下来定义MySQL Deployment:
# mysql-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:9
env:
- name: MYSQL_ROOT_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-pv-claim
应用Deployment配置:
kubectl apply -f mysql-deployment.yaml
3. 验证部署
检查Deployment状态:
kubectl describe deployment mysql
查看创建的Pod:
kubectl get pods -l app=mysql
检查PVC绑定状态:
kubectl describe pvc mysql-pv-claim
访问MySQL实例
部署完成后,可以通过以下方式访问MySQL:
- 创建一个临时MySQL客户端Pod连接服务器:
kubectl run -it --rm --image=mysql:9 --restart=Never mysql-client -- mysql -h mysql -ppassword
- 连接成功后,你将看到MySQL命令行提示符,可以执行SQL操作。
重要注意事项
- 单实例限制:此配置仅适用于单实例应用,因为PV只能挂载到一个Pod
- 更新策略:必须使用
Recreate
策略而非滚动更新,确保同一时间只有一个Pod运行 - 安全性:示例中密码明文存储在配置中,生产环境应使用Kubernetes Secrets
维护操作
更新应用
更新MySQL镜像或其他配置时,使用:
kubectl apply -f mysql-deployment.yaml
删除部署
完整删除部署及相关资源:
kubectl delete deployment,svc mysql
kubectl delete pvc mysql-pv-claim
kubectl delete pv mysql-pv-volume
总结
通过本教程,我们学习了在Kubernetes中部署单实例有状态应用的全流程。关键在于正确配置持久化存储和应用更新策略,确保数据安全性和应用可用性。对于需要高可用的场景,应考虑使用StatefulSet控制器替代Deployment。
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考