MySQL + Kubernetes

1. 简介

在系列文章的第三篇中,讲到了如何使用 PV 和 PVC 挂载 RBD 上建立好的块存储镜像,但这还是不足以满足 cloud native 环境下的需求,试想如果部署一个应用,需要申请十个 RBD images,PV 和 PVC 的方式下,就需要先手动在 ceph 集群上部署十个 image,这在实际操作时,是完全不可接受的,就算用 Webhook 机制调用脚本自动执行,也会存在一些问题,比如何时释放 RBD image,而且这样也增加了系统的复杂度,更易出错,所以最好是有 Kubernetes 的原生的解决方案。而 Kubernetes 确实提供这样的解决方案,就是本文要谈到的 StorageClass。

我对 StorageClass 的理解是: 对系统提供的存储能力进行抽象,并使用客户端与存储系统进行交互,来达到动态获取存储能力的目的。也就是说,客户端是要和 StorageClass 配套使用的,用哪种类型的存储,就需要启动对应的客户端,RBD 的客户端叫做 rbd-provisioner。

2. 配置 StorageClass

首先需要获取 ceph 的密钥:$ ceph auth get-key client.admin | base64

QVFCTnFzMWFuMDNoRGhBQUVrMjlXNlZzYnN6Yk13bWZvVmt0bkE9PQ==

然后创建名为 ceph-secret 的 secret,后面的 StorageClass 会用到。$ cat ceph-secret.yaml

apiVersion: v1

kind: Secret

metadata:

name: ceph-secrettype: "kubernetes.io/rbd"data:

key: QVFCTnFzMWFuMDNoRGhBQUVrMjlXNlZzYnN6Yk13bWZvVmt0bkE9PQ==

接下来看一下 StorageClass 配置文件的实例:$ cat storage-class.yaml kind: StorageClass

apiVersion: storage.k8s.io/v1

metadata:

name: rbd

provisioner: ceph.com/rbd

parameters:

monitors: 192.168.250.91:6789

adminId: admin

adminSecretName: ceph-secret

adminSecretNamespace: default

pool: rbd

userId: admin

userSecretName: ceph-secret

fsType: ext4

imageFormat: "2"

imageFeatures: "layering"

大部分的内容和 PV 里的配置是一样的,那么就挑几个之前没有介绍过的参数说一下:provisioner: 就是之前所说的客户端,官方文档中使用的 provisioner 是默认的 kubernetes.io/rbd,注意要改成 ceph.com/rbd,kubernetes.io/rbd 是无法正常使用的,原因是 kubernetes.io/rbd 会在 kube-controller-manager 镜像中查找 RBD 可执行文件,但默认的 kube-controller-manager 镜像是没有的,需要自己来定制镜像,具体细节可参考该链接:Error creating rbd image: executable file not found in $PATH。改为 "ceph.com/rbd" 后,使用的是外部的 RBD 可执行文件,具体的做法会在下一节中介绍。

adminId | userId:连接 ceph 的权限,admin 已存在,如果有需要创建其他用户,可以在 Ceph 集群中创建,并赋予对应的权限,简单使用的话,admin 也足够了。

adminSecretName:Ceph admin 所使用的密钥,复用之前创建的即可。

adminSecret。namespace:密钥所在的命名空间,默认是 default,如果修改为其他的话,需要修改 ceph-secret.yaml,增加 namespace字段:namespace-name。

创建 StorageClass:$ kubectl create -f storage-class.yamlstorageclass "rbd" created

$ kubectl get storageclass

NAME      TYPE

rbd       ceph.io/rbd

3. 配置 rbd-provisioner

首先要下载 kubernetes-incubator git 库,RBD 的内容存储在 external-storage/ceph/rbd/deploy/ 目录下。$ git clone https://github.com/kubernetes-incubator/external-storage.git

$ tree external-storage/ceph/rbd/deploy/

├── README.md

├── non-rbac

│   └── deployment.yaml

└── rbac

├── clusterrole.yaml

├── clusterrolebinding.yaml

├── deployment.yaml

└── serviceaccount.yaml

分为 RBAC 和 无 RBAC 两种部署方式,RBAC 就是基于角色的权限控制,kubeadm 搭建的 Kubernetes 集群默认开启了 RBAC,所以本文选用 RBAC 方式。external-storage 中提供的方式是部署在 default namespace 中的,如果要部署在其他 namespace 中,需要做对应的修改。

接下来就把 RBD provisioner 启动起来吧:$ kubectl create -f external-storage/ceph/rbd/deploy/rbac/

clusterrole "rbd-provisioner" created

clusterrolebinding "rbd-provisioner" created

deployment "rbd-provisioner" created

serviceaccount "rbd-provisioner" create

$ kubectl get pod --selector app=rbd-provisioner

NAME                               READY     STATUS    RESTARTS   AGE

rbd-provisioner-6f4f7fcf5f-4gdmj   1/1       Running   0          6m

4. 挂载 StorageClass

一切就绪,接下来就试试能否动态的获取 RBD 存储空间吧。

先创建 PVC,看看 PVC 能否处于 bound 状态。$ cat dynamic-volume-claim.yamlapiVersion: v1kind: PersistentVolumeClaimmetadata:

name: mysql-dynamic-pvcspec:

accessModes:

- ReadWriteOnce  storageClassName: rbd  resources:

requests:

storage: 1Gi

$ kubectl create -f dynamic-volume-claim.yaml

NAME                 STATUS    VOLUME                                     CAPACITY   ACCESS MODES         STORAGECLASS    AGE

mysql-dynamic-pvc    Bound     pvc-65ddafb2-6f9d-11e8-b243-d09466144cbf   1Gi        RWO                  rbd             5d

接下来再将该 PVC 挂载到 MySQL 实例上。apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2kind: Deployment

metadata:

name: mysql

spec:

selector:

matchLabels:

app: mysql

strategy:    type: Recreate

template:

metadata:

labels:

app: mysql

spec:

terminationGracePeriodSeconds: 10

containers:

- name: mysql

image: mysql:5.7

env:

- name: MYSQL_ROOT_PASSWORD

valueFrom:

secretKeyRef:

name: mysql-secret

key: ROOT_PASSWORD

ports:

- containerPort: 3306

name: mysql

volumeMounts:

- name: mysql-persistent-storage

mountPath: /var/lib/mysql

subPath: mysql

readOnly: false

volumes:

- name: mysql-persistent-storage

persistentVolumeClaim:

claimName: mysql-dynamic-pvc

至此完成 RBD 的动态挂载,下一篇文章来谈一谈如何使用 StatefulSet 部署主从同步的 MySQL 集群。

作者:blackpiglet

链接:https://www.jianshu.com/p/fb6b521c6438

k8s mysql 挂载_如何在 Kubernetes 环境中搭建 MySQL(四):使用 StorageClass 挂接 RBD...相关推荐

  1. ceph rbd mysql_如何在 Kubernetes 环境中搭建 MySQL(三):使用 PVC 挂接 RBD

    MySQL in Kubernetes MySQL 中的数据是关键信息,是有状态的,不可能随着 MySQL pod 的销毁而被销毁,所以数据必须要外接到一个可靠的存储系统中,目前已经有了 Ceph 系 ...

  2. 怎样在dos窗口中启动mysql服务器_如何在dos命令中启动mysql或sql server 服务器的一些操作...

    ========================dos命令启动mysql或者sql srever 的步骤================= 一.dos命令启动mysql 1.进入dos命令窗口 2.启 ...

  3. 2008 mysql 本地安全_如何在Linux系统中建立mysql的本地安全机制?

    如何在Linux系统中对MySQL进行本地的安全机制?今天我们将给大家介绍下具体的操作方法. local-infile=0#关闭远程连接,即3306端口.这是LinuxMySQL的默认监听端口.由于此 ...

  4. linux python开发环境_如何在Linux系统中搭建Python编程环境

    1 在大多数的Linux系统中,基本上都默认安装了Python,也就是说,在Linux的系统中基本上是不需要安装什么软件,就可以使用Python. 下面以ubuntu操作系统为例,看看如何在Linux ...

  5. mye连接mysql数据库_MySQL_如何在Java程序中访问mysql数据库中的数据并进行简单的操作,在上篇文章给大家介绍了Myeclip - phpStudy...

    如何在Java程序中访问mysql数据库中的数据并进行简单的操作 在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据 ...

  6. weblogic中数据源_如何在WebLogic Server中创建MySQL数据源

    weblogic中数据源 使用应用程序服务器的一件很酷的事情是,它允许您在应用程序外部创建DataSource,并且可以与线程池和事务管理器等一起管理它.对于WebLogic Server,它附带了许 ...

  7. mac os mysql 命令_如何在Mac OS上安装“mysql”命令?

    通常命令是: /usr/local/mysql/bin/mysql -u root -p 这将提示您输入root密码(除非您更改密码,否则可能为空) 您还可以使用: /usr/local/mysql/ ...

  8. python框架 mysql数据库_在Python的框架中为MySQL实现restful接口的教程

    最近在做游戏服务分层的时候,一直想把mysql的访问独立成一个单独的服务DBGate,原因如下: 请求收拢到DBGate,可以使DBGate变为无状态的,方便横向扩展 当请求量或者存储量变大时,mys ...

  9. poco mysql 库_支持POCO C库中的MySQL时间戳

    POCO库支持MySQL DATE,TIME和DATETIME列,但不支持TIMESTAMP.从TIMESTAMP列中选择值会引发"未知字段类型"异常,因为"Poco / ...

最新文章

  1. hadoop HDFS常用文件操作命令
  2. StorSimple 简介
  3. P3302 SDOI2013森林
  4. linux之RAID知识总结
  5. 标签select选择框通过js来选择默认值;代码示例
  6. linux rm 文件找回_Linux 中删除目录的多种方法
  7. python取出字典重复值_从字典中提取重复值
  8. win10电脑任务栏突然卡死解决办法
  9. ctc center-loss在字符识别形近字分类中的使用
  10. 全国企业信用信息公示系统
  11. c语言求100以内被7整除的最大自然数,编程,求100以内被7整除的最大自然数
  12. linux网速卡怎么办_手机信号差怎么办?
  13. centos8.2+Tesla T4搭建深度学习运行环境
  14. 我是如何看Vue源码的
  15. chrome设置android,在Android上从Chrome上打开位置设置活动
  16. 博客优化 搜索SEO优化 提高搜索量
  17. 如何从Mac到HomePod播放音频
  18. JS实现统计可供选择的任务分配方式总数
  19. 快速搭建Spring BlazeDS Integration框架环境
  20. 微信聊天记录数据提取并分析

热门文章

  1. FIAS互动分析系统
  2. ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理
  3. 自定义Paging分页
  4. 网页设计HTML和css(1)
  5. GOSSIP PROTOCOL(又被称为反熵Anti-Entropy, 一种弱一致性, 同步信息交换通信的协议)...
  6. 【第二十一讲】参数解析器
  7. 2011年系统架构师考试题详解
  8. 程序员一般都需要什么学历?就业前景如何?
  9. 二阶线性微分方程解的结构(齐次与非齐次)+ 常数变易法 | 高阶微分方程(二)
  10. layui数据表格显示序号