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

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

スコフィールド初心者の運用と保守の話

前書き


統合分散ストレージシステムとして、cephは高性能、高可用性、および高スケーラビリティを提供します。cephの統合は、ファイルシステム、ブロックストレージ、オブジェクトストレージを提供できることです。クラウド環境では、cephは通常、高いデータ可用性を確保するためのバックエンドストレージとして使用されます。
cephは2004年に公開され、コミュニティにオープンソース化されました。10年以上の開発の後、現在、多くのクラウドベンダーによってサポートされ、広く使用されています。たとえば、openstack \ kubernetes \ virtual machinesystemなどです。
アーキテクチャ図:

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

特徴


  • 高性能は
    CRUSHアルゴリズムを採用し、データ分散はバランスが取れており、並列処理は高いです。
    ディザスタリカバリドメインを分離することで、クロスマシンルーム、ラック認識など、さまざまな負荷のコピー配置ルールを実装できます。
    数千のストレージノードの規模をサポートし、テラバイトからペタバイトのデータをサポートできます。
  • 高可用性
    レプリカ数は柔軟に制御できます。
    フォールトドメインの分離と強力なデータ整合性をサポートします。
    さまざまな障害シナリオが自動的に修復され、自己回復します。
    単一障害点なし、自動管理。
  • 高いスケーラビリティと
    分散化。
    柔軟な拡張。
    ノードの数が増えると、直線的に増加します。
    ブロックストレージ、ファイルストレージ、オブジェクトストレージ、
    カスタムインターフェイス、多言語ドライバーの3つのストレージインターフェイスをサポートします

    展開方法


1. kubernetesにストレージサービスを提供するための独立したストレージクラスターとしてベアメタルにデプロイします(オンライン環境に推奨)
。2。kubernetesクラスターにデプロイし、Rookを使用してcephを管理します。Rookは、Cephクラスター管理機能を提供できるオペレーターです。CRDコントローラーを使用して、Cephリソースをデプロイおよび管理します。ベアメタルへの展開と比較して。kubernetesに近いですが、新しいことです。安定性とトラブルシューティングの難しさは不確かであり、生成環境を単独で評価する必要があります。
3.テストとして、この記事ではrookを使用してcephクラスターをデプロイします。
最初にアーキテクチャ図を見てください

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

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

上記の2つの公式図からわかるように、
Rook Operatorはコアコンポーネントであり、主にストレージクラスターの管理と、ストレージクラスターの状態を確認するためのストレージデーモンの監視に使用されます。
Rook Agentは各ストレージノードに対して実行され、統合のためにFlexVolumeプラグインとKubernetesストレージボリュームコントロールフレームワーク(CSI)で構成されます。
Rookは、Kubernetes Podの形式を使用して、CephのMON、OSD、およびMGRデーモンをデプロイします。
4. cephをデプロイする前に、少なくとも1つをテストする場合は、サーバーにcephクラスターが使用するための空きハードディスク(通常は3つ以上)があることを確認する必要があります。
以下に示すように、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

rook-cephをデプロイする


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ポッドは実行されていません。

Container Cloud Platform No.6〜Enterprise Distributed Storage 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

最後に、rook-ceph-osd- *ポッドが実行されているのを見ました。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クライアントツールであるceph-toolツールをインストールします。cephコマンドを使用してcephクラスターを管理できます。


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

6. kubernetesクラスターストレージクラス(デフォルトのreclaimPolicy)を作成します。必要に応じて、ポリシーをDeleteからRetainに変更します。


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

cephを使用してkubernetesのストレージを提供します


ストレージクラスを使用できることを確認します。ここでは、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

デプロイを実行しますkubectlapply -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

上記の出力からわかるように、kubernetesはストレージクラスを呼び出してPV:pvc-e96e54cb-88bb-44b0-a07d-19cbb36fe739を作成し、PVC:volume-demo001-0でバインドしました。
次に、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は、nginx用にcephクラスターによって提供されるバックエンドストレージであり、サイズは1Gであり、demo.yamlデプロイメントファイルで指定されています。

ピット回避のまとめ


1. cephはosdを作成するときにシステムツールlvm2を必要とするため、デプロイする前に事前にインストールすることをお勧めします。
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をインストールすることをお勧めします。

Container Cloud Platform No.6〜Enterprise Distributed Storage Ceph〜v14.2.10
注:記事の写真はインターネットからのものです。侵害がある場合は、時間内に削除するために私に連絡してください。

おすすめ

転載: blog.51cto.com/15060545/2657495