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

推薦する

ヒューマニスティックマーケティング:インターネットマーケティングで無視できないサポートポイント

今日最も人気のある業界といえば、それはオンライン マーケティングでしょう。毎日上げ潮のように押し寄せ...

モバイルインターネットの時代において、なぜ企業は公式ウェブサイトを必要とするのでしょうか?

月給5,000~50,000のこれらのプロジェクトはあなたの将来です多くの企業では、すでに公式サイト...

UEO時代では、ユーザーのニーズに合わせて最適化する必要がある

一連の主要な検索エンジンのアップデートにより、UEO という言葉はインターネット上で徐々に人気が高ま...

仙遊金儲け日記: 初心者が仙遊副業を始める方法

中古品を買ったことはありますか?中古品を評価するように求められたら、どのような言葉を使いますか?もし...

クラウドチームのIT後継計画を策定する

クラウド チームの人員は頻繁に変更されますが、パンデミックによって状況は悪化しています。クラウド チ...

OVH: US OpenStack クラウド サーバーが 30% オフ、月額 8.74 ドル、4G メモリ/2 コア/80g SSD/500M 帯域幅

OVH についてはおそらく説明の必要はないでしょう。 1 つ目の特徴は、超高防御力です。基本的に、1...

Baidu が再び SEO を取り締まります。SEO 担当者は準備できていますか?

今朝、いつものように百度を開いてランダムな単語を検索しました。すると突然、インターフェースがぎこちな...

百度改革の憶測続く

みなさんこんにちは。昨日、「百度改革仮説:もはや簡単に整理できない」という記事を書きましたが、A5の...

hurricanedigital: 台湾 VPS、動的 IP/静的 IP、月額 330 元、600M 帯域幅、無制限のトラフィック

Hurricanedigital は台湾 VPS を提供しており、台湾動的 IP VPS と台湾静的...

シンガポールで oneasiahost VPS を購入しました。非常にお勧めです (古い投稿)

この投稿は私が昨年個人ブログに書いたものですが、退屈しのぎにここに再投稿しました。 1時間以上前に、...

ウェブサイトのページと機能の主な目的:ユーザーの心理的ニーズを調整する(パート 2)

前回のウェブサイトのウェブページと機能開発に関する記事では、主に業界の共通コンテンツと業界の設計につ...

CCTVに訴えられたJikeアプリにとっては幸運な出来事でしょうか?

CCTVがJikeを訴え、Weiboで話題になった事件は、Jikeにとってはむしろ幸運だった。たった...

servarica: 年間 12 ドル、カナダの VPS、ネイティブ IP、1G メモリ/1 コア/500g ハード ドライブ/2T トラフィック

Servarica は、500G ハード ドライブで年間 12 ドルという低価格の高構成のカナダ V...

エッジコンピューティングのベストプラクティスについてお話ししましょう

データの処理、分析、保存は、ユーザーやデバイスが情報にアクセスする必要がある場所に近いネットワークの...

ソフト記事SEO最適化技術の2つの側面

SEO テクニックは数多くあります。筆者だけでも 10 種類以上を知っています。実際、他にも最適化テ...