首页 > 其他分享 >ceph集群

ceph集群

时间:2024-08-25 16:05:22浏览次数:10  
标签:name xxx ceph ansible 集群 provisioner cephfs

环境


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.yml

cat 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.yml

cat 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-ansible

ansible-playbook -i hosts infrastructure-playbooks/purge-cluster.yml

yum list installed | grep ceph
   

部署完成后检查

ceph df

ceph 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:6789
  adminId: admin
  adminSecretName: ceph-secret
  adminSecretNamespace: kube-system
  pool: kube
  userId: kube
  userSecretName: ceph-user-secret
  fsType: ext4
  imageFormat: "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-provisioner
  namespace: 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: ServiceAccount
    name: cephfs-provisioner
    namespace: xxx-system
roleRef:
  kind: ClusterRole
  name: cephfs-provisioner
  apiGroup: rbac.authorization.k8s.io

---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: cephfs-provisioner
  namespace: xxx-system
rules:
  - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["create", "get", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: cephfs-provisioner
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: cephfs-provisioner
subjects:
- kind: ServiceAccount
  name: cephfs-provisioner
  namespace: xxx-system

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: cephfs-provisioner
  namespace: xxx-system
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: cephfs-provisioner
    spec:
      containers:
      - name: cephfs-provisioner
        image: "quay.io/external_storage/cephfs-provisioner:v2.0.0-k8s1.11"
        env:
        - name: PROVISIONER_NAME
          value: ceph.com/cephfs
        command:
        - "/usr/local/bin/cephfs-provisioner"
        args:
        - "-id=cephfs-provisioner-1"
      serviceAccount: cephfs-provisioner

kubectl 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:6789
  adminId: admin
  adminSecretName: ceph-secret
  adminSecretNamespace: kube-system
  claimRoot: /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脚本

标签:name,xxx,ceph,ansible,集群,provisioner,cephfs
From: https://www.cnblogs.com/apink/p/18379043

相关文章

  • Kubernetes大规模集群
    Kubernetes资源限制Kubernetes单个集群支持的最大节点数为5,000。Kubernetes标准的配置:每个节点的Pod数量不超过110节点数不超过5,000Pod总数不超过150,000容器总数不超过300,000你可以通过添加或删除节点来扩展集群。集群扩缩的方式取决于集群的部署方式以下集......
  • 修改kubeadm证书过期时间及更新k8s集群证书
    一、为什么要修改kubeadm证书时间Kubernetes官方提供了kubeadm工具安装kubernetes集群,使用这个工具安装集群非常便捷,使部署和升级Kubernetes变得简单起来。不过该工具有点坑的就是,使用其安装的kubernetes集群的大部分证书有效期只有一年,需要在证书过期前,使用更新操作......
  • 集群聊天服务器
    集群聊天服务器项目地址:Focuspresent/ChatServer(github.com)环境搭建(基于Unbuntu20.04)boost库安装sudoaptinstalllibboost-all-devmysql开发库安装sudoaptinstalllibmysqlclient-devmuduo库安装先需要安装cmake以及boost库sudoaptinstallcmake下载安......
  • awk打印除某数据项/某列数/某些列数之外其它列数据的实现以及Twemproxy(redis集群方案
    一、awk打印除某数据项/某列数/某些列数之外其它列数据的实现        偶尔碰到一个需求,我需要使用awk打印数据,但是只需要打印某列之后的其它列,比如我只要第2列及之后的所有数据,如何实现呢?实际很简单:#将$1置成空,然后打印即可awk'{$1="";print}'filepathawk'{$1......
  • 达梦读写分离集群的配置与测试
    操作系统版本CentOS7.6数据库版本DM8_20240712数据守护集群版本V4.0目录1.环境准备2.dm_svc.conf配置3.实现原理4.测试1.环境准备        配置读写分离集群,需要先搭建即时归档或实时归档模式的主备集群。我们使用上篇文档《在一台主机上搭建达梦主备集群......
  • kafka集群扩容
    环境:节点 zookeeper端口 kafka端口 备注172.17.0.81 12181 19092 原有节点172.17.0.82 12181 19092 原有节点172.17.0.83 12181 19092 原有节点172.17.0.90 12181 19092 扩容节点172.17.0.91 12181 19092 扩容节点步骤:一、扩容zookeeper节点#修改配置文件,需注意新节点my......
  • 使用redis-trib.rb工具快速搭建redis集群
    使用redis-trib.rb工具快速搭建redis集群手动搭建集群便于理解集群创建的流程和细节,不过手动搭建集群需要很多步骤,当集群节点众多时,必然会加大搭建集群的复杂度和运维成本,因此官方提供了redis-trib.rb的工具方便我们快速搭建集群。redis-tribyb是采用Ruby实现的redis集群管......
  • MySQL-MGR实战指南:打造企业级高可用数据库集群
    文章目录前言MGR的介绍事务处理流程:实验测试环境:结束语前言在数字化时代,企业的数据安全和业务连续性至关重要。想象一下,当关键业务数据存储在数据库中,而数据库突然出现故障,或者面临硬件故障、网络中断、自然灾害等不可预知的灾难性事件时,企业如何确保数据的完整性和......
  • Oracle RAC 集群启动顺序 转发:https://www.modb.pro/db/1824295923545612288?utm_s
    前言前几天使用脚本在RockyLinux9.4安装Oracle11GR2RAC,安装完之后发现集群无法正常启动,后经过分析发现原来是因为RHEL9版本默认安装移除了 initscripts 软件包,需要人为手动安装,在RHEL8之前是默认安装的。在分析问题的过程中,顺便对OracleRAC集群启动顺序进行了更......
  • lvs+keepalive大战haproxy+keepalive实现高可用集群
    华子目录lvs+keepalive实验架构实验前的准备工作1.主机准备2.KA1和KA2上安装`lvs+keepalive`3.webserver1和webserver2上安装httpd4.制作测试效果网页内容5.所有主机关闭`firewalld`和`selinux`6.开启httpd服务实验步骤1.webserver1和webserver2上配置vip2.webserver1和......