在k8s中创建mysql

在k8s中创建mysql

在k8s中创建mysql基本流程如下:

1.创建 PersistentVolume 和 PersistentVolumeClaim

:在 Kubernetes 中,MySQL 数据通常需要持久存储。因此,首先你需要定义一个 PersistentVolume(PV)来表示存储资源,并为 MySQL 部署定义一个 PersistentVolumeClaim(PVC)来请求这些资源。这样可以确保 MySQL 数据不会因为 Pod 的重启或迁移而丢失。

# mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  hostPath:
    path: "/mnt/data"  # 本地路径,需要在每个节点上存在
  • storage: 定义 PV 的存储容量,这里是 10Gi。
  • accessModes: 定义访问模式,ReadWriteOnce 表示一次只能被一个节点挂载。
  • persistentVolumeReclaimPolicy: 定义当 PVC 被删除后 PV 的行为,Retain 表示保留数据。
  • hostPath: 定义本地存储路径。需要确保在每个节点上都有此路径,且具备相应的存储空间
# mysql-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: manual
  • accessModes: 定义访问模式,ReadWriteOnce 表示一次只能被一个节点挂载。
  • resources.requests.storage: 定义请求的存储容量,这里是 10Gi。
  • storageClassName: 定义存储类,必须与 PV 的 storageClassName 匹配。

2.编写 MySQL 部署文件

:创建一个 Deployment 文件(通常是 YAML 格式),定义 MySQL 的 Pod 模板,包括容器镜像、环境变量、卷挂载等。
通常mysql-deployment、mysql-service放在一个配置文件中
Deployment 配置 MySQL 容器的镜像、环境变量、端口和卷

# mysql-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:latest
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: your-root-password
        - name: MYSQL_DATABASE
          value: your-database
        - name: MYSQL_USER
          value: your-username
        - name: MYSQL_PASSWORD
          value: your-password
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pvc

3.定义 MySQL 服务

:在 Kubernetes 中,服务(Service)用于暴露应用程序的网络端点。你需要创建一个 Service 来公开 MySQL 实例的网络端口,以便其他应用程序可以连接到 MySQL。
Service 配置用于访问 MySQL 数据库的 ClusterIP 服务

# mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  selector:
    app: mysql
  ports:
    - protocol: TCP
      port: 3306
      targetPort: 3306
  type: ClusterIP

4.部署 MySQL 应用

:使用 kubectl apply 命令应用之前创建的 PV、PVC、Deployment 和 Service 文件,部署 MySQL 应用程序到 Kubernetes 集群中。

kubectl apply -f mysql-pv.yaml
kubectl apply -f mysql-pvc.yaml
kubectl apply -f mysql-deployment.yaml
kubectl apply -f mysql-service.yaml

5.检查MySQL服务和Pod状态

kubectl get svc
kubectl get pods

确保 MySQL 服务正在运行并且 Pod 已经启动

6.绑定 MySQL 服务到 Pod 中

在你的应用程序部署文件中,引用 MySQL 服务以连接到 MySQL 数据库。假设你的应用程序名称为:my-app

# my-app-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app-image:latest
        env:
        - name: MYSQL_HOST
          value: "mysql"
        - name: MYSQL_PORT
          value: "3306"
        - name: MYSQL_DATABASE
          value: "your-database"
        - name: MYSQL_USER
          value: "your-username"
        - name: MYSQL_PASSWORD
          value: "your-password"
        ports:
        - containerPort: 8080

使用 kubectl 命令创建应用程序部署:

kubectl apply -f my-app-deployment.yaml

补充:
在 Kubernetes 中,
my-app-deployment.yaml 和 mysql-deployment.yaml 是两个独立的部署配置文件。
mysql-deployment.yaml 配置文件用于部署 MySQL 数据库,
而 my-app-deployment.yaml 配置文件用于部署你的应用程序。这两个部署文件通过 Kubernetes 服务互相通信,
my-app-deployment.yaml 通过引用 MySQL 服务名称连接到 MySQL 数据库

  • 27
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值