前提

手順

  1. longhorn.shを実行するだけ

導入

これを実行すれば,PVCのStorageClassをLonghornに設定するだけで,使うことができます.

参考

https://longhorn.io/docs/1.5.3/deploy/install/

https://longhorn.io/docs/1.5.3/deploy/install/install-with-kubectl/

longhorn.sh
#!/bin/bash
set -eux

# LonghornのiSCSIサポートをインストール
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.5.3/deploy/prerequisite/longhorn-iscsi-installation.yaml

# LonghornのNFSサポートをインストール
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.5.3/deploy/prerequisite/longhorn-nfs-installation.yaml

# Longhorn v1.5.3のインストール
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.5.3/deploy/longhorn.yaml

# ステータス確認前に待つ
echo "Sleeping for 120 seconds for resources to be up..."
kubectl wait --for=condition=Ready pod -l app=longhorn-manager -n longhorn-system --timeout=120s

# LonghornのPodとサービスの状態を確認
kubectl -n longhorn-system get pod
kubectl -n longhorn-system get svc longhorn-frontend
longhorn.sh
#!/bin/bash
set -eux

# LonghornのiSCSIサポートをインストール
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.6.2/deploy/prerequisite/longhorn-iscsi-installation.yaml

# LonghornのNFSサポートをインストール
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.6.2/deploy/prerequisite/longhorn-nfs-installation.yaml

# 前提環境の確認
if ! curl -sSfL https://raw.githubusercontent.com/longhorn/longhorn/v1.6.2/scripts/environment_check.sh | bash; then
    echo "環境チェックに失敗しました。終了します。"
    exit 1
fi

# Longhorn v1.6.2のインストール
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.6.2/deploy/longhorn.yaml

# LonghornマネージャーPodが準備完了になるのを待機(タイムアウト付き)
echo "LonghornマネージャーのPodが起動するのを待っています。"
if ! kubectl wait --for=condition=Ready pod -l app=longhorn-manager -n longhorn-system --timeout=300s; then
    echo "LonghornマネージャーPodが時間内に準備完了になりませんでした。終了します。"
    exit 1
fi

# LonghornのPodとサービスの状態を確認
kubectl -n longhorn-system get pod
kubectl -n longhorn-system get svc longhorn-frontend

しばらくした後のLonghornのPodとサービスの状態

LonghornのPod状態

$ kubectl -n longhorn-system get pod
NAME                                                READY   STATUS    RESTARTS   AGE
longhorn-manager-fkfww                              1/1     Running   0          5m32s
longhorn-ui-8568cffb59-dp4pv                        1/1     Running   0          5m32s
longhorn-driver-deployer-7bbc9d5b6f-wgjqh           1/1     Running   0          5m32s
longhorn-ui-8568cffb59-948dm                        1/1     Running   0          5m32s
instance-manager-4752bede5aca439f851e177acd21ab5c   1/1     Running   0          5m10s
engine-image-ei-68f17757-kj65n                      1/1     Running   0          5m11s
longhorn-manager-88jnq                              1/1     Running   0          5m32s
csi-resizer-77cddbfc7c-75rvl                        1/1     Running   0          3m6s
csi-resizer-77cddbfc7c-tjkf5                        1/1     Running   0          3m6s
csi-provisioner-65cb5cc4ff-b42fg                    1/1     Running   0          3m6s
csi-snapshotter-78cb65cc4f-m482q                    1/1     Running   0          3m6s
csi-provisioner-65cb5cc4ff-whb9l                    1/1     Running   0          3m6s
csi-snapshotter-78cb65cc4f-d47nl                    1/1     Running   0          3m6s
csi-attacher-f98ff75fb-5jr5j                        1/1     Running   0          3m6s
csi-attacher-f98ff75fb-nr87r                        1/1     Running   0          3m6s
longhorn-csi-plugin-5qmcq                           3/3     Running   0          3m5s
engine-image-ei-68f17757-n64sh                      1/1     Running   0          5m11s
csi-snapshotter-78cb65cc4f-c8mv7                    1/1     Running   0          3m6s
csi-attacher-f98ff75fb-7xtfm                        1/1     Running   0          3m6s
csi-resizer-77cddbfc7c-rspl9                        1/1     Running   0          3m6s
csi-provisioner-65cb5cc4ff-qwx7w                    1/1     Running   0          3m6s
instance-manager-87b6b37139b0b23aa2410eb6ade3ab5e   1/1     Running   0          4m16s
longhorn-csi-plugin-z97g4                           3/3     Running   0          3m5s

LonghornのPodとサービスの状態

$ kubectl -n longhorn-system get svc longhorn-frontend
NAME                TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
longhorn-frontend   ClusterIP   10.43.85.54   <none>        80/TCP    11m

クラスタ内の80ポートからkubectlを実行しているPCの8080ポートへポートフォワーディング

$ kubectl port-forward -n longhorn-system svc/longhorn-frontend 8080:80 --address 0.0.0.0
Forwarding from 127.0.0.1:8080 -> 8000
Forwarding from [::1]:8080 -> 8000

ブラウザでlocalhost:8080へアクセス

Screenshot 2024-01-03 162513.png

注意点

ノードが2台のときは,Default Replica Countを2にすると,Degradedを回避できると思っていたけど,できなかったことを下記に載せます. Screenshot 2024-01-05 202053.png

ただ,ここを変えるだけでは回避できないっぽいので,ConfigMapをいじりましょう!

longhorn-storageclassというConfigMapのnumberOfReplicas: \"3\"を2に書き換えることで改善できる.

https://tech.opst.co.jp/2022/07/05/%E5%88%86%E6%95%A3%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%80%8Clonghorn%E3%80%8D%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F/

さらにできない場合は以下のコマンドを使ってValueを2に書き換えましょう!

kubectl -n longhorn-system edit settings default-replica-count