跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Edge 文档 / 第三方集成 / NATS

22 NATS

NATS 是为日益发展的超级互联世界而开发的连接技术。仅凭这一项技术,应用程序就能在云供应商、本地、边缘、Web 和移动设备的任意组合之间安全地通讯。NATS 由一系列开源产品组成,这些产品紧密集成,但可以轻松独立部署。NATS 已由全球数千家公司使用,涵盖微服务、边缘计算、移动通讯和 IoT 等用例,并可用于增强或取代传统的讯息交换。

22.1 体系结构

NATS 是能够在应用程序之间以讯息形式实现数据交换的基础架构。

22.1.1 NATS 客户端应用程序

应用程序可以使用 NATS 客户端库在不同的实例之间发布和订阅讯息,以及发出请求和做出答复。这些应用程序通常称作客户端应用程序

22.1.2 NATS 服务基础架构

NATS 服务由一个或多个 NATS 服务器进程提供,这些进程配置为彼此互连并提供 NATS 服务基础架构。NATS 服务基础架构可以从一个终端设备上运行的单个 NATS 服务器进程,扩展为由许多群集组成的全球公用超级群集,这些群集跨越所有主要云提供商和全球所有区域。

22.1.3 简单讯息交换设计

NATS 使应用程序能够通过发送和接收讯息来轻松进行通讯。这些讯息按照主题字符串进行寻址和标识,并且不依赖于网络位置。数据经过编码,并构造为由发布者发送的讯息。该讯息由一个或多个订阅者接收、解码和处理。

22.1.4 NATS JetStream

NATS 有一个称为 JetStream 的内置分布式保存系统。JetStream 旨在解决当今技术存在的流式传输问题 — 复杂性、脆弱性和可伸缩性不足的问题。JetStream 还能解决发布者和订阅者之间的耦合问题(订阅者需要启动并运行才能收到发布的讯息)。有关 NATS JetStream 的详细信息,请参见此处

22.2 安装

22.2.1 在 K3s 上安装 NATS

NATS 是为多种体系结构构建的,因此可以在 K3s 上轻松安装。(第 13 章 “K3s

我们创建 values 文件来重写 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. HA 版本的 NATS 有状态副本集,其中包含三个容器:NATS 服务器、配置重载器和指标分支。

  2. NATS 箱容器,其中附带一组可用于校验设置的 NATS 实用程序。

  3. JetStream 还会利用其键值后端,该后端附带与 Pod 绑定的 PVC

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 NATS 用作 K3s 的后端

K3s 利用的一个组件是 KINE,它是一个填充码,用于将 etcd 替换为最初面向关系数据库的备用存储后端。由于 JetStream 提供了键值 API,因此可以将 NATS 用作 K3s 群集的后端。

有一个已经合并的 PR 可以直接将内置的 NATS 包含在 K3s 中,但这项更改仍未包含在 K3s 版本中。

出于此原因,应该手动构建 K3s 二进制文件。

本教程使用了 SLE Micro on OSX on Apple Silicon (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 进行连接,并使用指向 nats--datastore-endpoint 标志运行 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