1 Elementalを使用したリモートホストのオンボーディング #
このセクションでは、SUSE Edgeの一部として「phone home network provisioning」ソリューションについて説明します。ここでは、Elementalを使用してノードのオンボーディングを支援します。Elementalは、リモートホストの登録と、KubernetesによるクラウドネイティブOSの一元管理を可能にするソフトウェアスタックです。SUSE Edgeスタックでは、Elementalの登録機能を使用してリモートホストをRancherにオンボーディングします。これにより、ホストを一元管理プラットフォームに統合し、そこからKubernetesクラスターや階層化されたコンポーネント、アプリケーション、およびそれらのライフサイクルをすべて共通の場所からデプロイおよび管理できるようになります。
このアプローチは、制御したいデバイスが管理クラスターと同じネットワーク上にない場合や、より直接的な制御を可能にする帯域外管理コントローラーが搭載されていない場合、またエッジで多くの異なる「未知の」システムを起動し、それらを大規模に安全にオンボーディングおよび管理する必要があるシナリオで役立ちます。これは、小売、産業用IoT、またはデバイスがインストールされるネットワークをほとんど制御できないその他の分野のユースケースにおける一般的なシナリオです。
1.1 上位レベルのアーキテクチャ #
1.2 必要なリソース #
以下に、このクイックスタートを実行するための最小限のシステム要件および環境要件を説明します。
集中管理クラスター用のホスト(RancherおよびElementalをホストするもの):
開発またはテスト用に最低8 GBのRAMと20 GBのディスク容量(本番環境での使用については こちらを参照)
プロビジョニング対象のノード、つまりエッジデバイス(デモやテスト目的であれば仮想マシンを使用可能)
最低4GBのRAM、2 CPUコア、20 GBのディスク
管理クラスターの解決可能なホスト名、またはsslip.ioのようなサービスで使用する静的IPアドレス
Edge Image Builderを使用してインストールメディアを構築するためのホスト
起動用のUSBフラッシュ ドライブ(物理ハードウェアを使用する場合)
こちらから入手可能な、最新のSUSE Linux Micro 6.2 SelfInstall ISOイメージのダウンロード済みコピー。
ターゲットマシン上の既存のデータは、このプロセスの一環として上書きされます。ターゲットデプロイメントノードに接続されているUSBストレージデバイスやディスク上のデータは、必ずバックアップしてください。
このガイドは、アップストリームクラスタをホストするためのDigital Oceanドロップレットと、ダウンストリームデバイスとしてのIntel NUCを使用して作成されています。インストールメディアの構築には、SUSE Linux Enterprise Serverが使用されます。
1.3 ブートストラップクラスタを構築します #
まずは、RancherとElementalをホストできるクラスタを作成することから始めます。このクラスタは、ダウンストリームノードが接続されているネットワークからルーティング可能である必要があります。
1.3.1 Kubernetesクラスタを作成します #
ハイパースケーラー(Azure、AWS、Google Cloudなど)を使用している場合、クラスタをセットアップする最も簡単な方法は、ビルトインツールを使用することです。このガイドでは簡潔にするため、これらの各オプションのプロセスについては詳しく説明しません。
ベアメタルや、Kubernetesディストリビューション自体も提供する必要がある他のホスティングサービスにインストールする場合は、 RKE2の使用をお勧めします。
1.3.2 DNSを設定します。 #
続行する前に、クラスタへのアクセスを設定する必要があります。クラスタ自体のセットアップと同様に、DNSの構成方法はホストされている場所によって異なります。
DNSレコードの設定を処理したくない場合(例えば、これが一時的なテストサーバーである場合など)、代わりに sslip.ioのようなサービスを使用できます。このサービスを使用すると、任意のIPアドレスを`<address>.sslip.io`で解決できます。
1.4 Rancher をインストールします #
Rancherをインストールするには、作成したばかりのクラスタのKubernetes APIにアクセスする必要があります。これは、使用されているKubernetesのディストリビューションによって異なります。
RKE2の場合、kubeconfigファイルは`/etc/rancher/rke2/rke2.yaml`に書き込まれています。 このファイルをローカルシステム上の`~/.kube/config`として保存します。 正しく外部からルーティング可能なIPアドレスまたはホスト名を含めるように、ファイルを編集する必要がある場合があります。
Rancher ドキュメントのコマンドを使用して、Rancher を簡単にインストールできます。
cert-manager をインストールします。
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set crds.enabled=true次に、Rancher 自体をインストールします。
helm repo add rancher-prime https://charts.rancher.com/server-charts/prime
helm repo update
helm install rancher rancher-prime/rancher \
--namespace cattle-system \
--create-namespace \
--set hostname=<DNS or sslip from above> \
--set replicas=1 \
--set bootstrapPassword=<PASSWORD_FOR_RANCHER_ADMIN> \
--version 2.14.2これが本番システムを目的としている場合は、cert-manager を使用して(Let’s Encrypt などの)実際の証明書を設定してください。
設定したホスト名にブラウザでアクセスし、使用した bootstrapPassword で Rancher にログインします。簡単なセットアッププロセスが案内されます。
1.5 Elemental をインストールします #
Rancher がインストールされたので、Elemental オペレーターと必要な CRD をインストールできます。Elemental の Helm チャートは OCI アーティファクトとして公開されているため、他のチャートよりもインストールが少し簡単です。 Rancher をインストールしたのと同じシェル、または Rancher 内のブラウザのシェルからインストールできます。
helm install --create-namespace -n cattle-elemental-system \
elemental-operator-crds \
oci://registry.suse.com/rancher/elemental-operator-crds-chart \
--version 1.9.0
helm install -n cattle-elemental-system \
elemental-operator \
oci://registry.suse.com/rancher/elemental-operator-chart \
--version 1.9.01.5.1 (オプション)Elemental UI 拡張機能をインストールします #
1.6 Elemental を設定します。 #
簡略化のため、変数 $ELEM に設定ディレクトリのフルパスを設定することをお勧めします。
export ELEM=$HOME/elemental
mkdir -p $ELEMマシンがElementalに登録できるようにするには、fleet-default 名前空間に MachineRegistration オブジェクトを作成する必要があります。
このオブジェクトの基本バージョンを作成しましょう。
cat << EOF > $ELEM/registration.yaml
apiVersion: elemental.cattle.io/v1beta1
kind: MachineRegistration
metadata:
name: ele-quickstart-nodes
namespace: fleet-default
spec:
machineName: "\${System Information/Manufacturer}-\${System Information/UUID}"
machineInventoryLabels:
manufacturer: "\${System Information/Manufacturer}"
productName: "\${System Information/Product Name}"
EOF
kubectl apply -f $ELEM/registration.yamlcat コマンドは、Bashがテンプレート化しないように、各 $ をバックスラッシュ (\) でエスケープします。手動でコピーする場合は、バックスラッシュを削除してください。
オブジェクトが作成されたら、割り当てられたエンドポイントを見つけてメモします。
REGISURL=$(kubectl get machineregistration ele-quickstart-nodes -n fleet-default -o jsonpath='{.status.registrationURL}')あるいは、UIからこれを行うこともできます。
- UI拡張機能
OS管理拡張機能から、[登録エンドポイントの作成]をクリックします。
この設定に名前を付けます。
NoteEdge Image Builderを使用した以下の手順でデータが上書きされるため、クラウド設定フィールドは無視してかまいません。
次に、下までスクロールし、マシン登録時に作成されるリソースへ追加する各ラベルに対して[ラベルの追加]をクリックします。これは、マシンを識別するのに役立ちます。
[作成]をクリックして、設定を保存します。
登録が作成されると、登録URLが表示されます。[コピー]をクリックしてアドレスをコピーできます。
Tipその画面から離れてしまった場合は、左側のメニューで「Registration Endpoints」をクリックし、作成したエンドポイントの名前をクリックしてください。
この URL は次のステップで使用します。
1.7 イメージ をビルドします #
Elemental の現在のバージョンには独自のインストールメディアをビルドする方法がありますが、SUSE Edge 3.6 では代わりに Kiwi と Edge Image Builder を使用するため、結果として得られるシステムは SUSE Linux Micro をベースオペレーティングシステムとしてビルドされます。
Kiwi の詳細については、まず Kiwi Image Builder プロセス (Chapter 26, Kiwiを使用して更新されたSUSE Linux Microイメージを構築する) に従って新しいイメージをビルドしてください。Edge Image Builder については、Edge Image Builder 入門ガイド (Chapter 2, Edge Image Builderを使用したスタンドアロンクラスター) および コンポーネントドキュメント (Chapter 8, Edge Image Builder) を確認してください。
Podman がインストールされている Linux システムから、ディレクトリを作成し、Kiwi によってビルドされるベースイメージを配置します。
mkdir -p $ELEM/eib_quickstart/base-images
cp /path/to/{micro-base-image-iso} $ELEM/eib_quickstart/base-images/
mkdir -p $ELEM/eib_quickstart/elementalcurl $REGISURL -o $ELEM/eib_quickstart/elemental/elemental_config.yamlcat << EOF > $ELEM/eib_quickstart/eib-config.yaml
apiVersion: 1.3
image:
imageType: iso
arch: x86_64
baseImage: SL-Micro.x86_64-6.2-Base-SelfInstall-GM.install.iso
outputImageName: elemental-image.iso
operatingSystem:
time:
timezone: Europe/London
ntp:
forceWait: true
pools:
- 2.suse.pool.ntp.org
servers:
- 10.0.0.1
- 10.0.0.2
isoConfiguration:
installDevice: /dev/vda
users:
- username: root
encryptedPassword: \$6\$jHugJNNd3HElGsUZ\$eodjVe4te5ps44SVcWshdfWizrP.xAyd71CVEXazBJ/.v799/WRCBXxfYmunlBO2yp1hm/zb4r8EmnrrNCF.P/
packages:
sccRegistrationCode: XXX
EOFtimeセクションはオプションですが、証明書やクロックスキューに関する潜在的な問題を回避するために設定することを強く推奨します。この例で示されている値は、あくまで例示用です。お客様の特定の要件に合わせて調整してください。エンコードされていないパスワードは
eibです。公式ソースから必要な RPM をダウンロードしてインストールするには
sccRegistrationCodeが必要です(代わりに、elemental-registerおよびelemental-system-agentRPM を手動でサイドロードすることも可能です)。catコマンドは、Bashがテンプレート化しないように、各$をバックスラッシュ (\) でエスケープします。手動でコピーする場合は、バックスラッシュを削除してください。インストール中にインストールデバイスは消去されます。
podman run --privileged --rm -it -v $ELEM/eib_quickstart/:/eib \
registry.suse.com/edge/3.6/edge-image-builder:1.3.3.1 \
build --definition-file eib-config.yaml物理デバイスを起動する場合は、イメージを USB フラッシュ ドライブに書き込む必要があります。これは次のように実行できます。
sudo dd if=/eib_quickstart/elemental-image.iso of=/dev/<PATH_TO_DISK_DEVICE> status=progress1.8 ダウンストリームノード を起動します #
インストールメディアを作成しましたので、それを使用してダウンストリームノードを起動できます。
Elemental で制御する各システムについて、インストールメディアを追加してデバイスを起動してください。インストール後、システムは再起動し、自動的に登録されます。
UI 拡張機能を使用している場合は、「Inventory of Machines」にノードが表示されるはずです。
ログインプロンプトが表示されるまでインストールメディアを取り外さないでください。初回起動時は、USBスティック上のファイルにまだアクセスしています。
1.9 ダウンストリームクラスタ群を作成する #
Elementalを使用して新しいクラスタをプロビジョニングする際に作成する必要があるオブジェクトが2つあります。
- Linux
- UI拡張機能
1つ目は MachineInventorySelectorTemplate です。このオブジェクトを使用すると、クラスタとインベントリ内のマシン間のマッピングを指定できます。
インベントリ内のラベルを持つ任意のマシンに一致するセレクタを作成します:
cat << EOF > $ELEM/selector.yaml apiVersion: elemental.cattle.io/v1beta1 kind: MachineInventorySelectorTemplate metadata: name: location-123-selector namespace: fleet-default spec: template: spec: selector: matchLabels: locationID: '123' EOFリソースをクラスタに適用します:
kubectl apply -f $ELEM/selector.yamlマシンの名前を取得し、一致するラベルを追加します:
MACHINENAME=$(kubectl get MachineInventory -n fleet-default | awk 'NR>1 {print $1}') kubectl label MachineInventory -n fleet-default \ $MACHINENAME locationID=123シンプルなシングルノードのK3sクラスタリソースを作成し、それをクラスタに適用します:
cat << EOF > $ELEM/cluster.yaml apiVersion: provisioning.cattle.io/v1 kind: Cluster metadata: name: location-123 namespace: fleet-default spec: kubernetesVersion: v1.35.4+k3s1 rkeConfig: machinePools: - name: pool1 quantity: 1 etcdRole: true controlPlaneRole: true workerRole: true machineConfigRef: kind: MachineInventorySelectorTemplate name: location-123-selector apiVersion: elemental.cattle.io/v1beta1 EOF kubectl apply -f $ELEM/cluster.yaml
これらのオブジェクトを作成すると、インストールしたばかりの新しいノードを使用して新しいKubernetesクラスターが起動するのを確認できるはずです。
1.10 ノードのリセット(オプション) #
SUSE Rancher Elementalは「ノードリセット」を実行する機能をサポートしており、Rancherからクラスター全体が削除された場合、クラスターから単一のノードが削除された場合、またはマシンインベントリからノードが手動で削除された場合に、オプションでトリガーできます。これは、孤立したリソースをリセットしてクリーンアップし、クリーンアップされたノードを自動的にマシンインベントリに戻して再利用できるようにしたい場合に便利です。これはデフォルトでは有効になっていないため、削除されたシステムはクリーンアップされません(つまり、データは削除されず、Kubernetesクラスターリソースはダウンストリームクラスター上で動作し続けます)。そのため、データを消去し、Elementalを介してマシンをRancherに再登録するには手動での介入が必要になります。
この機能をデフォルトで有効にしたい場合は、`MachineRegistration`で`config.elemental.reset.enabled: true`を追加して明示的に有効にする必要があります。例:
config:
elemental:
registration:
auth: tpm
reset:
enabled: trueそうすれば、この`MachineRegistration`に登録されているすべてのシステムは、設定内に`elemental.cattle.io/resettable: 'true'`アノテーションを自動的に受け取ります。個々のノードでこれらを手動で行いたい場合(例:このアノテーションがない既存の`MachineInventory`がある場合や、すでにノードをデプロイ済みの場合など)、`MachineInventory`を変更して`resettable`設定を追加できます。例:
apiVersion: elemental.cattle.io/v1beta1
kind: MachineInventory
metadata:
annotations:
elemental.cattle.io/os.unmanaged: 'true'
elemental.cattle.io/resettable: 'true'SUSE Edge 3.1では、Elemental Operatorがオペレーティングシステム上にマーカーを配置し、それが自動的にクリーンアッププロセスをトリガーします。これにより、すべてのKubernetesサービスが停止され、すべての永続データが削除され、すべてのKubernetesサービスがアンインストールされ、残っているKubernetes/Rancherディレクトリがクリーンアップされ、元のElemental MachineRegistration`設定を介してRancherへの再登録が強制されます。これは自動的に行われるため、手動で介入する必要はありません。呼び出されるスクリプトは/opt/edge/elemental_node_cleanup.sh`にあり、マーカーが配置されると`systemd.path`を介してトリガーされるため、即座に実行されます。
`resettable`機能を使用する場合、Rancherからノードやクラスターを削除した際の動作として、データを消去して再登録を強制することが前提となります。この状況ではデータが確実に失われるため、自動リセットを実行することが確実な場合にのみ使用してください。
1.11 次のステップ #
このガイドを使用した後に調査することをお勧めするリソースをいくつか紹介します。
Chapter 6, Fleetにおけるエンドツーエンドの自動化
Chapter 9, エッジネットワーキングにおける追加のネットワーク設定オプション









