如何为kubernetes提供ceph类型的动态存储卷

Posted Wise2C

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何为kubernetes提供ceph类型的动态存储卷相关的知识,希望对你有一定的参考价值。


本文针对在kubernetes中集成ceph并提供动态存储卷的流程做一个介绍。由于ceph安装比较麻烦,本文主要以docker形式安装ceph模块。动态存储卷的概念就不多介绍了,不了解的可以参考kubernetes官网。使用的同学们需要注意kubernetes版本。kubernetes一直在更新中,不同版本的volume可能有区别,本文环境是基于kubernetes 1.8。


注:假设我们当前的kubernetes环境的node节点包含了(dev-8,dev-9,dev-10)


如何为kubernetes提供ceph类型的动态存储卷

ceph安装

如何为kubernetes提供ceph类型的动态存储卷


docker形式启动ceph服务


docker run -d --net=host -v /etc/ceph:/etc/ceph -e MON_IP=192.168.1.189 -e CEPH_PUBLIC_NETWORK=192.168.1.0/24 ceph/demo ceph


验证ceph是否正确安装


  • 验证方式1 由于在启动容器的时候已经把容器里的目录挂载到了node节点上。所以直接在docker所在node上执行rados lspools即可。


rados lspools rbd cephfs_data

cephfs_metadata

.rgw.root

default.rgw.control

default.rgw.data.root

default.rgw.gc

default.rgw.lc

default.rgw.log


  • 验证方式2 没有做volume的情况下可以进入容器执行上述命令


1. docker ps | grep ceph

22216cb99087  ceph/demo  "/entrypoint.sh ceph" 27 minutes ago  Up 27 minutes stoic_hugle


2. docker exec -it 22216cb99087 /bin/bash


3. rados lspools

rbd cephfs_data cephfs_metadata

.rgw.root

default.rgw.control

default.rgw.data.root

default.rgw.gcdefault.rgw.lc

default.rgw.log


新建rbd pool


为了后面测试使用我们提前创建一个rbd pool(这里仅用于测试,较详细的ceph操作请移步ceph文档


ceph osd pool create kube 100 100


add ceph auth


client.kube mon 'allow r' osd 'allow rwx pool=kube'


//
查看刚刚addceph auth,并做base64
ceph auth get-key client.kube | base64


输出
:

QVFCcjNpQmI5QmliSWhBQUtqcDRGYW5aem9YN1RXQXZFQndSbXc9PQ==


拷贝ceph相关文件到各node节点


由于kubernetes运行的pod可能存在于k8s任意节点,为了让k8s的各个节点都能正常与ceph通信,需要将ceph的相关目录拷贝的每个kubernetes node节点。(上文中提到了ceph的挂载目录,挂载目录包含了ceph的相关配置和可连接ceph的可执行文件)。假设当前所在节点为dev-10


scp -r /etc/ceph dev-9:/etc

scp -r /etc/ceph dev-8:/etc


拷贝完毕请登录到各个node执行 rados lspools 命令看当前node是否能正常连接到ceph。到目前为止ceph的相关准备工作已经完毕了。接下来继续kubernetes相关工作。


如何为kubernetes提供ceph类型的动态存储卷

k8s中的使用

如何为kubernetes提供ceph类型的动态存储卷


下面主要介绍基于rbac模式的动态存储卷。如果用户觉得rbac模式麻烦,也可以采用把kubernetes admin.conf挂载到provisioner的相应目录,这样provisioner就有任意操作kubernetes集群的权限了。


  • rbac模型定义

  • secrets定义

  • storageclass定义

  • 测试pvc


rbac模型定义


1.定义clusterrole.yaml


kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1beta1 metadata:  name: rbd-provisioner rules:  - apiGroups: [""]    resources: ["persistentvolumes"]    verbs: ["get", "list", "watch", "create", "delete"]  - apiGroups: [""]    resources: ["persistentvolumeclaims"]    verbs: ["get", "list", "watch", "update"]  - apiGroups: ["storage.k8s.io"]    resources: ["storageclasses"]    verbs: ["get", "list", "watch"]  - apiGroups: [""]    resources: ["events"]    verbs: ["list", "watch", "create", "update", "patch"]  - apiGroups: [""]    resources: ["secrets"]    verbs: ["get"]


2.定义clusterrolebinding.yaml


kind: ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1beta1

metadata:

 name: rbd-provisioner

subjects:

 - kind: ServiceAccount

   name: rbd-provisioner

   namespace: default

roleRef:

 kind: ClusterRole

 name: rbd-provisioner

 apiGroup: rbac.authorization.k8s.io


3.定义serviceaccount.yaml


apiVersion: v1

kind: ServiceAccount

metadata:

 name: rbd-provisioner


4.部署定义rbd类型的provisioner


apiVersion: extensions/v1beta1

kind: Deploy

mentmetadata:

 name: rbd-provisioner

spec:

 replicas: 1

 strategy:

   type: Recreate

template:

   metadata:  

   labels:    

    app: rbd-provisioner

   spec:  

   containers:

     - name: rbd-provisioner  

       image: registry.cn-hangzhou.aliyuncs.com/mojo/rbd-provisioner  

       env:

       - name: PROVISIONER_NAME  

         value: ceph.com/rbd

     serviceAccount: rbd-provisioner


为了方便镜像下载registry.cn-hangzhou.aliyuncs.com/mojo/rbd-provisioner 是我基于rbd ceph源码构建的docker镜像,并放于阿里云镜像仓库管理中心。


基于上面的步骤我大概做一个解释。上面定义了具备对整个系统的pv、pvc都有操作权限的clusterrole,并把clusterrole和指定的serviceaccount做了binding(就是上面的clusterrolebinding.yaml)。接着创建对应的serviceaccount.yaml,部署使用对应serviceaccount的rbd provisioner(即deployment.yaml)。这样,provisioner就具备对整个系统的pv、pvc操作权限了。


测试


1.定义secrets.yaml,secrets定义了一些具备操作ceph的ceph auth。provisioner会拿着这些认证去调用ceph相关api


apiVersion: v1

kind: Secret

metadata:

 name: ceph-admin-secret

 namespace: kube-system

type: "kubernetes.io/rbd"

data:

 # ceph auth get-key client.admin | base64

 key: QVFBcDNpQmJ0RVpWRGhBQVdTMEovaVFUOHl4Q011dXlwRXg1OEE9PQ==

---

apiVersion: v1

kind: Secret

metadata:

 name: ceph-secret

type: "kubernetes.io/rbd"

data:

 # ceph auth add client.kube mon 'allow r' osd 'allow rwx pool=kube'

 # ceph auth get-key client.kube | base64

 key: QVFCcjNpQmI5QmliSWhBQUtqcDRGYW5aem9YN1RXQXZFQndSbXc9PQ==


2.定义storageclass.yaml, storageclass主要描述了ceph相关信息,让provisinor知道到那个地方使用什么auth去调用ceph api。


kind: StorageClass

apiVersion: storage.k8s.io/v1

metadata:

 name: rbd

provisioner: ceph.com/rbd

parameters:

 monitors: 192.168.1.189:6789

 pool: kube  adminId: admin

 adminSecretNamespace: kube-system

 adminSecretName: ceph-admin-secret

 userId: kube

 userSecretName: ceph-secret

 imageFormat: "2"

 imageFeatures: layering



创建测试pvc


kind: PersistentVolumeClaim

apiVersion: v1

metadata:

 name: rbd-claim1

spec:

 accessModes:

   - ReadWriteOnce

 storageClassName: rbd

 resources:  

  requests:  

    storage: 1Gi


查看pvc状态


kubectl get pvc NAME         STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE rbd-claim1   Bound     pvc-b0327152-6ee9-11e8-afe2-00163e0f7d95   1Gi        RWO            rbd                   5h


到此为止整个流程已经操作完毕,如大家操作过程中遇到什么问题欢迎留言!


欢迎关注【Wise2C】并回复【进群】,睿云小助手拉您进入【Docker企业落地实践群】更多技术讨论在群里进行!


参考:

https://github.com/kubernetes-incubator/external-storage/tree/master/ceph/rbd



END

如何为kubernetes提供ceph类型的动态存储卷



关于Wise2C睿云智合


深圳睿云智合科技有限公司成立于2012年,总部位于深圳,并分别在成都、深圳设立了研发中心,北京、上海设立了分支机构,核心骨干人员全部为来自金融、科技行业知名企业资深业务专家、技术专家。早期专注于为中国金融保险等大型企业提供创新技术、电子商务、CRM等领域专业咨询服务。


自2016年始,在率先将容器技术引进到中国保险行业客户后,公司组建了专业的容器技术产品研发和实施服务团队,旨在帮助中国金融行业客户将容器创新技术应用于企业信息技术支持业务发展的基础能力改善与提升,成为中国金融保险行业容器技术服务领导品牌。


此外,凭借多年来在呼叫中心领域的业务经验与技术积累,睿云智合率先在业界推出基于开源软交换平台FreeSwitch的微服务架构多媒体数字化业务平台,将语音、视频、webchat、微信、微博等多种客户接触渠道集成,实现客户统一接入、精准识别、智能路由的CRM策略,并以容器化治理来支持平台的全应用生命周期管理,显著提升了数字化业务处理的灵活、高效、弹性、稳定等特性,为帮助传统企业向“以客户为中心”的数字化业务转型提供完美的一站式整体解决方案。


客户&合作伙伴

如何为kubernetes提供ceph类型的动态存储卷


如何为kubernetes提供ceph类型的动态存储卷

推荐阅读





请大家关注【Wise2C】并回复【进群】,睿云小助手会第一时间拉你进入【 Docker企业落地实践群】,我们分享的各个企业案例项目的技术专家与用户代表,正在敬候您的光临!

若需要了解更多有关Wise系列PaaS产品的详情,请与我们的市场团队联系:contact@wise2c.com



微信:Wise2C

官网:wise2c.com

以上是关于如何为kubernetes提供ceph类型的动态存储卷的主要内容,如果未能解决你的问题,请参考以下文章

Rook:Kubernetes上提供Kubernetes云原生本地持久存储

Kubernetes存储:Ceph架构,部署和使用

Kubernetes存储:Ceph架构,部署和使用

Kubernetes存储:Ceph架构,部署和使用

kubernetes对接NFS动态存储

如何为 UILabel 设置“粗体”动态字体类型?