如何在 Kubernetes 环境中搭建 MySQL (一):简介

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL in Kubernetes  最近因为工作上的需求,搭建了一套部署在 Kubernetes 环境中的 MySQL,可能听起来就是让 MySQL 的 docker image 跑在 Kubernetes 里,应该没什么难度,可实...
img_5f1bde87f6df351d0a1e7b85abfd3ec7.png
MySQL in Kubernetes

  最近因为工作上的需求,搭建了一套部署在 Kubernetes 环境中的 MySQL,可能听起来就是让 MySQL 的 docker image 跑在 Kubernetes 里,应该没什么难度,可实际操作起来,这其实是相当复杂的一个工程:首先要有 Kubernetes 集群,才能谈得到部署应用进去;其次,MySQL 不同于无状态的应用,其中的数据是非常关键的,必须要保证其可用性,这就要求必须有高可靠性的存储集群来存储数据;再者由于众所周知的网络原因,Kubernetes 和 docker 相关的镜像想拿到非常不方便;最后,MySQL 在 cloud native 环境同样需要做主备和高可用的配置。
  我计划写一系列文章将自己的经验总结出来,从头到位将这一系列事情讲清楚,并尽量保证感兴趣的朋友可以按照我写的步骤将一个可用的环境搭建出来。

目录

  以下是我以后写作的计划和链接,欢迎大家多提意见:
  一:简介
  二:在 cloud native 环境下配置 MySQL 的几个关键点
  三:使用 minikube 部署单节点 Kubernetes
  四:使用 kubeadm 部署多节点 Kubernetes 集群
  五:手动搭建 Kubernetes 集群
  六:使用 ceph-deploy 搭建 ceph 集群
  七:部署 RADOSGW、RBD 和 CephFS
  八:部署 MySQL,使用 PC、PVC 作为存储
  九:部署 MySQL,使用 StorageClass 作为存储
  十:使用 StatefulSet 部署主从同步的 MySQL
  十一:Vitess 和 Gelera 简介
  十二:使用 Ingress 让 MySQL 可以在 Kubernetes 集群外访问


一:简介

  作为系列的第一篇,我想写一下解决这个问题的思路,并对用到的开源项目做简要的介绍。

  现在越来越流行将各种各样的软件部署在容器环境当中,而非虚拟机环境中,一方面原因是容器环境对于硬件的资源利用率更高,对于云服务来讲更为节省成本;而且容器环境对于微服务架构的支持有着非常明显的优势,微服务化是软件系统演进的一个主要趋势;另外可能就是因为 Kubernetes 提供的大量简单易用的容器调度方式了,虽然 Kubernetes 之前也有一些竞争对手,不过现在的趋势来看 Kubernetes 已经是毫无疑问的胜出者,是事实上的行业标准。那么做容器化,做 cloud native,Kubernetes 是平台的不二选择。

  那么为什么要把 MySQL 放进 Kubernetes 里呢?首先 MySQL 是极为重要的,它是开源免费的关系型数据库的首要选择,软件系统如果要用关系型数据库,且不考虑 Oracle 等付费软件的话,除了 MySQL 外,基本是不会做他想了(也许 Windows 环境下会考虑 SQL Server),而现在流行的软件设计方式都是让应用成为无状态,不存储任何数据,数据都放在数据库里,所以 MySQL 有多重要也就不言而喻了。其次还是因为 Kubernetes 非常强大,将 MySQL 放在里面运行,绝大部分情况下就不需要人工干预了,MySQL 进程死掉,会自动再启动新的实例;会把 MySQL 的多个实例分布在不同的服务器上,避免一个服务器出问题,功能不可用;需要多少个 MySQL 实例,系统会自动保证有多少实例在运行......如果这些事情要放在虚拟机环境中,恐怕只能是通过监控系统检测,出现问题手工干预了。

  我们已经理解了为什么要把 MySQL 放进 Kubernetes 里,接下来要考虑如何去做。把 MySQL 封装成容器,跑在容器 runtime 里,并让 Kubernetes 系统来调度,这件事本身不难,MySQL 官方已经做好了 MySQL 的 Dockerfile 和 docker image,只需要写个 yaml file 让 MySQL 跑在 Kubernetes 里就行了。但 MySQL 的独特性在于,MySQL 里面的数据是非常重要的,不能像其他软件一样,出了问题直接删掉,再启动一个实例就行了,业务数据丢失可是非常严重的问题。所以要把数据存放在安全可靠的地方,数据外挂有多种方案,这系列文章中选用的是 Ceph RBD,Ceph 是目前开源分布式存储系统中,最为流行的,RBD 是其中的块存储方案。

  Kubernetes 是 Google 贡献给开源的软件,所以 Kubernetes 相关的资源自然都是存储在 Google 的服务器上,因为众所周知的原因,正常情况下我们是没法访问到的,为了让读者可以跟着做下去,我会把教程中用到的资源全部下载下来,放在国内可以访问到的服务器上,系列文章中 Kubernetes 对应的版本为 1.10.2,如果有其他版本的需求,大家可以联系我。

  最后 MySQL 服务已经就为了,如果只是在 Kubernetes 集群内使用的话,已经没有任何问题了,但是如果要对外开放的话,目前还做不到,原因是 Kubernetes 内部网络不对外开放,那么如何让 MySQL 可以被外面访问到呢?Kubernetes 提供了 NodePort、Load Balance 和 Ingress 三种方式,系列文章的最后会重点谈到如何使用 Ingress。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
4天前
|
Kubernetes Ubuntu Shell
wsl Ubuntu环境 创建 k8s集群
wsl Ubuntu环境 创建 k8s集群
|
4天前
|
Kubernetes Cloud Native 容器
完全免费的K8S学习平台:在线集群环境助力你的云原生之路!
完全免费的K8S学习平台:在线集群环境助力你的云原生之路!
55 1
|
4天前
|
JSON Kubernetes Linux
Linux环境签发CA证书和K8s需要的证书
Linux环境签发CA证书和K8s需要的证书
31 0
|
4天前
|
Kubernetes Java 测试技术
ChaosBlade常见问题之在K8s环境下演练cpu满载报错如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
34 0
|
4天前
|
关系型数据库 MySQL Linux
centos7.0环境下安装MySql_8.0.12
centos7.0环境下安装MySql_8.0.12
|
4天前
|
关系型数据库 MySQL 数据库
Mysql基础第五天,Mysql简介
Mysql基础第五天,Mysql简介
31 0
Mysql基础第五天,Mysql简介
|
4天前
|
关系型数据库 MySQL Linux
CentOS7环境下安装MySQL5.6
CentOS7环境下安装MySQL5.6
215 0
|
4天前
|
存储 数据采集 Kubernetes
一文详解K8s环境下Job类日志采集方案
本文介绍了K8s中Job和Cronjob控制器用于非常驻容器编排的场景,以及Job容器的特点:增删频率高、生命周期短和突发并发大。文章重点讨论了Job日志采集的关键考虑点,包括容器发现速度、开始采集延时和弹性支持,并对比了5种采集方案:DaemonSet采集、Sidecar采集、ECI采集、同容器采集和独立存储采集。对于短生命周期Job,建议使用Sidecar或ECI采集,通过调整参数确保数据完整性。对于突发大量Job,需要关注服务端资源限制和采集容器的资源调整。文章总结了不同场景下的推荐采集方案,并指出iLogtail和SLS未来可能的优化方向。
|
4天前
|
Kubernetes 关系型数据库 MySQL
MySQL在Kubernetes上的高可用实现
【5月更文挑战第1天】
|
4天前
|
存储 运维 Kubernetes
构建高效稳定的容器化运维环境:Docker与Kubernetes的协同
【4月更文挑战第14天】 在当今快速发展的云计算时代,容器技术以其轻量级、快速部署和易于管理的优势,成为现代应用交付的标准。本文将深入探讨如何通过Docker和Kubernetes的整合使用来构建一个高效且稳定的容器化运维环境。我们将分析Docker容器的基本概念,探索Kubernetes在容器编排方面的强大能力,以及两者结合所带来的益处。文章还将讨论在实际部署中可能遇到的挑战,并提出相应的解决方案。

推荐镜像

更多