Развертывание кластера Ceph

Kubernetes

I. Обзор

1.1 Предыстория

В последнее время бизнес компании трансформировался в контейнеризацию.С точки зрения выбора хранилища для kubernetes, локальное хранилище не может пересекать узлы при выборе, а общее хранилище NFS не годится для обеспечения высокой доступности.Поэтому Ceph выбран для обеспечения класса хранилища для k8s. Обратите внимание здесь для последующего использования.

1.2 Обзор

Ceph — это унифицированная распределенная файловая система, обеспечивающая превосходную производительность, надежность и масштабируемость. Ceph — это распределенная файловая система с открытым исходным кодом. Поскольку он также поддерживает блочное хранилище и хранилище объектов, он, естественно, используется в качестве всей серверной части хранилища облачных вычислений openstack или cloudstack. Конечно, его также можно использовать как отдельное хранилище, например, для развертывания набора кластеров в качестве объектного хранилища, хранилища SAN, хранилища NAS и т. д. Его можно использовать в качестве класса хранения для k8s, чтобы облегчить постоянное хранение контейнера.

1.3 Поддерживаемые форматы

  • Хранилище объектов: radosgw, совместимо с интерфейсом S3. Загружайте и скачивайте файлы через rest api.

  • Файловая система: интерфейс posix. Кластер ceph можно рассматривать как локально смонтированную совместно используемую файловую систему.

  • Блочное хранение: рбд. Есть два способа использования ядра rbd и libbrd. Поддерживаются снимки и клоны. Это эквивалентно жесткому диску, подвешенному локально, а использование и назначение такие же, как у жесткого диска. Например, в проекте OpenStack хранилище блочных устройств Ceph может подключаться к внутреннему хранилищу OpenStack.

1.4 Преимущества

  • Унифицированное хранилище: хотя нижний уровень ceph представляет собой распределенную файловую систему, из-за разработки интерфейсов, поддерживающих объекты и блоки на верхнем уровне

  • Высокая масштабируемость: простое расширение и большая емкость. Возможность управлять тысячами серверов, емкость уровня EB.

  • Высокая надежность: поддерживает несколько копий строгой согласованности, EC. Реплики могут храниться в мэйнфреймах, стойках, компьютерных залах и центрах обработки данных. Так безопасно и надежно. Узлы хранения являются самоуправляемыми и самовосстанавливающимися. Отсутствие единой точки отказа, сильная отказоустойчивость.

  • Высокая производительность: наличие нескольких копий позволяет выполнять операции чтения и записи с высокой степенью параллелизма. Теоретически, чем больше узлов, тем выше IOPS и пропускная способность всего кластера. Другой момент заключается в том, что клиент ceph читает и записывает данные напрямую и взаимодействует с устройством хранения (osd).

1.5 Основные компоненты

  • Ceph OSD: Функцией демонов OSD Ceph (Ceph OSD) является хранение данных, обработка репликации данных, восстановление, обратное заполнение, повторная балансировка и предоставление некоторой информации мониторинга для мониторов Ceph путем проверки тактов других демонов OSD. Когда в кластере хранения Ceph установлено 2 реплики, для перехода кластера в активное+чистое состояние требуется как минимум 2 демона OSD (по умолчанию Ceph имеет 3 реплики, но вы можете настроить количество реплик).

  • Мониторы: Монитор Ceph поддерживает различные графики, показывающие состояние кластера, включая графики мониторов, графики OSD, графики групп размещения (PG) и графики CRUSH. Ceph хранит историю каждого изменения состояния (называемого эпохой), которое происходит на мониторах, OSD и PG.

  • MDS: сервер метаданных Ceph (MDS) хранит метаданные для файловой системы Ceph (то есть блочные устройства Ceph и хранилище объектов Ceph не используют MDS). Сервер метаданных позволяет пользователям файловых систем POSIX выполнять базовые команды, такие как ls и find, не перегружая кластер хранения Ceph.

Две установки и развертывания

2.1 Информация о хосте

Имя процессора Операционная система настроить Компоненты K8S CEPH-компоненты Частный IP SSH-порт Имя пользователя Пароль
master CentOS 7.4 64bit 4C8G + жесткий диск 500G admin,osd, mon 172.16.60.2 2001/22 root/uWWKxxxxxxcuh
node01 CentOS 7.4 64bit 4C8G + жесткий диск 500G osd, mon 172.16.60.3 2002/22 root/IZ5lxxxxxxxQOkLh
node02 CentOS 7.4 64bit 4C8G + жесткий диск 500G osd, mon 172.16.60.4 2003/22 root/nUMFxxxxxxzDMcE

2.2 Подготовка диска

Вам нужно создать диски на трех хостах и ​​смонтировать их в /var/local/osd{0,1,2} хоста.

[root@master ~]# mkfs.xfs /dev/vdc
[root@master ~]# mkdir -p /var/local/osd0
[root@master ~]# mount /dev/vdc /var/local/osd0/


[root@node01 ~]# mkfs.xfs /dev/vdc
[root@node01 ~]# mkdir -p /var/local/osd1
[root@node01 ~]# mount /dev/vdc /var/local/osd1/

[root@node02 ~]# mkfs.xfs /dev/vdc 
[root@node02 ~]# mkdir -p /var/local/osd2
[root@node02 ~]# mount /dev/vdc /var/local/osd2/

将磁盘添加进入fstab中,确保开机自动挂载

2.3 Настройте файл hosts для каждого хоста

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.60.2 master
172.16.60.3 node01
172.16.60.4 node02

2.4 Управление узлом ssh без ключа входа node1/node2

[root@master ~]# ssh-keygen -t rsa
[root@master ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node01
[root@master ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node02

2.5 Установите инструмент ceph-deploy на главный узел

# 各节点均更新ceph的yum源
vim /etc/yum.repos.d/ceph.repo 

[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
priority =1
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
priority =1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS
gpgcheck=0
priority=1

# 安装ceph-deploy工具
yum clean all && yum makecache
yum -y install ceph-deploy

2.6 Создание службы мониторинга

Создайте службу монитора и укажите имя хоста главного узла.

[root@master ~]# mkdir /etc/ceph && cd /etc/ceph
[root@master ceph]# ceph-deploy new master
[root@master ceph]# ll
total 12
-rw-r--r-- 1 root root  195 Sep  3 10:56 ceph.conf
-rw-r--r-- 1 root root 2915 Sep  3 10:56 ceph-deploy-ceph.log
-rw------- 1 root root   73 Sep  3 10:56 ceph.mon.keyring


[root@master ceph]# cat ceph.conf 
[global]
fsid = 5b9eb8d2-1c12-4f6d-ae9c-85078795794b
mon_initial_members = master
mon_host = 172.16.60.2
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 2

配置文件的默认副本数从3改成2,这样只有两个osd也能达到active+clean状态,把下面这行加入到[global]段(可选配置)

2.7 Установите ceph на все узлы

# 各节点安装软件包
yum -y install yum-plugin-priorities epel-release
# master节点利用ceph-deply 部署ceph

[root@master ceph]# ceph-deploy install master node01 node02

[root@master ceph]# ceph --version
ceph version 10.2.11 (e4b061b47f07f583c92a050d9e84b1813a35671e)

2.8 Развертывание связанных сервисов

# 安装ceph monitor
[root@master ceph]# ceph-deploy mon create master

# 收集节点的keyring文件
[root@master ceph]# ceph-deploy  gatherkeys master

# 创建osd
[root@master ceph]# ceph-deploy osd prepare master:/var/local/osd0 node01:/var/local/osd1 node02:/var/local/osd2

# 权限修改
[root@master ceph]# chmod 777 -R /var/local/osd{0..2}
[root@master ceph]# chmod 777 -R /var/local/osd{0..2}/*

# 激活osd
[root@master ceph]# ceph-deploy osd activate master:/var/local/osd0 node01:/var/local/osd1 node02:/var/local/osd2

# 查看状态
[root@master ceph]# ceph-deploy osd list master node01 node02

2.9 Единая конфигурация

Используйте ceph-deploy для копирования файла конфигурации и ключа администратора на все узлы, чтобы вам не нужно было указывать адрес монитора и ceph.client.admin.keyring каждый раз, когда вы выполняете командную строку Ceph.

[root@master ceph]# ceph-deploy admin master node01 node02

# 各节点修改ceph.client.admin.keyring权限:
[root@master ceph]# chmod +r /etc/ceph/ceph.client.admin.keyring


# 查看状态
[root@master ceph]# ceph health
HEALTH_OK
[root@master ceph]# ceph -s
    cluster 5b9eb8d2-1c12-4f6d-ae9c-85078795794b
     health HEALTH_OK
     monmap e1: 1 mons at {master=172.16.60.2:6789/0}
            election epoch 3, quorum 0 master
     osdmap e15: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v27: 64 pgs, 1 pools, 0 bytes data, 0 objects
            15681 MB used, 1483 GB / 1499 GB avail
                  64 active+clean
                      

2.10 Развертывание службы MDS

Устанавливаем и разворачиваем службу MDS на node01/node02

[root@master ceph]# ceph-deploy mds create node01 node02

# 查看状态
[root@master ceph]# ceph mds stat
e3:, 2 up:standby
[root@master ~]# ceph mon stat
e1: 1 mons at {master=172.16.60.2:6789/0}, election epoch 4, quorum 0 master

# 查看服务
[root@master ceph]# systemctl list-unit-files |grep ceph
ceph-create-keys@.service                     static  
ceph-disk@.service                            static  
ceph-mds@.service                             disabled
ceph-mon@.service                             enabled 
ceph-osd@.service                             enabled 
ceph-radosgw@.service                         disabled
ceph-mds.target                               enabled 
ceph-mon.target                               enabled 
ceph-osd.target                               enabled 
ceph-radosgw.target                           enabled 
ceph.target                                   enabled 

На данный момент строительство кластера хранения ceph в основном завершено.

Три создания файловой системы ceph

3.1 Создайте файловую систему

О создании пулов хранения Определение значения pg_num является обязательным, поскольку оно не может быть рассчитано автоматически. Вот несколько часто используемых значений:

  • Установите для pg_num значение 128, если используется менее 5 экранных меню.
  • Когда количество экранных меню составляет от 5 до 10, для pg_num можно установить значение 512.
  • Когда количество экранных меню находится в диапазоне от 10 до 50, вы можете установить для pg_num значение 4096.
  • Когда количество OSD больше 50, вам нужно понять метод компромисса и как самостоятельно рассчитать значение pg_num.
  • Вы можете использовать инструмент pgcalc, чтобы вычислить значение pg_num самостоятельно.    По мере увеличения количества OSD правильное значение pg_num становится более важным, так как оно существенно влияет на поведение кластера и устойчивость данных в случае ошибок (т.е. вероятность потери данных из-за катастрофического события).
[root@master ceph]# ceph osd pool create cephfs_data <pg_num> 
[root@master ceph]# ceph osd pool create cephfs_metadata <pg_num>

[root@master ~]# ceph osd pool ls 
rbd
[root@master ~]#  ceph osd pool create kube 128
pool 'kube' created
[root@master ~]# ceph osd pool ls              
rbd
kube

# 查看证书
[root@master ~]# ceph auth list
installed auth entries:

mds.node01
        key: AQB56m1dE42rOBAA0yRhsmQb3QMEaTsQ71jHdg==
        caps: [mds] allow
        caps: [mon] allow profile mds
        caps: [osd] allow rwx
mds.node02
        key: AQB66m1dWuhWKhAAtbiZN7amGcjUh6Rj/HNFkg==
        caps: [mds] allow
        caps: [mon] allow profile mds
        caps: [osd] allow rwx
osd.0
        key: AQA46W1daFx3IxAAE1esQW+t1fWJDfEQd+167w==
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.1
        key: AQBA6W1daJG9IxAAQwETgrVc3awkEZejDSaaow==
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.2
        key: AQBI6W1dot4/GxAAle3Ii3/D38RmwNC4yTCoPg==
        caps: [mon] allow profile osd
        caps: [osd] allow *
client.admin
        key: AQBu4W1d90dZKxAAH/kta03cP5znnCcWeOngzQ==
        caps: [mds] allow *
        caps: [mon] allow *
        caps: [osd] allow *
client.bootstrap-mds
        key: AQBv4W1djJ1uHhAACzBcXjVoZFgLg3lN+KEv8Q==
        caps: [mon] allow profile bootstrap-mds
client.bootstrap-mgr
        key: AQCS4W1dna9COBAAiWPu7uk3ItJxisVIwn2duA==
        caps: [mon] allow profile bootstrap-mgr
client.bootstrap-osd
        key: AQBu4W1dxappOhAA5FanGhQhAOUlizqa5uMG3A==
        caps: [mon] allow profile bootstrap-osd
client.bootstrap-rgw
        key: AQBv4W1dpwvsDhAAyp58v08XttJWzLoHWVHZow==
        caps: [mon] allow profile bootstrap-rgw

3.2 Создание секрета клиента

# 创建keyring
[root@master ~]# ceph auth get-or-create client.kube mon 'allow r' osd 'allow rwx pool=kube' -o /etc/ceph/ceph.client.kube.keyring
[root@master ~]# ceph auth list

# 将密钥拷贝到node1和node2
[root@master ceph]# scp ceph.client.kube.keyring root@node01:/etc/ceph/

Четыре удаления

清理机器上的ceph相关配置:
停止所有进程: stop ceph-all
卸载所有ceph程序:ceph-deploy uninstall [{ceph-node}]
删除ceph相关的安装包:ceph-deploy purge {ceph-node} [{ceph-data}]
删除ceph相关的配置:ceph-deploy purgedata {ceph-node} [{ceph-data}]
删除key:ceph-deploy forgetkeys

卸载ceph-deploy管理:yum -y remove ceph-deploy

Ссылка на ссылку