|
7 | 7 | local service = $.core.v1.service,
|
8 | 8 | local configMap = $.core.v1.configMap,
|
9 | 9 |
|
10 |
| - local isHA = $._config.alertmanager.replicas > 1, |
| 10 | + // The Alertmanager has three operational modes. |
| 11 | + local haType = if $._config.alertmanager.sharding_enabled then |
| 12 | + 'sharding' |
| 13 | + else if $._config.alertmanager.replicas > 1 then |
| 14 | + 'gossip_multi_replica' |
| 15 | + else |
| 16 | + 'gossip_single_replica', |
| 17 | + // mode represents which operational mode the alertmanager runs in. |
| 18 | + // ports: array of container ports used for gossiping. |
| 19 | + // args: arguments that are eventually converted to flags on the container |
| 20 | + // flags: arguments directly added to the container. For legacy reasons, we need to use -- as a prefix for some flags. |
| 21 | + // service: the service definition |
| 22 | + local mode = { |
| 23 | + sharding: { |
| 24 | + ports: [], |
| 25 | + args: { |
| 26 | + 'alertmanager.sharding-enabled': true, |
| 27 | + 'alertmanager.sharding-ring.store': $._config.alertmanager.ring_store, |
| 28 | + 'alertmanager.sharding-ring.consul.hostname': $._config.alertmanager.ring_hostname, |
| 29 | + 'alertmanager.sharding-ring.replication-factor': $._config.alertmanager.ring_replication_factor, |
| 30 | + }, |
| 31 | + flags: [], |
| 32 | + service: |
| 33 | + $.util.serviceFor($.alertmanager_statefulset) + |
| 34 | + service.mixin.spec.withClusterIp('None'), |
| 35 | + }, |
| 36 | + gossip_multi_replica: { |
| 37 | + ports: [ |
| 38 | + $.core.v1.containerPort.newUDP('gossip-udp', $._config.alertmanager.gossip_port), |
| 39 | + $.core.v1.containerPort.new('gossip-tcp', $._config.alertmanager.gossip_port), |
| 40 | + ], |
| 41 | + args: {}, |
| 42 | + flags: [ |
| 43 | + '--alertmanager.cluster.listen-address=[$(POD_IP)]:%s' % $._config.alertmanager.gossip_port, |
| 44 | + '--alertmanager.cluster.peers=%s' % std.join(',', peers), |
| 45 | + ], |
| 46 | + service: |
| 47 | + $.util.serviceFor($.alertmanager_statefulset) + |
| 48 | + service.mixin.spec.withClusterIp('None'), |
| 49 | + }, |
| 50 | + gossip_single_replica: { |
| 51 | + ports: [], |
| 52 | + args: {}, |
| 53 | + flags: ['--alertmanager.cluster.listen-address=""'], |
| 54 | + service: $.util.serviceFor($.alertmanager_statefulset), |
| 55 | + }, |
| 56 | + }[haType], |
11 | 57 | local hasFallbackConfig = std.length($._config.alertmanager.fallback_config) > 0,
|
12 |
| - local peers = if isHA then |
13 |
| - [ |
14 |
| - 'alertmanager-%d.alertmanager.%s.svc.%s.local:%s' % [i, $._config.namespace, $._config.cluster, $._config.alertmanager.gossip_port] |
15 |
| - for i in std.range(0, $._config.alertmanager.replicas - 1) |
16 |
| - ] |
17 |
| - else [], |
18 |
| - |
| 58 | + local peers = [ |
| 59 | + 'alertmanager-%d.alertmanager.%s.svc.%s.local:%s' % [i, $._config.namespace, $._config.cluster, $._config.alertmanager.gossip_port] |
| 60 | + for i in std.range(0, $._config.alertmanager.replicas - 1) |
| 61 | + ], |
19 | 62 | alertmanager_args::
|
20 | 63 | $._config.grpcConfig +
|
21 | 64 | $._config.alertmanagerStorageClientConfig +
|
| 65 | + mode.args + |
22 | 66 | {
|
23 | 67 | target: 'alertmanager',
|
24 | 68 | 'log.level': 'debug',
|
|
51 | 95 | alertmanager_container::
|
52 | 96 | if $._config.alertmanager_enabled then
|
53 | 97 | container.new('alertmanager', $._images.alertmanager) +
|
54 |
| - container.withPorts( |
55 |
| - $.util.defaultPorts + |
56 |
| - if isHA then [ |
57 |
| - $.core.v1.containerPort.newUDP('gossip-udp', $._config.alertmanager.gossip_port), |
58 |
| - $.core.v1.containerPort.new('gossip-tcp', $._config.alertmanager.gossip_port), |
59 |
| - ] |
60 |
| - else [], |
61 |
| - ) + |
| 98 | + container.withPorts($.util.defaultPorts + mode.ports) + |
62 | 99 | container.withEnvMixin([container.envType.fromFieldPath('POD_IP', 'status.podIP')]) +
|
63 | 100 | container.withArgsMixin(
|
64 | 101 | $.util.mapToFlags($.alertmanager_args) +
|
65 |
| - ( |
66 |
| - if isHA then |
67 |
| - ['--alertmanager.cluster.listen-address=[$(POD_IP)]:%s' % $._config.alertmanager.gossip_port] + |
68 |
| - ['--alertmanager.cluster.peers=%s' % std.join(',', peers)] |
69 |
| - else |
70 |
| - ['-alertmanager.cluster.listen-address=""'] |
71 |
| - ) |
| 102 | + mode.flags |
72 | 103 | ) +
|
73 | 104 | container.withVolumeMountsMixin(
|
74 | 105 | [volumeMount.new('alertmanager-data', '/data')] +
|
|
101 | 132 | else {},
|
102 | 133 |
|
103 | 134 | alertmanager_service:
|
104 |
| - if $._config.alertmanager_enabled then |
105 |
| - if isHA then |
106 |
| - $.util.serviceFor($.alertmanager_statefulset) + |
107 |
| - service.mixin.spec.withClusterIp('None') |
108 |
| - else |
109 |
| - $.util.serviceFor($.alertmanager_statefulset) |
110 |
| - else {}, |
| 135 | + if $._config.alertmanager_enabled then mode.service else {}, |
111 | 136 | }
|
0 commit comments