Longhorn with Rancher

소개



이번에는 Rancher에서 Longhorn입니다.
소위 컨테이너용 영구 스토리지입니다.
특징으로,
  • PVC에서 동적 프로비저닝
  • 여러 Node에서 복제
  • 웹 대시보드 포함
  • etc.

  • 자세한 이야기는 당사 I씨의 기사를.
    Longhorn + WordPress on GKE

    구성



    Host Machine
    OS: Windows 10
    VirtualBox: 6.0.18

    Guest Machine
    CentOS: 7.6
    docker-ce: 18.09
    kubernetes: 1.17
    Rancher: 2.4.2

    Rancher & k8s
    Rancher & k8s controller/etcd x1
    k8s worker x3
    ※worker에는 스토리지로서/(8G) 외에 docker(50G), longhorn(50G)을 첨부

    이전 준비



    위의 서버 구성을 구축 한 후 시작합니다.

    공식적으로 iscsi-initiator-utils를 설치하고 필요한 디스크를 마운트합니다.

    필수 패키지 설치
    $ yum install iscsi-initiator-utils -y
    

    이번에는 스토리지를 별도로 준비하고 있지만, 시도하면 불필요합니다.
    필요한 디스크 크기만 확보하십시오.
    ※「/var/lib/rancher/longhorn」에 pv 가 작성되어 갑니다.

    디스크 마운트 확인
    $ lsblk -o NAME,FSTYPE,MOUNTPOINT -i
    NAME              FSTYPE      MOUNTPOINT
    sda
    |-sda1            xfs         /boot
    `-sda2            LVM2_member
      |-centos-root   xfs         /
      `-centos-swap   swap        ★swap は無効化済み
    sdb
    `-sdb1            LVM2_member
      `-var-docker    ext4        /var/lib/docker
    sdc
    `-sdc1            LVM2_member
      `-longhorn-data ext4        /var/lib/rancher/longhorn
    

    Deploy



    Rancher 의 library catalog 에 포함되어 있으므로, 「apps」⇒「기동」에서 Deploy 합니다.

    Longhorn을 선택하면 다음 화면이 표시됩니다.
    이름, 네임스페이스(namespace)는 디폴트의 「longhorn-system」입니다.
    템플릿 버전은 "0.8.0"입니다.



    제 경우에는 "loghorn-driver-deployer"Pod가 CrashLoopBack에서 시작되지 않았습니다.
    이 때문에, 「Kubelet Root Directory」에 이하를 지정하는 것으로 기동했습니다.Kubelet Root Directory:/var/lib/kubelet


    PV 작성 대상의 경로를 「Default Data Path」로 지정합니다.Default Data Path:/var/lib/rancher/longhorn


    Dashboard(관리 화면)의 서비스를 이번에는 「NodePort」로 지정하고 있습니다.
    L7 LB도 있으므로 기호로 지정하십시오.



    마지막으로 "시작"버튼으로 Deploy입니다.
    환경에 따라 다르지만 5 분 이내에 시작한다고 생각합니다.

    테스트



    실제로 PV/PVC를 만들어 봅시다.

    pvc.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: tmp
      namespace: default
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      storageClassName: longhorn
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mnt
      namespace: default
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 3Gi
      storageClassName: longhorn
    

    pv, pvc 만들기
    $ kubectl apply -f pvc.yaml
    persistentvolumeclaim/tmp created
    persistentvolumeclaim/mnt created
    
    $ kubectl get pvc,pv
    NAME                        STATUS   VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    persistentvolumeclaim/mnt   Bound    pvc-xxx   3Gi        RWO            longhorn       9s
    persistentvolumeclaim/tmp   Bound    pvc-yyy   1Gi        RWO            longhorn       10s
    
    NAME                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM         STORAGECLASS   REASON   AGE
    persistentvolume/pvc-xxx   3Gi        RWO            Delete           Bound    default/mnt   longhorn                5s
    persistentvolume/pvc-yyy   1Gi        RWO            Delete           Bound    default/tmp   longhorn                5s
    

    테스트 포드를 만들어 마운트해 봅시다.

    pod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: alpine
      namespace: default
    spec:
      containers:
      - image: alpine:edge
        name: alpine
        volumeMounts:
        - mountPath: /mnt
          name: mnt
        - mountPath: /tmp
          name: tmp
        tty: true
      volumes:
      - name: mnt
        persistentVolumeClaim:
          claimName: mnt
      - name: tmp
        persistentVolumeClaim:
          claimName: tmp
    

    pod 작성
    $ kubectl apply -f pod.yaml
    pod/alpine created
    
    $ kubectl get pod
    NAME     READY   STATUS    RESTARTS   AGE
    alpine   1/1     Running   0          16s
    
    $ kubectl exec alpine -- df -hT /mnt /tmp
    Filesystem           Type            Size      Used Available Use% Mounted on
    /dev/longhorn/pvc-xxx
                         ext4            2.9G      9.0M      2.9G   0% /mnt
    /dev/longhorn/pvc-yyy
                         ext4          975.9M      2.5M    957.4M   0% /tmp
    
    

    무사히 pv/pvc가 만들어졌으며 포드에 마운트 할 수있었습니다.

    대시보드



    절각이므로 Dashboard의 스크린샷을 몇 장인가.
    Dashboard는 Apps에 링크되어 있습니다.
    ※이하의 경우 「31833/tcp」가 Dashboard에의 링크입니다.



    우선은, 「dashboard」화면입니다.
    그래프와 아래에는 이벤트 로그가 표시됩니다.



    다음에 「Node」화면입니다.
    노드별 리소스 상태를 표시합니다.



    마지막으로 "Volume"화면입니다.
    pv로 내보내는 볼륨의 목록이 표시됩니다.
    Attach 대상 포드도 표시됩니다.



    또한 각 볼륨을 선택하면 자세한 화면으로 전환됩니다.
    볼륨의 Snapshot 상태를 보거나 Snapshot/Backup을 예약할 수도 있습니다.



    결론



    클러스터 스토리지 환경은 Rancher 카탈로그에서 배포할 수 있으므로 매우 편리하게 사용할 수 있습니다.
    또, 기능도 필요 충분히 있기 때문에, 여러가지 쓰러뜨릴 수 있다고 생각합니다.
    어딘가에서 다른 스토리지 환경과의 I/O 벤치마크 등도 보고 싶다고 생각합니다.

    좋은 웹페이지 즐겨찾기