1
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

はじめに

今回は Rancher で Longhorn です。
いわゆるコンテナ用永続ストレージです。
特徴として、

  • PVC から動的プロビジョニング
  • 複数 Node でレプリカ
  • Web ダッシュボード付属
  • 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」です。

qiita001.jpg

私の場合「loghorn-driver-deployer」Pod が CrashLoopBack で起動しませんでした。
このため、「Kubelet Root Directory」に以下を指定することで起動しました。
Kubelet Root Directory:/var/lib/kubelet

qiita002.jpg

PV 作成先のパスを「Default Data Path」で指定します。
Default Data Path:/var/lib/rancher/longhorn

qiita003.jpg

Dashboard(管理画面) のサービスを今回は「NodePort」で指定しています。
L7 LB もあるのでお好みで指定してください。

qiita004.jpg

最後に「起動」ボタンで 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 作ってマウントしてみましょう。

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 が作成され、pod にマウントできました。

Dashboard

折角なので Dashboard のスクリーンショットを何枚か。
Dashboard は Apps にリンクあります。
※以下の場合「31833/tcp」が Dashboard へのリンクです。

image.png

まずは、「dashboard」画面です。
グラフと下にはイベントログが表示されています。

image.png

次に「Node」画面です。
Node 毎のリソース状況が表示されます。

image.png

最後に「Volume」画面です。
pv で払い出しているボリュームの一覧が表示されます。
Attach 先の Pod も表示されています。

image.png

また、各 Volume を選択すると詳細な画面に遷移します。
Volume の Snapshot の状況の表示や Snapshot/Backup のスケジュールも設定できます。

image.png

おわりに

クラスタストレージ環境が Rancher のカタログで Deploy できるので非常にお手軽に利用できます。
また、機能も必要十分にあるため、色々使い倒していけるのではと思います。
どこかで他のストレージ環境との I/O ベンチマークなども見ていければと思います。

1
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?