kubernetes-v1.23.3 部署 MySQL-5.7.31

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: kubernetes-v1.23.3 部署 MySQL-5.7.31

部署 MySQL

配置 mysql configmap

---
apiVersion: v1
data:
  mysqld.cnf: |-
    [mysqld]
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    bind-address   = 0.0.0.0
    server_id = 1918
    default-time-zone='+08:00'
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    max_connections=1024
    default_storage_engine=innodb
    skip_external_locking
    lower_case_table_names=1
    skip_host_cache
    skip_name_resolve
    character_set_server=utf8mb4
    max_allowed_packet = 12M
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
    # ---------- binlog & errorlog & slowlog ---------- #
    log_bin = mysql-bin
    binlog_format = ROW
    max_binlog_size = 100m
    binlog_cache_size = 4m
    max_binlog_cache_size = 512m
    expire_logs_days = 7
    log-error      = /var/lib/mysql/error.log
    slow-query-log = on
    slow_query_log_file = /var/lib/mysql/slow.log
    long_query_time = 1
    [client]
    default-character-set=utf8mb4
kind: ConfigMap
metadata:
  annotations:
  labels:
    app: mysql
  name: mysql-cm
  namespace: bigdata

配置 mysql svc

---
apiVersion: v1
kind: Service
metadata:
  annotations:
  labels:
    app: mysql
  name: mysql-svc
  namespace: bigdata
spec:
  ports:
  - name: mysql
    port: 3306
    protocol: TCP
    targetPort: 3306
  selector:
    app: mysql

配置 mysql deployment

mysql 的数据目录使用的 hostpath 的方式,通过亲和性来绑定节点,需要提前给对应的节点打上 mysql= 这样的标签

kubectl label node <nodename> mysql=
---
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
  labels:
    app: mysql
  name: mysql
  namespace: bigdata
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: mysql
                operator: Exists
      containers:
      - name: mysql
        env:
          - name: APP_NAME
            value: mysql
          - name: NODE_NAME
            valueFrom:
              fieldRef:
                fieldPath: spec.nodeName
          - name: POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
          - name: MYSQL_ROOT_USER
            value: root
          - name: MYSQL_ROOT_PASSWORD
            value: YWJjMTIzCg==
          - name: TZ
            value: Asia/Shanghai
          - name: LANG
            value: en_US.UTF-8
        image: mysql:5.7.31
        imagePullPolicy: IfNotPresent
        livenessProbe:
          exec:
            command:
            - /bin/bash
            - -c
            - mysql -u${MYSQL_ROOT_USER} -p${MYSQL_ROOT_PASSWORD} -e 'SELECT 1'
          initialDelaySeconds: 30
          periodSeconds: 30
          timeoutSeconds: 10
        ports:
        - containerPort: 3306
          name: mysql
          protocol: TCP
        readinessProbe:
          exec:
            command:
            - /bin/bash
            - -c
            - mysql -u${MYSQL_ROOT_USER} -p${MYSQL_ROOT_PASSWORD} -e 'SELECT 1'
          initialDelaySeconds: 30
          periodSeconds: 30
          timeoutSeconds: 10
        volumeMounts:
        - mountPath: /var/lib/mysql
          name: mysql-data-dir
        - mountPath: /etc/mysql/conf.d/
          name: mysql-config
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      securityContext: {}
      terminationGracePeriodSeconds: 10
      volumes:
      - name: mysql-data-dir
        hostPath:
          path: /data/k8s_data/mysql
          type: DirectoryOrCreate
      - name: mysql-config
        configMap:
          name: mysql-cm

配置 mysql cronjob

  • 和 deployment 的一样,需要给节点打上 mysql-back= 的标签
  • 注意 schedule 的时间是和 controller-manager 组件的时区一样的,如果是 kubeadm 部署的,就要注意容器内的时间是不是和本地相差八小时
---
apiVersion: batch/v1
kind: CronJob
metadata:
  name: mysql-backup
  namespace: bigdata
spec:
  schedule: "0 1 * * *"
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 3
  jobTemplate:
    spec:
      template:
        spec:
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                - matchExpressions:
                  - key: mysql-back
                    operator: Exists
          containers:
          - name: mysql-backup
            imagePullPolicy: IfNotPresent
            image: mysql:5.7.31
            env:
              - name: MYSQL_ROOT_USER
                value: root
              - name: MYSQL_ROOT_PASSWORD
                value: YWJjMTIzCg==
              - name: MYSQL_HOST
                value: mysql-svc.bigdata.svc.cluster.local
              - name: TZ
                value: Asia/Shanghai
              - name: LANG
                value: en_US.UTF-8
            command:
            - /bin/sh
            - -c
            - |
              set -ex
              mysqldump --host=${MYSQL_HOST} --user=${MYSQL_ROOT_USER} \
                        --password=${MYSQL_ROOT_PASSWORD} \
                        --routines --all-databases --single-transaction \
                        > /mysql-backup/mysql-$(date +"%Y%m%dT%H_%M_%S").sql && find /mysql-backup/ -type f -mtime +3 -exec rm -rf {} \;
            volumeMounts:
            - name: mysql-backup
              mountPath: /mysql-backup
          restartPolicy: OnFailure
          volumes:
          - name: mysql-backup
            hostPath:
              path: /data/k8s_data/mysql-back
              type: DirectoryOrCreate

配置 mysql-web

配置 mysql-web svc

  • 如果有 ingress,可以配置成 clusterip 的模式
  • 如果没有 ingress,可以配置成 nodeport 的模式
  • 下面两个都配置了,可以各取所需
  • 下面的 nodeport 配置了 30003 端口,需要检查一下自己本地有没有被占用,也可以自己随意修改,端口范围值一般是 30000-32767,具体要看 apiserver 的配置
---
apiVersion: v1
kind: Service
metadata:
  namespace: bigdata
  name: phpmyadmin
  labels:
    app: phpmyadmin
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  selector:
    app: phpmyadmin
---
apiVersion: v1
kind: Service
metadata:
  namespace: bigdata
  name: phpmyadmin-np
  labels:
    app: phpmyadmin
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http-np
    nodePort: 30003
  selector:
    app: phpmyadmin

配置 mysql-web deployment

  • 下面的 PMA_HOST 需要替换成自己的 mysql 地址
  • 下面的 PMA_PORT 需要替换成自己的 mysql 端口
---
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
  labels:
    app: phpmyadmin
  name: phpmyadmin
  namespace: bigdata
spec:
  replicas: 1
  selector:
    matchLabels:
      app: phpmyadmin
  template:
    metadata:
      annotations:
      labels:
        app: phpmyadmin
    spec:
      containers:
      - name: phpmyadmin
        image: phpmyadmin/phpmyadmin:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        env:
        - name: PMA_HOST
          value: mysql-svc.bigdata.svc.cluster.local
        - name: PMA_PORT
          value: "3306"

pod 变成 running 之后,就可以通过 ip 加 nodeport 的方式来访问了,使用 mysql 数据库内的用户名和密码登录,可以自己先提前在 mysql 数据库里面创建好

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
Kubernetes Cloud Native 关系型数据库
提升数据安全与性能,掌握Helm一键部署MySQL 8.0主从技巧
【4月更文挑战第9天】提升数据安全与性能,掌握Helm一键部署MySQL 8.0主从技巧
53 0
|
1月前
|
Kubernetes 搜索推荐 网络协议
使用 kubeadm 部署 Kubernetes 集群(三)kubeadm 初始化 k8s 证书过期解决方案
使用 kubeadm 部署 Kubernetes 集群(三)kubeadm 初始化 k8s 证书过期解决方案
49 8
|
2天前
|
关系型数据库 MySQL 数据库
mysqlTools 一分钟部署安装本mysql多个版本,解锁繁琐部署过程
mysqlTools 一分钟部署安装本mysql多个版本,解锁繁琐部署过程
58 2
|
3天前
|
Kubernetes 应用服务中间件 nginx
Kubernetes详解(六)——Pod对象部署和应用
在Kubernetes系列中,本文聚焦Pod对象的部署和管理。首先,通过`kubectl run`命令创建Pod,如`kubectl run pod-test --image=nginx:1.12 --port=80 --replicas=1`。接着,使用`kubectl get deployment`或`kubectl get pods`查看Pod信息,添加`-o wide`参数获取详细详情。然后,利用Pod的IP地址进行访问。最后,用`kubectl delete pods [Pod名]`删除Pod,但因Controller控制器,删除后Pod可能自动重建。了解更多细节,请参阅原文链接。
11 5
|
3天前
|
Kubernetes Linux Docker
Kubernetes详解(四)——基于kubeadm的Kubernetes部署
Kubernetes详解(四)——基于kubeadm的Kubernetes部署
14 2
|
14天前
|
Kubernetes 应用服务中间件 nginx
K8S二进制部署详解,一文教会你部署高可用K8S集群(二)
K8S二进制部署详解,一文教会你部署高可用K8S集群(二)
|
14天前
|
Kubernetes 网络安全 数据安全/隐私保护
K8S二进制部署详解,一文教会你部署高可用K8S集群(一)
K8S二进制部署详解,一文教会你部署高可用K8S集群(一)
|
14天前
|
SQL Kubernetes 调度
【一文看懂】部署Kubernetes模式的Havenask集群
本次分享内容为havenask的kubernetes模式部署,由下面2个部分组成(部署Kubernetes模式Havenask集群、 Kubernetes模式相关问题排查),希望可以帮助大家更好了解和使用Havenask。
38 1
|
14天前
|
Kubernetes 网络协议 Python
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(二)
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(二)
|
14天前
|
Kubernetes 应用服务中间件 开发工具
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(一)
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(一)