Kubespray Kubernetes Installation Fails - dockerd[8296]: unable to configure the Docker daemon with file /etc/docker/daemon.json

12/10/2019

Above error occured when installing kubernetes using kubespray.

The installtion fails and through journal -xe i see the follow:

    ` node1 systemd[1]: Starting Docker Application Container Engine...
-- Subject: Unit docker.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit docker.service has begun starting up.
Dec 09 23:37:01 node1 dockerd[8296]: unable to configure the Docker daemon with file /etc/docker/daemon.json: the following directives are specified both as a flag and in the configuration file: lo
Dec 09 23:37:01 node1 systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
Dec 09 23:37:01 node1 systemd[1]: Failed to start Docker Application Container Engine.

how do I troubleshoot to fix the issue? Is there something that I am missing looking into? The json file is as follows

    [root@k8s-master01 kubespray]# cat /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}

the docker.yml file is as follows:

     cat inventory/sample/group_vars/all/docker.yml
---
## Uncomment this if you want to force overlay/overlay2 as docker storage driver
## Please note that overlay2 is only supported on newer kernels
# docker_storage_options: -s overlay2

## Enable docker_container_storage_setup, it will configure devicemapper driver on Centos7 or RedHat7.
docker_container_storage_setup: false

## It must be define a disk path for docker_container_storage_setup_devs.
## Otherwise docker-storage-setup will be executed incorrectly.
# docker_container_storage_setup_devs: /dev/vdb

## Uncomment this if you have more than 3 nameservers, then we'll only use the first 3.
docker_dns_servers_strict: false

# Path used to store Docker data
docker_daemon_graph: "/var/lib/docker"

## Used to set docker daemon iptables options to true
docker_iptables_enabled: "false"

# Docker log options
# Rotate container stderr/stdout logs at 50m and keep last 5
docker_log_opts: "--log-opt max-size=50m --log-opt max-file=5"

# define docker bin_dir
docker_bin_dir: "/usr/bin"

# keep docker packages after installation; speeds up repeated ansible provisioning runs when '1'
# kubespray deletes the docker package on each run, so caching the package makes sense
docker_rpm_keepcache: 0

## An obvious use case is allowing insecure-registry access to self hosted registries.
## Can be ipaddress and domain_name.
## example define 172.19.16.11 or mirror.registry.io
# docker_insecure_registries:
#   - mirror.registry.io
#   - 172.19.16.11

## Add other registry,example China registry mirror.
# docker_registry_mirrors:
#   - https://registry.docker-cn.com
#   - https://mirror.aliyuncs.com

## If non-empty will override default system MountFlags value.
## This option takes a mount propagation flag: shared, slave
## or private, which control whether mounts in the file system
## namespace set up for docker will receive or propagate mounts
## and unmounts. Leave empty for system default
# docker_mount_flags:

## A string of extra options to pass to the docker daemon.
## This string should be exactly as you wish it to appear.
docker_options: >-

the setup.cfg file is as below

[root@k8s-master01 kubespray]# cat setup.cfg
[metadata]
name = kubespray
summary = Ansible modules for installing Kubernetes
description-file =
    README.md
author = Kubespray
author-email = smainklh@gmail.com
license = Apache License (2.0)
home-page = https://github.com/kubernetes-sigs/kubespray
classifier =
  License :: OSI Approved :: Apache Software License
  Development Status :: 4 - Beta
  Intended Audience :: Developers
  Intended Audience :: System Administrators
  Intended Audience :: Information Technology
  Topic :: Utilities

[global]
setup-hooks =
    pbr.hooks.setup_hook

[files]
data_files =
    usr/share/kubespray/playbooks/ =
        cluster.yml
        upgrade-cluster.yml
        scale.yml
        reset.yml
        remove-node.yml
        extra_playbooks/upgrade-only-k8s.yml
    usr/share/kubespray/roles = roles/*
    usr/share/kubespray/library = library/*
    usr/share/doc/kubespray/ =
        LICENSE
        README.md
    usr/share/doc/kubespray/inventory/ =
        inventory/sample/inventory.ini
    etc/kubespray/ =
        ansible.cfg
    etc/kubespray/inventory/sample/group_vars/ =
        inventory/sample/group_vars/etcd.yml
    etc/kubespray/inventory/sample/group_vars/all/ =
        inventory/sample/group_vars/all/all.yml
        inventory/sample/group_vars/all/azure.yml
        inventory/sample/group_vars/all/coreos.yml
        inventory/sample/group_vars/all/docker.yml
        inventory/sample/group_vars/all/oci.yml
        inventory/sample/group_vars/all/openstack.yml

[wheel]
universal = 1

[pbr]
skip_authors = True
skip_changelog = True

[bdist_rpm]
group = "System Environment/Libraries"
requires =
    ansible
    python-jinja2
    python-netaddr
-- Aniesh
kubernetes
kubespray

1 Answer

12/10/2019

Take look on that you have defined in deamon.json file storage driver:

  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"

At the same time in docker.yaml file you didn't enable storage driver options :

## Uncomment this if you want to force overlay/overlay2 as docker storage driver
## Please note that overlay2 is only supported on newer kernels
# docker_storage_options: -s overlay2

Please uncomment docker_storage_options: -s overlay2 line.

make sure you have followed every steps from this tutorial.

-- MaggieO
Source: StackOverflow