ceph集群

news/2024/10/14 12:24:21

环境


3台centos 8机器,每台机器上边3个磁盘

机器名:ceph1、ceph2、ceph3

ceph-ansible集群部署


在ceph1上边准备好ceph-ansible

git clone https://github.com/ceph/ceph-ansible.git
cd ceph-ansible
git checkout stable-5.0 #centos 7用4.0
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
echo "PATH=\$PATH:/usr/local/bin" >>~/.bashrc
source ~/.bashrc
ansible --version #正常看到版本号,说明部署成功## 注意点
## 1. 配置ceph1免密登陆ceph2、ceph3(ceph1本身也需免密)
## 2. 防火墙需关闭、时间记得查看是否同步
 

修改ceph-ansible的环境变量文件和hosts

cp group_vars/all.yml.sample  group_vars/all.ymlcat all.yml|grep -v ^#|grep -v ^$
---
dummy:
ceph_release_num: 15
cluster: ceph
mon_group_name: mons
osd_group_name: osds
rgw_group_name: rgws
mds_group_name: mdss
mgr_group_name: mgrs
ntp_service_enabled: true
ntp_daemon_type: chronyd
ceph_origin: repository
ceph_repository: community
ceph_repository_type: cdn
ceph_stable_release: octopus
monitor_interface: eno3
journal_size: 10240 # OSD journal size in MB
public_network: 0.0.0.0/0
radosgw_interface: eno3
dashboard_admin_user: admin
dashboard_admin_password: xxxxxxxxxx
grafana_admin_user: admin
grafana_admin_password: xxxxxxxxxx
注意:
  1. 需修改 monitor_interface/radosgw_interface 为目标主机默认网卡名,如 bond0
  2. 目标主机需要安装组件 yum -y install ca-certificates
  3. python3 -m pip install six pyyaml
  4. ceph_release_num 根据系统版本修改,CentOS 7 为 14,跟 stable-4.0 对应为 ceph nautilus 版本
  5. ceph_stable_release 根据系统版本修改,CentOS 7 为 14,跟 stable-4.0 对应为 ceph nautilus 版本
  6. public_network 根据系统所在 IP 地址段修改,例如:192.168.0.0/16
 
cp group_vars/osds.yml.sample group_vars/osds.ymlcat osds.yml|grep -v ^#|grep -v ^$
---
dummy:
copy_admin_key: true
devices:- /dev/sdb- /dev/sdc- /dev/sdd

hosts.yml

# Ceph admin user for SSH and Sudo
[all:vars]
ansible_ssh_user=root
ansible_become=true
ansible_become_method=sudo
ansible_become_user=root# Ceph Monitor Nodes
[mons]
ceph1
ceph2
ceph3[mdss]
ceph1
ceph2
ceph3[rgws]
ceph1
ceph2
ceph3[osds]
ceph1
ceph2
ceph3[mgrs]
ceph1
ceph2
ceph3[grafana-server]
ceph1
 

site.yml

 
- hosts:- mons- osds- mdss- rgws#- nfss#- rbdmirrors#- clients- mgrs#- iscsigws#- iscsi-gws # for backward compatibility only!- grafana-server#- rgwloadbalancers

部署ceph集群

ansible-playbook -i hosts site.yml

执行成功输出如下:

卸载ceph集群

cd /usr/local/ceph-ansibleansible-playbook -i hosts infrastructure-playbooks/purge-cluster.ymlyum list installed | grep ceph
 
 

部署完成后检查

ceph dfceph osd df
 

新增 osds node

将新添加的 osds node 添加到 hosts 文件 [osds] 区域,然后执行

ansible-playbook -vv -i hosts site-container.yml --limit {new osds node}
 

kubernetes+ceph


使用rbd存储

配置storageclass

# 在k8s集群中需要用到ceph的节点上安装好ceph-common(有内核要求,这个需要注意)
# 需要使用kubelet使用rdb命令map附加rbd创建的image
yum install -y ceph-common# 创建osd pool(在ceph的mon节点)
ceph osd pool create kube 128
ceph osd pool ls# 创建k8s访问ceph的用户(在ceph的mon节点)
cd /etc/ceph
ceph auth get-or-create client.kube mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=kube' -o ceph.client.kube.keyring# 查看key 在ceph的mon或者admin节点
ceph auth get-key client.admin
ceph auth get-key client.kube# 创建admin的secret
CEPH_ADMIN_SECRET='xxxxxxxxxxxxxxxxxxxx=='
kubectl create secret generic ceph-secret --type="kubernetes.io/rbd" \
--from-literal=key=$CEPH_ADMIN_SECRET \
--namespace=kube-system# 在xxx-system命名空间创建pvc用于访问ceph的secret
CEPH_KUBE_SECRET='xxxxxxxxxxxxxxxxxxxxxx=='
kubectl create secret generic ceph-user-secret --type="kubernetes.io/rbd" \
--from-literal=key=$CEPH_KUBE_SECRET \
--namespace=xxx-system# 查看secret
kubectl get secret ceph-user-secret -nxxx-system -o yaml
kubectl get secret ceph-secret -nkube-system -o yaml# 配置StorageClass
cat storageclass-ceph-rdb.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:name: xxx-ceph-rdb
provisioner: kubernetes.io/rbd
parameters:monitors: xxx.xxx.xxx.xxx:6789,xxx.xxx.xxx.xxx:6789,xxx.xxx.xxx.xxx:6789adminId: adminadminSecretName: ceph-secretadminSecretNamespace: kube-systempool: kubeuserId: kubeuserSecretName: ceph-user-secretfsType: ext4imageFormat: "2"imageFeatures: "layering"# 创建
kubectl apply -f storageclass-ceph-rdb.yaml# 查看
kubectl get sc
 
 

使用cephFS存储

部署cephfs-provisioner

# 官方没有cephfs动态卷支持
# 使用社区提供的cephfs-provisioner
cat external-storage-cephfs-provisioner.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: cephfs-provisionernamespace: xxx-system
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: cephfs-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: ["create", "update", "patch"]- apiGroups: [""]resources: ["endpoints"]verbs: ["get", "list", "watch", "create", "update", "patch"]- apiGroups: [""]resources: ["secrets"]verbs: ["create", "get", "delete"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: cephfs-provisioner
subjects:- kind: ServiceAccountname: cephfs-provisionernamespace: xxx-system
roleRef:kind: ClusterRolename: cephfs-provisionerapiGroup: rbac.authorization.k8s.io---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: cephfs-provisionernamespace: xxx-system
rules:- apiGroups: [""]resources: ["secrets"]verbs: ["create", "get", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: cephfs-provisionernamespace: kube-system
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: cephfs-provisioner
subjects:
- kind: ServiceAccountname: cephfs-provisionernamespace: xxx-system---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: cephfs-provisionernamespace: xxx-system
spec:replicas: 1strategy:type: Recreatetemplate:metadata:labels:app: cephfs-provisionerspec:containers:- name: cephfs-provisionerimage: "quay.io/external_storage/cephfs-provisioner:v2.0.0-k8s1.11"env:- name: PROVISIONER_NAMEvalue: ceph.com/cephfscommand:- "/usr/local/bin/cephfs-provisioner"args:- "-id=cephfs-provisioner-1"serviceAccount: cephfs-provisionerkubectl apply -f external-storage-cephfs-provisioner.yaml# 查看状态,等待running之后,再进行后续的操作
kubectl get pod -n kube-system
 

配置storageclass

more storageclass-cephfs.yaml 
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:name: xxx-cephfs
provisioner: ceph.com/cephfs
parameters:monitors: xxx.xxx.xxx.xxx:6789,xxx.xxx.xxx.xxx:6789,xxx.xxx.xxx.xxx:6789adminId: adminadminSecretName: ceph-secretadminSecretNamespace: kube-systemclaimRoot: /volumes/kubernetes# 创建
kubectl apply -f storageclass-cephfs.yaml# 查看
kubectl get sc

问题注意


  • ceph-ansible部署ceph过程中可能会出现安装版本问题(centos8有出现),这个时候检查一下yum源,是不是对应的centos的版本,centos7就用ceph对应centos7的yum源,centos8就用ceph对应centos8的yum源
  • 由于uat部署的ceph集群是2.15比较高的版本,用的内核版本比较高,所以对ceph-common部署机器的内核版本要些要求,需要注意一下。如果之后生产部署全部用的centos7,那内核版本问题就不需要担心
  • 如果使用ansible部署,记得注意osd加入后,防火墙是否开启了。如果不希望防火墙开启记得关闭或者改一下ansible脚本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/52890.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

计算机组成原理【3】:数据的表示和运算-下

概述浮点数的表示和运算浮点数的表示;IEEE 754标准;浮点数的加/减运算浮点数的表示与运算 浮点数的表示浮点数表示法是指以适当的形式将比例因子表示在数据中,让小数点的位置根据需要而浮动。这样在位数有限的情况下,既扩大了数的表示范围,又保持数的有效精度。 浮点数的表…

RabbitMQ 相关概念及简述

总结自:BV15k4y1k7EpRabbitMQ 是一款常用的消息队列(MQ)。 什么是消息队列 MQ 全称为 Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信。 消息队列中间件是分布式系统中重要的组件,主要解决…

RabbitMQ 入门示例

参考:BV15k4y1k7EpRabbitMQ 相关概念及简述中简单介绍了 RabbitMQ 提供的 6 种工作模式。下面以简单模式为例,介绍 RabbitMQ 的使用。 新建工程 先新建 Maven 工程 RabbitMQ 作为父工程,在父工程下新建三个子模块:common:公共包 producer:生产者 consumer:消费者在三个模…

Kubernetes大规模集群

Kubernetes资源限制 Kubernetes 单个集群支持的最大节点数为 5,000。Kubernetes标准的配置:每个节点的 Pod 数量不超过 110 节点数不超过 5,000 Pod 总数不超过 150,000 容器总数不超过 300,000你可以通过添加或删除节点来扩展集群。集群扩缩的方式取决于集群的部署方式 以下集…

WEB开发技术演变

什么是web开发 Web开发指的是网页系统开发,一说到网页,我想大概大部分人都会熟悉www,每次在浏览器中输入网址时,总会先输入www,这里其实是World Wide Web的简称,现在也简称Web, web技术发展 静态网页时代 1994年,网景公司(Netscape)发布了Navigator浏览器0.9版。这是…

go语言免杀-garble混淆

go语言免杀-garble混淆,禁止转载。题记 “愿先生心境,四季如春”作者回答:剑来之所以最大宗旨,是“我们不要轻易对这个世界失望”,因为道理太简单不过了,我们每个人在现实生活当中,太容易对人对事,产生大大小小的失望。而“愿先生心境四季如春”这句话,以后在书中会被…

delphi dxCameraControl控件(拍照)

拍照演示 DevExpressVCL 组件之一TdxCameraControl Object Hierarchy Properties Methods Events一个摄像头控件 Unit dxCameraControlSyntaxTdxCameraControl = class(TdxCustomCameraControl)Descrition该控件允许您捕捉视频或图像从内置/连接的网络摄像头或设备、前后…

sentinel-服务接入原理

通过sentinel前世今生介绍,我们知道了sentinel流控主要是依赖sentinel-core,但是我们生产环境往往需要动态更新流控规则所以需要集成nacos、zookeeper、redis、mysql、等中间存储。配置的复杂性和规则的复杂性我们需要可视化的方式对规则进行管理,我们需要集成dashboard。 这…