Skip to content

Commit f5de37d

Browse files
author
Barkha Choithani
committed
CLD-457: separate E/D Node groups for deployment in Kubernetes
1 parent 76d6d92 commit f5de37d

File tree

3 files changed

+104
-2
lines changed

3 files changed

+104
-2
lines changed

charts/templates/configmap.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ metadata:
66
labels:
77
{{- include "marklogic.labels" . | nindent 4 }}
88
data:
9+
{{- if ne .Values.bootstrapClusterName "" }}
10+
MARKLOGIC_BOOTSTRAP_HOST: {{ .Values.bootstrapClusterName }}
11+
MARKLOGIC_JOIN_CLUSTER: "true"
12+
{{- else }}
913
MARKLOGIC_BOOTSTRAP_HOST: {{ include "marklogic.fullname" . }}-0
14+
MARKLOGIC_JOIN_CLUSTER: "false"
15+
{{- end }}
1016
MARKLOGIC_FQDN_SUFFIX: {{ include "marklogic.headlessURL" . }}
1117
MARKLOGIC_INIT: "true"
12-
MARKLOGIC_JOIN_CLUSTER: "true"

charts/templates/statefulset.yaml

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,72 @@
11
apiVersion: apps/v1
22
kind: StatefulSet
33
metadata:
4-
name: {{ include "marklogic.fullname" . }}
4+
name: {{ include "marklogic.fullname" . }}-{{ .Values.group.name}}
55
namespace: {{ .Release.Namespace }}
66
labels:
7+
app.kubernetes.io/component: marklogic-{{ .Values.group.name}}
78
{{- include "marklogic.labels" . | nindent 4 }}
89
spec:
910
serviceName: {{ include "marklogic.headlessServiceName" . }}
1011
replicas: {{ .Values.replicaCount }}
1112
selector:
1213
matchLabels:
1314
{{- include "marklogic.selectorLabels" . | nindent 6 }}
15+
app.kubernetes.io/component: marklogic-{{ .Values.group.name}}
1416
template:
1517
metadata:
1618
labels:
1719
{{- include "marklogic.selectorLabels" . | nindent 8 }}
20+
app.kubernetes.io/component: marklogic-{{ .Values.group.name}}
1821
spec:
1922
serviceAccountName: {{ include "marklogic.serviceAccountName" . }}
2023
{{- with .Values.affinity }}
2124
affinity: {{- toYaml . | nindent 8}}
2225
{{- end }}
2326
terminationGracePeriodSeconds: {{ .Values.terminationGracePeriod }}
27+
{{- if and (ne .Values.bootstrapClusterName "") (eq .Values.bootstrapHostName "") }}
28+
initContainers:
29+
- name: init-checkGroup
30+
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
31+
command:
32+
- bash
33+
- '-c'
34+
- |
35+
echo '### Begin init Container ###'
36+
37+
echo "BOOTSTRAP_CLUSTER_NAME: $BOOTSTRAP_CLUSTER_NAME"
38+
echo "MARKLOGIC_GROUP: $MARKLOGIC_GROUP"
39+
40+
GROUP_CFG_TEMPLATE='{"group-name":"%s"}'
41+
GROUP_CFG=$(printf "$GROUP_CFG_TEMPLATE" "$MARKLOGIC_GROUP")
42+
43+
echo "GROUP_CFG: $GROUP_CFG"
44+
45+
ML_GROUPS=`curl --anyauth -m 20 -s -X GET http://${BOOTSTRAP_CLUSTER_NAME}:8002/manage/v2/groups?format=json --anyauth --user ${MARKLOGIC_ADMIN_USERNAME}:${MARKLOGIC_ADMIN_PASSWORD} | jq '."group-default-list"."list-items"."list-item"'`;
46+
echo ML_GROUPS: $ML_GROUPS;
47+
if [[ $(jq <<< "${ML_GROUPS}" --arg MARKLOGIC_GROUP "$MARKLOGIC_GROUP" 'any(.nameref==$MARKLOGIC_GROUP)') == "true" ]]; then
48+
echo "Group is already configured."
49+
else
50+
echo $MARKLOGIC_GROUP does not exist, creating $MARKLOGIC_GROUP on ML cluster;
51+
resp=`curl --anyauth --user ${MARKLOGIC_ADMIN_USERNAME}:${MARKLOGIC_ADMIN_PASSWORD} -m 20 -s -X POST -d "${GROUP_CFG}" -H "Content-type: application/json" http://${BOOTSTRAP_CLUSTER_NAME}:8002/manage/v2/groups`;
52+
sleep 20s
53+
fi
54+
env:
55+
- name: "BOOTSTRAP_CLUSTER_NAME"
56+
value: {{ .Values.bootstrapClusterName }}
57+
- name: MARKLOGIC_GROUP
58+
value: {{ .Values.group.name }}
59+
- name: MARKLOGIC_ADMIN_USERNAME
60+
valueFrom:
61+
secretKeyRef:
62+
name: {{ include "marklogic.fullname" . }}
63+
key: username
64+
- name: MARKLOGIC_ADMIN_PASSWORD
65+
valueFrom:
66+
secretKeyRef:
67+
name: {{ include "marklogic.fullname" . }}
68+
key: password
69+
{{- end }}
2470
containers:
2571
- name: marklogic-server
2672
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
@@ -42,6 +88,15 @@ spec:
4288
secretKeyRef:
4389
name: {{ include "marklogic.fullname" . }}
4490
key: password
91+
- name: MARKLOGIC_WALLET_PASSWORD
92+
valueFrom:
93+
secretKeyRef:
94+
name: {{ include "marklogic.fullname" . }}
95+
key: password
96+
- name: "BOOTSTRAP_CLUSTER_NAME"
97+
value: {{ .Values.bootstrapClusterName }}
98+
- name: MARKLOGIC_GROUP
99+
value: {{ .Values.group.name }}
45100
envFrom:
46101
- configMapRef:
47102
name: {{ include "marklogic.fullname" . }}
@@ -62,6 +117,36 @@ spec:
62117
{{- toYaml .Values.extraContainerPorts | nindent 12 }}
63118
{{- end }}
64119
lifecycle:
120+
{{- if eq .Values.bootstrapClusterName "" }}
121+
postStart:
122+
exec:
123+
command:
124+
- bash
125+
- '-c'
126+
- |
127+
pid=$(ps aux | grep -i '/bin/bas[h] /usr' | awk {'print $2'})
128+
129+
log () {
130+
local TIMESTAMP=$(date +"%Y-%m-%d %T.%3N")
131+
echo "${TIMESTAMP} $@" > /proc/$pid/fd/1
132+
}
133+
134+
log "Info: [poststart] Poststart Hook Execution"
135+
136+
while [ ! -f /var/opt/MarkLogic/ready ]; do
137+
sleep 5
138+
done
139+
140+
log "Info: [poststart] Updating Default group on cluster"
141+
GROUP_CFG_TEMPLATE='{"group-name":"%s"}'
142+
GROUP_CFG=$(printf "$GROUP_CFG_TEMPLATE" "$MARKLOGIC_GROUP")
143+
144+
AUTH_CURL="curl --anyauth --user "${MARKLOGIC_ADMIN_USERNAME}":"${MARKLOGIC_ADMIN_PASSWORD}" -m 20 -s "
145+
146+
$AUTH_CURL -X PUT -H "Content-type: application/json" -d "${GROUP_CFG}" http://localhost:8002/manage/v2/groups/Default/properties
147+
148+
log "Info: [poststart] Poststart Hook Execution Completed"
149+
{{- end }}
65150
preStop:
66151
exec:
67152
command:

charts/values.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,18 @@ replicaCount: 1
66
# Termination Grace Period
77
terminationGracePeriod: 120
88

9+
# Group related settings
10+
group:
11+
# the group name of the current Marklogic Helm Deployment
12+
name: Default
13+
14+
# The name of the cluster to join. If not provided, the deployment is a bootstrap cluster.
15+
bootstrapClusterName: ""
16+
17+
# The name of the host to join. If not provided, the deployment is a bootstrap host.
18+
bootstrapHostName: ""
19+
20+
921
# Marklogic image parameters
1022
image:
1123
repository: marklogicdb/marklogic-db

0 commit comments

Comments
 (0)