先日来、お試しで動かしているk3sクラスター上にLonghornをインストールします。
工場のエッジ側でk3sが使えないかという事で、色々勉強してます。k3sクラスタ自体をetcdでHA構成にしたわけですが、コンテナ用永続ストレージも簡単に失われないようにしたいと考え、Longhornに挑戦してみました。
1.事前準備
用意したインスタンス
サーバー用×3
名前:k3s-a,k3s-b,k3s-c
インスタンスタイプ:t3.large
ストレージ:20G
AMI:Debian 11を指定
エージェント用×1
名前:k3s-d
インスタンスタイプ:t2.micro
ストレージ:20G
- 各インスタンスは、同じサブネットに所属するように設定しておきました。
- セキュリティグループも各インスタンス同じものを設定しておきます。このセキュリティグループは、同じセキュリティグループに所属するインスタンスからは無制限にアクセスできるようにしておく必要があります。
ソフトウェア構成
k3s側
Debian GNU/Linux 11
k3s version v1.23.8+k3s1 (53f2d4e7)
go version go1.17.5
Longhorn v1.3.0
Windows端末側
Rancher Desktop 1.2.1
※kubectlはRancher Desktop付属のもの。
※Windows端末からkubectlできるようにしましたが、Linuxでもなんでも同様にできるはずです。
2.インストール
open-iscsiのインストール
Longhornインストールに先立ち、Open-iSCSIをインストールします。各インスタンスはDebianで動いてますので、それぞれのインスタンスで以下を実行します。
$ apt -y install open-iscsi
Longhornインストール
公式サイトに則ってインストールしていきます。インストールに使うyamlファイルを確認したかったので、https://raw.githubusercontent.com/longhorn/longhorn/v1.3.0/deploy/longhorn.yaml
をローカルにダウンロードしてから以下を実行しました。同じyamlファイルでインストールするわけですから、当然同じ結果になります。
$ kubectl apply -f longhorn.yaml
次に以下コマンドを確認し、podが全てrunnningとなっていればOKです。
$ kubectl -n longhorn-system get pod
(例)
NAME READY STATUS RESTARTS AGE
longhorn-ui-b7c844b49-w25g5 1/1 Running 0 2m41s
longhorn-conversion-webhook-xxxxxxxxxx-xxxxx 1/1 Running 0 2m41s
longhorn-conversion-webhook-xxxxxxxxxx-xxxxx 1/1 Running 0 2m41s
longhorn-admission-webhook-xxxxxxxxxx-xxxxx 1/1 Running 0 2m41s
longhorn-admission-webhook-xxxxxxxxxx-xxxxx 1/1 Running 0 2m41s
(以下略)
3.ハマった部分
open-iscsiを忘れてはいけない
先述した通りopen-iscsiを先に入れておかなくてはなりません。忘れたままLonghornをインストールすると以下のようになります。まず、longhorn--driver-deployerのステイタスがInit:0/1と表示されます。そして、longhorn-managerのステイタスはCrashLoopBackoffとなり動いていません。ちなみにCrashLoopBackoffとはコンテナ内のプロセスの終了を検知してコンテナの再起動を繰り返している状態だそうです(参考)。
$ kubectl -n longhorn-system get pod
(例)
NAME READY STATUS RESTARTS AGE
longhorn-driver-deployer-xxxxxxxxxx-xxxxx 0/1 Init:0/1 0 118s
longhorn-manager-xxxxx 0/1 CrashLoopBackOff 4 118s
longhorn-ui-xxxxxxxxxx-xxxxx 1/1 Running 0 118s
公式のどこかにはopen-iscsiが必要な事が書いてあったのかもしれませんね。一つ目のハマり処でした。
4.おわりに
今回はk3sクラスタにLonghornのインストールを行いました。
今後は、実際に永続ボリュームを作ってみます。また、LonghornUIにもアクセスしてみます。
5.参考文献
Install with Kubectl・・・公式
[Question] longhorn-driver-deployer can not start #1549・・・この記事でopen-iscsiが必要であることに気付いた
Kubernetesのポッドが起動しない原因と対策・・・CrashLoopBackOff等statusの意味をここで知りました