Mac meets SUSE Edge:EIBを用いたLinux、K3s、Rancherのデプロイ

Share
Share

エッジコンピューティングは多大な可能性を秘めている一方で、特有の課題も抱えています。センサー、鉄道、リテール、スマートファクトリーなど、接続が不安定で帯域幅が限られていることが多く、信頼性の高いデータ転送やリモート管理が困難であるためです。エッジデプロイメントは規模が大きく、分散型であるため、管理と保守が非常に複雑になり、リモート管理機能が求められます。

SUSE Edgeチームは、ユーザーがOS、Kubernetes、アプリケーション、ネットワーク設定を含む単一のself-bootstrapping imageを作成し、任意の数のエッジノードに展開できるようにするEdge Image Builder(EIB)を開発しました。マシンは独立して起動し、RPM、Kubernetes、SUSE製品、エンドユーザーアプリケーションをインストールし、サービス提供の準備が整います。このイメージは、低帯域幅接続やエアギャップ環境で使用できます。

このブログでは、SUSE Linux Micro、K3sRancher Primeを組み合わせたEIBを使用してSUSE Edge管理クラスタをデプロイする手順をステップバイステップで解説します。軽量でコンテナに最適化されたOSと、リソース効率の高いKubernetesディストリビューションを、すべてRancher Primeで集中管理することで、エッジでのスケーラブルで堅牢なコンテナ化されたアプリケーションとインフラストラクチャのデプロイが可能になります。

Visual representation of SUSE Edge solution architecture using a virtualized environment

必要なのはApple Silicon Macだけです。この管理クラスタを作成するために、別のサーバーは必要ありません。これは、EIBがARMアーキテクチャのイメージを構築できるからです。ここでは、Sonoma 14.4を実行しているMacBook Pro M3マシンを使用しました。Macをお持ちでなくてもご心配なく。EIBはx86マシン用のイメージを作成できます。

さらに、SUSEの製品はオープンソースであり、このガイドはSUSEサブスクリプションなしで実行できます。ただし、このガイドは学習/開発を目的としており、本番環境でのセットアップを意図したものではないことにご注意ください。

 

前提条件

  • SUSE Linux Micro 6.0 Armイメージ (SL-Micro.aarch64-6.0-Base-SelfInstall-GM2.install.iso): こちらのリンクからダウンロードできます。SUSEアカウントでログインするか、新しいアカウントを作成してイメージをダウンロードしてください。必ずバージョン6.0Arm (aarch64)を選択してください。
  • UTMのインストール: 仮想マシンを実行するためにUTMをインストールします。

 

EIBを使用したイメージの構築

Edge Image Builderはコンテナとして実行されるため、非常に移植性が高く、大規模なインストールも不要です。これには、podmanなどのコンテナランタイムが必要です。Podmanは、MacOSのパッケージマネージャーであるHomebrewを通じてインストールできます。MacOS上のPodmanは、Linux上で実行する必要があるため、仮想マシンが必要です。ここでは、6 CPUと4GBメモリの仮想マシンを作成しますが、可能であれば10 CPUと8GBメモリを推奨します。

EIBの最新リリースバージョン1.1.0をプルします:

brew install podman
podman machine init --cpus 6 --memory 4096
podman machine start
podman pull registry.suse.com/edge/3.2/edge-image-builder:1.1.0

EIBには、特定の構造を持つイメージ定義ファイルとディレクトリが必要です。Gitディレクトリをcloneして、EIB構成をダウンロードします。ここでは、blog-rancher-3nodeディレクトリを使用します。

git clone https://github.com/jiwonhu/eib-lab.git
cd blog-rancher-3node/
EIB_DIR=$(pwd)
mkdir base-images

base-imagesディレクトリを作成し、SUSE Linux Microイメージをこのディレクトリに配置します。ディレクトリは次のようになります。

ファイルとディレクトリは次のとおりです:

  • eib-config.yaml: EIBイメージ定義ファイル。
  • custom:EIBでは、作ったシステム起動時、特別な設定用スクリプトを一緒に準備できます。その内の「99-alias.sh」というスクリプトは、システム上でkubectlという命令を使うために必要な設定を自動で行います。この設定用スクリプトを入れる場所は、あってもなくても大丈夫です。
  • os-files:
  • このディレクトリに配置されたファイルは、構築されたイメージのファイルシステムに自動的にコピーされます。SUSE Linux Micro 6.0ではrootユーザーのSSHアクセスが無効になっているため、便宜上、etc/ssh/sshd_configファイルを配置して有効にしています。このディレクトリはオプションです。
  • kubernetes: イメージ定義ファイルには、k8s構成が含まれています。このディレクトリには、構築されたイメージに含めるための追加ファイルを追加できます。
    • config:このディレクトリには、プロビジョニングされたKubernetesクラスタに適用されるK3s(またはRKE2)クラスタ構成ファイルが含まれています。yamlはすべてのコントロールプレーンノードに適用され、agent.yamlファイルはすべてのワーカーノードに適用されます。
    • helm: EIBは、提供されていれば任意のhelmチャートをデプロイできます。helmディレクトリには、チャートにユーザー指定の構成を有効にするHelm values.yamlファイルが含まれており、クラスタに自動的に適用されます。
    • manifests:K3sクラスタに適用されるKubernetesマニフェストが含まれています。SUSE Edgeは、ベアメタルマシン用のロードバランサとしてMetalLBを使用し、コントロールプレーンの高可用性を標準で保証します。マルチノードK3sクラスタには外部IPアドレスが必要であり、この例ではMetalLBで(192.168.64.14)を構成します。これは、MacからRancher GUIにアクセスするために必要です。
  • network: 各ファイルには、特定のノードの目的のネットワーク構成が含まれています。3つのファイルがあり、このイメージが3ノードクラスタ用であることを示しています。
    • node1.suse.com.yamlには、最初のマシンの(v)NICカードのMACアドレスが含まれています。ノードにこのMACアドレスがある場合、イメージはインターフェースに168.64.11 IPアドレスを割り当てます。この例では、node1は192.168.64.11、node2は192.168.64.12、node3は192.168.64.13を使用します。nm-configuratorと呼ばれるツールがノード上で使用され、MACアドレスに基づいて自身を一意に識別します。

さらに、kubernetes/helm/values/rancher.yamlファイルでは、Rancherにホスト名「rancher-192.168.64.14.sslip.io」(これにより、簡単に解決できるDNS名が有効になります)とパスワード「foobar」を割り当てます。後で、このホスト名とパスワードを使用してRancher GUIにアクセスします。本番環境ではこのパスワードを使用しないでください!

# kubernetes/helm/rancher.yaml

hostname: rancher-192.168.64.14.sslip.io
bootstrapPassword: "foobar"
replicas: 1
global.cattle.psp.enabled: "false"

それでは、イメージ定義ファイル(eib-config.yaml)を見ていきましょう。

apiVersion: 1.1
image:
  imageType: iso 
  arch: aarch64
  baseImage: SL-Micro.aarch64-6.0-Base-SelfInstall-GM2.install.iso
  outputImageName: rancher-3node-aarch64-6.0.iso
operatingSystem:
  isoConfiguration:
    installDevice: /dev/vda
  users:
  - username: root
    encryptedPassword: "$6$DIL3SYTayoaM13GP$zAfXEofZd154Wuuj.fMqJXKd2p8fieu75zLgta6dWz7rCHsxw0x4CcFjLH3V5Dy4sQKN9/VotNS9E37RYRTeD."

SUSE Linux MicroオペレーティングシステムはSUSE Edge Suiteの基盤であり、EIBはデフォルトのOSイメージにユーザー指定の構成を追加します。EIBは、ハードウェアに応じてself-installISOまたはRAWファイルイメージを受け取ることができます。例えば、組み込みEdgeデバイスに対してプロビジョニングする場合、ISOから起動するのではなく、SDカード/eMMCにRAWディスクイメージを書き込む可能性が高くなります。この例では、ISOイメージをベースイメージとして提供し、EIBは出力として「rancher-3node-aarch64-6.0.iso」という名前のイメージを作成します。

システム設定欄では、起動時の細かい設定ができます。例えば、起動時に実行する特別な命令や、使う時間帯、ユーザーの設定、ネット接続の設定などです。仮想マシンを動かす時、起動するための場所として「/dev/vda」を指定しました。これは、仮想的なディスクの事です。もし、実際の機械で使うなら、「/dev/sda」や「/dev/nvme0」といった実際のディスクを指定します。

userサブセクションでは、EIBにパスワード「root」を持つrootユーザーを作成するように指示します。本番環境ではこのパスワードを使用しないことをお勧めします。代わりに、OSのrootユーザーまたは新規ユーザーに対してSSHキーを指定できます。

この例では、簡略化のためRPMインストールは含まれていません。ただし、packagesサブセクションを指定することでRPMを含めることができます。これには、EIBがイメージを構築するための有効なSUSE Linux Microサブスクリプションコードが必要です。

Kubernetesの定義は次のとおりです。

kubernetes:
  version: v1.31.4+k3s1
  network:
    apiHost: 192.168.64.10.sslip.io
    apiVIP: 192.168.64.10
  nodes:
    - hostname: node1.suse.com
      type: server
      initializer: true
    - hostname: node2.suse.com
      type: agent
    - hostname: node3.suse.com
      type: agent

このイメージにK3s v1.31.4を含めるようにEIBに指示します。クラスタは、コントロールプレーンの仮想IPとして192.168.64.10を使用し、Kubernetes APIにアクセスするためのドメインアドレスとして192.168.64.10.sslip.ioを使用します。SSL証明書はこのホスト名を使用して構築されることに注意してください。

各ノードにはnodeX.suse.comというホスト名が付けられます。node1がクラスタ初期化ノードとして機能します。。これは、クラスタをブートストラップし、他のノードが事前に定義された仮想IPを介してクラスタに参加できるようにするサーバーノードです。

networkセクションとnodesセクションは、クラスタが単一ノードの場合、完全にオプションです。エッジノードがKubernetesを必要としない場合、kubernetesセクション自体をイメージ定義から省略できます。

イメージ定義の最後の部分は、アプリケーションまたはHelmチャート用です。

  helm:
    charts:
      - name: cert-manager
        version: 1.14.2
        repositoryName: jetstack
        targetNamespace: cert-manager
        createNamespace: true
        installationNamespace: kube-system
        valuesFile: certmanager.yaml
      - name: rancher
        version: 2.10.1
        repositoryName: rancher-prime
        targetNamespace: cattle-system
        createNamespace: true
        installationNamespace: kube-system
        valuesFile: rancher.yaml
    repositories:
      - name: jetstack
        url: https://charts.jetstack.io
      - name: rancher-prime
        url: https://charts.rancher.com/server-charts/prime

帯域幅が制限された環境に対応するため、EIBは指定されたチャートとそれに関連するイメージをビルド時に自動的にダウンロードし、構築されたイメージに含めます。この例では、cert-managerとSUSE Rancher Prime v2.10.1をインストールします。EIBは、kubernetes/helm/valuesディレクトリにあるcertmanager.yamlとrancher.yamlをHelmチャートへの入力として使用します。

イメージを構築しましょう。EIBはMacがディレクトリに作成する.DS_Store隠しファイルを処理できないため、事前に削除します。私たちのマシンでは、イメージのビルドに7〜10分かかりました。イメージは同じフォルダに作成されます。

echo $EIB_DIR
find . -name ".DS_Store" -delete
podman run --privileged --rm -it -v $EIB_DIR:/eib  registry.suse.com/edge/3.2/edge-image-builder:1.1.0  build --definition-file eib-config.yaml

出力は以下のようになります。
Terminal output showcasing SUSE Edge deployment on macOS

イメージビルドプロセスが失敗した場合は、ビルドログを確認すると役立ちます。ログは_buildディレクトリに保存されており、各イメージビルドにはタイムスタンプ付きの独自のサブディレクトリがあります。また、EIBディレクトリにFinderアプリケーションからアクセスする場合は、隠しファイルである.DS_Storeがすべて削除されていることを確認してください。

$ ls _build/
build-Feb10_12-32-23	cache
$ cd _build/build-Feb10_12-32-23
$ ls -alt
total 1344
-rw-r--r--   1 jhu  staff   35532 Feb 10 20:44 podman-system-service.log
-rw-r--r--   1 jhu  staff    4066 Feb 10 20:44 iso-build.log
-rw-r--r--   1 jhu  staff    2401 Feb 10 20:43 iso-extract.log

このイメージは、あなたのMacマシンが仮想ネットワークに192.168.64.0/24を使用することを前提としています。UTMは、192.168.200.0/24などの異なるサブネットを構成している可能性があります。これをチェックし、IPアドレスをあなたのサブネットに合わせて更新することをお勧めします。

$ sudo grep -A3 "Shared_Net_Address" /Library/Preferences/SystemConfiguration/com.apple.vmnet.plist
	Shared_Net_Address
	192.168.64.1
	Shared_Net_Mask
	255.255.255.0

上記のコマンドの出力に異なるサブネットが表示された場合は、これらのファイルを更新する必要があります。

  • eib-config.yaml内のKubernetes VIP(apiVIPとapiHost)
  • network/nodeX.suse.com.yaml内のノードIP
  • kubernetes/manifests/ingress-ippool-l2adv.yaml内のIngress IP
  • kubernetes/helm/values/rancher.yaml内のIngress IP

 

self-install imageのデプロイ

K3sクラスタとRancherをデプロイしましょう。これは簡単です。仮想マシンを作成するだけで、OS、K3s、Rancherが自動的に、そして無人でインストールされます。イメージはユーザーの介入なしに自己起動することを想定していることを覚えておいてください。

UTMアプリケーションを開き、新しい仮想マシンを作成します。

「仮想化」を選択し、次に「その他」を選択します。ブートデバイスとして「CD/DVDイメージ」を選択し、EIBが作成したイメージを選択します。

仮想マシンに8GBのメモリと4つのコアを割り当てます。次に、ストレージボリュームに30GBを割り当てます。

もう少しで完了です。「node1」などの名前をVMに付けます。「VM設定を開く」チェックボックスをオンにしてネットワークを構成し、VMを保存します。

「ネットワーク」タブに移動し、ネットワークモードとして「共有ネットワーク」を選択し、MACアドレス34:8A:B1:4B:16:E1 を割り当てます。これは、network/node1.suse.com.yamlファイルで定義されたMACアドレスと一致します。これにより、マシンは起動時に自身をnode1として自己識別できるようになり、事前定義されたネットワーク構成が割り当てられ、インターフェースにIPアドレス192.168.64.11が追加されます。同様に、2番目のVMは、目的のIPアドレスを取得するためにnode2.suse.com.yamlファイルからMACアドレスを使用する必要があります。

VMを起動します。VMは自動的に起動し、rootユーザーを構成し、RPMをインストールし、ネットワークインターフェースを構成します。その後、K3sとRancher Primeをインストールします。

VMが起動して実行されたら、rootユーザーとしてログインし、K3sとRancherのポッドの状態を確認できます。

Rancher GUIにアクセスしましょう。Webブラウザを開き、https://rancher-192.168.64.14.sslip.io/にアクセスします。先ほど割り当てたブートストラップパスワード「foobar」を入力し、エンドユーザーライセンス契約に同意します。

これでRancher Primeのデプロイが完了し、K3sクラスタ(「local」クラスタ)のステータスを確認できます。このクラスタは、他のSUSE Edge K3s/RKE2クラスタを管理するための管理クラスタとして機能することができます。

さらに詳しく知りたいですか?

単一のVMでK3sとRancherをデプロイしましたが、このEIB構成は3ノードクラスタをサポートしています。追加のVMをデプロイして、マルチノードクラスタを形成できます。

2番目と3番目のVMは読者のための演習です。network/nodeX.suse.com.yamlファイルからMACアドレスを後続のVMに割り当てるようにしてください。

まとめ

このブログ記事では、Edge Image Builderが単一のMac上でSUSE Linux Micro、K3s、およびRancher Primeのデプロイをいかに簡素化するかをデモンストレーションし、最小限の労力で完全なエッジソリューションを作成およびデプロイする能力を示しました。OS、Kubernetes、およびアプリケーションを自己起動型イメージにパッケージ化することにより、EIBはゼロタッチプロビジョニングを可能にします。このアプローチにより、エッジクラスタの迅速なプロビジョニングが可能になり、非常に貴重なツールとなっています。さらに、このチュートリアルを通じて、Macの利便性から、SUSEのエッジ製品のパワーを直接体験していただけましたら幸いです。

このブログ記事は、エッジ担当フィールドプロダクトマネージャーのJiwon Huが、エッジコンテナエンジニアのDanial Bekhitの貢献を得て執筆しました。

Share
(Visited 1 times, 1 visits today)
Avatar photo
627 views
Jiwon Hu Jiwon, as Field Product Manager for Edge, shapes SUSE's edge solutions by driving product development, providing technical expertise to customers and internal teams, and industry representation.