@@ -209,9 +209,10 @@ os::provision::base-provision() {
209
209
local origin_root=$1
210
210
local is_master=${2:- false}
211
211
212
- # Ensure that secrets can be correctly mounted for pods.
213
212
if os::provision::in-container; then
213
+ # Ensure that secrets can be correctly mounted for pods.
214
214
mount --make-shared /
215
+ os::provision::enable-overlay-storage
215
216
fi
216
217
217
218
# Add a convenience symlink to the gopath repo
@@ -399,3 +400,36 @@ os::provision::wait-for-node-config() {
399
400
os::provision::wait-for-condition " ${msg} " " ${condition} " \
400
401
" ${OS_WAIT_FOREVER} "
401
402
}
403
+
404
+ # Enable overlayfs for dind if it can be tested to work.
405
+ os::provision::enable-overlay-storage () {
406
+ local storage_dir=${1:-/ var/ lib/ docker}
407
+
408
+ local msg=" WARNING: Unable to enable overlay storage for docker-in-docker"
409
+
410
+ if grep -q overlay /proc/filesystems; then
411
+ # Smoke test the overlay filesystem:
412
+
413
+ # 1. create smoke dir in the storage dir being mounted
414
+ local d=" ${storage_dir} /smoke"
415
+ mkdir -p " ${d} /upper" " ${d} /lower" " ${d} /work" " ${d} /mount"
416
+
417
+ # 2. try to mount an overlay fs on top of the smoke dir
418
+ local overlay_works=1
419
+ mount -t overlay overlay\
420
+ -o" lowerdir=${d} /lower,upperdir=${d} /upper,workdir=${d} /work" \
421
+ " ${d} /mount" && \
422
+ # 3. try to write a file in the overlay mount
423
+ echo foo > " ${d} /mount/probe" || overlay_works=
424
+
425
+ umount -f " ${d} /mount" || true
426
+ rm -rf " ${d} " || true
427
+
428
+ if [[ -n " ${overlay_works} " ]]; then
429
+ msg=" Enabling overlay storage for docker-in-docker"
430
+ sed -i -e ' s+vfs+overlay+' /etc/sysconfig/docker-storage
431
+ fi
432
+ fi
433
+
434
+ echo " ${msg} "
435
+ }
0 commit comments