2 Elementalを使用したリモートホストのオンボーディング #
このセクションでは、SUSE Edgeの一部としての「Phone Homeネットワークプロビジョニング」ソリューションについて説明します。このソリューションは、Elementalを使用してノードのオンボーディングを支援します。Elementalは、Kubernetesを使用してリモートホスト登録と一元化された完全なクラウドネイティブOS管理を可能にするソフトウェアスタックです。SUSE Edgeスタックでは、Elementalの登録機能を使用して、リモートホストをRancherにオンボーディングできます。これにより、ホストを集中管理プラットフォームに統合し、そこからKubernetesクラスタに加えて、階層化コンポーネント、アプリケーション、およびそのライフサイクルをすべて共通の場所からデプロイおよび管理できるようになります。
このアプローチが役立つシナリオとしては、制御するデバイスが管理クラスタと同じネットワーク上にないか、アウトオブバンド管理コントローラが搭載されておらず、より直接的に制御できない場合や、さまざまな「不明」なシステムをエッジで多数ブートしており、それらを安全にオンボーディングして大規模に管理する必要がある場合が考えられます。これは、小売や産業用IoTなど、デバイスが設置されるネットワークをほとんど制御できない分野のユースケースによく見られるシナリオです。
2.1 高レベルアーキテクチャ #
2.2 必要なリソース #
このクイックスタートを実行するためのシステムと環境の最小要件を次に示します。
集中管理クラスタ(RancherとElementalをホストするクラスタ)用のホスト:
開発またはテスト用の場合、最小8GBのRAMと20GBのディスク容量(運用環境での使用についてはこちらを参照)
プロビジョニングするターゲットノード、すなわちエッジデバイス(デモまたはテストの場合は仮想マシンを使用可能)
最小4GBのRAM、2 CPUコア、20GBのディスク
管理クラスタの解決可能なホスト名、またはsslip.ioなどのサービスで使用する静的IPアドレス
Edge Image Builderでインストールメディアを構築するためのホスト
ブート用のUSBフラッシュドライブ(物理ハードウェアを使用する場合)
最新のSUSE Linux Micro 6.1 SelfInstall ISOイメージのダウンロードコピー(こちらから入手可能です)
ターゲットマシンにある既存のデータはこのプロセスの一環として上書きされます。ターゲットデプロイメントノードに接続されているUSBストレージデバイスやディスク上のデータは、必ずバックアップしてください。
このガイドは、アップストリームクラスタをホストするためにDigital Oceanドロップレットを使用し、ダウンストリームデバイスとしてIntel NUCを使用して作成されています。インストールメディアの構築には、SUSE Linux Enterprise Serverを使用しています。
2.3 ブートストラップクラスタの構築 #
まず、RancherとElementalをホストできるクラスタを作成します。このクラスタは、ダウンストリームノードが接続されているネットワークからルーティングできる必要があります。
2.3.1 Kubernetesクラスタの作成 #
ハイパースケーラ(Azure、AWS、Google Cloudなど)を使用している場合、クラスタを設定する最も簡単な方法は、ハイパースケーラのビルトインツールを使用することです。このガイドでは、簡潔にするために、これらの各オプションのプロセスについては詳述しません。
ベアメタルや別のホスティングサービスにインストールしようとしていて、Kubernetesディストリビューションそのものも用意する必要がある場合は、RKE2を使用することをお勧めします。
2.3.2 DNSの設定 #
続行する前に、クラスタへのアクセスを設定する必要があります。クラスタ自体のセットアップと同様に、DNSの設定方法は、クラスタがホストされている場所によって異なります。
DNSレコードの設定を扱わない場合(たとえば、これが一時的なテストサーバである場合)、代わりにsslip.ioなどのサービスを使用できます。このサービスを使用すると、<address>.sslip.io
を使用して任意のIPアドレスを解決できます。
2.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.11.2
これを運用システムにする予定の場合は、cert-managerを使用して、実際の証明書(Let's Encryptの証明書など)を設定してください。
設定したホスト名をブラウズし、使用したbootstrapPassword
でRancherにログインします。ガイドに従って簡単なセットアッププロセスを完了します。
2.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.6.8
helm install -n cattle-elemental-system \
elemental-operator \
oci://registry.suse.com/rancher/elemental-operator-chart \
--version 1.6.8
2.5.1 (オプション) Elemental UI拡張機能のインストール #
2.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.yaml
このcat
コマンドでは、各$
をバックスラッシュ(\
)でエスケープしています。このため、バッシュではテンプレート化されていません。手動でコピーする場合は、バックスラッシュを削除してください。
オブジェクトが作成されたら、割り当てられるエンドポイントを見つけてメモを取ります。
REGISURL=$(kubectl get machineregistration ele-quickstart-nodes -n fleet-default -o jsonpath='{.status.registrationURL}')
または、UIからこの操作を実行することもできます。
- UI拡張機能
[OS Management extension (OS管理拡張機能)]から[Create Registration Endpoint (登録エンドポイントの作成) ]をクリックします。
この設定に名前を付けます。
注記[Cloud Configuration (クラウドの設定)]フィールドは無視して構いません。ここのデータは、Edge Image Builderを使用した次の手順で上書きされるためです。
次に、下にスクロールして、マシンの登録時に作成されるリソースに付ける各ラベルに対して[Add Label (ラベルの追加)]をクリックします。これはマシンを区別するのに役立ちます。
[Create (作成)]をクリックして、設定を保存します。
登録が作成されると、登録URLが表示され、[Copy (コピー)] をクリックしてアドレスをコピーできます。
ヒントクリックしてその画面から移動してしまった場合は、左側のメニューの[Registration Endpoints (登録エンドポイント)]をクリックし、先ほど作成したエンドポイント名をクリックできます。
このURLは次の手順で使用します。
2.7 イメージの構築 #
Elementalの現在のバージョンには独自のインストールメディアを構築する方法が用意されていますが、SUSE Edge 3.3.1では代わりにKiwiとEdge Image Builderでインストールメディアを構築します。したがって、生成されるシステムは、SUSE Linux Microをベースオペレーティングシステムとして構築されます。
Kiwiの詳細については、まずKiwi Image Builderプロセス(第28章 「Kiwiを使用したSUSE Linux Microの更新イメージの構築」)に従って、新しいイメージを構築してください。また、Edge Image Builderについては、Edge Image Builder導入ガイド(第3章 「Edge Image Builderを使用したスタンドアロンクラスタ」)のほかに、コンポーネントのドキュメント(第11章 「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/elemental
curl $REGISURL -o $ELEM/eib_quickstart/elemental/elemental_config.yaml
cat << EOF > $ELEM/eib_quickstart/eib-config.yaml
apiVersion: 1.2
image:
imageType: iso
arch: x86_64
baseImage: SL-Micro.x86_64-6.1-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
EOF
time
セクションはオプションですが、証明書とクロックスキューに関する潜在的な問題を避けるために、設定することを強くお勧めします。この例で指定されている値は説明のみを目的としています。ご自身の特定の要件に合わせて調整してください。エンコードされていないパスワードは
eib
です。sccRegistrationCode
は、公式なソースから必要なRPMをダウンロードしてインストールするために必要です(または、代わりにelemental-register
およびelemental-system-agent
のRPMを手動でサイドロードすることもできます)。この
cat
コマンドでは、各$
をバックスラッシュ(\
)でエスケープしています。このため、バッシュではテンプレート化されていません。手動でコピーする場合は、バックスラッシュを削除してください。インストールデバイスは、インストール中に消去されます。
podman run --privileged --rm -it -v $ELEM/eib_quickstart/:/eib \
registry.suse.com/edge/3.3/edge-image-builder:1.2.1 \
build --definition-file eib-config.yaml
物理デバイスをブートする場合は、イメージをUSBフラッシュ ドライブに書き込む必要があります。これは、次のコマンドで実行できます。
sudo dd if=/eib_quickstart/elemental-image.iso of=/dev/<PATH_TO_DISK_DEVICE> status=progress
2.8 ダウンストリームノードのブート #
インストールメディアを作成したので、それを使用してダウンストリームノードをブートできます。
Elementalで制御するシステムごとに、インストールメディアを追加してデバイスをブートします。インストールが完了すると、デバイスは再起動して自身を登録します。
UI拡張機能を使用している場合は、[Inventory of Machines (マシンのインベントリ)]にノードが表示されます。
ログインプロンプトが表示されるまでインストールメディアを取り外さないでください。初回ブート時には、USBスティック上のファイルにアクセスしたままになります。
2.9 ダウンストリームクラスタの作成 #
Elementalを使用して新しいクラスタをプロビジョニングする際に作成する必要があるオブジェクトが2つあります。
- Linux
- UI拡張機能
最初のオブジェクトは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.32.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クラスタがスピンアップするはずです。
2.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からノード/クラスタを削除する際の望ましい動作は、データを消去して再登録を強制することであると想定されています。この状況ではデータが確実に失われるため、この機能は、自動リセットを実行することがわかっている場合にのみ使用してください。
2.11 次の手順 #
このガイドの使用後に調べるべき推奨リソースを次に示します。
第8章 「Fleet」のエンドツーエンドの自動化
第12章 「Edgeネットワーキング」の追加のネットワーク設定オプション