目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SUSE Edgeドキュメント / クイックスタート / Elementalを使用したリモートホストのオンボーディング

2 Elementalを使用したリモートホストのオンボーディング

このセクションでは、SUSE Edgeの一部としての「Phone Homeネットワークプロビジョニング」ソリューションについて説明します。このソリューションは、Elementalを使用してノードのオンボーディングを支援します。Elementalは、Kubernetesを使用してリモートホスト登録と一元化された完全なクラウドネイティブOS管理を可能にするソフトウェアスタックです。SUSE Edgeスタックでは、Elementalの登録機能を使用して、リモートホストをRancherにオンボーディングできます。これにより、ホストを集中管理プラットフォームに統合し、そこからKubernetesクラスタに加えて、階層化コンポーネント、アプリケーション、およびそのライフサイクルをすべて共通の場所からデプロイおよび管理できるようになります。

このアプローチが役立つシナリオとしては、制御するデバイスがアップストリームクラスタと同じネットワーク上にないか、アウトオブバンド管理コントローラが搭載されておらず、より直接的に制御できない場合や、さまざまな「不明」なシステムをエッジで多数ブートしており、それらを安全にオンボーディングして大規模に管理する必要がある場合が考えられます。これは、小売や産業用IoTなど、デバイスが設置されるネットワークをほとんど制御できない分野のユースケースによく見られるシナリオです。

2.1 アーキテクチャの概要

クイックスタートElementalアーキテクチャ

2.2 必要なリソース

このクイックスタートを実行するためのシステムと環境の最小要件を次に示します。

  • 集中管理クラスタ(RancherとElementalをホストするクラスタ)用のホスト:

    • 開発またはテスト用の場合、最小8GBのRAMと20GBのディスク容量 (運用環境での使用についてはこちら を参照)

  • プロビジョニングするターゲットノード、すなわちエッジデバイス(デモまたはテストの場合は仮想マシンを使用可能)

    • 最小4GBのRAM、2 CPUコア、20GBのディスク

  • 管理クラスタの解決可能なホスト名、またはsslip.ioなどのサービスで使用する静的IPアドレス

  • Edge Image Builderでインストールメディアを構築するためのホスト

    • SLES 15 SP5、openSUSE Leap 15.5、またはPodmanをサポートする他の互換オペレーティングシステムを実行していること

    • KubectlPodman、およびHelmがインストールされていること

  • ブート用のUSBフラッシュ ドライブ(物理ハードウェアを使用する場合)

注記
注記

ターゲットマシンにある既存のデータはこのプロセスの一環として上書きされます。ターゲットデプロイメントノードに接続されているUSBストレージデバイスやディスク上のデータは、必ずバックアップしてください。

このガイドは、アップストリームクラスタをホストするためにDigital Oceanドロップレットを使用し、ダウンストリームデバイスとしてIntel NUCを使用して作成されています。インストールメディアの構築には、SUSE Linux Enterprise Serverを使用しています。

2.3 Elementalの使用方法

Elementalをインストールして使用するための基本的な手順は次のとおりです。

2.3.1 ブートストラップクラスタの構築

まず、RancherとElementalをホストできるクラスタを作成します。このクラスタは、ダウンストリームノードが接続されているネットワークからルーティングできる必要があります。

2.3.1.1 Kubernetesクラスタの作成

ハイパースケーラ(Azure、AWS、Google Cloudなど)を使用している場合、クラスタを設定する最も簡単な方法は、ハイパースケーラのビルトインツールを使用することです。このガイドでは、簡潔にするために、これらの各オプションのプロセスについては詳述しません。

ベアメタルや別のホスティングサービスにインストールしようとしていて、Kubernetesディストリビューションそのものも用意する必要がある場合は、RKE2を使用することをお勧めします。

2.3.1.2 DNSの設定

続行する前に、クラスタへのアクセスを設定する必要があります。クラスタ自体のセットアップと同様に、DNSの設定方法は、クラスタがホストされている場所によって異なります。

ヒント
ヒント

DNSレコードの設定を扱わない場合(たとえば、これが一時的なテストサーバである場合)、代わりにsslip.ioなどのサービスを使用できます。このサービスを使用すると、<address>.sslip.ioを使用して任意のIPアドレスを解決できます。

2.3.2 Rancherのインストール

Rancherをインストールするには、作成したクラスタのKubernetes APIにアクセスする必要があります。これは、使用しているKubernetesのディストリビューションによって異なります。

RKE2の場合、kubeconfigファイルは/etc/rancher/rke2/rke2.yamlに書き込まれます。このファイルをローカルシステムに~/.kube/configとして保存します。このファイルを編集して、外部にルーティング可能な正しいIPアドレスまたはホスト名を含めなければならない場合があります。

Rancherのドキュメントに記載されているコマンドを使用して、Rancherを簡単にインストールできます。

  1. cert-managerをインストールします。

    • Linux
    • Windows
    helm repo add rancher-prime https://charts.rancher.com/server-charts/prime
    
    kubectl create namespace cattle-system
    
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.3/cert-manager.crds.yaml
    helm repo add jetstack https://charts.jetstack.io
    
    helm repo update
    
    helm install cert-manager jetstack/cert-manager \
     --namespace cert-manager \
     --create-namespace
  2. 次に、Rancher自体をインストールします。

    • Linux
    • Windows
    helm install rancher rancher-prime/rancher \
      --namespace cattle-system \
      --set hostname=<DNS or sslip from above> \
      --set replicas=1 \
      --set bootstrapPassword=<PASSWORD_FOR_RANCHER_ADMIN>
注記
注記

これを運用システムにする予定の場合は、cert-managerを使用して、実際の証明書(Let's Encryptの証明書など)を設定してください。

設定したホスト名をブラウズし、使用したbootstrapPasswordでRancherにログインします。ガイドに従って簡単なセットアッププロセスを完了します。

2.3.3 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.4.4

helm install --create-namespace -n cattle-elemental-system \
 elemental-operator \
 oci://registry.suse.com/rancher/elemental-operator-chart \
 --version 1.4.4

2.3.3.1 (オプション) Elemental UI拡張機能のインストール

  1. Elemental UIを使用するには、Rancherインスタンスにログインし、左上の3点リーダーメニューをクリックします。

    Elemental拡張機能のインストール1
  2. このページの[Available (使用可能)]タブから、Elementalカードの[Install (インストール)]をクリックします。

    Elemental拡張機能のインストール2
  3. 拡張機能をインストールすることを確認します。

    Elemental拡張機能のインストール3
  4. インストール後、ページを再ロードするよう求められます。

    Elemental拡張機能のインストール4
  5. 再ロードすると、[OS Management (OS管理)]グローバルアプリからElemental拡張機能にアクセスできるようになります。

    Elemental拡張機能へのアクセス

2.3.3.2 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拡張機能
  1. [OS Management extension (OS管理拡張機能)]から[Create Registration Endpoint (登録エンドポイントの作成) ]をクリックします。

    [Create Registration (登録の作成)]をクリックします。
  2. この設定に名前を付けます。

    名前の追加
    注記
    注記

    [Cloud Configuration (クラウドの設定)]フィールドは無視して構いません。ここのデータは、Edge Image Builderを使用した次の手順で上書きされるためです。

  3. 次に、下にスクロールして、マシンの登録時に作成されるリソースに付ける各ラベルに対して[Add Label (ラベルの追加)]をクリックします。これはマシンを区別するのに役立ちます。

    ラベルの追加
  4. 最後に、[Create (作成)]をクリックして、設定を保存します。

    [Create (作成)]をクリック
UI拡張機能

設定を作成した直後の場合は、[Registration URL (登録URL)]が一覧にされます。[Copy (コピー)]をクリックしてアドレスをコピーできます。

URLのコピー
ヒント
ヒント

クリックしてその画面から移動してしまった場合は、左側のメニューの[Registration Endpoints (登録エンドポイント)]をクリックし、先ほど作成したエンドポイント名をクリックできます。

このURLは次の手順で使用します。

2.3.4 インストールメディアの構築

Elementalの現在のバージョンには独自のインストールメディアを構築する方法が用意されていますが、SUSE Edge 3.0では代わりにEdge Image Builderでインストールメディアを構築します。したがって、生成されるシステムは、SLE Microをベースオペレーティングシステムとして構築されます。

ヒント
ヒント

Edge Image Builderの詳細については、導入ガイド(第3章 「Edge Image Builderを使用したスタンドアロンクラスタ)のほかに、コンポーネントのドキュメント(第9章 「Edge Image Builder)も参照してください。

PodmanがインストールされたLinuxシステムから、次のコマンドを実行します。

mkdir -p $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.0
image:
    imageType: iso
    arch: x86_64
    baseImage: SLE-Micro.x86_64-5.5.0-Default-SelfInstall-GM.install.iso
    outputImageName: elemental-image.iso
operatingSystem:
  users:
    - username: root
      encryptedPassword: \$6\$jHugJNNd3HElGsUZ\$eodjVe4te5ps44SVcWshdfWizrP.xAyd71CVEXazBJ/.v799/WRCBXxfYmunlBO2yp1hm/zb4r8EmnrrNCF.P/
EOF
注記
注記
  • エンコードされていないパスワードはeibです。

  • このcatコマンドでは、各$をバックスラッシュ(\)でエスケープしています。このため、バッシュではテンプレート化されていません。手動でコピーする場合は、バックスラッシュを削除してください。

podman run --privileged --rm -it -v $ELEM/eib_quickstart/:/eib \
 registry.suse.com/edge/edge-image-builder:1.0.2 \
 build --definition-file eib-config.yaml

物理デバイスをブートする場合は、イメージをUSBフラッシュ ドライブに書き込む必要があります。これは、次のコマンドで実行できます。

sudo dd if=/eib_quickstart/elemental-image.iso of=/dev/<PATH_TO_DISK_DEVICE> status=progress

2.3.5 ダウンストリームノードのブート

インストールメディアを作成したので、それを使用してダウンストリームノードをブートできます。

Elementalで制御するシステムごとに、インストールメディアを追加してデバイスをブートします。インストールが完了すると、デバイスは再起動して自身を登録します。

UI拡張機能を使用している場合は、[Inventory of Machines (マシンのインベントリ)]にノードが表示されます。

注記
注記

ログインプロンプトが表示されるまでインストールメディアを取り外さないでください。初回ブート時には、USBスティック上のファイルにアクセスしたままになります。

2.3.6 ダウンストリームクラスタの作成

Elementalを使用して新しいクラスタをプロビジョニングする際に作成する必要があるオブジェクトが2つあります。

  • Linux
  • UI拡張機能

最初のオブジェクトはMachineInventorySelectorTemplateです。このオブジェクトにより、クラスタとインベントリ内のマシン間のマッピングを指定できます。

  1. インベントリ内のマシンをラベルに一致させるセレクタを作成します。

    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
  2. リソースをクラスタに適用します。

    kubectl apply -f $ELEM/selector.yaml
  3. マシンの名前を取得し、一致するラベルを追加します。

    MACHINENAME=$(kubectl get MachineInventory -n fleet-default | awk 'NR>1 {print $1}')
    
    kubectl label MachineInventory -n fleet-default \
     $MACHINENAME locationID=123
  4. シンプルなシングルノードK3sクラスタリソースを作成し、クラスタに適用します。

    cat << EOF > $ELEM/cluster.yaml
    apiVersion: provisioning.cattle.io/v1
    kind: Cluster
    metadata:
      name: location-123
      namespace: fleet-default
    spec:
      kubernetesVersion: v1.28.9+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クラスタがスピンアップするはずです。

ヒント
ヒント

システムを簡単にグループ化できるようにするには、環境内でその場所に固有であることがわかっている項目を検索する起動スクリプトを追加できます。

たとえば、各場所に固有のサブネットがあることがわかっている場合は、そのネットワークプレフィックスを検索して、対応するMachineInventoryにラベルを追加するスクリプトを記述できます。

これは通常、ご使用のシステムの設計に合わせたカスタムスクリプトになりますが、次のようになります。

INET=`ip addr show dev eth0 | grep "inet\ "`
elemental-register --label "network=$INET" \
 --label "network=$INET" /oem/registration

2.4 ノードのリセット

SUSE Rancher Elementalは、「ノードリセット」を実行する機能をサポートしています。ノードリセットは、Rancherからクラスタ全体が削除されたとき、クラスタからシングルノードが削除されたとき、またはマシンインベントリからノードが手動で削除されたときに任意でトリガできます。これは、孤立したリソースをリセットしてクリーンアップし、クリーンアップされたノードを自動的にマシンインベントリに戻して再利用可能にする場合に役立ちます。ノードリセットはデフォルトでは有効になっていないため、削除されたシステムはクリーンアップされず(つまり、データは削除されず、Kubernetesクラスタリソースはダウンストリームクラスタで動作し続けます)、データを消去してマシンをElemental経由でRancherに再登録するには手動操作が必要となります。

この機能をデフォルトで有効にするには、MachineRegistrationconfig.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.0では、Elemental Operatorによってオペレーティングシステム上にマーカが配置され、これによってクリーンアッププロセスが自動的にトリガされます。クリーンアッププロセスは、すべてのKubernetesサービスを停止して永続データをすべて削除し、すべてのKubernetesサービスをアンインストールして、残っているKubernetes/Rancherディレクトリをクリーンアップし、元のElemental MachineRegistration設定を使用して強制的にRancherに再登録します。これは自動的に行われるため、手動での操作は必要ありません。呼び出されるスクリプトは/opt/edge/elemental_node_cleanup.shにあり、マーカが配置されるとすぐにsystemd.pathを介してトリガされるため、直ちに実行されます。

警告
警告

resettable機能を使用する場合、Rancherからノード/クラスタを削除する際の望ましい動作は、データを消去して再登録を強制することであると想定されています。この状況ではデータが確実に失われるため、この機能は、自動リセットを実行することがわかっている場合にのみ使用してください。

2.5 次の手順

このガイドの使用後に調べるべき推奨リソースを次に示します。