Kubernetes 如何通过Helm将额外配置传递给RabbitMQ?
我使用这个图表:在Kubernetes上部署一个由3个RabbitMQ节点组成的集群。我的目的是在集群中的2个节点内镜像所有队列 下面是我用来运行Helm的命令:Kubernetes 如何通过Helm将额外配置传递给RabbitMQ?,kubernetes,rabbitmq,kubernetes-helm,bitnami,Kubernetes,Rabbitmq,Kubernetes Helm,Bitnami,我使用这个图表:在Kubernetes上部署一个由3个RabbitMQ节点组成的集群。我的目的是在集群中的2个节点内镜像所有队列 下面是我用来运行Helm的命令:Helm install--name rabbitmq local-f rabbitmq-values.yaml stable/rabbitmq 下面是rabbitmq值的内容。yaml: persistence: enabled: true resources: requests: memory: 256Mi
Helm install--name rabbitmq local-f rabbitmq-values.yaml stable/rabbitmq
下面是rabbitmq值的内容。yaml
:
persistence:
enabled: true
resources:
requests:
memory: 256Mi
cpu: 100m
replicas: 3
rabbitmq:
extraConfiguration: |-
{
"policies": [
{
"name": "queue-mirroring-exactly-two",
"pattern": "^ha\.",
"vhost": "/",
"definition": {
"ha-mode": "exactly",
"ha-params": 2
}
}
]
}
然而,由于一些解析错误,节点无法启动,并且它们停留在崩溃循环中。下面是kubectl日志rabbitmq-local-0的输出:
BOOT FAILED
===========
Config file generation failed:
=CRASH REPORT==== 23-Jul-2019::15:32:52.880991 ===
crasher:
initial call: lager_handler_watcher:init/1
pid: <0.95.0>
registered_name: []
exception exit: noproc
in function gen:do_for_proc/2 (gen.erl, line 228)
in call from gen_event:rpc/2 (gen_event.erl, line 239)
in call from lager_handler_watcher:install_handler2/3 (src/lager_handler_watcher.erl, line 117)
in call from lager_handler_watcher:init/1 (src/lager_handler_watcher.erl, line 51)
in call from gen_server:init_it/2 (gen_server.erl, line 374)
in call from gen_server:init_it/6 (gen_server.erl, line 342)
ancestors: [lager_handler_watcher_sup,lager_sup,<0.87.0>]
message_queue_len: 0
messages: []
links: [<0.90.0>]
dictionary: []
trap_exit: false
status: running
heap_size: 610
stack_size: 27
reductions: 228
neighbours:
15:32:53.679 [error] Syntax error in /opt/bitnami/rabbitmq/etc/rabbitmq/rabbitmq.conf after line 14 column 1, parsing incomplete
=SUPERVISOR REPORT==== 23-Jul-2019::15:32:53.681369 ===
supervisor: {local,gr_counter_sup}
errorContext: child_terminated
reason: killed
offender: [{pid,<0.97.0>},
{id,gr_lager_default_tracer_counters},
{mfargs,{gr_counter,start_link,
[gr_lager_default_tracer_counters]}},
{restart_type,transient},
{shutdown,brutal_kill},
{child_type,worker}]
=SUPERVISOR REPORT==== 23-Jul-2019::15:32:53.681514 ===
supervisor: {local,gr_param_sup}
errorContext: child_terminated
reason: killed
offender: [{pid,<0.96.0>},
{id,gr_lager_default_tracer_params},
{mfargs,{gr_param,start_link,[gr_lager_default_tracer_params]}},
{restart_type,transient},
{shutdown,brutal_kill},
{child_type,worker}]
启动失败
===========
配置文件生成失败:
=事故报告===2019年7月23日::15:32:52.880991===
撞车者:
初始调用:lager\u handler\u watcher:init/1
pid:
注册名称:[]
异常退出:noproc
在功能gen:do_for_proc/2(gen.erl,第228行)
来自gen_事件的调用中:rpc/2(gen_event.erl,第239行)
来自lager\u handler\u watcher的调用:install\u handler2/3(src/lager\u handler\u watcher.erl,第117行)
来自lager\u handler\u watcher的in调用:init/1(src/lager\u handler\u watcher.erl,第51行)
来自gen_服务器的in调用:init_it/2(gen_server.erl,第374行)
来自gen_服务器的in调用:init_it/6(gen_server.erl,第342行)
祖先:[啤酒处理工(lager\u handler\u watcher\u sup,lager\u sup,]
消息队列:0
信息:[]
链接:[]
字典:[]
陷阱_出口:错误
状态:正在运行
堆大小:610
堆栈大小:27
减少:228
邻居:
15:32:53.679[error]第14行第1列之后/opt/bitnami/rabbitmq/etc/rabbitmq/rabbitmq.conf中的语法错误,解析不完整
=主管报告===2019年7月23日::15:32:53.681369===
主管:{本地,gr_counter_sup}
errorContext:已终止子项
原因:被杀
罪犯:[{pid,},
{id,gr\u lager\u default\u tracer\u counters},
{mfargs,{gr_计数器,启动_链接,
[gr\U lager\U default\U tracer\U counters]},
{restart_type,transient},
{关闭,残暴的杀戮},
{child_type,worker}]
=主管报告===2019年7月23日::15:32:53.681514===
主管:{local,gr_param_sup}
errorContext:已终止子项
原因:被杀
罪犯:[{pid,},
{id,gr_lager_default_tracer_params},
{mfargs,{gr_param,start_link,[gr_lager_default_tracer_params]},
{restart_type,transient},
{关闭,残暴的杀戮},
{child_type,worker}]
如果删除rabbitmq.extraConfiguration
部分,节点将正确启动,因此我在策略中键入的方式肯定有问题。知道我做错了什么吗
谢谢。不要使用extraConfiguration,而是使用advancedConfiguration,您应该将所有这些信息放在本节中,就像经典配置格式(erlang)一样。根据,可以将JSON
配置链接为extraConfiguration
。因此,我们最终采用了这种有效的设置:
rabbitmq值。yaml:
rabbitmq:
loadDefinition:
enabled: true
secretName: rabbitmq-load-definition
extraConfiguration:
management.load_definitions = /app/load_definition.json
apiVersion: v1
kind: Secret
metadata:
name: rabbitmq-load-definition
type: Opaque
stringData:
load_definition.json: |-
{
"vhosts": [
{
"name": "/"
}
],
"policies": [
{
"name": "queue-mirroring-exactly-two",
"pattern": "^ha\.",
"vhost": "/",
"definition": {
"ha-mode": "exactly",
"ha-params": 2
}
}
]
}
rabbitmq secret.yaml:
rabbitmq:
loadDefinition:
enabled: true
secretName: rabbitmq-load-definition
extraConfiguration:
management.load_definitions = /app/load_definition.json
apiVersion: v1
kind: Secret
metadata:
name: rabbitmq-load-definition
type: Opaque
stringData:
load_definition.json: |-
{
"vhosts": [
{
"name": "/"
}
],
"policies": [
{
"name": "queue-mirroring-exactly-two",
"pattern": "^ha\.",
"vhost": "/",
"definition": {
"ha-mode": "exactly",
"ha-params": 2
}
}
]
}
在播放头盔图表之前,必须将秘密加载到Kubernetes中,如下所示:kubectl apply-f./rabbitmq secret.yaml
您可以使用头盔图表的配置默认值
如果需要,您可以使用extraSecrets让图表为您创建秘密。这样,您就不需要在部署发布之前手动创建它。例如:
extraSecrets:
load-definition:
load_definition.json: |
{
"vhosts": [
{
"name": "/"
}
]
}
rabbitmq:
loadDefinition:
enabled: true
secretName: load-definition
extraConfiguration: |
management.load_definitions = /app/load_definition.json
这是正确的答案。但是,我必须注意,用户添加的配置看起来像JSON,而不是erlang配置格式。您可以在两个不同的位置添加配置选项:-extraConfiguration
,使用sysctl格式-advancedConfiguration
,使用erlang config格式。用户提供的格式无效。谢谢你们的回答。但是,我试图将配置加载为JSON。我在下面发布的答案在这方面起作用。是否可以用一个工作示例来扩展您的答案,说明如何使用您建议的AdvancedConfiguration选项显示OP的配置?