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

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

Entretien Scofield novice sur le fonctionnement et la maintenance

introduction


En tant que système de stockage distribué unifié, ceph offre des performances élevées, une haute disponibilité et une évolutivité élevée. L'unification de ceph est qu'il peut fournir des systèmes de fichiers, des blocs de stockage et des objets de stockage. Dans un environnement cloud, ceph est généralement utilisé comme stockage back-end pour garantir une haute disponibilité des données.
ceph a été publié en 2004 puis ouvert à la communauté. Après plus de dix ans de développement, il est actuellement pris en charge et largement utilisé par de nombreux fournisseurs de cloud. Par exemple, openstack \ kubernetes \ système de machine virtuelle, etc. . .
Diagramme d'architecture:

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

Fonctionnalités


  • La haute performance
    adopte l'algorithme CRUSH, la distribution des données est équilibrée et le parallélisme est élevé.
    L'isolation du domaine de reprise après sinistre peut implémenter les règles de placement de copie de diverses charges, telles que la salle inter-machines, la détection des racks, etc.
    Il peut prendre en charge l'échelle de milliers de nœuds de stockage et prendre en charge des téraoctets à pétaoctets de données.
  • Le
    nombre de réplicas à haute disponibilité peut être contrôlé de manière flexible.
    Prend en charge la séparation des domaines de pannes et une forte cohérence des données.
    Une variété de scénarios de défaillance sont automatiquement réparés et auto-guéris.
    Pas de point de défaillance unique, gestion automatique.
  • Évolutivité et
    décentralisation élevées .
    Expansion flexible.
    Il croît linéairement à mesure que le nombre de nœuds augmente.
    Prend en charge trois interfaces de stockage: stockage de blocs, stockage de fichiers, stockage d'objets,
    interfaces personnalisées et pilotes multilingues

    Méthode de déploiement


1. Déployez sur du métal nu en tant que cluster de stockage indépendant pour fournir des services de stockage pour kubernetes (recommandé pour l'environnement en ligne)
2. Déployez sur le cluster kubernetes et utilisez Rook pour gérer ceph. Rook est un opérateur qui peut fournir des capacités de gestion de cluster Ceph. Il utilise le contrôleur CRD pour déployer et gérer les ressources ceph. Par rapport au déploiement sur du métal nu. C'est plus proche de kubernetes, mais c'est nouveau, la stabilité et la difficulté de dépannage sont incertaines, et l'environnement de génération doit être évalué par lui-même.
3. À titre de test, cet article utilise rook pour déployer le cluster ceph.
Premier regard sur le diagramme d'architecture

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

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

Comme le montrent les deux schémas officiels ci-dessus,
Rook Operator est le composant principal.Il est principalement utilisé pour gérer le cluster de stockage et surveiller le démon de stockage pour assurer la santé du cluster de stockage.
Rook Agent s'exécute sur chaque nœud de stockage et est configuré avec le plug-in FlexVolume et le cadre de contrôle du volume de stockage (CSI) Kubernetes pour l'intégration.
Rook utilise la forme de Kubernetes Pod pour déployer les démons MON, OSD et MGR de Ceph.
4. Avant de déployer ceph, vous devez vous assurer que votre serveur dispose de disques durs libres pour le cluster ceph à utiliser, généralement trois ou plus, si vous en testez au moins un.
Comme indiqué ci-dessous, sdb est pour 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

Déployer rook-ceph


Installez root-operator, déployez cet article dans l'espace de noms: rook
1, déployez des ressources communes


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. Déployer les ressources des opérateurs


 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. Créez un cluster ceph.
Ici, vous devez modifier le fichier cluster.yaml pour
définir le nœud de stockage ceph et le disque dur utilisé en fonction de la situation réelle . Sinon, tous les disques disponibles pour le système seront formatés. Ici, vous avez besoin pour régler les éléments suivants


 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"

Modifiez la situation et le sexe du nœud, installez ceph sur le nœud avec une étiquette fixe, utilisez ici l'étiquette 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

Pour exécuter la commande de déploiement, ce lien doit télécharger des images de ceph. Selon la situation du réseau, cela peut prendre un certain temps. . .


 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

Comme vous pouvez le voir dans la sortie ci-dessus, aucun pod OSD n'est en cours d'exécution.

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

Afficher la découverte du journal rook-discover-kxmdx. J'ai pu trouver le disque dur sdb, mais je n'ai
effectué aucune opération sur le processus du disque dur . J'ai soudainement pensé que ceph avait également formaté le disque dur via la clé lvm, puis j'ai vérifié le système. Comme prévu, lvm2 n'était pas installé , alors recommençons:


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

Installez lvm2


1yum install -y lvm2

Déployez à nouveau


 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

Enfin vu rook-ceph-osd- * Pod en cours d'exécution. Si osd n'est pas en cours d'exécution, ceph ne peut pas fournir de capacité de stockage.

4. Créez un tableau de bord 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. Installez l'outil ceph-tool, qui est un outil client ceph, vous pouvez utiliser la commande ceph pour gérer le cluster ceph


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

6. Créez une classe de stockage de cluster kubernetes, reclaimPolicy par défaut: modifiez la stratégie de Supprimer à Conserver, en fonction de vos besoins.


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

Utilisez ceph pour fournir du stockage pour Kubernetes


Vérifiez que la classe de stockage peut être utilisée. Ici, nodeSelector est utilisé pour attribuer un pod à une machine spécifique, ou n'est pas défini


 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

Exécuter le déploiement 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

Comme on peut le voir à partir de la sortie ci-dessus, kubernetes a créé PV: pvc-e96e54cb-88bb-44b0-a07d-19cbb36fe739 en appelant la classe de stockage et l'a lié avec PVC: volume-demo001-0.
Maintenant, nous entrons dans le pod nginx pour afficher la situation du disque monté


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

Ici / dev / rbd0 est le stockage back-end fourni par le cluster ceph pour nginx, la taille est 1G et il est spécifié dans le fichier de déploiement demo.yaml.

Résumé pour éviter les fosses


1. Étant donné que ceph a besoin de l'outil système lvm2 lors de la création d'osd, il est préférable de l'installer à l'avance avant le déploiement.
2. Lorsque vous spécifiez les informations du disque dur dans cluster.yaml, il est préférable d'utiliser le nom d'hôte ou de vous assurer que le système DNS se résout correctement.


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

3. Ne créez pas manuellement des partitions pour le disque dur utilisé par ceph.
4. Si vous redéployez, n'oubliez pas de supprimer le répertoire / var / lib / rook / avant de redéployer pour éviter de conserver les anciennes informations de cluster.
5. Il est préférable d'utiliser des étiquettes dans l'environnement de production pour installer ceph sur le nœud désigné tout en évitant l'installation sur le nœud maître.

Container Cloud Platform No.6 ~ Enterprise Distributed Storage Ceph ~ v14.2.10
Remarque: les images de l'article proviennent d'Internet. En cas d'infraction, veuillez me contacter pour la supprimer à temps.

Je suppose que tu aimes

Origine blog.51cto.com/15060545/2657495
conseillé
Classement