问题描述
我的问题是我需要在生产环境中增加 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 映像。
这是如何做到的。
- 首先,从 the official repo 中选择一种图像风格并下载内容(例如 here 中的
Dockerfile
和nats-server.conf
)。 - 修改
nats-server.conf
文件以更改max_payload
值:只需添加以下行(此文件不是 JSON 格式)
max_payload: 4Mb
- 然后构建镜像:
docker image build .
- 标记它,将其上传到您自己的存储库并使用它代替官方
nats
图像
我建议使用这些 NATS Helm charts,然后使用类似以下内容:
nats:
limits:
maxPayload: "5mb"
您可以在此处找到完整示例:https://github.com/nats-io/k8s/tree/master/helm/charts/nats#limits