一、有一个ceph cluster,假设已经准备好了,文档网上一大堆

二、开始集成ceph和kuberntes

2.1 禁用rbd features

rbd image有4个 features,layering, exclusive-lock, object-map, fast-diff, deep-flatten
因为目前内核仅支持layering,修改默认配置
每个ceph node的/etc/ceph/ceph.conf 添加一行
rbd_default_features = 1
这样之后创建的image 只有这一个feature

验证方式:

  1. ceph --show-config|grep rbd|grep features
  2. rbd_default_features = 1

2.2 创建ceph-secret这个k8s secret对象,这个secret对象用于k8s volume插件访问ceph集群:

获取client.admin的keyring值,并用base64编码:

  1. # ceph auth get-key client.admin
  2. AQBRIaFYqWT8AhAAUtmJgeNFW/o1ylUzssQQhA==
  1. # echo "AQBRIaFYqWT8AhAAUtmJgeNFW/o1ylUzssQQhA=="|base64
  2. QVFCUklhRllxV1Q4QWhBQVV0bUpnZU5GVy9vMXlsVXpzc1FRaEE9PQo=

创建ceph-secret.yaml文件,data下的key字段值即为上面得到的编码值:

  1. apiVersion: v1
  2. kind: Secret
  3. metadata:
  4.   name: ceph-secret
  5. data:
  6.   key: QVFCUklhRllxV1Q4QWhBQVV0bUpnZU5GVy9vMXlsVXpzc1FRaEE9PQo=

创建ceph-secret:

  1. # kubectl create -f ceph-secret.yaml
    secret "ceph-secret" created
  2. # kubectl get secret
  3. NAME     TYPE    DATA      AGE
  4. ceph-secret  Opaque   1       2d
  5. default-token-5vt3n  kubernetes.io/service-account-token 3 106d

三、Kubernetes Persistent Volume和Persistent Volume Claim
概念:PV是集群的资源,PVC请求资源并检查资源是否可用
注意:以下操作设计到name的参数,一定要一致

3.1 创建disk image (以jdk保存到ceph举例)

  1. # rbd create jdk-image -s 1G
  2. # rbd info jdk-image
  3. rbd image jdk-image‘:
  4.         size 1024 MB in 256 objects
  5.         order 22 (4096 kB objects)
  6.         block_name_prefix: rbd_data.37642ae8944a
  7.         format: 2
  8.         features: layering
  9.         flags:

3.2 创建pv

创建mysql-hzb-pv.yaml:

方式一:
monitors: 就是ceph的mon,有几个写几个

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. name: mysql-hzb-pv
  5. spec:
  6. capacity:
  7. storage: 10Gi
  8. accessModes:
  9. - ReadWriteOnce
  10. rbd:
  11. monitors:
  12. - 172.16.60.41:6789
  13. - 172.16.60.42:6789
  14. - 172.16.60.43:6789
  15. pool: rbd
  16. image: mysql-hzb
  17. user: admin
  18. keyring: "/etc/ceph/ceph.client.admin.keyring"
  19. fsType: ext4
  20. readOnly: false
  21. persistentVolumeReclaimPolicy: Recycle

方式二(仍然使用之前创建的ceph-secret):

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. name: mysql-hzb-pv
  5. spec:
  6. capacity:
  7. storage: 10Gi
  8. accessModes:
  9. - ReadWriteOnce
  10. rbd:
  11. monitors:
  12. - 172.16.60.41:6789
  13. - 172.16.60.42:6789
  14. - 172.16.60.43:6789
  15. pool: rbd
  16. image: mysql-hzb
  17. user: admin
  18. secretRef:
  19. name: ceph-secret
  20. fsType: ext4
  21. readOnly: false
  22. persistentVolumeReclaimPolicy: Recycle

注意上面两种方式的红色部分的区别

执行创建操作:

  1. # kubectl create -f mysql-hzb-pv.yaml
    persistentvolume "mysql-hzb-pv" created
  2. #kubectl get pv
  3. NAME       CAPACITY    ACCESSMODES   RECLAIMPOLICY   STATUS       CLAIM       REASON    AGE
  4. mysql-hzb-pv    10Gi        RWO           Recycle         Available            default/mysql-hzb-pvc 34m

3.3 创建pvc
创建mysql-hzb-pvc.yaml

  1. kind: PersistentVolumeClaim
  2. apiVersion: v1
  3. metadata:
  4. name: mysql-hzb-pvc
  5. spec:
  6. accessModes:
  7. - ReadWriteOnce
  8. volumeName: mysql-hzb-pv
  9. resources:
  10. requests:
  11. storage: 10Gi

执行创建操作:

  1. # kubectl create -f mysql-hzb-pvc.yaml
    persistentvolumeclaim "mysql-hzb-pv" created
  2. # kubectl get pvc
  3. NAME      STATUS    VOLUME     CAPACITY   ACCESSMODES   AGE
  4. mysql-hzb-pvc    Bound     mysql-hzb-pv    10Gi     RWO        39s

3.4 创建挂载ceph rbd的pod:
创建 mysql-hzb-pod.yaml

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: ceph-mysql-hzb-pod
  5. spec:
  6. containers:
  7. - name: mysql-hzb
  8. image: 172.16.101.192/common/mysql:5.6
  9. env:
  10. - name: MYSQL_ROOT_PASSWORD
  11. value: "root"
  12. volumeMounts:
  13. - name: ceph-mysql-hzb-vl
  14. mountPath: /var/lib/mysql
  15. readOnly: false
  16. volumes:
  17. - name: ceph-mysql-hzb-vl
  18. persistentVolumeClaim:
  19. claimName: mysql-hzb-pvc

上面的两处红色的名字一定要一样

执行创建操作:

  1. kubectl create -f mysql-hzb-pod.yaml

ceph rbd 持久化 这里描述下:

1、稳定性在于ceph
2、只能同一node挂载,不能跨node
3、读写只能一个pod,其他pod只能读

官方url描述

https://kubernetes.io/docs/user-guide/volumes/#rbd

附官方关于kubernetes的volume的mode

https://kubernetes.io/docs/user-guide/persistent-volumes/

本文出自 “银狐” 博客,请务必保留此出处http://foxhound.blog.51cto.com/1167932/1899545

kubernetes使用ceph的更多相关文章

  1. Kubernetes配置Ceph RBD StorageClass

    1. 在Ceph上为Kubernetes创建一个存储池 # ceph osd pool create k8s 2. 创建k8s用户 # ceph auth get-or-create client.k ...

  2. kubernetes挂载ceph rbd和cephfs的方法

    目录 k8s挂载Ceph RBD PV & PVC方式 创建secret 创建PV 创建PVC 创建deployment挂载PVC StorageClass方式 创建secret 创建Stor ...

  3. 腾讯基于Kubernetes的企业级容器云平台GaiaStack (转)

    GaiaStack介绍 GaiaStack是腾讯基于Kubernetes打造的容器私有云平台.这里有几个关键词: 腾讯:GaiaStack可服务腾讯内部所有BG的业务: Kubernetes:Gaia ...

  4. Hypernetes简介——真正多租户的Kubernetes Distro

    http://www.dockone.io/article/838 Hypernetes是一个真正多租户的Kubernetes Distro. Hypernetes在Kubernetes基础上增加了多 ...

  5. Kubernetes添加带Quota限额的CephFS StorageClass

    1. 在Ceph上为Kubernetes创建一个文件系统 # ceph osd pool create cephfs_data # ceph osd pool create cephfs_metada ...

  6. SUSE CaaS Platform 4 - 使用 Ceph RBD 作为持久存储 (静态)

    1.所有节点安装 # zypper -n in ceph-common 复制 ceph.conf 到 worker 节点上 # scp admin:/etc/ceph/ceph.conf /etc/c ...

  7. jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(四)

    前景提要 jenkins与gitlab结合,实现代码自动拉取:https://www.cnblogs.com/zisefeizhu/p/12548662.html jenkins与kubernetes ...

  8. kubernetes 1.17.2结合ceph13.2.8 实现jenkins部署并用traefik2.1代理

    注:关于ceph.kubernetes集群的部署在此不声明,相信搜到本篇博文,你一定对ceph.kubernetes的部署环节手刃有余. 注:本篇博文牵扯到的技术点有:ceph.kubernetes. ...

  9. Kubernetes 持久化存储是个难题,解决方案有哪些?\n

    像Kubernetes 这样的容器编排工具正在彻底改变应用程序的开发和部署方式.随着微服务架构的兴起,以及基础架构与应用程序逻辑从开发人员的角度解耦,开发人员越来越关注构建软件和交付价值. Kuber ...

随机推荐

  1. python学习(二十) Python 中的比较:is 与 ==

    Python 中的比较:is 与 == 在 Python 中会用到对象之间比较,可以用 ==,也可以用 is .但是它们的区别是什么呢? is 比较的是两个实例对象是不是完全相同,它们是不是同一个对象 ...

  2. [转]第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建

    目录: 1.gradle的概念 2.gradle配置jar包,和libs文件夹导入jar包的区别 3.签名打包: (1)Studio (2)命令行 (3)gradle wrapper的原理 4.Bui ...

  3. setTimeout和setInterval的unref()和ref()用法

    var testFunction=function(){ console.log("guoyansi"); } var timer=setInterval(testFunction ...

  4. 【UVALive】2678 Subsequence(尺取法)

    题目 传送门:QWQ 分析 一开始没看到都是正整数根本不会做...... 看到了就是水题了.(但还是sb WA了一发) 尺取法搞一搞 代码 #include <bits/stdc++.h> ...

  5. 【BZOJ】1260 [CQOI2007]涂色paint(区间dp)

    题目 传送门:QWQ 分析 区间dp, 详见代码 代码 /************************************************************** Problem: ...

  6. linux-强制断开远程tcp连接

    最近在做日常维护,搭建了socks代理,但是socks代理服务已经关闭了,由于其他机器还在和我的服务器保持tcp长连接 e.g. tcp ESTAB Google了一下,没找到特别好的办法,例如ipt ...

  7. 12_java之构造方法|this|super

    01构造方法引入 * A:构造方法的引入 在开发中经常需要在创建对象的同时明确对象的属性值,比如员工入职公司就要明确他的姓名.年龄等属性信息. 那么,创建对象就要明确属性值,那怎么解决呢?也就是在创建 ...

  8. 关于where和having的直观理解

    一,查询区别 where是对前面select的字段没有要求,直接查询库表的 having是对前面的select的字段有要求,字段已经select出来的 可以用having进行处理 select id, ...

  9. maven项目将web2.5改为web3.1

    用maven构建的web项目默认的web.xml为2.3的版本,而我们需要更改为我们想要的版本(3.1). 在这里有两种方式更改web.xml的版本: 第一种: 将项目切换为navigator视图,然 ...

  10. 「小程序JAVA实战」小程序视图之细说列表渲染(14)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-14/ 列表的渲染,不管是任何语言都有列表这个概念.源码:https://github.com/li ...