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 クラスターのコストを削減する

推薦する

ウェブサイトが検索エンジンと訪問者に異なるコンテンツを表示するのはいつですか?

検索エンジンを含め、Web サイトがさまざまな訪問者に対して異なるコンテンツを表示する一般的な理由は...

Dockerコンテナ技術のアーキテクチャとそのさまざまなモジュールを1つの記事で理解する

[[312463]]概要今日は、Docker の技術アーキテクチャと、それを構成するさまざまなモジュ...

K8S監視およびアラームプラットフォームの選択に役立つ記事

序文現在、K8S の監視およびアラーム プラットフォームの選択に取り組んでいます。 2 つの人気のオ...

iwfhosting: 10Gbps 帯域幅、E3-1270v6/64g メモリ/月額 109 ドル

月額 109 ドルからご利用いただける、10Gbps の帯域幅を備えた iwfhosting の独立...

OpenStack リリース: Ussuri リリースのハイライト

序文今年もOpenStackの半年ごとのリリース日がやってきました。これまでに21バージョンがリリー...

他人の名前を間違って発音することから生じる SEO に関する考察

最近、劉玉凡は執筆に忙しく、自分が考えたことをいくつか書いています。録音は良い習慣なので、一生懸命取...

独自のサーバーで Azure サービスを実行する方法

パブリック クラウドはすべて同じように見え、同様のサービスを提供し、同様の料金を請求します。しかし、...

中国を少し知る視点からウェブサイトマーケティングとタオバオプロモーションについて語る

今最も視聴率が高い番組は何かと聞かれたら、多くの人は人気があり物議を醸しているテレビシリーズ「マイン...

ユーザーの需要価値の表示と位置付け

SEO を行う人なら誰でも「コンテンツは王様、外部リンクは女王」ということわざを知っていますが、この...

Honest.comのドメイン名が100万ドルで取引され、購入者のBaichengは最も人気のある

2012年1月6日、外国メディアは、ドメイン名「Honest.com」が最近18万ドル(約114万人...

@yourdomain.com を構築するには、Namecheap の安価で信頼性の高いメール サービスをお勧めします。

ウェブマスターはこれまで無料のメールボックスを使用していましたが、最近有料版を使い始めました。ここで...

ウェブサイトのタイトルを入力し、検索エンジンのキーワードを使用して最適化する方法

月収10万元の起業の夢を実現するミニプログラム起業支援プランタイトル タグの定義については、HTML...

中国の第三者決済市場のデジタル化の動向に関する考察

今日では、第三者による支払いは人々の消費の主な方法の 1 つです。この記事では、サードパーティ決済業...

WeChat 5.0後の影響と機会の分析

WeChat 5.0のリリースは大きな騒動を引き起こし、多くの人々に恐怖感を与えました。最も心配して...

GitHubが大規模なDDoS攻撃を受ける

3月26日以来、世界的に有名なソフトウェアコードホスティングウェブサイトであるGitHubは、同社史...