openshift对接ceph RBD存储

概述

接入ceph rbd存储前确保ceph存储已经搭建好,rbd块设备已经创建好,假设在rbd设备上创建了kube这个pool,在kube上创建了image,名称是openshift , 大小是500G ,用ext4文件格式格式化。

openshift集群的每个节点都要安装ceph客户端,因为只有装了客户端才能使用存储,container才能使用存储资源。

正文

在每台openshift机器上安装ceph客户端

确保ceph admin节点可以无密码ssh到openshift节点

登陆 ceph admin节点,给openshift节点安装ceph-common包

ceph-deploy install $node_hostname --common

或者

在openshift节点上创建/etc/yum.repos.d/ceph.repo

[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
priority=1

[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
priority=1
yum install ceph-common -y

把ceph admin节点上的ssh key拷贝到所有openshift节点上

同步keyring和ceph.conf到openshift节点

ceph-deploy admin $node_hostname

创建并运行storageclass和pvc

这里提供两种方式:一种是采用provisioner: kubernetes.io/rbd ,另一种是采用provisioner: ceph.com/rbd

provisioner: ceph.com/rbd 方式

登陆openshift的一台master节点,进入/data/app/ceph目录,创建以下yaml文件

ceph-secret.yaml

apiVersion: v1
kind: Secret
metadata:
name: ceph-admin-secret
namespace: kube-system
type: "kubernetes.io/rbd"
data:
key: xxxxxxxxxxxxx

ceph-storageclass.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ceph-storageclass
provisioner: ceph.com/rbd
parameters:
monitors: 10.131.31.xx:6789,10.131.31.xx:6789,10.131.31.xx:6789
pool: kube
adminId: admin 
adminSecretName: ceph-admin-secret 
adminSecretNamespace: kube-system
userId: admin
userSecretName: ceph-admin-secret 
userSecretNamespace: kube-system
fsType: ext4
imageFormat: "2"
imageFeatures: "layering"

ceph-pvc.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: ceph-claim
spec:
accessModes: 
- ReadWriteOnce
storageClassName: ceph-storageclass
resources:
requests:
storage: 400Gi

创建secret,storageclass,pvc对象

oc create -f ceph-secret.yaml

oc create -f ceph-storageclass.yaml

oc create -f ceph-pvc.yaml

这时pvc状态是pending ,在等待external provisioner创建一个volume.

创建external provisioner

git clone https://github.com/kubernetes-incubator/external-storage.git
NAMESPACE=kube-system # change this if you want to deploy it in another namespace
sed -r -i "s/namespace: [^ ]+/namespace: $NAMESPACE/g" external-storage/ceph/rbd/deploy/rbac/clusterrolebinding.yaml external-storage/ceph/rbd/deploy/rbac/rolebinding.yaml
oc create -f external-storage/ceph/rbd/deploy/rbac/

这时pvc 状态变为Bound,表明已经绑定存储成功。

provisioner: kubernetes.io/rbd 方式

其他yaml文件和上一种方式一样,只有ceph-storageclass.yaml中的provisioner修改为kubernetes.io/rbd ,不需要创建external provisioner .

docker-registry对接ceph存储

创建PVC

ceph-pvc.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: docker-images-storage
spec:
accessModes: 
- ReadWriteOnce
storageClassName: ceph-storageclass
resources:
requests:
storage: 500Gi
oc create -f ceph-pvc.yaml

登陆进入openshift

进入default项目,点击docker-registry,Actions, Edit YAML

找到volume段,修改为以下内容,注意claimName需要填写你创建的PVC名称

volumes:
  - name: registry-storage
persistentVolumeClaim:
claimName: docker-images-storage

修改完后保存,openshift会自动检测到修改并重新生成一个pod,pod正常会显示蓝色。

猜你喜欢

转载自blog.csdn.net/haohzhang/article/details/86579463