在 Kubernetes 上配置 NATS max_payload

问题描述

我的问题是我需要在生产环境中增加 NATS max_payload,但它使用 Kubernetes,我不知道该怎么做,我尝试使用 ConfigMap 但我没有成功。

在本地/开发环境中,它使用带有 docker 的 NATS 配置文件,因此工作正常。

使其在本地运行的方法NATS with moleculer. How can I change NATS max_payload value?

k8s/deployment.develop.yaml 中的代码

(...)
apiVersion: v1
kind: ServiceAccount
Metadata:
  name: nats
  namespace: develop
  labels:
    account: nats
---
apiVersion: v1
kind: Service
Metadata:
  name: nats
  namespace: develop
  labels:
    app: nats
    service: nats
spec:
  ports:
    - port: 4222
      targetPort: 4222
  selector:
    app: nats
---
apiVersion: apps/v1
kind: Deployment
Metadata:
  name: nats-v1
  namespace: develop
  labels:
    app: nats
    version: v1
spec:
  replicas: 1
  strategy: {}
  selector:
    matchLabels:
      app: nats
      version: v1
  template:
    Metadata:
      labels:
        app: nats
        version: v1
    spec:
      serviceAccountName: nats
      containers:
        - image: 'nats:alpine'
          name: nats
          ports:
            - containerPort: 4222
      restartPolicy: Always
      tolerations: []
      affinity: {}

谢谢!

解决方法

有效载荷值被硬编码到 docker 映像中(在 nats-server.conf 文件中),因此您无法通过 configmap 更改它。我找到的唯一解决方案是使用修改后的 nats-server.conf 文件构建我自己的 nats 映像。

这是如何做到的。

  1. 首先,从 the official repo 中选择一种图像风格并下载内容(例如 here 中的 Dockerfilenats-server.conf)。
  2. 修改 nats-server.conf 文件以更改 max_payload 值:只需添加以下行(此文件不是 JSON 格式)
max_payload: 4Mb
  1. 然后构建镜像:docker image build .
  2. 标记它,将其上传到您自己的存储库并使用它代替官方 nats 图像
,

我建议使用这些 NATS Helm charts,然后使用类似以下内容:

nats:
  limits:
    maxPayload: "5mb"

您可以在此处找到完整示例:https://github.com/nats-io/k8s/tree/master/helm/charts/nats#limits