概述
接入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