Longhorn(v1.0) with Rancher


はじめに

今回は Rancher で Longhorn(v1.0) です。
以前の記事でも取り上げたのですが、今回は正式リリース版で試そうと思います。

※以前の記事(v0.8):Longhorn with Rancher

構成

VM
CentOS:7.6
docker-ce:18.09
kubernetes:1.18
Rancher:2.4.6

Rancher & k8s
Rancher & k8s controller/etcd x1
k8s worker x3
Longhorn:1.0.2
※worker にはストレージとして、/(8G) の他に docker(50G)、longhorn(50G) をアタッチ

前準備

まずは必要なパッケージをインストールします。

必須パッケージインストール
$ yum install iscsi-initiator-utils -y

ディスク、マウントの構成は以下の通りです。
※前の記事からの変更点として Longhorn のデフォルトディレクトリに変更があったので、
マウントポイントのパスを「/var/lib/rancher/longhorn」から「/var/lib/longhorn」に変更しています。

ディレクトリ構成
$ lsblk
NAME              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                 8:0    0    8G  0 disk
├─sda1              8:1    0    1G  0 part /boot
└─sda2              8:2    0    7G  0 part
  ├─centos-root   253:0    0  6.2G  0 lvm  /
  └─centos-swap   253:1    0  820M  0 lvm  [SWAP]
sdb                 8:16   0   50G  0 disk
└─sdb1              8:17   0   50G  0 part
  └─var-docker    253:2    0   50G  0 lvm  /var/lib/docker
sdc                 8:32   0   50G  0 disk
└─sdc1              8:33   0   50G  0 part
  └─longhorn-data 253:3    0   50G  0 lvm  /var/lib/longhorn

Deploy

Rancher の library catalog に含まれているので、「apps」⇒「起動」から Deploy します。

Longhorn を選択すると以下の画面が表示されます。
テンプレートバージョンは「1.0.2」です。
前の記事では「Kubelet Root Directory」を設定しないと起動しなかったのですが、今回は指定せず起動しました。

Dashboard(管理画面) のアクセス方法を「NodePort」で指定します。

「起動」をクリックするとデプロイが始まります。

Apps

ワークロード

テスト

テスト用に PV / PVC を作って Pod にマウントさせてみましょう。

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-xxxxx   3Gi        RWO            longhorn       20s
persistentvolumeclaim/tmp   Bound    pvc-yyyyy   1Gi        RWO            longhorn       20s

NAME                         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM         STORAGECLASS   REASON   AGE
persistentvolume/pvc-xxxxx   3Gi        RWO            Delete           Bound    default/mnt   longhorn                13s
persistentvolume/pvc-yyyyy   1Gi        RWO            Delete           Bound    default/tmp   longhorn                13s

pv/pvc が作成できたので、Pod にマウントさせてみましょう。

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          33s

$  kubectl exec alpine -- df -hT /mnt /tmp
Filesystem               Type     Size      Used  Available Use% Mounted on
/dev/longhorn/pvc-xxxxx  ext4     975.9M    2.5M  957.4M    0%   /tmp
/dev/longhorn/pvc-yyyyy  ext4     2.9G      9.0M  2.9G      0%   /mnt

無事に pv/pvc が作成され、pod にマウントできました。

おわりに

正式版になりましたが、相変わらずシンプルで使いやすいです。
PV/PVC を簡単に用意できるのは魅力的だと思います。

今回は Rancher の管理画面からデプロイしましたが、helm 版もあるので helm を使っている方は下記でお試しできます。
https://longhorn.io/docs/1.0.2/deploy/install/install-with-helm/