Skip to content

Instantly share code, notes, and snippets.

@cbluth
Last active November 16, 2018 13:36
Show Gist options
  • Save cbluth/f77b658e09781ef36f1ba317b41e1a31 to your computer and use it in GitHub Desktop.
Save cbluth/f77b658e09781ef36f1ba317b41e1a31 to your computer and use it in GitHub Desktop.
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: vernemq
name: vernemq
spec:
podManagementPolicy: OrderedReady
replicas: 3
selector:
matchLabels:
app: vernemq
serviceName: vernemq
template:
metadata:
labels:
app: vernemq
spec:
containers:
- env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
envFrom:
- configMapRef:
name: vernemq
image: erlio/docker-vernemq:1.6.1
imagePullPolicy: IfNotPresent
name: vernemq
ports:
- containerPort: 1883
name: mqtt
- containerPort: 4369
name: epmd
- containerPort: 44053
name: vmq
- containerPort: 8888
name: metrics
- containerPort: 9100
- containerPort: 9101
- containerPort: 9102
- containerPort: 9103
- containerPort: 9104
- containerPort: 9105
- containerPort: 9106
- containerPort: 9107
- containerPort: 9108
- containerPort: 9109
volumeMounts:
- mountPath: /etc/vernemq-passwd
name: vernemq-passwd
readOnly: true
volumes:
- name: vernemq-passwd
secret:
defaultMode: 420
secretName: vernemq-passwd
updateStrategy:
type: RollingUpdate
---
apiVersion: v1
data:
DOCKER_VERNEMQ_ALLOW_PUBLISH_DURING_NETSPLIT: "on"
DOCKER_VERNEMQ_ALLOW_REGISTER_DURING_NETSPLIT: "on"
DOCKER_VERNEMQ_ALLOW_SUBSCRIBE_DURING_NETSPLIT: "on"
DOCKER_VERNEMQ_ALLOW_UNSUBSCRIBE_DURING_NETSPLIT: "on"
DOCKER_VERNEMQ_DISCOVERY_KUBERNETES: "1"
DOCKER_VERNEMQ_ERLANG.async_threads: "1024"
DOCKER_VERNEMQ_ERLANG__DISTRIBUTION__PORT_RANGE__MAXIMUM: "9109"
DOCKER_VERNEMQ_ERLANG__DISTRIBUTION__PORT_RANGE__MINIMUM: "9100"
DOCKER_VERNEMQ_KUBERNETES_APP_LABEL: vernemq
DOCKER_VERNEMQ_KUBERNETES_INSECURE: "1"
DOCKER_VERNEMQ_LISTENER__VMQ__CLUSTERING: 0.0.0.0:44053
DOCKER_VERNEMQ_MAX_ONLINE_MESSAGES: "-1"
DOCKER_VERNEMQ_LISTENER__TCP__LOCALHOST: "127.0.0.1:1883"
DOCKER_VERNEMQ_VMQ_PASSWD__PASSWORD_FILE: /etc/vernemq-passwd/vmq.passwd
kind: ConfigMap
metadata:
name: vernemq
---
apiVersion: v1
kind: Service
metadata:
labels:
app: vernemq
name: vernemq-svc
spec:
ports:
- name: mqtt
port: 1883
protocol: TCP
targetPort: 1883
- name: metrics
port: 8888
protocol: TCP
targetPort: 8888
selector:
app: vernemq
sessionAffinity: None
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: vernemq
name: vernemq
spec:
clusterIP: None
ports:
- port: 4369
name: empd
selector:
app: vernemq
---
apiVersion: v1
data:
vmq.passwd: dXNlcm5hbWU6JDYkYUxHc1E3MllVbnR4YmlFQyQrM2xGRWlBS3lXblBEMTZjYU1neXQ3UjBnbFRwY3I3cVlhcW52UnVsMTc2bS9XbzNBeEJjSzNwOThmQlB6UzhtZ0daRS96WEZZbTRsRDV2VXFZTUNoZz09Cg==
# Username: username
# Password: password
kind: Secret
metadata:
annotations:
name: vernemq-passwd
type: Opaque
@francois-travais
Copy link

I think there is no need for the preStop hook, that's already implemented in the entrypoint: https://github.com/erlio/docker-vernemq/blob/master/bin/vernemq.sh#L108-L115

And you shouldn't need DOCKER_VERNEMQ_KUBERNETES_NAMESPACE anymore

@cbluth
Copy link
Author

cbluth commented Nov 9, 2018

I think there is no need for the preStop hook, that's already implemented in the entrypoint: https://github.com/erlio/docker-vernemq/blob/master/bin/vernemq.sh#L108-L115

And you shouldn't need DOCKER_VERNEMQ_KUBERNETES_NAMESPACE anymore

i removed the hook and the variable, do you see any more improvements?

@francois-travais
Copy link

for the port forwarding to work I added this env variable:

            # Add this localhost listener in order to get the port forwarding working
            - name: DOCKER_VERNEMQ_LISTENER__TCP__LOCALHOST
              value: "127.0.0.1:1883"

But I guess DOCKER_VERNEMQ_LISTENER__VMQ__CLUSTERING: 0.0.0.0:44053 does the same.

One more thing, statefulsets require a headless service, see Limitations.
My headless service looks like this:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: vernemq
  name: vernemq
spec:
  clusterIP: None
  ports:
    - port: 4369
      name: empd
  selector:
    app: vernemq

@cbluth
Copy link
Author

cbluth commented Nov 16, 2018

for the port forwarding to work I added this env variable:

            # Add this localhost listener in order to get the port forwarding working
            - name: DOCKER_VERNEMQ_LISTENER__TCP__LOCALHOST
              value: "127.0.0.1:1883"

But I guess DOCKER_VERNEMQ_LISTENER__VMQ__CLUSTERING: 0.0.0.0:44053 does the same.

One more thing, statefulsets require a headless service, see Limitations.
My headless service looks like this:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: vernemq
  name: vernemq
spec:
  clusterIP: None
  ports:
    - port: 4369
      name: empd
  selector:
    app: vernemq

@francois-travais
Thanks for your input, i have updated the gist.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment