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

栏目: 服务器 · 发布时间: 5年前

内容简介:本文针对在kubernetes中集成ceph并提供动态存储卷的流程做一个介绍。由于ceph安装比较麻烦,本文主要以docker形式安装ceph模块。动态存储卷的概念就不多介绍了,不了解的可以参考kubernetes官网。使用的同学们需要注意kubernetes版本。kubernetes一直在更新中,不同版本的volume可能有区别,本文环境是基于kubernetes 1.8。注:假设我们当前的kubernetes环境的node节点包含了(dev-8,dev-9,dev-10)

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

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

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

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
  1. docker exec -it 22216cb99087 /bin/bash
  2. 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'





// 查看刚刚add的ceph 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相关工作。

k8s中的使用

下面主要介绍基于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

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

参考:

https://github.com/kubernetes- ... h/rbd

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PHP基础教程

PHP基础教程

厄尔曼 / 贾菡、刘彦博 / 人民邮电出版社 / 2010-1 / 49.00元

《PHP基础教程(第3版)》非常通俗易懂地向初学者介绍了PHP语言的基本概念、使用方法和注意事项。全书通过丰富的示例,引领读者逐步掌握这门流行的Web开发语言,使读者能够上手亲自编写适用于常用场景的PHP脚本。《PHP基础教程(第3版)》适合有基本的HTML经验的读者阅读。 点击链接进入新版: Web开发系列:PHP基础教程(第4版)一起来看看 《PHP基础教程》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试