开发者社区> blackpiglet> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 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。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何在Kubernetes集群动态使用 NAS 持久卷
介绍: 本文介绍的动态生成NAS存储卷的方案:在一个已有文件系统上,自动生成一个目录,这个目录定义为目标存储卷; 镜像地址:registry.cn-hangzhou.aliyuncs.com/acs/alicloud-nas-controller:v1.11.5.4-433631d-aliyun 默认生成资源:生成的PV名字为:pvc-${pvc-uid}生成目录的名字:namespace-pvcname-pvname 可以再pvc的annotations中如下声明,自定义名字:生成的pv、目录名字为下面定义的名字。
7062 0
在Kubernetes集群中通过LocalVolume Provisioner使用本地盘
介绍 阿里云在部分ECS类型中提供了本地盘配置,本地盘具有低时延、高随机IOPS、高吞吐量和高性价比的优势,在一些对性能要求很高的应用中有很大优势。 在Kubernetes系统中使用本地盘可以通过HostPath、LocalVolume等类型的PV使用: HostPath: 卷本身不带有调度信息,如果想对每个pod固定在某个节点上,就需要对pod配置nodeSelector等调度信息; LocalVolume: 卷本身包含了调度信息,使用这个卷的pod会被固定在特定的节点上,这样可以很好的保证数据的连续性。
2959 0
Kubernetes集群支持VPC多路由表
背景 Kubernetes通过CloudProvider(又称CCM)组件在VPC路由表中添加合适的路由来打通集群中Pod之间的网络连接。近期VPC发布了对多个路由表的支持能力,让用户可以自行选择ECS关联哪些路由表,为用户提供了丰富的路由管理能力。
1369 0
二进制包20分钟快速安装部署 Kubernetes v1.14.0 集群
二进制包20分钟快速部署 Kubernetes v1.14.0 集群 一 环境 |操作系统|Docker版本|Kubernetes版本|Etcd版本|Flannel版本||:-:|:-:|:-:|:-:|:-:||CentOS Linux release 7.
1742 0
kubernetes集群架构解读
1. kubernetes总架构图 2. kubernetes 各组件介绍 2.1 Master 节点 Master是kubernetes的大脑,运行的Deamon 服务包括kube-apiserver、kube-scheduler、kube-contronller- manager、etcd和pod网络 2.1.1 各组件介绍 API Server(kube-apiserver) API Server提供HTTP/HTTPS RESTful API,即Kubernetes API。
1978 0
容器服务kubernetes federation v2实践一:基于External-DNS的多集群Ingress DNS实践
概要 External-DNS提供了编程方式管理Kubernetes Ingress资源的DNS的功能,方便用户从Ingress管理DNS解析记录。而在kubernetes federation v2环境中,使用External-DNS可以快速的管理多个联邦集群的Ingress DNS解析,降低用户的操作成本。
2731 0
容器服务kubernetes federation v2实践二:基于FederatedSecrets管理多集群TLS证书
概要 随着网络安全越来越重要,越来越多的网站都使用HTTPS/TLS来加强访问安全。在federation v2联邦集群中,可以使用FederatedSecrets来管理多个k8s集群的证书,下面简单介绍在阿里云容器服务下使用FederatedSecrets管理TLS证书。
1019 0
容器服务kubernetes federation v2实践三:基于ReplicaSchedulingPreference的集群调度
概要 服务部署在多个k8s集群中,往往希望服务跨多个集群进行调度设置。在federation v2中,可以通过ReplicaSchedulingPreference来满足联邦集群的调度设置。
1424 0
容器服务kubernetes federation v2实践四:基于External-DNS的多集群Service DNS实践
External-DNS提供了编程方式管理Kubernetes Service资源的DNS的功能,External-DNS会监听LoadBalancer类型的Service,然后与云厂商打通,按照可用区、region和全局三个维度生成独自的域名解析记录,便于服务间调用引导流量。
10227 0
Kubernetes简介和安装
Kubernetes简介和安装
0 0
+关注
blackpiglet
云原生技术爱好者。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Kubernetes在大规模场景下的service性能优化实战
立即下载
Docker镜像原理和最佳实践
立即下载
搭建4层电商项目架构,实战连接MySQL
立即下载