Kubernetes单实例有状态应用部署实战:以MySQL为例

Kubernetes单实例有状态应用部署实战:以MySQL为例

website Kubernetes website and documentation repo: website 项目地址: https://gitcode.com/gh_mirrors/webs/website

概述

在Kubernetes中部署有状态应用与无状态应用有着显著区别,需要特别考虑数据持久化问题。本文将通过MySQL数据库的部署案例,详细介绍如何在Kubernetes中运行单实例有状态应用。

核心概念

在开始部署前,我们需要理解几个关键概念:

  1. PersistentVolume (PV):集群中的一块持久化存储资源
  2. PersistentVolumeClaim (PVC):用户对存储资源的请求
  3. 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:

  1. 创建一个临时MySQL客户端Pod连接服务器:
kubectl run -it --rm --image=mysql:9 --restart=Never mysql-client -- mysql -h mysql -ppassword
  1. 连接成功后,你将看到MySQL命令行提示符,可以执行SQL操作。

重要注意事项

  1. 单实例限制:此配置仅适用于单实例应用,因为PV只能挂载到一个Pod
  2. 更新策略:必须使用Recreate策略而非滚动更新,确保同一时间只有一个Pod运行
  3. 安全性:示例中密码明文存储在配置中,生产环境应使用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: website 项目地址: https://gitcode.com/gh_mirrors/webs/website

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲍凯印Fox

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值