k8s对接ceph存储
前提条件:已经部署好ceph集群
本次实验由于环境有限,ceph集群是部署在k8s的master节点上的
一、创建ceph存储池
在ceph集群的mon节点上执行以下命令:
- ceph osd pool create k8s-volumes 64 64
查看下副本数
- [root@master ceph]# ceph osd pool get k8s-volumes size
- size:
pg的设置参照以下公式:
- Total PGs = ((Total_number_of_OSD * ) / max_replication_count) / pool_count
结算的结果往上取靠近2的N次方的值。比如总共OSD数量是2,复制份数3,pool数量也是1,那么按上述公式计算出的结果是66.66。取跟它接近的2的N次方是64,那么每个pool分配的PG数量就是64。
二、在k8s的所有节点上安装ceph-common
1、配置国内 yum源地址、ceph源地址
- cp -r /etc/yum.repos.d/ /etc/yum-repos-d-bak
- yum install -y wget
- rm -rf /etc/yum.repos.d/*
- wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
- wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
- yum clean all
- yum makecache
- cat <<EOF > /etc/yum.repos.d/ceph.repo
- [ceph]
- name=Ceph packages
- baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/
- enabled=
- gpgcheck=
- priority=
- type=rpm-md
- gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
- [ceph-noarch]
- name=Ceph noarch packages
- baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch
- enabled=
- gpgcheck=
- priority=
- type=rpm-md
- gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
- [ceph-source]
- name=Ceph source packages
- baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS
- enabled=
- gpgcheck=
- type=rpm-md
- gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
- priority=
- EOF
2、安装ceph-common
- yum -y install ceph-common
3、将ceph的mon节点的配置文件/etc/ceph/ceph.conf 放到所有k8s节点的/etc/ceph目录下
4、将ceph的mon节点的文件 /etc/ceph/ceph.client.admin.keyring 放到所有k8s节点的/etc/ceph目录下
三、以rbac方式对接ceph
由于是用kubeadm部署的k8s集群,kube-controller-manager是以容器方式运行的,里面并没有ceph-common,所以采用 扩展存储卷插件 的方式来实现。
简单说一下,这里提供 rbac 和 no-rbac 两种方式,这里因为我们搭建的 k8s 集群时开启了 rbac 认证的,所以这里采用 rbac 方式来创建该 deployment。
1、下载插件镜像:(本人已经将其上传到阿里云的镜像仓库了)
- docker pull registry.cn-hangzhou.aliyuncs.com/boshen-ns/rbd-provisioner:v1.
2、创建/root/k8s-ceph-rbac/serviceaccount.yaml
- apiVersion: v1
- kind: ServiceAccount
- metadata:
- name: rbd-provisioner
3、创建/root/k8s-ceph-rbac/clusterrole.yaml
- apiVersion: v1
- kind: ServiceAccount
- metadata:
- name: rbd-provisioner
- [root@master k8s-ceph-rbac]# vim clusterrole.yaml
- [root@master k8s-ceph-rbac]# cat clusterrole.yaml
- kind: ClusterRole
- apiVersion: rbac.authorization.k8s.io/v1
- 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: ["services"]
- resourceNames: ["kube-dns","coredns"]
- verbs: ["list", "get"]
- - apiGroups: [""]
- resources: ["endpoints"]
- verbs: ["get", "list", "watch", "create", "update", "patch"]
- - apiGroups: [""]
- resources: ["secrets"]
- verbs: ["get", "create", "delete"]
4、创建/root/k8s-ceph-rbac/clusterrolebinding.yaml
- kind: ClusterRoleBinding
- apiVersion: rbac.authorization.k8s.io/v1
- metadata:
- name: rbd-provisioner
- subjects:
- - kind: ServiceAccount
- name: rbd-provisioner
- namespace: default
- roleRef:
- kind: ClusterRole
- name: rbd-provisioner
- apiGroup: rbac.authorization.k8s.io
5、创建/root/k8s-ceph-rbac/role.yaml
- apiVersion: rbac.authorization.k8s.io/v1
- kind: Role
- metadata:
- name: rbd-provisioner
- rules:
- - apiGroups: [""]
- resources: ["secrets"]
- verbs: ["get"]
- - apiGroups: [""]
- resources: ["endpoints"]
- verbs: ["get", "list", "watch", "create", "update", "patch"]
6、创建/root/k8s-ceph-rbac/rolebinding.yaml
- apiVersion: rbac.authorization.k8s.io/v1
- kind: RoleBinding
- metadata:
- name: rbd-provisioner
- roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: Role
- name: rbd-provisioner
- subjects:
- - kind: ServiceAccount
- name: rbd-provisioner
- namespace: default
7、创建/root/k8s-ceph-rbac/deployment.yaml
- apiVersion: extensions/v1beta1
- kind: Deployment
- metadata:
- name: rbd-provisioner
- spec:
- replicas:
- strategy:
- type: Recreate
- template:
- metadata:
- labels:
- app: rbd-provisioner
- spec:
- containers:
- - name: rbd-provisioner
- image: registry.cn-hangzhou.aliyuncs.com/boshen-ns/rbd-provisioner:v1.
- imagePullPolicy: Never
- env:
- - name: PROVISIONER_NAME
- value: ceph.com/rbd
- serviceAccount: rbd-provisioner
8、创建/root/k8s-ceph-rbac/ceph-secret.yaml
- apiVersion: v1
- kind: Secret
- metadata:
- name: ceph-secret
- type: "kubernetes.io/rbd"
- data:
- key: QVFDQmRvbGNxSHlaQmhBQW45WllIbCtVd2JrTnlPV0xseGQ4RUE9PQ==
上面key的值用以下方式查看:
- [root@master ~]# grep key /etc/ceph/ceph.client.admin.keyring |awk '{printf "%s", $NF}'|base64
- QVFDQmRvbGNxSHlaQmhBQW45WllIbCtVd2JrTnlPV0xseGQ4RUE9PQ==
9、创建/root/k8s-ceph-rbac/ceph-storageclass.yaml
- apiVersion: storage.k8s.io/v1
- kind: StorageClass
- metadata:
- name: ceph-storage-class
- provisioner: ceph.com/rbd
- parameters:
- #monitors: 192.168.137.10:
- monitors: ceph-mon-1.default.svc.cluster.local.:6789
- adminId: admin
- adminSecretName: ceph-secret
- adminSecretNamespace: default
- pool: k8s-volumes
- userId: admin
- userSecretName: ceph-secret
- fsType: ext4
- imageFormat: ""
- imageFeatures: layering
注意:上面的monitors,不能直接写ip,这样以后创建pvc会报:missing Ceph monitors。源码中,monitors需要k8s dns解析,我这里使用外部ceph,肯定没有相关解析。所以手动添加解析,如第10步。
10、创建/root/k8s-ceph-rbac/rbd-monitors-dns.yaml
- kind: Service
- apiVersion: v1
- metadata:
- name: ceph-mon-
- spec:
- type: ExternalName
- externalName: 192.168.137.10.xip.io
ceph的mon地址为:192.168.137.10:6789
11、执行以下命令将上面1到10步的yaml文件进行执行
- kubeclt apply -f k8s-ceph-rbac/
12、进行测试是否可用
1)创建test-pvc.yaml
- kind: PersistentVolumeClaim
- apiVersion: v1
- metadata:
- name: test-pvc
- spec:
- accessModes:
- - ReadWriteOnce
- storageClassName: ceph-storage-class
- resources:
- requests:
- storage: 1Gi
- kubectl apply -f test-pvc.yaml
状态为Bound,说明创建的pvc正常
扩展链接:https://github.com/kubernetes-incubator/external-storage
k8s对接ceph存储的更多相关文章
- 分布式存储ceph——(2)openstack对接ceph存储后端
ceph对接openstack环境 一.使用rbd方式提供存储如下数据: (1)image:保存glanc中的image: (2)volume存储:保存cinder的volume:保存创建虚拟机时选择 ...
- k8s使用ceph存储
目录 ceph配置 k8s 配置 通过静态pv,pvc使用ceph 测试多pod挂载静态pv数据不一致问题 StoragaClass 方式 ceph 常用命令 k8s 常用命令 k8s各类端口及IP说 ...
- 分布式存储ceph---openstack对接ceph存储后端(4)
ceph对接openstack环境 一.使用RBD方式提供存储,如下数据: 1.image:保存glance中的image 2.volume存储:保存cinder的volume:保存创建虚拟机时选择创 ...
- openstack之cinder_backup对接ceph存储
M版openstack,是kolla部署的 1.介绍 backup 功能好像与 snapshot 很相似,都可以保存 volume 的当前状态,以备以后恢复.但二者在用途和实现上还是有区别的,具体表现 ...
- k8s 对接glusterfs存储
service 与 endpoint 是通过namespace相同,name相同,相互关联的 创建endpoint [root@k8s-master glusterfs]# cat glusterfs ...
- Ceph 14.2.5-K8S 使用Ceph存储实战 -- <6>
K8S 使用Ceph存储 PV.PVC概述 管理存储是管理计算的一个明显问题.PersistentVolume子系统为用户和管理员提供了一个API,用于抽象如何根据消费方式提供存储的详细信息.于是引入 ...
- K8S学习笔记之k8s使用ceph实现动态持久化存储
0x00 概述 本文章介绍如何使用ceph为k8s提供动态申请pv的功能.ceph提供底层存储功能,cephfs方式支持k8s的pv的3种访问模式ReadWriteOnce,ReadOnlyMany ...
- k8s使用ceph的rbd作后端存储
k8s使用rbd作后端存储 k8s里的存储方式主要有三种.分别是volume.persistent volumes和dynamic volume provisioning. volume: 就是直接挂 ...
- OpenStack 对接 Ceph
[TOC] 1. Openstack 与 Ceph 1.1. Ceph 简介 Ceph 是当前非常流行的开源分布式存储系统,具有高扩展性.高性能.高可靠性等优点,同时提供块存储服务(RBD).对象 ...
随机推荐
- kinect 深度图与彩色图对齐程序
//#include "duiqi.hpp" #include "kinect.h" #include <iostream> #include &q ...
- <Dare To Dream> 第四次作业:基于原型的团队项目需求调研与分析
任务1:实施团队项目软件用户调研活动. (1)真实的用户调研对象:生科院大三学生 (2)利用实验七所开发的软件原型:网站原型链接 (3)要有除原型法之外的其他需求获取手段: 访谈法 开会研讨法 (4) ...
- 爬虫之scrapy扩展
针对pipelines的扩展 from scrapy.exceptions import DropItem class CustomPipeline(object): def __init__(sel ...
- 使用pycharm 出现 interpreter field is empty 完美解决方法(转载 记录)
使用pycharm 出现 interpreter field is empty 主要是因为你的电脑没有正确安装python或者安装python出错,重新下载安装覆盖就行 下载安装包:从Python的官 ...
- 深入理解C++11【3】
[深入理解C++11[3]] 1.POD类型 Plain Old Data. Plain 表示 了POD是个普通的类型.C++11将POD划分为两个基本概念的合集: 1)平凡的(trivial) 2) ...
- 关于vue中tamplate和DOM节点浅谈
前言:在开发前段页面使用vue时,我们能经常看到template标签.这里粗略讲下自己对vue中template理解和使用. 1. 先了解vue vue.js是一个轻巧.高性能.壳组件画的MVVM库. ...
- .Net代码控制PrivateBinPath和ConfigurationFile的位置
.Net的WinForm程序有的时候让人很烦的是,在执行目录下总是一大堆的DLL,配置文件,最少则是个以下,多的时候怕有四五十个吧……,自己程序中的类库,第三方的类库……加载一起让人感觉乱糟糟的,非常 ...
- TFS 删除版本控制
该文章引用至: https://www.cnblogs.com/yanjiez/p/10184845.html 1. 删除所有版本控制文件 *.vssscc , *.vspscc 2. 修改解决方案 ...
- MyBatis-Plus学习笔记
MybatisPlus的全局策略配置 注意:我们写的配置还要加到 MybatisSqlSessionFactoryBean 中 applicationContext.xml <!--定义Myba ...
- 记录一次网站邮箱(STMP)被恶意伪造事件
网站运行了一段时间了,最近用户增加的比较多,突然有用户反馈说遇到骗子了,给我看了他跟骗子的邮件记录,发现骗子竟然可以用我们域名的邮件发邮件,真是被惊吓到了,赶紧开始查找问题. 首先怀疑是企业邮箱密码泄 ...