Marko Oldenburg d40a1070fa Add affinity configuration to Kubernetes pod template
This commit adds support for specifying pod affinity settings
in the Kubernetes pod template for the Artemis broker Helm chart.
The changes include a new conditional block in the `_pod.tpl`
template file that allows users to define affinity rules in
the `values.yaml` file under the `affinity` key.

The addition was necessary to provide users with more flexibility
in scheduling their pods based on node characteristics, which is
essential for optimizing resource allocation and achieving desired
deployment strategies.

No breaking changes were introduced, and the default `affinity`
configuration remains empty, ensuring backward compatibility.
2025-03-04 07:26:58 +01:00

237 lines
6.4 KiB
YAML

# Deploy broker as Deployment or StatefulSet
# if clustered is True, then only StatefulSet is supported
kind: Deployment
clustered: false # only with StatefulSet
# Platform type.
platform: kubernetes
application:
name: broker1 # set broker1 is this for primary deployment else set to broker2
amq_broker_version: 55ae4e28b100534d63c34ab86f69230d274c999d46d1493f26fe3e75ba7a0cec # 7.12.3
amq_broker_image: registry.redhat.io/amq7/amq-broker-rhel8
pullPolicy: IfNotPresent
persistent: true
journal_type: ASYNCIO # more information see broker.xml
volume_capacity: "1G"
replicas: 1
storageclass: default
# this is used if platform type is set as "kubernetes"
pullSecretName: redhat-pullsecret
service:
console:
- name: jolokia
description: "The Jolokia Management Console Service"
protocol: TCP
port: 8161
acceptors:
- name: multiplex
description: "Multiplexed protocol endpoint (CORE+All the others)"
protocol: TCP
# when tls is enabled, all acceptors are tls-protected.
# this behaviour can be overridden by marking the acceptor as non-tls
#use_tls: false
port: 61616
# if needed, override the protocols here.
# default values are specified in the "parameters" section below
#amq_protocols: "CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE"
# also, additional properties for a single acceptor can be set here
#acceptor_params:
# - key: supportAdvisory
# value: false
# - key: suppressInternalManagementObjects
# value: false
ping_service:
name: "{{ .Values.application.name }}-ping-svc"
port: 8888
jgroups:
bind_port: 7800
nodeport:
port: 30003
service: multiplex
enabled: true
passthrough_route:
hostname: multiplex-amq
enabled: false
service: multiplex
# only relevant for deployment on kubernetes
ingress:
# the ingress rule domain
domain: kubernetes.local
# passthrough ingress rule: only relevant for TLS enabled brokers
passthrough:
path: "/"
service: multiplex
enabled: true
# jolokia console ingress rule. optional tls certificates can be configured here
console:
path: "/"
service: jolokia
enabled: true
tls: false
tlsSecretName: "amq-console-ingress-certs"
cert: ingress_console.crt
key: ingress_console.key
tls:
secret_mount_path: "/etc/amq-secret-volume"
keystore: keystore.ks
truststore: keystore.ts
keystore_password: kspwd
truststore_password: tspwd
parameters:
tls_enabled: false
jolokia_passthrough: false
append_ns: false
openshift_appdomain: apps.cluster.local
amq_protocols: "openwire,amq,stomp,mqtt,hornetq,core"
amq_broker_name: "broker"
amq_global_max_size: "200 mb"
amq_require_login: False
amq_extra_args: ""
amq_anycast_prefix: "jmx.queue."
amq_multicast_prefix: "jmx.topic."
amq_journal_type: "nio"
ssl_provider: "jdk" # alternative is openssl
amq_data_dir: "/opt/amq/data"
amq_force_addresses_cleanup: True # if true remove all queues that are not declared here upon chart update
cluster:
ha_ap_mode: false # Primary-Backup Mode / only with 2 Deployments
jgroupsCfg: "jgroups-ping.xml"
refreshTimeout: 10000
connector:
ref: multiplex
port: 61616
ha_ap:
mode: primary
refreshTimeout: 10000
connector:
ref: artemis
port: 61616
static:
ref: broker2 # set broker2 is this for primary deployment else set to broker1
port: 61616
templates:
service: "{{ .Values.application.name }}-svc"
service_account: "{{ .Values.application.name }}-sa"
k8s_role: "{{ .Values.application.name }}-role"
k8s_rolebinding: "{{ .Values.application.name }}-rolebinding"
deployment: "{{ .Values.application.name }}-dc"
route: "{{ .Values.application.name }}-route"
broker_image: "{{ .Values.application.amq_broker_image }}:{{ .Values.application.amq_broker_version }}"
override_cm: "{{ .Values.application.name }}-override-cm"
config_cm: "{{ .Values.application.name }}-config-cm"
app_secret: "{{ .Values.application.name }}-secret"
app_certificates: "{{ .Values.application.name }}-certificates"
pvc_name: "{{ .Values.application.name }}-persistent-volume"
admin:
user: admin
password: password
cluster_user: cadmin
cluster_password: cpassword
role: "admin"
security:
enabled: true
# Names of additional secrets to mount into configuration folder.
secrets: []
createSecret: true
jaasUsers:
# Secret key entry name for Username password properties file. Override when files is provided by existing Secret.
key: artemis-users.properties
# Add more users to this configuration
# Any users that gets assigned the .admin.role
# role name becomes an additional administrator
users: []
# - name: demouser
# password: "demo"
# roles:
# - user
# - name: anotheruser
# password: "demo1"
# roles:
# - user
#
queues:
defaults:
maxDeliveryAttempts: 3
redeliveryDelayMultiplier: 1
redeliveryDelay: 5000
maxRedeliveryDelay: 50000
maxSizeBytes: "100 mb"
addressFullPolicy: "PAGE"
messageCounterHistoryDayLimit: 10
addresses: []
# - name: QUEUE_1
# type: anycast # for queues, choose 'multicast' for topics
# dlq_address: QUEUE_1_DLQ
# expiry_address:
# maxDeliveryAttempts:
# redeliveryDelayMultiplier:
# redeliveryDelay:
# maxRedeliveryDelay:
# maxSizeBytes:
# messageCounterHistoryDayLimit:
# addressFullPolicy:
# permissions:
# - grant: consume
# roles:
# - admin
# - user
# - grant: browse
# roles:
# - admin
# - user
# - grant: send
# roles:
# - admin
# - user
# - grant: manage
# roles:
# - admin
# #- grant: createNonDurableQueue # uncomment this when declaring topics (with type: multicast)
# # roles:
# # - admin
# # - user
# Add Metrics and Prometheus ServiceMonitor for collecting metrics
metrics:
enabled: false
jvm_memory: true
jvm_gc: false
jvm_threads: false
servicemonitor:
port: 8161
interval: 20s
# k8s resources
resources: {}
# limits:
# cpu: 1000m
# memory: 2000Mi
# requests:
# cpu: 200m
# memory: 1000Mi
#
# k8s affinity
affinity: {}
# nodeAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# - key: disktype
# operator: In
# values:
# - ssd