MySQL on k8s 云原生环境部署

目录
  • 一、概述
  • 二、开始部署(一主两从)
    • 1)添加源
    • 2)修改配置
    • 3)开始安装
    • 4)测试验证
    • 5)Prometheus监控
    • 6)卸载

一、概述

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。这里主要讲mysql部署在k8s上,mysql部署在k8s上的优势主要有以下几点:

  • 资源隔离
  • 动态弹性扩缩容
  • 环境一致性
  • 运维方便

官方文档:docs.oracle.com/en-us/iaas/… MySQL 原理介绍也可以参考我这篇文章:MySQL原理介绍

二、开始部署(一主两从)

1)添加源

helm repo add bitnami https://charts.bitnami.com/bitnami
helm pull bitnami/mysql
tar -xf mysql-9.3.3.tgz

2)修改配置

  • 修改mysql/values.yaml
...
image:
  registry: myharbor.com
  repository: bigdata/mysql
  tag: 8.0.30-debian-11-r15
...
architecture: replication
...
primary:
  persistence:
    enabled: true
    size: 10Gi
    storageClass: "mysql-local-storage"
    # 目录需要提前在宿主机上创建
    local:
    - name: mysql-0
      host: "local-168-182-110"
      path: "/opt/bigdata/servers/mysql/data/data1"
  service:
    type: NodePort
    nodePorts:
      mysql: "30306"
secondary:
  replicaCount: 2
  persistence:
    enabled: true
    size: 10Gi
    storageClass: "mysql-local-storage"
    # 目录需要提前在宿主机上创建
    local:
    - name: mysql-1
      host: "local-168-182-111"
      path: "/opt/bigdata/servers/mysql/data/data1"
    - name: mysql-2
      host: "local-168-182-112"
      path: "/opt/bigdata/servers/mysql/data/data1"
  service:
    type: NodePort
    nodePorts:
      mysql: "30307"
...
metrics:
  ## @param metrics.enabled Start a side-car prometheus exporter
  ##
  enabled: true
  image:
    registry: myharbor.com
    repository: bigdata/mysqld-exporter
    tag: 0.14.0-debian-11-r33
  • 添加mysql/templates/pv.yaml
{{- range .Values.primary.persistence.local }}
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: {{ .name }}
  labels:
    name: {{ .name }}
spec:
  storageClassName: {{ $.Values.primary.persistence.storageClass }}
  capacity:
    storage: {{ $.Values.primary.persistence.size }}
  accessModes:
    - ReadWriteOnce
  local:
    path: {{ .path }}
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - {{ .host }}
---
{{- end }}
{{- range .Values.secondary.persistence.local }}
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: {{ .name }}
  labels:
    name: {{ .name }}
spec:
  storageClassName: {{ $.Values.secondary.persistence.storageClass }}
  capacity:
    storage: {{ $.Values.secondary.persistence.size }}
  accessModes:
    - ReadWriteOnce
  local:
    path: {{ .path }}
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - {{ .host }}
---
{{- end }}
  • 添加mysql/templates/storage-class.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: {{ .Values.primary.persistence.storageClass }}
provisioner: kubernetes.io/no-provisioner

3)开始安装

# 创建持久化目录
mkdir -p /opt/bigdata/servers/mysql/data/data1
# 先准备好镜像
docker pull docker.io/bitnami/mysql:8.0.30-debian-11-r15
docker tag docker.io/bitnami/mysql:8.0.30-debian-11-r15 myharbor.com/bigdata/mysql:8.0.30-debian-11-r15
docker push myharbor.com/bigdata/mysql:8.0.30-debian-11-r15
# mysqld-exporter
docker pull docker.io/bitnami/mysqld-exporter:0.14.0-debian-11-r33
docker tag docker.io/bitnami/mysqld-exporter:0.14.0-debian-11-r33 myharbor.com/bigdata/mysqld-exporter:0.14.0-debian-11-r33
docker push myharbor.com/bigdata/mysqld-exporter:0.14.0-debian-11-r33
# 开始安装
helm install mysql ./mysql -n mysql --create-namespace

NOTES

NAME: mysql
LAST DEPLOYED: Mon Sep 19 23:57:18 2022
NAMESPACE: mysql
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: mysql
CHART VERSION: 9.3.3
APP VERSION: 8.0.30
** Please be patient while the chart is being deployed **
Tip:
  Watch the deployment status using the command: kubectl get pods -w --namespace mysql
Services:
  echo Primary: mysql-primary.mysql.svc.cluster.local:3306
  echo Secondary: mysql-secondary.mysql.svc.cluster.local:3306
Execute the following to get the administrator credentials:
  echo Username: root
  MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace mysql mysql -o jsonpath="{.data.mysql-root-password}" | base64 -d)
To connect to your database:
  1. Run a pod that you can use as a client:
      kubectl run mysql-client --rm --tty -i --restart='Never' --image  myharbor.com/bigdata/mysql:8.0.30-debian-11-r15 --namespace mysql --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash
  2. To connect to primary service (read/write):
      mysql -h mysql-primary.mysql.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"
  3. To connect to secondary service (read-only):
      mysql -h mysql-secondary.mysql.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"
To access the MySQL Prometheus metrics from outside the cluster execute the following commands:
    kubectl port-forward --namespace mysql svc/mysql-metrics 9104:9104 &
    curl http://127.0.0.1:9104/metrics

查看pod状态

kubectl get pods,svc -n mysql -owide

4)测试验证

【温馨提示】从库(slave)是只读的。就是简单的读写测试,还有就是pod挂了,能否正常拉起等等。这个测试验证比较简单。这里就不一步步的演示了。

5)Prometheus监控

Prometheus:

可以通过命令查看采集数据

kubectl get --raw http://10.244.0.74:9104/metrics
kubectl get --raw http://10.244.1.125:9104/metrics
kubectl get --raw http://10.244.2.178:9104/metrics

Grafana 账号:admin,密码通过下面命令获取

kubectl get secret --namespace grafana grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

导入grafana模板,集群资源监控:7362 官方模块下载地址:grafana.com/grafana/das…

6)卸载

helm uninstall mysql -n mysql
kubectl delete pod -n mysql `kubectl get pod -n mysql |awk 'NR>1{print $1}'` --force
kubectl patch ns mysql -p '{"metadata":{"finalizers":null}}'
kubectl delete ns mysql --force

这里只是实现了mysql 的主从,没有实现高可用,官方目前没有出mysql ok k8s高可用的实现方案,虽然网上也有高可用的实现方案,但是我们公司没真正去落地使用,所以不予评价网上的高可用的方案,有兴趣的小伙伴可以去试试,其实mysql在大数据领域一般只是作为元数据存储,主挂了,影响不是很大。目前也在研究mysql on k8s 的高可用实现方案,如果后期有mysql on k8s高可用真正落地到生产环境中使用,到时候再来分享一下。

MySQL on k8s 环境部署就先这里了,更多关于MySQL k8s 环境部署的资料请关注我们其它相关文章!

(0)

相关推荐

  • 使用Kubernetes集群环境部署MySQL数据库的实战记录

    目录 1 编写 mysql.yaml文件 2 执行如下命令创建 3 通过如下命令查看创建结果 4 命令行进入Pod并登录mysql 5 至此,数据库已经安装完成,然后即可通过ip+端口,这里是30001,进行数据库链接了 1 编写 mysql.yaml文件 编写yaml如下 apiVersion: v1 kind: Namespace metadata: name: devops # Namespace 的名称 --- apiVersion: apps/v1 kind: Deployment m

  • docker部署mysql后无法连接的解决方式

    1.创建实例命令 docker run -id --name=c_mysql -p 3306:3306 -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.37 2.查看启动的实例 docker ps 3.这里映射的是宿主机的3306端口,我已经把端口开放了 4.在宿主机进行连接 #这个报错像是mysql不存在,查看mysql是否启动 #mysql已启动,端口也没有被占用 5.已经在容器里面测试

  • 关于k8s环境部署mysql主从的问题

    k8s环境部署mysql主从 一.通过yaml部署mysql 1.mysql-configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mysql namespace: mysql labels: app: mysql data: master.cnf: | # Apply this config only on the master. [mysqld] log-bin slave.cnf: | # Apply this conf

  • Ubuntu 14.04下Django和MySQL环境部署全过程

    简要步骤.(Ubuntu14.04) Python安装 Django Mysql的安装与配置 记录一下我的部署过程,也方便一些有需要的童鞋,大神勿喷~ 一.Python环境搭建 操作系统Ubuntu14.04,自带Python2.7.6 im@58user:/$ python Python 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4] on linux2 Type "help", "copyright", &q

  • Docker部署Mysql8的实现步骤

    目录 一.前置需求 二.部署方法 三.访问测试 一.前置需求 1.linux系统 本人用的Centos7 2.安装docker 参考这篇文章 二.部署方法 1.拉取mysql8镜像 docker pull mysql:8 2.创建配置文件挂载目录和数据挂载目录 mkdir -p /usr/mysql/conf /usr/mysql/data chmod -R 755 /usr/mysql/ ps:/home/mysql/config:放mysql配置文件my.conf/home/mysql/da

  • MySQL on k8s 云原生环境部署

    目录 一.概述 二.开始部署(一主两从) 1)添加源 2)修改配置 3)开始安装 4)测试验证 5)Prometheus监控 6)卸载 一.概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一.这里主要讲mysql部署在k8s上,

  • Rainbond云原生快捷部署生产可用的Gitlab步骤详解

    目录 Gitlab简介 准备工作 部署步骤 部署Postgresql组件 部署Redis组件 部署Gitlab-Server组件 配置网关访问策略 FAQ Gitlab简介 GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目.它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释.同时Gitlab集成了一系列的CI功能.不得不说,Gitlab在企业中是的使用率非常高. Rainbond非常推荐

  • 云原生技术kubernetes(K8S)简介

    目录 01 kubernetes是什么? 02 kubernetes和Compost+Swarm之间的区别 03 一点总结 今天我们看看kubernetes技术的介绍,最近在极客时间上看张磊老师的深入kubernetes技术,讲的非常好,有兴趣的同学可以去收听一下,对于理解kubernetes技术非常有帮助,这里我会按照自己的进度,分享一下学习的笔记. 今天站的角度比较高,概念性质的东西会多一点. 01 kubernetes是什么? 曾经我认为这个问题很好回答,直到不断的去理解kubernete

  • Rainbond云原生部署SpringCloud应用架构实践

    目录 示例项目详情 模块说明: 部署环境说明: 模块构建 部署 Mysql 部署 Redis 部署 pig-ui 依赖与端口梳理 最终成果 示例项目详情 本文档以Pig 快速开发框架为例,演示如何在Rainbond上部署一套完整的Spring Cloud项目. Pig Microservice Architecture V2.1.0: 基于 Spring Cloud Finchley .Spring Security OAuth2 的RBAC权限管理系统 基于数据驱动视图的理念封装 Elemen

  • Rainbond云原生部署开源社区Discourse的配置过程

    目录 概述 基于应用市场快速安装 Discourse应用如何制作 获取镜像 环境的要求 获取discourse_docker 配置模版 自定义配置 构建数据库镜像 redis 部署 postgresql部署 部署Discourse_web 建立依赖 访问 一些踩过的坑 邮件配置 数据恢复 概述 Discourse 是一个完全开源的论坛平台.具有丰富的插件库与主题库,适用于开源社区的构建.Rainbond官方社区就是基于Discourse搭建的实际案例. Rainbond官方社区建立之初就已经使用

  • Rancher部署配置开源Rainbond云原生应用管理平台

    目录 前言 前提条件 开始安装 添加 Rainbond Operator 到应用商店 安装 Rainbond Operator 访问 Rainbond 安装 UI,完善集群配置 基于 Rancher 的 Rainbond 运维参考 查看 Rainbond 各组件运行状态与日志 按需扩容 Rainbond 各组件 Rancher用户使用Rainbond优势 参考视频 常见问题 前言 本文适用于正在使用 Rancher 或对 Rancher 有所了解的用户 Rancher,Kubernetes 生态

  • k8s service使用详解(云原生kubernetes)

    目录 一.什么是服务service? 二.service分类 2.1 ClusterIP 2.2 NodePort 2.3 LoadBalancer(付费方案) 2.4 ExternalName (使用较少) 三.service和pod的关系 四.Service 之 ClusterIP 使用 4.1 在当前目录下,创建一个deploy-nginx-pod.yaml,配置如下 4.2 暴露服务为 clusterIP 类型 4.3 查看服务 五.Service 之 NodePort 使用 5.1 关

  • Docker+K8S 集群环境搭建及分布式应用部署

    1.安装docker yum install docker #启动服务 systemctl start docker.service systemctl enable docker.service #测试 docker version 2.安装etcd yum install etcd -y #启动etcd systemctl start etcd systemctl enable etcd #输入如下命令查看 etcd 健康状况 etcdctl -C http://localhost:2379

  • 生产级K8S基础环境部署配置过程

    生产级K8S基础环境部署: 配置本地hosts文件(有多少台,配置多少台) vim /etc/hosts 192.168.1.5 k8s-master 配置yum源(有自己的yum源更好) wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/e

随机推荐