Longhorn（v1.0） with Rancher

# はじめに

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

※以前の記事（v0.8）：[Longhorn with Rancher](https://qiita.com/t_ume/items/425f7c93e2e7cfaa7d1c)

# 構成
**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) をアタッチ


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

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

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

```shell-session:ディレクトリ構成
$ 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」を設定しないと起動しなかったのですが、今回は指定せず起動しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317159/e5e96a65-4a9c-4d1c-5110-bbbcc8bd1eb0.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317159/926326fc-1ba6-71d5-dbbd-95a16b6f0e7d.png)

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

**Apps**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317159/bc686a1a-58b5-1b35-73f2-b4acfffff86f.png)

**ワークロード**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317159/89b53ba8-05e5-6eb2-b73b-c6e045759be4.png)

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

```yaml: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
```

```shell: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 にマウントさせてみましょう。

```yaml: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
```

```shell: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/