kubernets1.13.1クラスタceph rbdブロックストレージを使用


リファレンスドキュメント
https://github.com/kubernetes/examples/tree/master/staging/volumes/rbd
http://docs.ceph.com/docs/mimic/rados/operations/pools/
https://blog.csdn.net/aixiaoyang168/article/details/78999851 
https://www.cnblogs.com/keithtt/p/6410302.html
https://kubernetes.io/docs/concepts/storage/volumes/
https://kubernetes.io/docs/concepts/storage/persistent-volumes/
https://blog.csdn.net/wenwenxiong/article/details/78406136
http://www.mamicode.com/info-detail-1701743.html

ドキュメントディレクトリ
  • kubernetes1.13.1+etcd3.3.10+flanneld0.10クラスタ配置
  • kubernetes1.13.1 kuberneted-dashboard v 1を配備する.10.1
  • kubernetes1.13.1 coredns
  • の導入
  • kubernetes1.13.1 ingress-nginxを配備しhttps転送dashboard
  • を構成する
  • kubernetes1.13.1 metrics-server 0を配備する.3.1
  • kubernetes1.13.1クラスタ使用ceph rbdメモリブロック
  • kubernetes1.13.1クラスタとceph rbdを組み合わせた最新バージョンjenkins
  • の導入
  • kubernetes1.13.1クラスタインストールパッケージ管理ツールhelm
  • kubernetes1.13.1クラスタ統合harbor-helm
  • 概要
    Cephはオブジェクトストレージ、ファイルシステムおよびブロックストレージをサポートし、3つの統合ストレージタイプであり、kubernetesのサンプルにはcephfsとrbdの2つの使用方法の紹介があり、cephfsはnodeノードインストールcephをサポートする必要があり、rbdはnodeノードインストールceph-commonをサポートする必要がある.使用上の違いは以下の通りです.
    Volume Plugin   ReadWriteOnce   ReadOnlyMany    ReadWriteMany
    CephFS              ✓               ✓               ✓
    RBD                 ✓               ✓               -

    きほんかんきょう
    k 81クラスタ1.13.バージョン1
    [root@elasticsearch01 ~]# kubectl get nodes
    NAME        STATUS   ROLES    AGE   VERSION
    10.2.8.34   Ready       24d   v1.13.1
    10.2.8.65   Ready       24d   v1.13.1

    Cephクラスタluminousバージョン
    [root@ceph01 ~]# ceph -s
      services:
        mon: 3 daemons, quorum ceph01,ceph02,ceph03
        mgr: ceph03(active), standbys: ceph02, ceph01
        osd: 24 osds: 24 up, 24 in
        rgw: 3 daemons active

    操作手順
    一、cephクラスタはcephプールとミラーを作成する
    [root@ceph01 ~]# ceph osd pool create rbd-k8s 1024 1024 
    For better initial performance on pools expected to store a large number of objects, consider supplying the expected_num_objects parameter when creating the pool.
    
    [root@ceph01 ~]# ceph osd lspools 
    1 rbd-es,2 .rgw.root,3 default.rgw.control,4 default.rgw.meta,5 default.rgw.log,6 default.rgw.buckets.index,7 default.rgw.buckets.data,8 default.rgw.buckets.non-ec,9 rbd-k8s,
    
    [root@ceph01 ~]# rbd create rbd-k8s/cephimage1 --size 10240
    [root@ceph01 ~]# rbd create rbd-k8s/cephimage2 --size 20480
    [root@ceph01 ~]# rbd create rbd-k8s/cephimage3 --size 40960
    [root@ceph01 ~]# rbd list rbd-k8s
    cephimage1
    cephimage2
    cephimage3

    二、k 8 sクラスタceph rbdブロックストレージを使用
    1、サンプルのダウンロード
    [root@elasticsearch01 ~]# git clone https://github.com/kubernetes/examples.git
    Cloning into 'examples'...
    remote: Enumerating objects: 11475, done.
    remote: Total 11475 (delta 0), reused 0 (delta 0), pack-reused 11475
    Receiving objects: 100% (11475/11475), 16.94 MiB | 6.00 MiB/s, done.
    Resolving deltas: 100% (6122/6122), done.
    
    [root@elasticsearch01 ~]# cd examples/staging/volumes/rbd
    [root@elasticsearch01 rbd]# ls
    rbd-with-secret.yaml  rbd.yaml  README.md  secret
    [root@elasticsearch01 rbd]# cp -a ./rbd /k8s/yaml/volumes/

    2、k 8 sクラスタノードcephクライアントのインストール
    [root@elasticsearch01 ceph]# yum  install ceph-common

    3、rbd-with-secret.を修正するyamlプロファイルを変更すると、次のように構成されます.
    [root@elasticsearch01 rbd]# cat rbd-with-secret.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: rbd2
    spec:
      containers:
        - image: kubernetes/pause
          name: rbd-rw
          volumeMounts:
          - name: rbdpd
            mountPath: /mnt/rbd
      volumes:
        - name: rbdpd
          rbd:
            monitors:
            - '10.0.4.10:6789'
            - '10.0.4.13:6789'
            - '10.0.4.15:6789'
            pool: rbd-k8s
            image: cephimage1
            fsType: ext4
            readOnly: true
            user: admin
            secretRef:
              name: ceph-secret

    実際の状況に応じて以下のパラメータを変更します:monitors:これはCephクラスタのmonitorモニタです.Cephクラスタは複数のmonitorを構成できます.本構成は3つのmonpoolです.これはCephクラスタに格納されたデータを分類して使用します.ここで使用するpoolはrbd-cephimageです.これはCephブロックデバイスのディスクイメージファイルです.ここではcephimage 1 fsType:ファイルシステムタイプ、デフォルトではext 4を使用するreadOnly:読み取り専用かどうか、ここでは読み取り専用を使用するuserをテストします:Ceph ClientがCephストレージクラスタにアクセスするために使用するユーザー名です.ここではadminを使用してkeyring:Cephクラスタ認証に必要な鍵リングです.Cephストレージクラスタを構築する際に生成されるcephです.client.admin.keyringimageformat:これはディスクイメージファイルのフォーマットで、2、または古い1を使用することができます.カーネルバージョンは比較的低い1 imagefeaturesを使用します.これはディスクイメージファイルの特徴です.uname-rはクラスタシステムカーネルがサポートする特性を表示する必要があります.ここでCeontos 7.4カーネルバージョンは3.10です.0-693.el7.x86_64はlayeringのみサポート
    4、ceph認証鍵を使用してクラスタの中でsecretを使用するのはもっと便利で拡張しやすくて安全である
    [root@ceph01 ~]# cat /etc/ceph/ceph.client.admin.keyring 
    [client.admin]
        key = AQBHVp9bPirBCRAAUt6Mjw5PUjiy/RDHyHZrUw==
    
    [root@ceph01 ~]# grep key /etc/ceph/ceph.client.admin.keyring |awk '{printf "%s", $NF}'|base64
    QVFCSFZwOWJQaXJCQ1JBQVV0Nk1qdzVQVWppeS9SREh5SFpyVXc9PQ==

    5、ceph-secretの作成
    [root@elasticsearch01 rbd]# cat secret/ceph-secret.yaml 
    apiVersion: v1
    kind: Secret
    metadata:
      name: ceph-secret
    type: "kubernetes.io/rbd"
    data:
      key: QVFCSFZwOWJQaXJCQ1JBQVV0Nk1qdzVQVWppeS9SREh5SFpyVXc9PQ==
    
    [root@elasticsearch01 rbd]# kubectl create -f secret/ceph-secret.yaml 
    secret/ceph-secret created

    6、podテストrbdを作成公式サイトのケースに従って直接作成すればよい
    [root@elasticsearch01 rbd]# kubectl create -frbd-with-secret.yaml 

    しかし、生産環境でvolumesを直接使用しないと、podsの作成、削除に伴って削除され、データが保存されず、データが失われない必要がある場合は、pvとpvcによって実現する必要があります.
    7、ceph-pvの作成rbdは読み書き一回、読み取り専用複数回であることに注意し、現在はまだ読み書き複数回をサポートしていない.rbdマッピングディスクを日常的に使用する場合もimageは1つのクライアントにしかマウントされていない.Cephfsは複数回の読み書きをサポートできます
    [root@elasticsearch01 rbd]# cat rbd-pv.yaml 
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: ceph-rbd-pv
    spec:
      capacity:
        storage: 20Gi
      accessModes:
        - ReadWriteOnce
      rbd:
        monitors:
          - '10.0.4.10:6789'
          - '10.0.4.13:6789'
          - '10.0.4.15:6789'
        pool: rbd-k8s
        image: cephimage2
        user: admin
        secretRef:
          name: ceph-secret
        fsType: ext4
        readOnly: false
      persistentVolumeReclaimPolicy: Recycle
    
    [root@elasticsearch01 rbd]# kubectl create -f rbd-pv.yaml 
    persistentvolume/ceph-rbd-pv created
    
    [root@elasticsearch01 rbd]# kubectl get pv
    NAME          CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
    ceph-rbd-pv   20Gi       RWO            Recycle          Available  

    8、ceph-pvcの作成
    [root@elasticsearch01 rbd]# cat rbd-pv-claim.yaml 
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ceph-rbd-pv-claim
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
    
    [root@elasticsearch01 rbd]# kubectl create -f rbd-pv-claim.yaml 
    persistentvolumeclaim/ceph-rbd-pv-claim created
    
    [root@elasticsearch01 rbd]# kubectl get pvc
    NAME                STATUS   VOLUME        CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    ceph-rbd-pv-claim   Bound    ceph-rbd-pv   20Gi       RWO                           6s
    
    [root@elasticsearch01 rbd]# kubectl get pv
    NAME          CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                       STORAGECLASS   REASON   AGE
    ceph-rbd-pv   20Gi       RWO            Recycle          Bound    default/ceph-rbd-pv-claim                           5m28s

    9、podを作成するpv、pvc方式でrbdをテストする.
    [root@elasticsearch01 rbd]# cat rbd-pv-pod.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: ceph-rbd-pv-pod1
    spec:
      containers:
      - name: ceph-rbd-pv-busybox
        image: busybox
        command: ["sleep", "60000"]
        volumeMounts:
        - name: ceph-rbd-vol1
          mountPath: /mnt/ceph-rbd-pvc/busybox
          readOnly: false
      volumes:
      - name: ceph-rbd-vol1
        persistentVolumeClaim:
          claimName: ceph-rbd-pv-claim
    
    [root@elasticsearch01 rbd]# kubectl create -f rbd-pv-pod.yaml 
    pod/ceph-rbd-pv-pod1 created
    
    [root@elasticsearch01 rbd]# kubectl get pods
    NAME               READY   STATUS              RESTARTS   AGE
    busybox            1/1     Running             432        18d
    ceph-rbd-pv-pod1   0/1     ContainerCreating   0          19s

    次のようにエラーが発生しました.WaitForAttach failed for volume "ceph-rbd-pv": rbd: map failed exit status 6, rbd output: rbd: sysfs write failed RBD image feature set mismatch. Try disabling features unsupported by the kernel with "rbd feature disable". In some cases useful info is found in syslog - try "dmesg | tail". rbd:map failed:(6)No such device or address解決方法centos 7でいくつかの特性を無効にする.4カーネルではサポートされていないため、本番環境ではk 8 sおよび関連cephはカーネルバージョンの高いシステムを下位オペレーティングシステムrbd feature disable rbd-k 8 s/cephimage 2 exclusive-lock object-map fast-diff deep-flattenとして使用することが望ましい
    [root@ceph01 ~]# rbd feature disable rbd-k8s/cephimage2 exclusive-lock object-map fast-diff deep-flatten

    三、検証効果
    1、k 8 sクラスタエンド検証
    [root@elasticsearch01 rbd]# kubectl get pods -o wide
    NAME               READY   STATUS    RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
    busybox            1/1     Running   432        18d     10.254.35.3   10.2.8.65              
    ceph-rbd-pv-pod1   1/1     Running   0          3m39s   10.254.35.8   10.2.8.65              
    
    [root@elasticsearch02 ceph]# df -h |grep rbd
    /dev/rbd0                  493G  162G  306G  35% /data
    /dev/rbd1                   20G   45M   20G   1% /var/lib/kubelet/plugins/kubernetes.io/rbd/mounts/rbd-k8s-image-cephimage2
    [root@elasticsearch02 ceph]# cd /var/lib/kubelet/plugins/kubernetes.io/rbd/mounts/rbd-k8s-image-cephimage2
    [root@elasticsearch02 rbd-k8s-image-cephimage2]# ls
    lost+found
    
    [root@elasticsearch01 rbd]# kubectl exec -ti ceph-rbd-pv-pod1 sh
    / # df -h
    Filesystem                Size      Used Available Use% Mounted on
    overlay                  49.1G      7.4G     39.1G  16% /
    tmpfs                    64.0M         0     64.0M   0% /dev
    tmpfs                     7.8G         0      7.8G   0% /sys/fs/cgroup
    /dev/vda1                49.1G      7.4G     39.1G  16% /dev/termination-log
    /dev/vda1                49.1G      7.4G     39.1G  16% /etc/resolv.conf
    /dev/vda1                49.1G      7.4G     39.1G  16% /etc/hostname
    /dev/vda1                49.1G      7.4G     39.1G  16% /etc/hosts
    shm                      64.0M         0     64.0M   0% /dev/shm
    /dev/rbd1                19.6G     44.0M     19.5G   0% /mnt/ceph-rbd-pvc/busybox
    tmpfs                     7.8G     12.0K      7.8G   0% /var/run/secrets/kubernetes.io/serviceaccount
    tmpfs                     7.8G         0      7.8G   0% /proc/acpi
    tmpfs                    64.0M         0     64.0M   0% /proc/kcore
    tmpfs                    64.0M         0     64.0M   0% /proc/keys
    tmpfs                    64.0M         0     64.0M   0% /proc/timer_list
    tmpfs                    64.0M         0     64.0M   0% /proc/timer_stats
    tmpfs                    64.0M         0     64.0M   0% /proc/sched_debug
    tmpfs                     7.8G         0      7.8G   0% /proc/scsi
    tmpfs                     7.8G         0      7.8G   0% /sys/firmware
    / # cd /mnt/ceph-rbd-pvc/busybox/
    /mnt/ceph-rbd-pvc/busybox # ls
    lost+found
    /mnt/ceph-rbd-pvc/busybox # touch ceph-rbd-pods
    /mnt/ceph-rbd-pvc/busybox # ls
    ceph-rbd-pods  lost+found
    /mnt/ceph-rbd-pvc/busybox # echo busbox>ceph-rbd-pods 
    /mnt/ceph-rbd-pvc/busybox # cat ceph-rbd-pods 
    busbox
    [root@elasticsearch02 ceph]# cd /var/lib/kubelet/plugins/kubernetes.io/rbd/mounts/rbd-k8s-image-cephimage2
    [root@elasticsearch02 rbd-k8s-image-cephimage2]# ls
    ceph-rbd-pods  lost+found

    2、cephクラスタ端検証
    [root@ceph01 ~]# ceph df
    GLOBAL:
        SIZE        AVAIL       RAW USED     %RAW USED 
        65.9TiB     58.3TiB      7.53TiB         11.43 
    POOLS:
        NAME                           ID     USED        %USED     MAX AVAIL     OBJECTS 
        rbd-es                         1      1.38TiB      7.08       18.1TiB      362911 
        .rgw.root                      2      1.14KiB         0       18.1TiB           4 
        default.rgw.control            3           0B         0       18.1TiB           8 
        default.rgw.meta               4      46.9KiB         0        104GiB         157 
        default.rgw.log                5           0B         0       18.1TiB         345 
        default.rgw.buckets.index      6           0B         0        104GiB        2012 
        default.rgw.buckets.data       7      1.01TiB      5.30       18.1TiB     2090721 
        default.rgw.buckets.non-ec     8           0B         0       18.1TiB           0 
        rbd-k8s                        9       137MiB         0       18.1TiB          67