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

推薦する

知らないかもしれないKubernetesのヒント13選

確立されたエコシステムを備えた Kubernetes は、コンテナ化されたアプリケーションの管理、ス...

SEOキーワード引用体験共有

SEO 実践者が自らウェブサイト最適化の注文を受ける場合、または SEO 会社がウェブサイト最適化の...

自社開発とセキュリティ:Alibaba Cloud の理念

[51CTO.com からのオリジナル記事] クラウド コンピューティングをどのように分類しますか?...

忘れられがちな効果的な外部リンク方法を統合する

ウェブマスターのウェブサイトによく出入りする草の根の人間として、私はウェブマスターの中には外部リンク...

クラウドネイティブ: インターネット後半で知っておくべきこと

現在の急速に変化するモバイル インターネット時代では、絶えず変化する市場の需要を素早く把握し、できる...

zji専用サーバーセール:香港アリババクラウド - 480元、香港連邦 750元、日本大阪 - 550元

zji の 7 月の専用サーバープロモーションのオファー: (1) 香港 Alibaba Cloud...

NinjaHawk - Phoenix KVM VPS 30% オフ

NinjaHawk は設立されてからかなり経っており、Ninja Hawk というイメージを持ってい...

新しいサイトのSEOウェブサイトランキング最適化フレンドリーなリンク交換戦略

友情リンクとは何ですか?フレンドリー リンクは、インタラクティブなアンカー テキスト リンクとしても...

kvchosting 無料ホスティング

HostCat は以前にも kvchosting を紹介しましたが (参照)、今日は同社の無料ホステ...

クラウド コンピューティング戦略を推進するアプリケーションは何ですか?

クラウド コンピューティングは、それがもたらすビジネス上のメリットの可能性を経営者が認識するにつれて...

業界の大物が方向転換できない場所で、90年代以降の女性が「成都の仲人」の役割を果たす

「業界の大物たちでさえも方向転換できない場所にいる」と、1990年代生まれのミミさんはよく言う。ミミ...

ローカルポータルトラフィックの分析(II):アプリケーショントラフィックとアクティビティマーケティングトラフィック

2. アプリケーショントラフィックの取得方法とメリット、デメリット、誤解アドバンテージ: A. アプ...

fanayun: 10% 割引、香港 cn2 vps+ (必須 3 ネットワーク、50G 高防御) 米国 cn2 gia vps、22 元/月、1G メモリ/1 コア/20g SSD

fanayun (Fan Yun) は現在、VPS プロモーションを実施しています: すべての VP...

クラウドバックアップは標準的なデータセンターバックアップとは異なります

何らかのクラウドベースのシステム復旧テクノロジーを実装する必要がある場合、それぞれに独自のコストとリ...