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

推薦する

Spring Cloud はマイクロサービス アーキテクチャを構築します: 分散サービス トラッキング (はじめに)

これまでの N 回のブログ投稿の紹介を通じて、実際にそれらを使用してビジネス ニーズを満たす基本的な...

Pacificrack: 旧正月 VPS プロモーション、年間 8.88 ドルから、1G メモリ/1 コア/20g SSD/2T 帯域幅

Pacificrack は、中国の旧正月に向けて新しい VPS プロモーションを開始しました。価格は...

Microsoft Intelligent Cloud Matrix は企業のビジネス回復力強化を支援します

[51CTO.comからのオリジナル記事] 2020年の流行は市場に大きな影響を与え、企業も流行がも...

DDoS 状況レポート: DDoS 攻撃は二極化している

最近、国内のネットワーク セキュリティ企業 NSFOCUS が 2015 年上半期の DDoS 脅威...

長虹小之玲を3時間ハイジャックし、百度のトラフィックIP500を傍受

3日前、百度で「長虹小之玲」を検索すると、ウェブサイト上の長虹小之玲M868携帯電話が結果の最初のペ...

著作権局:オンラインビデオの著作権侵害との戦いを支援

北京時報(王盛記者)このほど、北京で「中国ネット動画著作権侵害対策共同行動」が正式に開始された。この...

クラウドコンピューティング:パンデミック中に出現した新しいインフラの最初の都市

2020 年はクラウド コンピューティング市場にとって大きな好況期となることは間違いありません。突然...

トラフィック急増を促す3種類の外部リンク構築の分析

トラフィックの急増は、外部リンクの構築だけではなく、コンテンツのリリースも含まれます。トラフィックの...

SeoStackキーワードツールの紹介

SeoStack は、複数の異なるソースからキーワード データを収集し、それらを分析して、ニッチまた...

raksmart: 韓国専用サーバー、CN2 ネットワーク、月額 59 ドルから、2*e5-2620/32g メモリ/1T ハードディスク/10M 帯域幅

raksmart では現在、特別プロモーションとして、無制限のトラフィックで月額 59 ドルから始ま...

【1月のゲームアプリランキング】レジャーや娯楽におすすめのモバイルゲームはこれ!

MOBAモバイルゲーム「 Honor of Kings 」は強力なトラフィック誘致能力を備えており、...

ウェブサイトの最適化で避けるべき9つのことについて話します

1. 頻繁なタイトル変更Baidu は不安定な Web サイトを好みません。Web サイトの構築を開...

Baidu 検索結果に Baidu 共有データ表示を追加

Baidu の共有データが Baidu の検索結果ページに表示される新浪科技は1月11日朝、百度シェ...

「ウェブサイトの記事がコピーされていないコード」を追加した後、ウェブサイトは正常に組み込まれていますか?

小説サイトにはコピーできない小説がたくさんあることは皆さんご存知のとおりです。本日、作者のブログに「...

ウェブサイトが劣化する前と後の要約といくつかの意見

会社のウェブサイトを引き継いだとき、リスクを十分に評価しなかったか、検索エンジンのペナルティ制限と強...