Kubernetes 中部署MySQL5.7使用PVC无法启动问题

MySQL YAML:

---
# mysql-pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi
  storageClassName: vsan
---
# mysql-deployment
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:5.7
        imagePullPolicy: IfNotPresent
        env:
          - name: MYSQL_ROOT_PASSWORD
            value: "xxxxx"    # 生产环境需要特殊处理
        ports:
          - containerPort: 3306
            name: mysql
            protocol: TCP
        volumeMounts:
          - mountPath: /var/lib/mysql  # 持久化MySQL数据
            name: mysql-data
      volumes:
        - name: mysql-data
          persistentVolumeClaim:
            claimName: mysql

 

启动报错:

ERROR] --initialize specified but the data directory has files in it. Aborting.

 

解决办法:

在MySQL容器上增加参数即可

args:
  - "--ignore-db-dir=lost+found"

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes ,可以使用 StatefulSet 来部署 MySQL 高可用。 1. 创建 PVC 首先需要创建一个 PersistentVolumeClaim(PVC) 用于存储 MySQL 数据。可以使用下面的 YAML 文件创建一个名为 mysql-pvcPVC: ``` kind: PersistentVolumeClaim apiVersion: v1 metadata: name: mysql-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi ``` 2. 部署 StatefulSet 接下来需要创建一个 StatefulSet 来运行 MySQL 实例。可以使用下面的 YAML 文件创建一个名为 mysql-statefulset 的 StatefulSet: ``` apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql-statefulset spec: serviceName: mysql replicas: 3 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD value: "password" ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumeClaimTemplates: - metadata: name: mysql-persistent-storage spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 10Gi ``` 在这个 YAML 文件,我们指定了 StatefulSet 的副本数为 3,使用MySQL 5.7 的官方镜像,并且在容器挂载了之前创建的 PVC。 3. 部署 Headless Service 最后需要创建一个 Headless Service 来提供 DNS 解析服务。可以使用下面的 YAML 文件创建一个名为 mysql 的 Headless Service: ``` kind: Service apiVersion: v1 metadata: name: mysql spec: clusterIP: None selector: app: mysql ports: - name: mysql port: 3306 targetPort: 3306 ``` 在这个 YAML 文件,我们指定了这个 Service 的 clusterIP 为 None,使其成为 Headless Service。同时指定了 Service 的端口为 3306,与 MySQL 的默认端口一致。 部署完成后,可以使用 kubectl get pods 查看 Pod 的状态,使用 kubectl get svc 查看 Service 的状态,使用 kubectl get statefulset 查看 StatefulSet 的状态,以及使用 kubectl get pvc 查看 PVC 的状态。 需要注意的是,使用 StatefulSet 部署 MySQL 高可用时,需要保证每个 Pod 的 hostname 和 PersistentVolumeClaim 的名称是唯一的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值