k3sup を使って 1 分で K3s クラスターを素早く構築する

k3sup を使って 1 分で K3s クラスターを素早く構築する

背景

日々の業務では、純粋な環境でのテストを容易にするために、ローカルまたはパブリック クラウド環境でクラスターを頻繁に構築および破棄する必要があります。時々、HomeLab 環境で構築します。 CPUは強力ではありませんが、メモリは十分な大きさです。その後、Microsoft MVP から Azure クォータを取得してからは、イメージをプルする際にネットワークの問題がないため、Azure 仮想マシンで構築することが多くなりました。

どちらの環境でも、Terraform を使用して仮想マシンをすばやく作成および破棄し、仮想マシン上に K3s クラスターを作成しました。 K3s クラスターは十分に軽量であり、コンポーネントのカスタマイズをサポートしています。 Alfred Snippets[1]と組み合わせると、仮想マシンにsshで接続し、k3siと入力してカスタマイズされたコマンドをすばやく入力し、仮想マシン上のkubeconfigファイルを取得して、その中のapi-serverアドレスを置き換えるだけです(これもスニペットによって解決されます)。

 export MASTER_IP=${MASTER_IP:-$(ip addr show eth0 | grep 'inet ' | awk '{print $2}' | cut -d/ -f1)} export INSTALL_K3S_VERSION=v1.23.8+k3s1 curl -sfL https://get.k3s.io | sh -s - --disable traefik --disable local-storage --disable metrics-server --advertise-address=$MASTER_IP --disable servicelb --write-kubeconfig-mode 644 --write-kubeconfig ~/.kube/config

単一ノード クラスターは比較的簡単に操作できますが、複数ノード クラスターが必要な場合は、操作を実行するためにすべてのホストに ssh する必要があり、もちろんマスター ノードのトークンをコピーする必要があります。まだ少し面倒です。

その後、私はAlex Ellisが作成した、より高速なツールであるk3sup[2](「ケチャップ」と発音)を発見しました。

k3supの紹介

k3sup は、K3s クラスターを迅速に構築するための軽量ツールです。

k3sup は使いやすく、1 つのコマンドでさまざまなプラットフォームにインストールできます。これにより、ユーザーは Kubernetes クラスターをすばやく作成し、新しいノードを既存のクラスターに簡単に参加させることができます。

k3sup は SSH 経由でターゲット サーバーに接続し、K3s を自動的にインストールして構成します。つまり、ローカルマシン、クラウドサーバー、Raspberry Pi などのデバイスなど、SSH 経由でアクセスできる任意のマシンに Kubernetes をインストールして実行できるということです。

簡単に言えば、k3sup は、ホストへの ssh、K3s サーバーのインストール、トークンのコピー、エージェント ホストへの ssh、K3s エージェントのインストールなどの一連の操作を完了するために使用されます。

次に、k3supの使い方を見てみましょう。

k3supをインストールする

k3sup はコマンドライン ツールです。 CLI を使用する前に、ダウンロードしてインストールする必要があります。

リナックス:

 curl -sLS https://get.k3sup.dev | sh sudo install k3sup /usr/local/bin/

macOS:

 brew install k3sup

使用

k3sup は次のコマンドをサポートしています:

  • 補完: 指定されたシェルの自動補完スクリプトを生成します
  • ヘルプ: ヘルプ
  • インストール: SSH経由でサーバーにK3sをインストールする
  • 参加: リモートホストにK3sエージェントをインストールし、既存のクラスターに参加させます。
  • ready: kubectl を使用して、クラスターの準備ができているかどうかを確認します。
  • 更新: 更新手順を印刷する
  • バージョン: 印刷版

クラスターを作成するには、install コマンドと join コマンドを使用する必要があります。

インストールコマンド

インストール コマンドは、サーバーに K3s をインストールするために使用されます。次のコマンドを使用して、リモート ホストに k3s をインストールします。

このうち、--ip はリモートホストのアドレスを指し、--user はリモートホストにログインするためのユーザー名、--k3s-channel はインストールするバージョン、--local-path はクラスター kubeconf のローカルストレージアドレスです。より多くのオプションは、k3sup help install で確認できます。

デフォルトでは、k3sup はホストにアクセスするために ssh キー ~/.ssh/id_rsa を使用します。これは --ssh-key オプションで指定できます。

 export MASTER_IP=192.168.1.11 k3sup install --ip $MASTER_IP \ --user addo \ --k3s-channel v1.24 \ --local-path /tmp/config

コマンドを実行すると、インストール プロセスのログが出力されます。

 Running: k3sup install 2023/10/26 09:04:35 192.168.1.11 Public IP: 192.168.1.11 [INFO] Finding release for channel v1.24 [INFO] Using v1.24.17+k3s1 as release ... Saving file to: /tmp/config # Test your cluster with: export KUBECONFIG=/tmp/config kubectl config use-context default kubectl get node -o wide

コマンドを実行してノード情報を表示します。

 export KUBECONFIG=/tmp/config kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME master Ready control-plane,master 1m v1.24.17+k3s1 10.0.2.4 <none> Ubuntu 20.04.6 LTS 5.15.0-1047-azure containerd://1.7.3-k3s1

単一ノード クラスターをインストールする場合は、インストール コマンドで十分です。マルチノード クラスターの場合は、join コマンドも使用する必要があります。

参加コマンド

join コマンドを使用してエージェント ノードを初期化し、現在のクラスターに参加させます。サーバー ノードの IP アドレスを指定するには --server-ip を使用し、インストールされているバージョンを指定するには --k3s-channel を使用する必要があります。サーバー ノードと同じバージョンをインストールすることを強くお勧めします。

 export AGENT_IP=192.168.1.12 k3sup join --ip $AGENT_IP --user addo --server-ip $MASTER_IP --k3s-channel v1.24
 Running: k3sup join Agent: 192.168.1.11 Server: 192.168.1.12 Received node-token from 192.168.1.11.. ok. [INFO] Finding release for channel v1.24 [INFO] Using v1.24.17+k3s1 as release ...

ノードを表示します。

 kubectl get no NAME STATUS ROLES AGE VERSION node-1 Ready <none> 43s v1.24.17+k3s1 master Ready control-plane,master 2m58s v1.24.17+k3s1

完全なスクリプト

ChatGPT でスクリプトを生成し、ワンクリックでクラスターを作成します。興味のある方は、2 ノード クラスターの作成にどのくらい時間がかかるか試してみてください。試してみたところ、約32秒かかりました。

 # Define IP addresses export HOSTS="192.168.1.11 192.168.1.12"

クラスターの構築

#!/bin/bash # Read the list of IP addresses from the environment variable IP_ADDRESSES=($HOSTS) # Define the k3s version K3S_VERSION="v1.24" # Check if there is at least one IP address if [ ${#IP_ADDRESSES[@]} -eq 0 ]; then echo "No IP addresses found. Please ensure the HOSTS environment variable is correctly set." exit 1 fi # Install the master node MASTER_IP=${IP_ADDRESSES[0]} echo "Installing master node: $MASTER_IP" k3sup install --ip $MASTER_IP --user addo --k3s-channel $K3S_VERSION \ --k3s-extra-args '--write-kubeconfig-mode 644 --write-kubeconfig ~/.kube/config --disable traefik --disable metrics-server --disable local-storage --disable servicelb' \ --local-path /tmp/config # Install the other agent nodes for i in "${!IP_ADDRESSES[@]}"; do if [ $i -ne 0 ]; then AGENT_IP=${IP_ADDRESSES[$i]} echo "Installing agent node: $AGENT_IP" k3sup join --ip $AGENT_IP --server-ip $MASTER_IP --user addo --k3s-channel $K3S_VERSION fi done echo "k3s cluster installation complete."

クラスターのアンインストール

#!/bin/bash # Read the list of IP addresses from the environment variable IP_ADDRESSES=($HOSTS) # Check if there is at least one IP address if [ ${#IP_ADDRESSES[@]} -eq 0 ]; then echo "No IP addresses found. Please ensure the HOSTS environment variable is correctly set." exit 1 fi # Clean up the master node MASTER_IP=${IP_ADDRESSES[0]} echo "Cleaning up master node: $MASTER_IP" ssh -i ~/.ssh/id_rsa $MASTER_IP k3s-uninstall.sh # Clean up the other agent nodes for i in "${!IP_ADDRESSES[@]}"; do if [ $i -ne 0 ]; then AGENT_IP=${IP_ADDRESSES[$i]} echo "Cleaning up agent node: $AGENT_IP" ssh -i ~/.ssh/id_rsa $AGENT_IP k3s-agent-uninstall.sh fi done echo "k3s cluster cleanup complete."

参考文献

[1] アルフレッドスニペット: https://www.alfredapp.com/help/features/snippets/

[2] k3sup: https://github.com/alexellis/k3sup

<<:  データセンター事業者がクラウド移行のトレンドを捉える方法

>>:  kube-downscaler を使用して Kubernetes クラスターのコストを削減する

推薦する

ウェブサイトにはアクセスがあるのに、問い合わせがないのはなぜですか?

ウェブサイトのトラフィックはありますが、問い合わせはありませんか?ウェブサイトの最適化を行っている友...

電子商取引ライブストリーミング業界の3つの現状

12月28日、一部のメディアはヴィヤの夫である董海鋒氏の写真を撮影しており、現在は彼がヴィヤのその後...

企業はインターネットマーケティング業務の KPI 評価を策定すべきでしょうか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています多くの企業...

ウェブサイトの価値:並外れた影響力を生み出す

ウェブサイトの価値は、そのターゲットとなるネットユーザーに対する並外れた影響力にあります。実際、これ...

locvps: 新年特別キャンペーン「年払い小額プラン」、252元/年、2Gメモリ/1コア/20g SSD/400Gトラフィック、香港(3データセンター)/大阪、日本

locvps は新年に向けて特別オファーをご用意しました。年間支払いの小規模プランで 20% 割引 ...

クラウドネイティブ時代を1万語で解説、K8sコンテナプラットフォームのLB(Nginx)負荷分散システムを0から1に構築する方法

クラウドネイティブ時代において、Kubernetes をベースとしたコンテナ オーケストレーション ...

ユーザーと友達になる - ネットワークマーケティングのやり方の簡単な分析

ユーザーは、Web サイトやフォーラムの存続の基盤です。ユーザーのいない Web サイトやフォーラム...

クラウドコンピューティングコアテクノロジー Dockerチュートリアル: Dockerデーモン dockerd 安全でないレジストリ

Docker はプライベート レジストリを安全か安全でないかを判断します。このセクションの残りの部分...

ドメイン名の信頼性が低い場合の欠点と解決策の事例分析

ドメイン名の信頼性とは何ですか? これは、検索エンジンによるドメイン名コンテンツの認識度を指します。...

Kingdeeのエコシステムはデジタルトレンドを切り開き、企業のデジタル変革を確実にします

新たな技術時代が到来し、中国企業のデジタル変革が始まっています。近年、5G、クラウドコンピューティン...

マルチチャネルプロモーションにおいてアトリビューションモデルはどの程度重要ですか?コンバージョンコストを一気に削減する秘訣!

今日は、オンラインプロモーションのプロセスにアトリビューションモデルを適用する価値についてお話しした...

地方の小さな才能のウェブサイトの個々のウェブマスターにとってのブレークスルーポイント

「今日は引っ越しましたか?」かつて故郷を離れて大都市に憧れていた人たちにとって、大都市への憧れが今で...

ウェブサイトのキーワードランキングレイアウト戦略と最適化運用スキル

月収10万元の起業の夢を実現するミニプログラム起業支援プランキーワードランキングの最適化を行い、ホー...

世界のトップ 20 ブログの背後にある Web ホスティングの秘密

定期的に読んでいるお気に入りのブログはありますか?非常に有名なブログであれば、誰(創設者兼編集者)が...