在k8s集群部署MySQL单实例,支持多个主流发行版

说明

部署MySQL单实例。

可自定义MySQL配置文件。务必注意格式。

可自定义MySQL的nodeport端口,自定义storageclass的名字。

本方法支持多个MySQL版本,可按需调整。

bash 复制代码
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:5.7.44
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.4.11
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:9.7.2
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:26.7.0

配置文件

v1.yaml内容如下

bash 复制代码
---
# ... Secret  ...
apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
type: Opaque
stringData:
  ROOT_PASSWORD: "ComplexPassword123!"

---
# ... ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
data:
  my.cnf: |
    [mysqld]
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    skip-name-resolve
    max_connections=4000
    open_files_limit=65535
    default_time_zone = '+8:00'

---
# ... Service
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - port: 3306
  clusterIP: None
  selector:
    app: mysql
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-external
spec:
  type: NodePort
  selector:
    app: mysql
  ports:
  - port: 3306
    targetPort: 3306
    # nodePort: 30306

---
# ... StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  serviceName: "mysql"
  replicas: 1
  template:
    metadata:
      labels:
        app: mysql
    spec:
      terminationGracePeriodSeconds: 60
      containers:
      - name: mysql
        image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:26.7.0
        imagePullPolicy: IfNotPresent
        securityContext:
          allowPrivilegeEscalation: false
          privileged: false
        ports:
        - containerPort: 3306
        env:
        - name: TZ
          value: "Asia/Shanghai"
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secret
              key: ROOT_PASSWORD
        resources:
          requests:
            memory: "1Gi"
            cpu: "500m"
          limits:
            memory: "4Gi"
            cpu: "2"
        startupProbe:
          exec:
            command:
            - sh
            - -c
            - mysqladmin ping -h 127.0.0.1 -u root -p"$MYSQL_ROOT_PASSWORD" || exit 1
          failureThreshold: 30
          periodSeconds: 10
        readinessProbe:
          exec:
            command:
            - sh
            - -c
            - mysqladmin ping -h 127.0.0.1 -u root -p"$MYSQL_ROOT_PASSWORD" || exit 1
          initialDelaySeconds: 10
          periodSeconds: 5
          failureThreshold: 3
        livenessProbe:
          exec:
            command:
            - sh
            - -c
            - mysqladmin ping -h 127.0.0.1 -u root -p"$MYSQL_ROOT_PASSWORD" || exit 1
          initialDelaySeconds: 30
          periodSeconds: 10
          failureThreshold: 3
        volumeMounts:
        - name: data
          mountPath: /var/lib/mysql
        - name: config
          mountPath: /etc/mysql/conf.d
          readOnly: true
      volumes:
      - name: config
        configMap:
          name: mysql-config
          items:
          - key: my.cnf
            path: my.cnf
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      # storageClassName: "csi-disk"
      resources:
        requests:
          storage: 10Gi

部署

bash 复制代码
kubectl create namespace mysql
kubectl apply -f v1.yaml -n mysql

查询访问

复制代码
kubectl get all -n mysql

使用MySQL工具访问master node1 的IP,端口是nodeport映射的端口。

相关推荐
Mr YiRan5 小时前
网络请求API监控与网络切换埋点
android·网络
美狐美颜sdk9 小时前
直播APP开发技术栈详解:视频美颜SDK、人脸识别与实时渲染
android·人工智能·音视频·美颜sdk·直播美颜sdk
独泪了无痕12 小时前
SQL函数实战:GREATEST与LEAST的技巧
数据库·sql·mysql
麻辣布丁12 小时前
MySQL篇面试题模拟
mysql
这个DBA有点耶13 小时前
MySQL 8.0.20移除了Block Nested Loop,之前学的JOIN优化知识还适用吗?
数据库·mysql·架构
奈斯先生Vector14 小时前
当模型版本不断变化,RelayRouter 能否帮助 AI 应用摆脱深度绑定
android·java·人工智能·开源·aigc
TimeFine14 小时前
让强模型做“总工”,让高性价比模型写代码
android
又见情义16 小时前
RK3568 Android 13 屏蔽 healthd 电池日志经验分享
android
开心麻瓜16 小时前
一条 SQL 跑了 8 秒,优化到 200ms 的全过程
mysql
FYKJ_201017 小时前
【毕设分享】基于Web的校园兼职信息发布与申请系统07059
前端·vue.js·spring boot·mysql·typescript·spark·课程设计