エアギャップインストール

K3s can be installed in an air-gapped environment with two different methods. You can either deploy images via the k3s-airgap-images tarball release artifact or by using a private registry. It is also possible to use the embedded registry mirror as long as there is at least one cluster member that has access to the required images.

イメージのロード

プライベートレジストリ方式

これらの手順は、エアギャップ環境でノードを既に作成し、コンテナランタイムとしてバンドルされたcontainerdを使用し、環境内にOCI準拠のプライベートレジストリが利用可能であることを前提としています。

まだプライベートDockerレジストリを設定していない場合は、https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry[公式レジストリドキュメント]を参照してください。

レジストリYAMLの作成とイメージのプッシュ

  1. 実行するK3sのバージョンに対応するアーキテクチャ用のイメージアーカイブをリリースページから取得します。

  2. docker image load k3s-airgap-images-amd64.tar.zstを使用して、tarファイルからDockerにイメージをインポートします。

  3. docker tagdocker pushを使用して、ロードしたイメージを再タグ付けし、プライベートレジストリにプッシュします。

  4. プライベートレジストリの設定ガイドに従って、registries.yamlファイルを作成および設定します。

  5. 以下のInstall K3sセクションに進みます。

手動デプロイ方式

これらの手順は、エアギャップ環境でノードを既に作成し、コンテナランタイムとしてバンドルされたcontainerdを使用し、プライベートレジストリを使用できない、または使用したくない場合を前提としています。

この方法では、必要なイメージを各ノードに手動でデプロイする必要があり、プライベートレジストリを実行するのが現実的でないエッジデプロイメントに適しています。

イメージディレクトリとエアギャップイメージtarballの準備

  1. 実行するK3sのバージョンに対応するアーキテクチャ用のイメージアーカイブをリリースページから取得します。

  2. エージェントのイメージディレクトリにイメージアーカイブをダウンロードします。例:

    sudo mkdir -p /var/lib/rancher/k3s/agent/images/
    sudo curl -L -o /var/lib/rancher/k3s/agent/images/k3s-airgap-images-amd64.tar.zst "https://github.com/k3s-io/k3s/releases/download/v1.29.1-rc2%2Bk3s1/k3s-airgap-images-amd64.tar.zst"
    bash
  3. 以下のInstall K3sセクションに進みます。

埋め込みレジストリミラー

K3sには、埋め込みの分散型OCI準拠のレジストリミラーが含まれています。 有効化して適切に設定すると、任意のノードのcontainerdイメージストアにあるイメージを、 外部イメージレジストリにアクセスせずに他のクラスターのメンバーがプルできます。

ミラーリングされたイメージは、上流のレジストリ、レジストリミラー、またはエアギャップイメージtarballから取得できます。 埋め込み分散レジストリミラーの有効化に関する詳細は、埋め込みレジストリミラードキュメントを参照してください。

K3sのインストール

前提条件

K3sをインストールする前に、上記のプライベートレジストリ方式または手動デプロイ方式を完了して、K3sのインストールに必要なイメージを事前に準備してください。

バイナリ

  • リリースページからK3sバイナリをダウンロードし、エアギャップノードごとに同じバージョンのバイナリを取得します。バイナリを/usr/local/binに配置し、実行可能にします。

  • get.k3s.ioからK3sインストールスクリプトをダウンロードします。インストールスクリプトをエアギャップノードの任意の場所に配置し、install.shと名付けます。

デフォルトネットワークルート

ノードにデフォルトルートを持つインターフェースがない場合は、デフォルトルートを設定する必要があります。ダミーインターフェースを介したブラックホールルートでも構いません。K3sはデフォルトルートを必要とし、ノードのプライマリIPを自動検出し、kube-proxyのClusterIPルーティングが正常に機能するためです。ダミールートを追加するには、以下を実行します:

ip link add dummy0 type dummy
ip link set dummy0 up
ip addr add 203.0.113.254/31 dev dummy0
ip route add default via 203.0.113.255 dev dummy0 metric 1000

INSTALL_K3S_SKIP_DOWNLOAD環境変数を使用してK3sスクリプトを実行すると、K3sはローカルバージョンのスクリプトとバイナリを使用します。

SELinux RPM

SELinuxを有効にしてK3sをデプロイする場合は、適切なk3s-selinux RPMをすべてのノードにインストールする必要があります。最新バージョンのRPMはこちらで見つけることができます。例えば、CentOS 8の場合:

インターネットにアクセス可能なマシンで:
curl -LO https://github.com/k3s-io/k3s-selinux/releases/download/v1.4.stable.1/k3s-selinux-1.4-1.el8.noarch.rpm

# RPMをエアギャップマシンに転送
エアギャップマシンで:
sudo yum install ./k3s-selinux-1.4-1.el8.noarch.rpm
bash

詳細はSELinuxセクションを参照してください。

エアギャップ環境でのK3sのインストール

以下の手順に従って、1台以上のサーバーにK3sをインストールできます。

シングルサーバーにK3sをインストールするには、サーバーノードで以下を実行します:

INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh
bash

追加のエージェントを追加するには、各エージェントノードで以下を実行します:

INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://<SERVER_IP>:6443 K3S_TOKEN=<YOUR_TOKEN> ./install.sh
bash

サーバーのトークンは通常、/var/lib/rancher/k3s/server/tokenにあります。

K3sの--resolv-confフラグはkubeletに渡され、ホストに上流のネームサーバーが設定されていないエアギャップネットワークでのポッドDNS解決の設定に役立つ場合があります。

アップグレード

インストールスクリプト方式

エアギャップ環境のアップグレードは、以下の方法で行うことができます:

  1. アップグレードするK3sのバージョンに対応する新しいエアギャップイメージ(tarファイル)をリリースページからダウンロードします。各ノードの/var/lib/rancher/k3s/agent/images/ディレクトリにtarファイルを配置し、古いtarファイルを削除します。

  2. 各ノードの/usr/local/binにある古いK3sバイナリを新しいものに置き換えます。link:https://get.k3s.ioからインストールスクリプトをコピーし、前回のリリース以降に変更があった可能性があるため、再度スクリプトを実行します。同じ環境変数を使用してスクリプトを実行します。

  3. K3sサービスを再起動します(インストーラーによって自動的に再起動されない場合)。

自動アップグレード方式

K3sは自動アップグレードをサポートしています。エアギャップ環境でこれを有効にするには、必要なイメージがプライベートレジストリにあることを確認する必要があります。

アップグレードするK3sのバージョンに対応するrancher/k3s-upgradeのバージョンが必要です。注意点として、K3sリリースの+はDockerイメージではサポートされていないため、イメージタグでは-に置き換えられます。

また、system-upgrade-controllerマニフェストYAMLに指定されているsystem-upgrade-controllerとkubectlのバージョンも必要です。最新のsystem-upgrade-controllerリリースはこちらで確認し、必要なバージョンをプライベートレジストリにプッシュします。例えば、system-upgrade-controllerのv0.4.0リリースでは、以下のイメージがマニフェストYAMLに指定されています:

rancher/system-upgrade-controller:v0.4.0
rancher/kubectl:v0.17.0

必要なrancher/k3s-upgrade、rancher/system-upgrade-controller、およびrancher/kubectlイメージをプライベートレジストリに追加したら、自動アップグレードガイドに従ってください。