Openshift中运行Mysql数据库

概述

在容器中跑有状态的应用会碰到很多头疼问题,今天我们就来说说mysql作为有状态的服务。

容器中挂载存储需要考虑两种场景,一种是创建一个干净的pvc,然后挂载到容器中,容器开始往存储写入数据;一种是存储中已经存在数据了,容器需要使用这个数据并继续写入。

  • 第一种场景可以采用动态存储storageclass,也可以采用静态存储pv。

  • 第二种场景只能采用静态存储pv,因为需要在ceph pool中创建指定的image来给容器用。

对于mysql数据库就是第二种场景,我们需要把mysql的数据存储/var/lib/mysql从之前的物理机上迁移到ceph存储,然后再挂载到容器里面使用。

搭建ceph集群

请参照之前的文章

创建pool

请参照之前的文章

在pool下创建image

rbd create  -p  --size 1024M --image-format 2

将镜像映射进内核,生成rbd设备

rbd map  --pool 

mount到ceph monitor节点的一个目录下

mount /dev/rbd0 /mnt/test

把/var/lib/mysql目录打包,然后传到刚刚创建的image里面

tar czf mysql.tar.gz . -C /var/lib/mysql/
scp mysql.tar.gz user@targart_ip
tar zxf mysql.tar.gz 
rm -f mysql.tar.gz

把/mnt/test改成容器中需要的用户,组和权限

chown -R mysql.mysql /mnt/test
chmod -R 755 /mnt/test

在openshift中创建pv

pv.yaml

apiVersion: v1

kind: PersistentVolume

metadata:

name: mysql

spec:

capacity:

storage: 1Gi

accessModes:

- ReadWriteOnce

rbd:

monitors:

- 10.131.31.19:6789,10.131.31.21:6789,10.131.31.22:6789

pool: kube

image: mysql

user: admin

secretRef:

  name: ceph-admin-secret

  namespace: kube-system

fsType: ext4

imageFormat: "2"

imageFeatures: "layering"

readOnly: false

persistentVolumeReclaimPolicy: Recycle

创建pvc, 大小1G

pvc.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mysql
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  volumeName: mysql

指定volumeName为pv的name,可以避免创建的pv被其他pvc绑定了

pv是存储资源,当pv创建好后,pv会被已经存在的pvc绑定,一旦绑定这个pv就不能被其他pvc使用,除非那个pvc被删除了,那时,pv会变成Released状态

当指定的pvc与pv绑定成功后,在DeploymentConfig中添加pvc

volumeMounts:
- mountPath: /var/lib/mysql
name: mysql
 
volumes:
- name: mysql
persistentVolumeClaim:
claimName: mysql

10.部署容器,并登陆到容器中查看存储挂载情况

oc exec -it xxxx /bin/bash

更多容器技术请关注公众号:
Openshift中运行Mysql数据库_第1张图片

你可能感兴趣的:(kubernetes,openshift)