初投稿になります。
工場などの現場では、耐久性・冗長性・短いダウンタイムが当然ながら求められます。かねてからこのようなエッジ領域でのk3sの利用に注目しておりましたので、k3sのクラスタを作ってみることにしました。とはいえ、自宅には全くRaspberry Piも何もありませんので、AWS上にEC2のインスタンスを複数用意して、そこにインストールすることとしました。あまりAWSに導入する例を見かけませんね、、、
検索しますと、外部データベースを一つ用意してそれを複数のマスタ(k3sで言うサーバ)が参照する形式の例をよく目にします。しかし、外部データベースそのものが単一障害点になるのではないかと思います。そこで、v1.19.5+k3s1から正式サポートとなったembedded etcdを利用する形式に挑戦してみました。
準備
用意したインスタンス
サーバー用×3
名前:k3s-a,k3s-b,k3s-c
インスタンスタイプ:t3.large
ストレージ:20G
AMI:Debian 11を指定
エージェント用×1
名前:k3s-d
インスタンスタイプ:t2.micro
ストレージ:20G
AMI:Debian 11を指定
留意事項など
embedded etcdを利用する関係上、サーバノードは奇数必要でお勧めは3台、と書いてあったので3台用意しました。
- エージェント用がたった1台なのは単純にケチっただけです。
- 各インスタンスは、同じサブネットに所属するように設定しておきました。
- セキュリティグループも各インスタンス同じものを設定しておきます。このセキュリティグループは、同じセキュリティグループに所属するインスタンスからは無制限にアクセスできるようにしておく必要があります(これを忘れると嵌る)
- 今回k3sはサービス化せず、コマンドラインから起動させる形にしました。オプション設定さえ理解すれば、サービス化も簡単ではないでしょうか。
インストール
サーバ1台目
k3s-aにログインします。
ssh -i "keyA.pem" admin@ec2-13-208-241-109.ap-northeast-3.compute.amazonaws.com
※接続先、pemファイル名は要確認。
k3sのバイナリをダウンロードします。アクセス権限の関係で、wgetにsudoを付けないとうまく動きませんでした。ダウンロードしたらchmodで権限を変えておきます。
#cd /usr/local/bin/
#sudo wget https://github.com/k3s-io/k3s/releases/download/v1.24.2%2Bk3s1/k3s
#chmod 755 ./k3s
#CD ~
一台目のサーバを起動します。--cluster-init
オプションが大切なようです。
#sudo k3s server --cluster-init &
起動した後、トークン情報を確認します。このトークン情報は、残りのサーバ、エージェントを動かす際に必要です。
#cat /var/lib/rancher/k3s/server/node-token
K102a80cd736c723e474dd3ef8d6e7574633f94947a3dc3e13fcce8f171974d8ab1::server:SECRET
もちろんIPアドレス(プライベートIPアドレス)の確認も忘れないようにします。今回は172.31.42.76でした、
サーバ2台目、3台目
k3s-bにログインします。
サーバ一台目と同じく、バイナリのダウンロードと権限変更を行います、
#cd /usr/local/bin/
#sudo wget https://github.com/k3s-io/k3s/releases/download/v1.24.2%2Bk3s1/k3s
#chmod 755 ./k3s
#CD ~
サーバを起動しますが、コマンドラインで一台目のサーバのIPアドレスとトークンを指定します。
#sudo k3s server --server https://172.31.42.76:6443 --token=K102a80cd736c723e474dd3ef8d6e7574633f94947a3dc3e13fcce8f171974d8ab1::server:SECRET &
三台目も同様にします。いずれかのインスタンスで以下のコマンドを打ってみて、動作を確認しておきます。
#sudo k3s kubectl get nodes
エージェント
エージェントもサーバ二台目、三台目とほぼ同様です。バイナリのダウンロードと権限変更を行い、
#cd /usr/local/bin/
#sudo wget https://github.com/k3s-io/k3s/releases/download/v1.24.2%2Bk3s1/k3s
#chmod 755 ./k3s
#CD ~
エージェントを起動します。コマンドラインで一台目のサーバのIPアドレスとトークンを指定するのも同様です。
#sudo k3s agent --server https://172.31.42.76:6443 --token=K102a80cd736c723e474dd3ef8d6e7574633f94947a3dc3e13fcce8f171974d8ab1::server:SECRET &
改めて各ノードの動作を確認しておきます。
#sudo k3s kubectl get nodes
終わりに
ここで力尽きました(笑)
次は、
- サービスとして各インスタンスのk3sを動かしてみたいと思います。
- Kubernetesダッシュボードを導入してみたいと思います。