Skip to content

Instantly share code, notes, and snippets.

@florianluediger
Created July 20, 2022 13:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save florianluediger/f7c9b7971aa29408fd4d7cbfe8e4dd15 to your computer and use it in GitHub Desktop.
Save florianluediger/f7c9b7971aa29408fd4d7cbfe8e4dd15 to your computer and use it in GitHub Desktop.
Name: hivemq
Namespace: default
Labels: app=hivemq-operator
app.kubernetes.io/instance=hivemq
app.kubernetes.io/managed-by=Helm
app.kubernetes.io/name=hivemq-operator
app.kubernetes.io/version=4.8.2
helm.sh/chart=hivemq-operator-0.10.10
hivemq-cluster=hivemq
Annotations: meta.helm.sh/release-name: hivemq
meta.helm.sh/release-namespace: default
API Version: hivemq.com/v1
Kind: HiveMQCluster
Metadata:
Creation Timestamp: 2022-07-20T13:25:23Z
Generation: 1
Managed Fields:
API Version: hivemq.com/v1
Fields Type: FieldsV1
fieldsV1:
f:metadata:
f:annotations:
.:
f:meta.helm.sh/release-name:
f:meta.helm.sh/release-namespace:
f:labels:
.:
f:app:
f:app.kubernetes.io/instance:
f:app.kubernetes.io/managed-by:
f:app.kubernetes.io/name:
f:app.kubernetes.io/version:
f:helm.sh/chart:
f:hivemq-cluster:
f:spec:
.:
f:additionalVolumeMounts:
f:additionalVolumes:
f:affinity:
f:clusterOverloadProtection:
f:clusterReplicaCount:
f:configOverride:
f:controllerTemplate:
f:cpu:
f:cpuLimitRatio:
f:customProperties:
f:dnsSuffix:
f:env:
f:ephemeralStorage:
f:ephemeralStorageLimitRatio:
f:extensions:
f:hivemqVersion:
f:image:
f:imagePullPolicy:
f:initBusyboxImage:
f:initContainers:
f:initDnsWaitImage:
f:initialization:
f:javaOptions:
f:labels:
.:
f:app.kubernetes.io/instance:
f:app.kubernetes.io/managed-by:
f:app.kubernetes.io/name:
f:app.kubernetes.io/version:
f:helm.sh/chart:
f:listenerConfiguration:
f:logLevel:
f:memory:
f:memoryLimitRatio:
f:mqtt:
.:
f:keepaliveAllowUnlimited:
f:keepaliveMax:
f:maxPacketSize:
f:maxQos:
f:messageExpiryMaxInterval:
f:queuedMessageStrategy:
f:queuedMessagesMaxQueueSize:
f:retainedMessagesEnabled:
f:serverReceiveMaximum:
f:sessionExpiryInterval:
f:sharedSubscriptionEnabled:
f:subscriptionIdentifierEnabled:
f:topicAliasEnabled:
f:topicAliasMaxPerClient:
f:wildcardSubscriptionEnabled:
f:nodeCount:
f:nodeSelector:
f:podAnnotations:
f:podLabels:
f:ports:
f:priorityClassName:
f:restApiConfiguration:
f:restrictions:
.:
f:incomingBandwidthThrottling:
f:maxClientIdLength:
f:maxConnections:
f:maxTopicLength:
f:noConnectIdleTimeout:
f:runtimeClassName:
f:security:
.:
f:allowEmptyClientId:
f:allowRequestProblemInformation:
f:controlCenterAuditLogEnabled:
f:payloadFormatValidation:
f:topicFormatValidation:
f:serviceAccountName:
f:sidecars:
f:tolerations:
f:topologySpreadConstraints:
Manager: helm
Operation: Update
Time: 2022-07-20T13:25:23Z
API Version: hivemq.com/v1
Fields Type: FieldsV1
fieldsV1:
f:status:
.:
f:conditions:
f:extensionState:
f:message:
f:portStatus:
f:state:
f:warnings:
Manager: okhttp
Operation: Update
Subresource: status
Time: 2022-07-20T13:26:46Z
Resource Version: 74690
UID: 0137d617-efcc-4ef4-a6e0-954baecdcaa5
Spec:
Additional Volume Mounts:
Additional Volumes:
Affinity: podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
# Try not to co-locate with nodes from the same cluster
- weight: 60
podAffinityTerm:
labelSelector:
matchExpressions:
- key: hivemq-cluster
operator: In
values:
- {{ spec.name }}
topologyKey: "kubernetes.io/hostname"
# Try not to co-locate with other HiveMQ clusters
- weight: 30
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- hivemq
topologyKey: "kubernetes.io/hostname"
Cluster Overload Protection: true
Cluster Replica Count: 2
Config Override: <?xml version="1.0"?>
<hivemq xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="hivemq-config.xsd">
<listeners>
--LISTENER-CONFIGURATION--
</listeners>
<control-center>
<listeners>
<http>
<port>${HIVEMQ_CONTROL_CENTER_PORT}</port>
<bind-address>0.0.0.0</bind-address>
</http>
</listeners>
<users>
<user>
<name>${HIVEMQ_CONTROL_CENTER_USER}</name>
<password>${HIVEMQ_CONTROL_CENTER_PASSWORD}</password>
</user>
</users>
</control-center>
<!--REST-API-CONFIGURATION-->
<cluster>
<enabled>true</enabled>
<transport>
<tcp>
<bind-address>${HIVEMQ_BIND_ADDRESS}</bind-address>
<bind-port>${HIVEMQ_CLUSTER_PORT}</bind-port>
<enabled>true</enabled>
</tcp>
</transport>
<discovery>
<extension>
<reload-interval>${HIVEMQ_DNS_DISCOVERY_INTERVAL}</reload-interval>
</extension>
</discovery>
<replication>
<replica-count>${HIVEMQ_CLUSTER_REPLICA_COUNT}</replica-count>
</replication>
<failure-detection>
<tcp-health-check>
<enabled>true</enabled>
<bind-address>${HIVEMQ_BIND_ADDRESS}</bind-address>
<bind-port>9000</bind-port>
<port-range>50</port-range>
</tcp-health-check>
<heartbeat>
<enabled>true</enabled>
<interval>4000</interval>
<timeout>30000</timeout>
</heartbeat>
</failure-detection>
</cluster>
<overload-protection>
<enabled>${HIVEMQ_CLUSTER_OVERLOAD_PROTECTION}</enabled>
</overload-protection>
<restrictions>
<max-client-id-length>${HIVEMQ_MAX_CLIENT_ID_LENGTH}</max-client-id-length>
<max-topic-length>${HIVEMQ_MAX_TOPIC_LENGTH}</max-topic-length>
<max-connections>${HIVEMQ_MAX_CONNECTIONS}</max-connections>
<incoming-bandwidth-throttling>${HIVEMQ_INCOMING_BANDWIDTH_THROTTLING}</incoming-bandwidth-throttling>
<no-connect-idle-timeout>${HIVEMQ_NO_CONNECT_IDLE_TIMEOUT}</no-connect-idle-timeout>
</restrictions>
<mqtt>
<session-expiry>
<max-interval>${HIVEMQ_SESSION_EXPIRY_INTERVAL}</max-interval>
</session-expiry>
<message-expiry>
<max-interval>${HIVEMQ_MESSAGE_EXPIRY_MAX_INTERVAL}</max-interval>
</message-expiry>
<packets>
<max-packet-size>${HIVEMQ_MAX_PACKET_SIZE}</max-packet-size>
</packets>
<receive-maximum>
<server-receive-maximum>${HIVEMQ_SERVER_RECEIVE_MAXIMUM}</server-receive-maximum>
</receive-maximum>
<keep-alive>
<max-keep-alive>${HIVEMQ_KEEPALIVE_MAX}</max-keep-alive>
<allow-unlimited>${HIVEMQ_KEEPALIVE_ALLOW_UNLIMITED}</allow-unlimited>
</keep-alive>
<topic-alias>
<enabled>${HIVEMQ_TOPIC_ALIAS_ENABLED}</enabled>
<max-per-client>${HIVEMQ_TOPIC_ALIAS_MAX_PER_CLIENT}</max-per-client>
</topic-alias>
<subscription-identifier>
<enabled>${HIVEMQ_SUBSCRIPTION_IDENTIFIER_ENABLED}</enabled>
</subscription-identifier>
<wildcard-subscriptions>
<enabled>${HIVEMQ_WILDCARD_SUBSCRIPTION_ENABLED}</enabled>
</wildcard-subscriptions>
<shared-subscriptions>
<enabled>${HIVEMQ_SHARED_SUBSCRIPTION_ENABLED}</enabled>
</shared-subscriptions>
<quality-of-service>
<max-qos>${HIVEMQ_MAX_QOS}</max-qos>
</quality-of-service>
<retained-messages>
<enabled>${HIVEMQ_RETAINED_MESSAGES_ENABLED}</enabled>
</retained-messages>
<queued-messages>
<max-queue-size>${HIVEMQ_QUEUED_MESSAGE_MAX_QUEUE_SIZE}</max-queue-size>
<strategy>${HIVEMQ_QUEUED_MESSAGE_STRATEGY}</strategy>
</queued-messages>
</mqtt>
<security>
<!-- Allows the use of empty client ids -->
<allow-empty-client-id>
<enabled>${HIVEMQ_ALLOW_EMPTY_CLIENT_ID}</enabled>
</allow-empty-client-id>
<!-- Configures validation for UTF-8 PUBLISH payloads -->
<payload-format-validation>
<enabled>${HIVEMQ_PAYLOAD_FORMAT_VALIDATION}</enabled>
</payload-format-validation>
<utf8-validation>
<enabled>${HIVEMQ_TOPIC_FORMAT_VALIDATION}</enabled>
</utf8-validation>
<!-- Allows clients to request problem information -->
<allow-request-problem-information>
<enabled>${HIVEMQ_ALLOW_REQUEST_PROBLEM_INFORMATION}</enabled>
</allow-request-problem-information>
<control-center-audit-log>
<enabled>${HIVEMQ_CONTROL_CENTER_AUDIT_LOG_ENABLED}</enabled>
</control-center-audit-log>
</security>
</hivemq>
Controller Template: cluster-deployment.yaml
Cpu: 2
Cpu Limit Ratio: 1
Custom Properties:
Dns Suffix: svc.cluster.local.
Env:
Ephemeral Storage: 15Gi
Ephemeral Storage Limit Ratio: 1
Extensions:
Enabled: false
Extension Uri: preinstalled
Name: hivemq-kafka-extension
Enabled: false
Extension Uri: preinstalled
Name: hivemq-bridge-extension
Enabled: false
Extension Uri: preinstalled
Initialization: # A little hack because k8s configMaps can't handle sub-directories
[[ -e /conf-override/extensions/hivemq-enterprise-security-extension/enterprise-security-extension.xml ]] &&
rm -f $(pwd)/conf/enterprise-security-extension.xml &&
cp -s /conf-override/extensions/hivemq-enterprise-security-extension/enterprise-security-extension.xml $(pwd)/conf/enterprise-security-extension.xml
[[ ! -f drivers/postgres-jdbc.jar ]] &&
curl -L https://jdbc.postgresql.org/download/postgresql-42.2.14.jar --output drivers/jdbc/postgres.jar
Name: hivemq-enterprise-security-extension
Hivemq Version: k8s-4.8.2
Image: hivemq/hivemq4
Image Pull Policy: IfNotPresent
Init Busybox Image: busybox:latest
Init Containers:
Init Dns Wait Image: hivemq/init-dns-wait:1.0.0
Initialization:
Java Options: -XX:+UnlockExperimentalVMOptions -XX:InitialRAMPercentage=40 -XX:MaxRAMPercentage=50 -XX:MinRAMPercentage=30
Labels:
app.kubernetes.io/instance: hivemq
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: hivemq-operator
app.kubernetes.io/version: 4.8.2
helm.sh/chart: hivemq-operator-0.10.10
Listener Configuration: <tcp-listener>
<port>${HIVEMQ_MQTT_PORT}</port>
<bind-address>0.0.0.0</bind-address>
</tcp-listener>
Log Level: INFO
Memory: 2Gi
Memory Limit Ratio: 1
Mqtt:
Keepalive Allow Unlimited: true
Keepalive Max: 65535
Max Packet Size: 268435460
Max Qos: 2
Message Expiry Max Interval: 4294967296
Queued Message Strategy: discard
Queued Messages Max Queue Size: 1000
Retained Messages Enabled: true
Server Receive Maximum: 10
Session Expiry Interval: 4294967295
Shared Subscription Enabled: true
Subscription Identifier Enabled: true
Topic Alias Enabled: true
Topic Alias Max Per Client: 5
Wildcard Subscription Enabled: true
Node Count: 2
Node Selector:
Pod Annotations:
Pod Labels:
Ports:
Expose: true
Name: mqtt
Patch:
[{"op":"add","path":"/spec/selector/hivemq.com~1node-offline","value":"false"},{"op":"add","path":"/metadata/annotations","value":{"service.spec.externalTrafficPolicy":"Local"}}]
Port: 1883
Expose: true
Name: cc
Patch:
[{"op":"add","path":"/spec/sessionAffinity","value":"ClientIP"}]
Port: 8080
Priority Class Name:
Rest API Configuration: <rest-api>
<enabled>${HIVEMQ_REST_API_ENABLED}</enabled>
<listeners>
<http>
<port>${HIVEMQ_REST_API_PORT}</port>
<bind-address>0.0.0.0</bind-address>
</http>
</listeners>
</rest-api>
Restrictions:
Incoming Bandwidth Throttling: 0
Max Client Id Length: 65535
Max Connections: -1
Max Topic Length: 65535
No Connect Idle Timeout: 10000
Runtime Class Name:
Security:
Allow Empty Client Id: true
Allow Request Problem Information: true
Control Center Audit Log Enabled: true
Payload Format Validation: false
Topic Format Validation: true
Service Account Name: hivemq-hivemq-operator-hivemq
Sidecars:
Tolerations:
Topology Spread Constraints:
Status:
Conditions:
Last Transition Time: 2022-07-20T13:26:46.648934Z
Reason: initial status
Status: False
Type: AllNodesReady
Last Transition Time: 2022-07-20T13:26:46.648934Z
Reason: initial status
Status: False
Type: AllExtensionsLoaded
Last Transition Time: 2022-07-20T13:26:46.755800Z
Reason: Services transitioned to ready state
Status: True
Type: AllServicesReady
Last Transition Time: 2022-07-20T13:26:46.648934Z
Reason: initial status
Status: True
Type: LogLevelApplied
Extension State:
Message: Initial status
Port Status:
State: Pending
Warnings:
Events: <none>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment