Container Cloud Platform No.6 ~ Enterprise Distributed Storage Ceph ~ v14.2.10

Container Cloud Platform No.6 ~ Enterprise Distributed Storage Ceph ~ v14.2.10

Charla de operación y mantenimiento para principiantes de Scofield

Introducción


Como sistema de almacenamiento distribuido unificado, ceph proporciona alto rendimiento, alta disponibilidad y alta escalabilidad. La unificación de ceph es que puede proporcionar sistemas de archivos, almacenamiento de bloques y almacenamiento de objetos. En un entorno de nube, ceph se usa generalmente como almacenamiento de back-end para garantizar una alta disponibilidad de datos.
ceph se publicó en 2004 y luego se abrió a la comunidad. Después de más de diez años de desarrollo, actualmente es compatible y ampliamente utilizado por muchos proveedores de nube. Por ejemplo, openstack \ kubernetes \ sistema de máquina virtual, etc. . .
Diagrama de arquitectura:

Container Cloud Platform No.6 ~ Enterprise Distributed Storage Ceph ~ v14.2.10

Características


  • El alto rendimiento
    adopta el algoritmo CRUSH, la distribución de datos está equilibrada y el paralelismo es alto.
    El aislamiento del dominio de recuperación ante desastres puede implementar las reglas de colocación de copias de varias cargas, como sala de máquinas cruzadas, reconocimiento de racks, etc.
    Puede admitir la escala de miles de nodos de almacenamiento y admitir terabytes a petabytes de datos.
  • El
    número de réplicas de alta disponibilidad se puede controlar de forma flexible.
    Admite la separación de dominios de fallas y una sólida coherencia de datos.
    Una variedad de escenarios de falla se reparan y curan automáticamente.
    Sin un solo punto de falla, gestión automática.
  • Alta escalabilidad y
    descentralización.
    Expansión flexible.
    Crece linealmente a medida que aumenta el número de nodos.
    Admite tres interfaces de almacenamiento: almacenamiento en bloque, almacenamiento de archivos, almacenamiento de objetos,
    interfaces personalizadas y controladores en varios idiomas

    Método de implementación


1. Implementar en bare metal como un clúster de almacenamiento independiente para proporcionar servicios de almacenamiento para kubernetes (recomendado para entornos en línea)
2. Implementar en el clúster de kubernetes y usar Rook para administrar ceph. Rook es un operador que puede proporcionar capacidades de administración de clústeres de Ceph. Utiliza el controlador CRD para implementar y administrar los recursos de ceph. En comparación con la implementación en bare metal. Está más cerca de kubernetes, pero es algo nuevo. La estabilidad y la dificultad de la resolución de problemas son inciertas, y el entorno de generación debe evaluarse por sí mismo.
3. Como prueba, este artículo usa rook para implementar el clúster ceph.
Primer vistazo al diagrama de arquitectura

Container Cloud Platform No.6 ~ Enterprise Distributed Storage Ceph ~ v14.2.10

Container Cloud Platform No.6 ~ Enterprise Distributed Storage Ceph ~ v14.2.10

Como se puede ver en los dos diagramas oficiales anteriores,
Rook Operator es el componente principal. Se utiliza principalmente para administrar el clúster de almacenamiento y monitorear el demonio de almacenamiento para garantizar el estado del clúster de almacenamiento.
Rook Agent se ejecuta en cada nodo de almacenamiento y está configurado con el complemento FlexVolume y el marco de control de volumen de almacenamiento (CSI) de Kubernetes para la integración.
Rook usa la forma de Kubernetes Pod para implementar los demonios MON, OSD y MGR de Ceph.
4. Antes de implementar ceph, debe asegurarse de que su servidor tenga discos duros libres para que los use el clúster de ceph, generalmente tres o más, si solo prueba al menos uno.
Como se muestra a continuación, sdb es para 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

Implementar rook-ceph


Instale root-operator, implemente este artículo en el espacio de nombres: torre
1, implemente recursos comunes


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. Implementar los recursos del operador


 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. Cree un clúster ceph.
Aquí debe modificar el archivo cluster.yaml para
configurar el nodo de almacenamiento ceph y el disco duro utilizado de acuerdo con la situación real . De lo contrario, se formatearán todos los discos disponibles para el sistema. Aquí necesita para configurar lo siguiente


 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"

Modifique la situación del nodo y el sexo, instale ceph en el nodo con una etiqueta fija, aquí use la etiqueta 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

Para ejecutar el comando de implementación, este enlace necesita descargar algunas imágenes de ceph. Dependiendo de la situación de la red, puede llevar mucho tiempo. . .


 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

Como puede ver en el resultado anterior, no se está ejecutando ningún módulo OSD.

Container Cloud Platform No.6 ~ Enterprise Distributed Storage Ceph ~ v14.2.10

Vea el descubrimiento de registros de rook-discover-kxmdx. Pude encontrar el sdb del disco duro, pero no
realicé ninguna operación en el proceso del disco duro . De repente pensé que ceph también formateó el disco duro a través de la clave lvm, y luego verifiqué el sistema. Como era de esperar, lvm2 no estaba instalado , así que comencemos de nuevo:


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

Instalar lvm2


1yum install -y lvm2

Implementar de nuevo


 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

Finalmente vi rook-ceph-osd- * Pod corriendo. Si osd no se está ejecutando, ceph no puede proporcionar capacidad de almacenamiento.

4. Cree un panel de control de ceph


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. Instale la herramienta ceph-tool, que es una herramienta cliente de ceph, puede usar el comando ceph para administrar el clúster de ceph


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

6. Cree una clase de almacenamiento de clúster de Kubernetes, la reclamación predeterminada: cambie la política de Eliminar a Retener, según sus necesidades.


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

Utilice ceph para proporcionar almacenamiento para kubernetes


Verifique que se pueda usar la clase de almacenamiento. Aquí, nodeSelector se usa para asignar el pod a una máquina específica, o no se establece


 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

Ejecute la implementación 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

Como se puede ver en el resultado anterior, kubernetes creó PV: pvc-e96e54cb-88bb-44b0-a07d-19cbb36fe739 llamando a la clase de almacenamiento y lo vinculó con PVC: volume-demo001-0.
Ahora ingresamos al pod nginx para ver la situación del disco montado


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

Aquí / dev / rbd0 es el almacenamiento de back-end proporcionado por el clúster ceph para nginx, el tamaño es 1G y se especifica en el archivo de implementación demo.yaml.

Resumen de evitar hoyos


1. Debido a que ceph necesita la herramienta del sistema lvm2 al crear osd, es mejor instalarla antes de la implementación.
2. Al especificar la información del disco duro en cluster.yaml, es mejor usar el nombre de host o asegurarse de que el sistema DNS se resuelva correctamente.


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

3. No cree particiones manualmente para el disco duro que utiliza ceph.
4. Si vuelve a implementar, recuerde eliminar el directorio / var / lib / rook / antes de volver a implementar para evitar que quede información antigua del clúster.
5. Es mejor utilizar etiquetas en el entorno de producción para instalar ceph en el nodo designado y evitar la instalación en el nodo principal.

Container Cloud Platform No.6 ~ Enterprise Distributed Storage Ceph ~ v14.2.10
Nota: Las imágenes del artículo son de Internet. Si hay alguna infracción, comuníquese conmigo para eliminarla a tiempo.

Supongo que te gusta

Origin blog.51cto.com/15060545/2657495
Recomendado
Clasificación