ceph rbd mysql_如何在 Kubernetes 环境中搭建 MySQL(三):使用 PVC 挂接 RBD
MySQL in Kubernetes
MySQL 中的数据是关键信息,是有状态的,不可能随着 MySQL pod 的销毁而被销毁,所以数据必须要外接到一个可靠的存储系统中,目前已经有了 Ceph 系统,所以这里就只考虑如何将 Ceph 作为外部存储的情况,毕竟没有条件去尝试其他存储方案。
本文从最简单的 k8s 连接 ceph 方式开始, 并过渡到 PV(Persistent Volume) 和 PVC(Persistent Volume Claim)方式,本系列文章后面还会介绍使用 StorageClass 的动态连接方式。
1. 概念介绍和环境信息
1.1 PV(Persistent Volume)简介:
PV 是集群提供的一种存储资源,是实际可用的磁盘。和挂 PV 的 Pod 有着独立的生命周期,Pod 销毁后,PV 可以继续存在,以此来实现持久化存储。
1.2 PVC(Persistent Volume Claim)简介:
PVC 是用户使用存储资源的声明,和 Pod 这一概念类似,Pod 消耗的是 Node 上的计算资源,PVC 消耗的是 PV 资源。
1.3 环境信息
本文在 Ubuntu 物理机环境下,使用 kubeadm 部署 Kubernetes,连接已经部署好的 Ceph 集群,后文会对部署过程做详细说明。
操作系统:Ubuntu 16.04
Ceph:Luminous 12.2
Kubernetes:v1.10.2
Docker:v1.13.1
2. 使用 keyring 文件连接 RBD
首先让我们用最基础的方式连接 Ceph,以下就是 yaml 文件,简要介绍一下关键字段:
monitors: 连接的 Ceph monitor 地址,注意要更改成环境中对应的 Ceph monitor 地址。
keyring:Ceph 集群认证所需的密钥,这里以本地文件的形式挂载进去。这个文件的内容就是 ceph 集群里 /etc/ceph/ceph.client.admin.keyring 文件的内容。
imageformat:建议使用 2,1 是更老的格式。
imagefeatures:磁盘文件的特性,Ubuntu 16.04 和 CentOS7.4 的内核版本目前支持的特性较少,建议只填写 layering,如果要使用其他特性,需升级内核版本。
pool:Ceph 中的 pool。
image:Ceph RBD 创建的镜像名称。
$ cat mysql-deployment.yaml
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: 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: rbdpd
mountPath: /var/lib/mysql
volumes:
- name: rbdpd
rbd:
monitors:
- '192.168.56.106:6789'
pool: rbd
image: foo
fsType: ext4
readOnly: false
user: admin
imageformat: "2"
imagefeatures: "layering"
keyring: /etc/ceph/keyring
在执行该 yaml 文件之前,我们需要先在 RBD 中创建名为 foo 的镜像,不然 pod 无法创建成功。
# rbd create foo --size 2048M
# rbd list
foo
# rbd feature disable foo exclusive-lock, object-map, fast-diff, deep-flatten
此时再执行 $ kubectl create -f mysql-deployment.yaml 就可以了。
3. 使用 secret 连接 RBD
直接挂载密钥文件既不正规,也不安全,我们可以使用 Kubernetes 的 secret 来加密密钥文件。
先获取加密后的密钥字符串:
$ ceph auth get-key client.admin | base64
将 填写进 ceph-secret.yaml 文件中的 key 字段:
$ cat ceph-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: ceph-secret
type: "kubernetes.io/rbd"
data:
key:
创建该 secret:
kubectl create -f ceph-secret.yaml
最后修改 mysql-deployment.yaml 对应字段:
$ cat mysql-deployment.yaml
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: 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: rbdpd
mountPath: /var/lib/mysql
volumes:
- name: rbdpd
rbd:
monitors:
- '192.168.56.106:6789'
pool: rbd
image: foo
fsType: ext4
readOnly: false
user: admin
imageformat: "2"
imagefeatures: "layering"
secretRef:
name: ceph-secret
$ kubectl apply -f mysql-deploy.yaml
4. 使用 PV 和 PVC 连接 RBD
好,最后就是使用 PVC 和 PV 挂载 RBD 镜像了。
先是 PV 文件:
$ cat volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
claimRef:
name: mysql-pvc
namespace: default
persistentVolumeReclaimPolicy: Recycle
rbd:
monitors:
- 192.168.56.106:6789
pool: rbd
image: foo
user: admin
fsType: ext4
readOnly: false
secretRef:
name: ceph-secret
然后是 PVC:
$ cat volume-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
最后挂载在 MySQL 上
$ cat mysql-deployment.yaml
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: 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
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pvc
到这里 MySQL 就成功的使用 ceph RBD 作为持久化存储方案,部署在了 k8s 环境里,不过这还是很初级的方案,毕竟在挂载之前还需要手动在 RBD 中创建镜像,太不 cloud native 了,接下来的文章将演示如何动态的使用 RBD 镜像。
5. 参考文档
ceph rbd mysql_如何在 Kubernetes 环境中搭建 MySQL(三):使用 PVC 挂接 RBD相关推荐
- k8s mysql 挂载_如何在 Kubernetes 环境中搭建 MySQL(四):使用 StorageClass 挂接 RBD...
MySQL + Kubernetes 1. 简介 在系列文章的第三篇中,讲到了如何使用 PV 和 PVC 挂载 RBD 上建立好的块存储镜像,但这还是不足以满足 cloud native 环境下的需求 ...
- ubuntu安装mysql_如何在Ubuntu14.04中安装mysql
原标题:如何在Ubuntu14.04中安装mysql 接触过MySQL的小伙伴们都知道,在Windows下安装MySQL是一件让人十分头大的事情,但是在Ubuntu等其他Linux系统中安装MySQL ...
- (23/24) webpack实战技巧:如何在webpack环境中使用Json
(23/24) webpack实战技巧:如何在webpack环境中使用Json 在webpack1或者webpack2版本中,若想在webpack环境中加载Json文件,则需要加载一个json-loa ...
- linux python开发环境_如何在Linux系统中搭建Python编程环境
1 在大多数的Linux系统中,基本上都默认安装了Python,也就是说,在Linux的系统中基本上是不需要安装什么软件,就可以使用Python. 下面以ubuntu操作系统为例,看看如何在Linux ...
- 如何在DOCKER环境中使用DB2
如何在DOCKER环境中使用Db2 前言 此问的目的是帮助用户能够在docker的环境中学习Db2,前提条件的你的服务器可以访问互联网,否则无法下载Db2镜像.Docker环境中学习Db2的优势是省去 ...
- vgpu服务器显卡性能,如何在vGPU环境中优化GPU性能
大家好, 我收到了关于如何在vGPU环境中优化GPU性能的两个请求,并认为这将是我们的GRID论坛上的一个很好的线程,每个人都可以在他们如何微调vGPU环境方面添加他们的经验. 让我从一些公共资源开始 ...
- 如何在Linux环境中使用USB存储器(转)
如何在Linux环境中使用USB存储器(转) 如何在Linux环境中使用USB接口的存储设备?这是各大电脑论坛上出现得比较多的一个问题,同此可见这也是摆在许多电脑玩家面前的一道难题.本文就为您提供一套 ...
- ANSYS mechanical如何在Workbench环境中使用高性能计算
ANSYS mechanical属于隐式结构有限元分析求解器,一般完成一个有限元分析过程需要前处理.求解和后处理三个步骤.前处理一般在图形工作站上完成,有限元求解可在工作站.集群及SMP 服务器上进行 ...
- 如何在 Windows 10 中搭建 Node.js 环境?
2019独角兽企业重金招聘Python工程师标准>>> [编者按]本文作者为 Szabolcs Kurdi,主要通过生动的实例介绍如何在 Windows 10 中搭建 Node.js ...
最新文章
- Arm架构CPU服务器
- C语言字符数组与字符串的使用及加结束符‘\0‘的问题
- 100+人的企业IP怎么进行安全配置 ?
- 学习python:练习3.随机生成200个序列号存入文件
- MySQL【环境搭建 03】腾讯云 Linux 环境踩坑 loading shared libraries: libnuma.so.1 + quit without updating PID file
- 解决android中出现的无法加载library的问题
- 广东高校计算机专业,广东高校计算机专业就业率最低 专业设置忌盲目
- 中序线索树和后序线索树
- 照片转3d模型_三星使用AI将照片转换为3D模型
- ONNX系列三 --- 使用ONNX使PyTorch AI模型可移植
- Android view 小总结
- 大学生影视主题网页制作 腾龙电影网页设计模板 学生静态网页作业成品 dreamweaver电影HTML网站制作
- 山东理工大学计算机基础考试试题,山东理工大学计算机基础试题08
- matlab 多项式输入,MATLAB多项式
- 程序员必须要熟知的英文单词--更新中
- mysql索引失效的常见9种原因详解
- 什么是CC攻击,CC攻击的防御方式有哪些
- 使用CSS实现图片叠加效果
- 六度分离(floyd算法,SPFA算法,最短路—Dijkstra算法)
- Dbeaver Phoenix 各种报错