@@ -39,6 +39,21 @@ cgroupfs_mount() {
39
39
true
40
40
}
41
41
42
+ detect_ingress_ip () {
43
+ local FILE=" $1 "
44
+ local IP
45
+
46
+ for i in $( seq 1 30 | sort -nr)
47
+ do
48
+ IP=$( docker network inspect ingress --format ' {{index (split (index .Containers "ingress-sbox").IPv4Address "/") 0}}' 2> /dev/null)
49
+ [ -n " $IP " ] && break
50
+ [ $i -eq 1 ] && log " Ingress IP detection for this node failed!" && exit 1
51
+ sleep 0.5
52
+ done
53
+
54
+ echo -n " $IP " > $FILE
55
+ }
56
+
42
57
cgroupfs_mount
43
58
44
59
ulimit -u unlimited
@@ -55,7 +70,7 @@ read -r DOCKER_IF_IP DOCKER_IF_MTU <<< \
55
70
log "- DOCKER_IF_IP=$DOCKER_IF_IP DOCKER_IF_MTU=$DOCKER_IF_MTU "
56
71
57
72
# Start dockerd and keep it running
58
- log "Launching dockerd ..."
73
+ log "Launching ' dockerd --mtu $DOCKER_IF_MTU ' ..."
59
74
while true; do dockerd --mtu $DOCKER_IF_MTU >>/var/log/dockerd.log 2>&1; done &
60
75
61
76
for i in $( seq 1 10 | sort -nr)
@@ -113,20 +128,23 @@ if [ "$NodeState" = "inactive" ] || [ "$NodeState" = "pending" ]; then
113
128
114
129
log "Swarm initialised!"
115
130
116
- log "Removing default ingress ..."
117
- echo y | docker network rm ingress
131
+ if [ -n "$MTU " ] && [ "$MTU " -gt 0 ]; then
118
132
119
- log "Creating new ingress with MTU $DOCKER_IF_MTU "
120
- docker network create \
121
- --driver=overlay \
122
- --ingress \
123
- --subnet=10.0.0.0/24 \
124
- --gateway=10.0.0.2 \
125
- --opt com.docker.network.driver.mtu=$DOCKER_IF_MTU \
126
- ingress
133
+ log "Removing default ingress ..."
134
+ echo y | docker network rm ingress
127
135
128
- log "Writing swarm 'join token' to shared storage and waiting for other nodes ..."
129
- docker swarm join-token worker | grep docker >/swarm/worker
136
+ log "Creating new ingress with MTU $DOCKER_IF_MTU "
137
+ docker network create \
138
+ --driver=overlay \
139
+ --ingress \
140
+ --subnet=10.0.0.0/24 \
141
+ --gateway=10.0.0.1 \
142
+ --opt com.docker.network.driver.mtu=$DOCKER_IF_MTU \
143
+ ingress
144
+ fi
145
+
146
+ log "Writing swarm 'join token' to shared storage and waiting for other nodes ..."
147
+ mkdir -p /swarm/nodes && docker swarm join-token worker | grep docker >/swarm/worker
130
148
131
149
for i in $( seq 1 30 | sort -nr)
132
150
do
@@ -140,11 +158,46 @@ if [ "$NodeState" = "inactive" ] || [ "$NodeState" = "pending" ]; then
140
158
log "Swarm nodes started:"
141
159
docker node ls
142
160
echo
161
+
162
+ fi
163
+
164
+ log "Log memory consumption ..."
165
+ free
166
+
167
+ # Log this trigger line last
168
+ # BUT before running DIRD.
169
+ log "Swarm complete!"
170
+
171
+ # Optionally run DIRD.
172
+ # Do this after logging "Swarm complete" so that test script proceeds to launch the service;
173
+ # as, until the service is launched, the nodes' ingress network IPs will not yet be defined.
174
+ if [ "$DIRD " = "1" ]; then
143
175
144
- # Log this trigger line last.
145
- log "Swarm complete!"
146
-
176
+ log "Detecting node ingress network IP ..."
177
+ detect_ingress_ip /swarm/nodes/$NODE
178
+ log "Detected node ingress network IP '$( cat /swarm/nodes/$NODE ) '"
179
+
180
+ log "Waiting for all nodes' ingress network IPs ..."
181
+ for i in $( seq 1 30 | sort -nr)
182
+ do
183
+ [ $( ls /swarm/nodes/ | wc -l) -eq $NODES ] && break
184
+ [ $i -eq 1 ] && log "Ingress IP detection for all nodes failed!" && exit 1
185
+ sleep 0.5
186
+ done
187
+
188
+ for n in $( ls /swarm/nodes)
189
+ do
190
+ IPs+="$( cat /swarm/nodes/$n ) ,"
191
+ echo "$n : '$( cat /swarm/nodes/$n ) '"
192
+ done
193
+
194
+ IPs=$( echo $IPs | sed ' s/,$//' )
195
+
196
+ log "Running docker-ingress-routing-daemon --preexisting --ingress-gateway-ips $IPs --install ..."
197
+ while true; do /usr/local/bin/docker-ingress-routing-daemon --preexisting --ingress-gateway-ips "$IPs " --install; sleep 1; done &
198
+
147
199
fi
200
+
148
201
fi
149
202
150
203
node_state
0 commit comments