目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SUSE Edgeドキュメント / サードパーティの統合 / NATS

22 NATS

NATSは、ますますハイパーコネクテッド化が進む世界のために構築された接続テクノロジです。NATSは、クラウドベンダ、オンプレミス、エッジ、Web、モバイルデバイスがどのように組み合わさっていてもアプリケーションが安全に通信することを可能にする単一のテクノロジです。NATSはオープンソース製品ファミリで構成されており、各製品は緊密に統合されている一方で、簡単に個別にデプロイできます。NATSは世界中で数千社もの企業で使用されており、マイクロサービス、エッジコンピューティング、モバイル、IoTなどのユースケースに幅広く対応しているため、NATSを使用して従来のメッセージングの強化や置き換えを図ることができます。

22.1 アーキテクチャ

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

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

NATSクライアントライブラリを使用すると、アプリケーションが異なるインスタンス間でパブリッシュ、サブスクライブ、要求、および応答できるようになります。このようなアプリケーションを一般的にクライアントアプリケーションと呼びます。

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

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

22.1.3 シンプルなメッセージングデザイン

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

22.1.4 NATS JetStream

NATSにはJetStreamと呼ばれる分散型の永続化システムが組み込まれています。JetStreamは、今日のテクノロジにおけるストリーミングで明らかになった問題、すなわち複雑性、脆弱性、スケーラビリティの欠如を解決するために作成されました。また、JetStreamは、パブリッシャとサブスクライバのカップリングに関する問題(パブリッシュされたメッセージを受信するにはサブスクライバが稼働している必要がある)も解決します。NATS JetStreamの詳細については、こちらを参照してください。

22.2 インストール

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

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

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

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. NATS StatefulsetのHAバージョン。3つのコンテナ(NATSサーバ + ConfigリローダとMetricsサイドカー)が含まれます。

  2. NATS boxコンテナ。セットアップの確認に使用できる一連のNATSユーティリティが付属します。

  3. JetStreamは、PodにバインドされたPVCが付属するKey-Valueバックエンドも利用します。

22.2.1.1 セットアップのテスト

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

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

    nats pub test hi

22.2.1.2 クリーンアップ

helm -n nats uninstall nats
rm values.yaml

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

K3sが利用するコンポーネントの1つがKINEです。KINEは、最初からリレーショナルデータベースをターゲットとした代替ストレージバックエンドでetcdを置き換えることを可能にするシムです。JetStreamはKey Value APIを備えているので、NATSをK3sクラスタのバックエンドとして利用することが可能です。

K3sのビルトインNATSが容易になるマージ済みのPRがありますが、この変更はまだK3sリリースに含まれていません

このため、K3sのバイナリを手動で構築する必要があります。

このチュートリアルでは、Appleシリコン上のOSX上のSLE Micro (UTM)のVMを使用します。

注記
注記

以下のコマンドはOSX PC上で実行してください。

22.2.2.1 K3sの構築

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

次のコマンドは、ビルドタグにnatsを追加して、K3sで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
注記
注記

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

22.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}

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

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

注記
注記

次のコマンドでは、K3sをフォアグランドプロセスとして起動するので、ログを簡単に追跡して問題がないかどうかを確認できます。現在の端末をブロックしないようにするには、コマンドの前に&フラグを追加して、バックグラウンドプロセスとして起動できます。

k3s server  --datastore-endpoint=nats://
注記
注記

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 -

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

次のコマンドをノード上で実行して、ストリームのすべてが適切に動作していることを確認できます。

nats str report -a
nats str view -a