Облачная платформа контейнеров №6 ~ корпоративное распределенное хранилище Ceph ~ v14.2.10

Облачная платформа контейнеров №6 ~ корпоративное распределенное хранилище Ceph ~ v14.2.10

Беседа с новичком Scofield по эксплуатации и техническому обслуживанию

Вступление


В качестве унифицированной распределенной системы хранения ceph обеспечивает высокую производительность, доступность и масштабируемость. Унификация ceph заключается в том, что он может предоставлять файловые системы, хранилище блоков и хранилище объектов.В облачной среде ceph обычно используется в качестве внутреннего хранилища для обеспечения высокой доступности данных.
ceph был опубликован в 2004 году, а затем был открыт для сообщества. После более чем десяти лет разработки он в настоящее время поддерживается и широко используется многими поставщиками облачных услуг. Например, openstack \ kubernetes \ virtual machine system и т. Д. . .
Схема архитектуры:

Облачная платформа контейнеров №6 ~ корпоративное распределенное хранилище Ceph ~ v14.2.10

Функции


  • Высокая производительность
    использует алгоритм CRUSH, распределение данных сбалансировано, а параллелизм высокий.
    Изоляция домена аварийного восстановления может реализовать правила размещения копий для различных нагрузок, таких как межмашинное пространство, осведомленность о стойке и т. Д.
    Он может поддерживать масштаб до тысяч узлов хранения и поддерживать данные от терабайтов до петабайт.

  • Количество реплик высокой доступности можно гибко контролировать.
    Поддерживает разделение доменов сбоя и строгую согласованность данных.
    Автоматическое устранение и самовосстановление различных сценариев отказов.
    Нет единой точки отказа, автоматическое управление.
  • Высокая масштабируемость и
    децентрализация.
    Гибкое расширение.
    Он линейно растет с увеличением количества узлов.
    Поддерживает три интерфейса хранилища: хранилище блоков, хранилище файлов, хранилище объектов,
    настраиваемые интерфейсы и многоязычные драйверы.

    Метод развертывания


1. Разверните на «голом железе» в качестве независимого кластера хранения для предоставления услуг хранения для кубернетов (рекомендуется для онлайн-среды)
2. Разверните в кластер кубернетов и используйте Rook для управления ceph. Rook - это оператор, который может предоставлять возможности управления кластером Ceph и использует контроллер CRD для развертывания ресурсов Ceph и управления ими. По сравнению с развертыванием на «голом железе». Это ближе к кубернетам, но это новинка. Стабильность и сложность устранения неполадок сомнительны, а среду генерации нужно оценивать отдельно.
3. В качестве теста в этой статье используется ладья для развертывания кластера ceph.
Сначала посмотрите на схему архитектуры

Облачная платформа контейнеров №6 ~ корпоративное распределенное хранилище Ceph ~ v14.2.10

Облачная платформа контейнеров №6 ~ корпоративное распределенное хранилище Ceph ~ v14.2.10

Как видно из двух приведенных выше официальных диаграмм,
Rook Operator является основным компонентом, который в основном используется для управления кластером хранения и мониторинга демона хранения, чтобы гарантировать работоспособность кластера хранения.
Rook Agent запускается на каждом узле хранения и настраивается с помощью подключаемого модуля FlexVolume и инфраструктуры управления объемом хранилища Kubernetes (CSI) для интеграции.
Rook использует форму Kubernetes Pod для развертывания демонов Ceph MON, OSD и MGR.
4. Перед развертыванием ceph вам необходимо убедиться, что на вашем сервере есть свободные жесткие диски для использования кластером ceph, обычно три или больше, если вы просто тестируете хотя бы один.
Как показано ниже, sdb предназначен для ceph


 1fdisk  -l
 2
 3Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
 4Units = sectors of 1 * 512 = 512 bytes
 5Sector size (logical/physical): 512 bytes / 512 bytes
 6I/O size (minimum/optimal): 512 bytes / 512 bytes
 7
 8
 9Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
10Units = sectors of 1 * 512 = 512 bytes
11Sector size (logical/physical): 512 bytes / 512 bytes
12I/O size (minimum/optimal): 512 bytes / 512 bytes
13Disk label type: dos
14Disk identifier: 0x0001ce60
15
16   Device Boot      Start         End      Blocks   Id  System
17/dev/sda1   *        2048     2099199     1048576   83  Linux
18/dev/sda2         2099200   209715199   103808000   8e  Linux LVM

Развернуть ладью-цеф


Установите root-operator, разверните эту статью в пространстве имен: rook
1, разверните общие ресурсы


1[root@k8s-master001 rook]# kubectl  apply -f common.yaml 
2namespace/rook created
3Warning: apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
4。。中间省略N行
5clusterrolebinding.rbac.authorization.k8s.io/rbd-csi-provisioner-role created

2. Разверните ресурсы оператора


 1[root@k8s-master001 rook]# kubectl label node k8s-master003 app.storage=rook-ceph
 2node/k8s-master003 labeled
 3[root@k8s-master001 rook]# kubectl label node k8s-master002 app.storage=rook-ceph
 4node/k8s-master002 labeled
 5[root@k8s-master001 rook]# kubectl label node k8s-master001 app.storage=rook-ceph
 6node/k8s-master001 labeled
 7
 8[root@k8s-master001 rook]# kubectl  apply -f operator.yaml
 9configmap/rook-ceph-operator-config created
10deployment.apps/rook-ceph-operator created
11
12[root@k8s-master001 rook]# kubectl  get po -n rook
13NAME                                 READY   STATUS    RESTARTS   AGE
14rook-ceph-operator-87f875bbc-zz9lb   0/1     Pending   0          106s
15
16再次查看,知道全部Pod为Running状态,表示安装成功
17如果不是Runing状态,可以使用例如:kubectl describe po rook-discover-5qrc6 -n rook
18查看详情,一般情况可能是镜像下载失败,如果是其他情况,请根据实际情况自行解决。。。
19
20[root@k8s-master001 rook]# kubectl  get po -n rook
21NAME                                 READY   STATUS    RESTARTS   AGE
22rook-ceph-operator-87f875bbc-zz9lb   1/1     Running   3          27m
23rook-discover-5qrc6                  1/1     Running   0          3m42s
24rook-discover-fzfz5                  1/1     Running   0          3m52s
25rook-discover-fzg7r                  1/1     Running   0          20m

3. Создайте кластер ceph.
Здесь вам нужно изменить файл cluster.yaml, чтобы
установить узел хранения ceph и используемый жесткий диск в соответствии с реальной ситуацией . В противном случае все диски, доступные в системе, будут отформатированы. Здесь вам нужно установить следующие


 1  storage: # cluster level storage configuration and selection
 2    useAllNodes: false
 3    useAllDevices: false
 4    #deviceFilter:
 5    config:
 6      # metadataDevice: "md0" # specify a non-rotational storage so ceph-volume will use it as block db device of bluestore.
 7      # databaseSizeMB: "1024" # uncomment if the disks are smaller than 100 GB
 8      # journalSizeMB: "1024"  # uncomment if the disks are 20 GB or smaller
 9      # osdsPerDevice: "1" # this value can be overridden at the node or device level
10      # encryptedDevice: "true" # the default value for this option is "false"
11# Individual nodes and their config can be specified as well, but 'useAllNodes' above must be set to false. Then, only the named
12# nodes below will be used as storage resources.  Each node's 'name' field should match their 'kubernetes.io/hostname' label.
13    nodes:
14    - name: "10.26.25.20"  #这个地方最好写hostname
15      devices:
16      - name: "sdb"
17    - name: "10.26.25.21"
18      devices:
19      - name: "sdb"
20    - name: "10.26.25.22"
21      devices:
22      - name: "sdb"

Измените положение и пол узла, установите ceph на узел с фиксированной меткой, здесь используйте метку app.storage = rook-ceph.


 1  placement:
 2    all:
 3      nodeAffinity:
 4        requiredDuringSchedulingIgnoredDuringExecution:
 5          nodeSelectorTerms:
 6          - matchExpressions:
 7            - key: app.storage
 8              operator: In
 9              values:
10              - rook-ceph

Для выполнения команды развертывания по этой ссылке необходимо загрузить несколько образов ceph. В зависимости от сетевой ситуации это может занять много времени. . .


 1[root@k8s-master001 rook]# kubectl  apply -f cluster.yaml
 2cephcluster.ceph.rook.io/rook-ceph created
 3
 4[root@k8s-master001 rook]#  kubectl  get po -n rook
 5NAME                                                      READY   STATUS    RESTARTS   AGE
 6csi-cephfsplugin-2fsl9                                    3/3     Running   0          6m54s
 7csi-cephfsplugin-4r5cg                                    3/3     Running   0          6m55s
 8csi-cephfsplugin-htdjs                                    3/3     Running   0          6m54s
 9csi-cephfsplugin-provisioner-7646976d94-9kfd6             5/5     Running   1          6m53s
10csi-cephfsplugin-provisioner-7646976d94-rbztr             5/5     Running   0          6m53s
11csi-rbdplugin-56jpj                                       3/3     Running   0          6m59s
12csi-rbdplugin-8h25h                                       3/3     Running   0          6m59s
13csi-rbdplugin-provisioner-55c946c8c-d25g4                 6/6     Running   2          6m58s
14csi-rbdplugin-provisioner-55c946c8c-g77s8                 6/6     Running   1          6m57s
15csi-rbdplugin-z4qpw                                       3/3     Running   0          6m59s
16rook-ceph-crashcollector-k8s-master001-6975bdf888-bpm7r   1/1     Running   0          2m6s
17rook-ceph-crashcollector-k8s-master002-746b76cd87-5xzz4   1/1     Running   0          3m18s
18rook-ceph-crashcollector-k8s-master003-5b54f4496-hntgb    1/1     Running   0          2m34s
19rook-ceph-mgr-a-58594cfb7d-l7wjg                          1/1     Running   0          2m7s
20rook-ceph-mon-a-84b755686-c6cxr                           1/1     Running   0          3m18s
21rook-ceph-mon-b-776469c655-d5jb7                          1/1     Running   0          3m1s
22rook-ceph-mon-c-64648fbd69-n5jh4                          1/1     Running   0          2m35s
23rook-ceph-operator-87f875bbc-cgvwm                        1/1     Running   3          7m35s
24rook-discover-d9fpp                                       1/1     Running   0          7m31s
25rook-discover-kxmdx                                       1/1     Running   0          7m31s
26rook-discover-z9kzt                                       1/1     Running   0          7m31s

Как видно из вышеприведенного вывода, модуль OSD не запущен.

Облачная платформа контейнеров №6 ~ корпоративное распределенное хранилище Ceph ~ v14.2.10

Просмотрите обнаружение журнала rook-discover-kxmdx. Я смог найти sdb жесткого диска, но не
выполнил никаких операций с процессом жесткого диска . Я внезапно подумал, что ceph также отформатировал жесткий диск с помощью ключа lvm, а затем проверил систему. Как и ожидалось, lvm2 не был установлен , так что начнем сначала:


1kubectl delete -f cluster.yaml
2kubectl delete -f operator.yaml
3kubectl delete -f  common.yaml
4在所有节点删除
5rm -rf /var/lib/rook/*

Установить lvm2


1yum install -y lvm2

Снова развернуть


 1[root@k8s-master001 rook]#  kubectl  get po -n rook
 2NAME                                                      READY   STATUS      RESTARTS   AGE
 3csi-cephfsplugin-9l55s                                    3/3     Running     0          10m
 4csi-cephfsplugin-czwlx                                    3/3     Running     0          10m
 5csi-cephfsplugin-np7n7                                    3/3     Running     0          10m
 6csi-cephfsplugin-provisioner-7646976d94-579qz             5/5     Running     3          10m
 7csi-cephfsplugin-provisioner-7646976d94-v68wg             5/5     Running     0          10m
 8csi-rbdplugin-9q82d                                       3/3     Running     0          10m
 9csi-rbdplugin-l55zq                                       3/3     Running     0          10m
10csi-rbdplugin-provisioner-55c946c8c-ft4xl                 6/6     Running     0          10m
11csi-rbdplugin-provisioner-55c946c8c-zkzh7                 6/6     Running     1          10m
12csi-rbdplugin-wk7cw                                       3/3     Running     0          10m
13rook-ceph-crashcollector-k8s-master001-6c4c78b6cd-gcfvn   1/1     Running     0          6m17s
14rook-ceph-crashcollector-k8s-master002-746b76cd87-47k84   1/1     Running     0          9m7s
15rook-ceph-crashcollector-k8s-master003-5b54f4496-ts64m    1/1     Running     0          8m43s
16rook-ceph-mgr-a-66779c74c5-cnxbm                          1/1     Running     0          8m16s
17rook-ceph-mon-a-5b7bcd77ff-sb4fz                          1/1     Running     0          9m25s
18rook-ceph-mon-b-779c8467d4-bfd4g                          1/1     Running     0          9m7s
19rook-ceph-mon-c-574fd97c79-v5qcd                          1/1     Running     0          8m44s
20rook-ceph-operator-87f875bbc-z7rwn                        1/1     Running     1          11m
21rook-ceph-osd-0-66775549dc-g2ttv                          1/1     Running     0          6m11s
22rook-ceph-osd-2-6c5b4fc67-gtqjf                           1/1     Running     0          6m20s
23rook-ceph-osd-prepare-k8s-master001-jbpgg                 0/1     Completed   0          8m13s
24rook-ceph-osd-prepare-k8s-master002-vfvnp                 0/1     Completed   0          8m12s
25rook-ceph-osd-prepare-k8s-master003-ffd6r                 0/1     Completed   0          6m28s
26rook-discover-74qf2                                       1/1     Running     0          10m
27rook-discover-fk4wn                                       1/1     Running     0          10m
28rook-discover-fvbcf                                       1/1     Running     0          10m

Наконец-то увидел бегущую ладью-цеф-осд- * Под. Если osd не запущен, ceph не может предоставить емкость хранилища.

4. Создайте ceph-dashboard


1[root@k8s-master001 rook]# kubectl apply -f dashboard-external-https.yaml
2service/rook-ceph-mgr-dashboard-external-https created
3
4使用如下命令查询dashboard的admin密码
5MGR_POD=`kubectl get pod -n rook | grep mgr | awk '{print $1}'`
6kubectl -n rook-ceph logs $MGR_POD | grep password

5. Установите инструмент ceph-tool, который является клиентским инструментом ceph, вы можете использовать команду ceph для управления кластером ceph.


1[root@k8s-master001 rook]# kubectl apply -f toolbox.yaml

6. Создайте класс хранилища кластера kubernetes, reclaimPolicy по умолчанию: измените политику с «Удалить» на «Сохранить», в зависимости от ваших потребностей.


1[root@k8s-master001 rook]# kubectl  apply -f storageclass.yaml
2cephblockpool.ceph.rook.io/k8spool created
3storageclass.storage.k8s.io/rook-ceph created

Используйте ceph для обеспечения хранилища кубернетов


Убедитесь, что класс хранилища можно использовать. Здесь nodeSelector используется для назначения модуля конкретному компьютеру или не установлен.


 1---
 2apiVersion: apps/v1
 3kind: StatefulSet
 4metadata:
 5  name: demo001
 6  labels:
 7    app: demo00
 8spec:
 9  serviceName: demo001
10  replicas: 1
11  selector:
12    matchLabels:
13      app: demo001
14  template:
15    metadata:
16      labels:
17        app: demo001
18    spec:
19      terminationGracePeriodSeconds: 180
20      nodeSelector:
21        kubernetes.io/hostname: k8s-master001
22      containers:
23      - name: demo001
24        image: nginx
25        imagePullPolicy: IfNotPresent
26        ports:
27        - containerPort: 80
28          name: port
29        volumeMounts:
30        - name: volume
31          mountPath: /var/www/html
32  volumeClaimTemplates:
33  - metadata:
34      name: volume
35    spec:
36      accessModes: ["ReadWriteOnce"]
37      storageClassName: rook-ceph
38      resources:
39        requests:
40          storage: 1Gi

Выполнить развертывание kubectl apply -f demo.yaml


 1[root@k8s-master001 rook]# kubectl  get po
 2NAME        READY   STATUS              RESTARTS   AGE
 3demo001-0   1/1     Running             0          78s
 4查看可提供服务的存储类
 5[root@k8s-master001 rook]# kubectl  get sc 
 6NAME        PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
 7rook-ceph   rook.rbd.csi.ceph.com   Retain          Immediate           true                   8m15s
 8看已经创建的存储卷
 9[root@k8s-master001 rook]# kubectl  get pv,pvc
10NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM     STORAGECLASS   REASON   AGE
11persistentvolume/pvc-e96e54cb-88bb-44b0-a07d-19cbb36fe739   1Gi   RWO  Retain Bound  default/volume-demo001-0   rook-ceph               104s
12
13NAME          STATUS   VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS   AGE
14persistentvolumeclaim/volume-demo001-0   Bound    pvc-e96e54cb-88bb-44b0-a07d-19cbb36fe739   1Gi RWO    rook-ceph      110s

Как видно из вышеприведенного вывода, кубернеты создали PV: pvc-e96e54cb-88bb-44b0-a07d-19cbb36fe739, вызвав класс хранилища, и связали его с PVC: volume-demo001-0.
Теперь мы заходим в pod nginx, чтобы просмотреть ситуацию с подключенным диском.


1[root@k8s-master001 rook]# kubectl  exec -ti demo001-0  /bin/sh
2kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
3# df -h 
4Filesystem               Size  Used Avail Use% Mounted on
5overlay                   50G  5.6G   45G  12% /
6/dev/rbd0                976M  2.6M  958M   1% /var/www/html

Здесь / dev / rbd0 - это внутреннее хранилище, предоставляемое кластером ceph для nginx, размером 1 ГБ, и оно указано в файле развертывания demo.yaml.

Краткое изложение того, как избегать ям


1. Поскольку ceph нуждается в системном инструменте lvm2 при создании OSD, лучше всего установить его заранее перед развертыванием.
2. При указании информации о жестком диске в cluster.yaml лучше всего использовать имя хоста или убедиться, что система DNS разрешает правильно.


1nodes:
2    - name: "10.26.25.20"  #这个地方最好写hostname
3      devices:
4      - name: "sdb"

3. Не создавайте вручную разделы для жесткого диска, используемого ceph.
4. При повторном развертывании не забудьте удалить каталог / var / lib / rook / перед повторным развертыванием, чтобы не оставалась старая информация о кластере.
5. Лучше всего использовать метки в производственной среде для установки ceph на назначенный узел, избегая установки на главном узле.

Облачная платформа контейнеров №6 ~ корпоративное распределенное хранилище Ceph ~ v14.2.10
Примечание: изображения в статье взяты из Интернета. Если есть какие-либо нарушения, пожалуйста, свяжитесь со мной, чтобы удалить их вовремя.

рекомендация

отblog.51cto.com/15060545/2657495