|Index|SUSE Edge ドキュメント|サードパーティの統合|NATS
Applies to SUSE Edge 3.6

29 NATS

NATSは、ますますハイパーコネクテッド化が進む世界のために構築された接続技術です。これは、クラウドベンダー、オンプレミス、エッジ、Web、モバイルデバイスのあらゆる組み合わせにおいて、アプリケーションが安全に通信できるようにする単一の技術です。NATSは、緊密に統合されながらも、簡単かつ独立してデプロイできるオープンソース製品群で構成されています。NATSは、マイクロサービス、エッジコンピューティング、モバイル、IoTなどのユースケースにわたり、世界中の何千もの企業で使用されており、従来のメッセージングを拡張または置き換えるために使用できます。

29.1 アーキテクチャ

NATSは、メッセージの形式でアプリケーション間のデータ交換を可能にするインフラストラクチャです。

29.1.1 NATSクライアントアプリケーション

NATSクライアントライブラリを使用すると、アプリケーションは異なるインスタンス間でパブリッシュ、サブスクライブ、リクエスト、およびリプライを行うことができます。 これらのアプリケーションは、一般的に`client applications`と呼ばれます。

29.1.2 NATSサービスインフラストラクチャ

NATSサービスは、相互に接続し、NATSサービスインフラストラクチャを提供するように構成された1つ以上のNATSサーバープロセスによって提供されます。NATSサービスインフラストラクチャは、エンドデバイス上で実行される単一のNATSサーバープロセスから、すべての主要なクラウドプロバイダーと世界のすべての地域にまたがる多数のクラスターからなるパブリックなグローバルスーパー・クラスターまで拡張可能です。

29.1.3 シンプルなメッセージング設計

NATSを使用すると、アプリケーションはメッセージを送受信することで簡単に通信できます。これらのメッセージはサブジェクト文字列によって宛先指定および識別され、ネットワークの場所に依存しません。 データはメッセージとしてエンコードおよびフレーム化され、パブリッシャーによって送信されます。メッセージは、1つ以上のサブスクライバーによって受信、デコード、および処理されます。

29.1.4 NATS JetStream

NATSには、JetStreamと呼ばれるビルトインの分散永続化システムがあります。 JetStreamは、今日のテクノロジーにおけるストリーミングの課題である複雑さ、脆弱性、スケーラビリティの欠如を解決するために作成されました。JetStreamは、パブリッシャーとサブスクライバーの結合に関する問題も解決します(メッセージがパブリッシュされたときに、サブスクライバーがメッセージを受信するために稼働している必要があります)。 NATS JetStreamに関する詳細情報は こちらをご覧ください。

29.2 インストール

29.2.1 K3s上へのNATSのインストール

NATSは複数のアーキテクチャ向けに構築されているため、K3s (Chapter 11, K3s)に簡単にインストールできます。

NATSのデフォルト値を上書きするための値ファイルを作成しましょう。

cat > values.yaml <<EOF
cluster:
  # Enable the HA setup of the NATS
  enabled: true
  replicas: 3

nats:
  jetstream:
    # Enable JetStream
    enabled: true

    memStorage:
      enabled: true
      size: 2Gi

    fileStorage:
      enabled: true
      size: 1Gi
      storageDirectory: /data/
EOF

それでは、Helmを使用してNATSをインストールしましょう:

helm repo add nats https://nats-io.github.io/k8s/helm/charts/
helm install nats nats/nats --namespace nats --values values.yaml \
 --create-namespace

上記の`values.yaml`ファイルを使用すると、次のコンポーネントが`nats`ネームスペースに配置されます:

  1. 3つのコンテナを含むNATSステートフルセットのHAバージョン:NATSサーバー + 設定リローダーおよびメトリクスサイドカー。

  2. セットアップの検証に使用できる`NATS`ユーティリティのセットが付属しているNATSボックスコンテナ。

  3. JetStreamは、ポッドにバインドされた`PVCs`が付属するキー・バリュー・バックエンドも活用します。

29.2.1.1 セットアップをテストする

kubectl exec -n nats -it deployment/nats-box -- /bin/sh -l
  1. テストサブジェクトのサブスクリプションを作成します:

    nats sub test &
  2. テストサブジェクトにメッセージを送信します:

    nats pub test hi

29.2.1.2 クリーンアップ

helm -n nats uninstall nats
rm values.yaml

29.2.2 K3sのバックエンドとしてのNATS

K3sが活用するコンポーネントの1つに KINEがあります。これは、本来リレーショナルデータベースを対象とした代替ストレージバックエンドでetcdを置き換えることを可能にするシムです。 JetStreamはキー・バリューAPIを提供するため、NATSをK3sクラスターのバックエンドにすることが可能です。

K3sにビルトインされたNATSを簡単にするPRはすでにマージされていますが、その変更はまだK3sのリリースに 含まれていません

このため、K3sバイナリは手動でビルドする必要があります。

29.2.2.1 K3sのビルド

git clone --depth 1 https://github.com/k3s-io/k3s.git && cd k3s

次のコマンドは、K3sでNATSのビルトイン機能を有効にするために、ビルドタグに`nats`を追加します。

sed -i '' 's/TAGS="ctrd/TAGS="nats ctrd/g' scripts/build
make local

<node-ip> を、K3sを起動するノードの実際のIPアドレスに置き換えてください。

export NODE_IP=<node-ip>
sudo scp dist/artifacts/k3s-arm64 ${NODE_IP}:/usr/local/bin/k3s
Note
Note

K3sをローカルでビルドするには、buildx Docker CLIプラグインが必要です。 $ make local が失敗した場合は、 手動でインストール できます。

29.2.2.2 NATS CLIのインストール

TMPDIR=$(mktemp -d)
nats_version="nats-0.0.35-linux-arm64"
curl -o "${TMPDIR}/nats.zip" -sfL https://github.com/nats-io/natscli/releases/download/v0.0.35/${nats_version}.zip
unzip "${TMPDIR}/nats.zip" -d "${TMPDIR}"

sudo scp ${TMPDIR}/${nats_version}/nats ${NODE_IP}:/usr/local/bin/nats
rm -rf ${TMPDIR}

29.2.2.3 K3sバックエンドとしてのNATSの実行

ノード上で ssh し、nats を指す --datastore-endpoint フラグを指定してK3sを実行します。

Note
Note

以下のコマンドはK3sをフォアグラウンドプロセスとして起動するため、ログを簡単に追跡して問題がないか確認できます。 現在のターミナルをブロックしないように、コマンドの前に & フラグを追加してバックグラウンドプロセスとして開始できます。

k3s server  --datastore-endpoint=nats://
Note
Note

NATSバックエンドを備えたK3sサーバーを slemicro VM上で永続的にするには、以下のスクリプトを実行します。これにより、必要な設定を含む systemd サービスが作成されます。

export INSTALL_K3S_SKIP_START=false
export INSTALL_K3S_SKIP_DOWNLOAD=true

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server \
 --datastore-endpoint=nats://"  sh -

29.2.2.4 トラブルシューティング

以下のコマンドをノード上で実行し、ストリームに関するすべてが正常に機能していることを確認できます。

nats str report -a
nats str view -a