Rework systemd service units

* Add for docker system units:
    ExecReload=/bin/kill -s HUP $MAINPID
    Delegate=yes
    KillMode=process.
* Add missed DOCKER_OPTIONS for calico/weave docker systemd unit.
* Change Requires= to a less strict and non-faily Wants=, add missing
  Wants= for After=.
* Align wants/after in a wat if Wants=foo, After= has foo as well.
* Make wants/after docker.service to ask for the docker.socket as well.
* Move "docker rm -f" commands from ExecStartPre= to ExecStopPost=.
  hooks to ensure non-destructive start attempts issued by Wants=.

Signed-off-by: Bogdan Dobrelya <bdobrelia@mirantis.com>
This commit is contained in:
Bogdan Dobrelya 2016-08-02 10:55:42 +02:00
parent c4973dc069
commit 0062b35f97
10 changed files with 37 additions and 26 deletions

View file

@ -1,7 +1,7 @@
[Unit] [Unit]
Description=etcd docker wrapper Description=etcd docker wrapper
Wants=docker.socket Wants=docker.service docker.socket
After=docker.service After=docker.service docker.socket
[Service] [Service]
User=root User=root
@ -18,7 +18,7 @@ ExecStart={{ docker_bin_dir | default("/usr/bin") }}/docker run --restart=always
{% if etcd_after_v3 %} {% if etcd_after_v3 %}
{{ etcd_container_bin_dir }}etcd {{ etcd_container_bin_dir }}etcd
{% endif %} {% endif %}
ExecStartPre=-{{ docker_bin_dir | default("/usr/bin") }}/docker rm -f {{ etcd_member_name | default("etcd-proxy") }} ExecStopPost=-{{ docker_bin_dir | default("/usr/bin") }}/docker rm -f {{ etcd_member_name | default("etcd-proxy") }}
ExecReload={{ docker_bin_dir | default("/usr/bin") }}/docker restart {{ etcd_member_name | default("etcd-proxy") }} ExecReload={{ docker_bin_dir | default("/usr/bin") }}/docker restart {{ etcd_member_name | default("etcd-proxy") }}
ExecStop={{ docker_bin_dir | default("/usr/bin") }}/docker stop {{ etcd_member_name | default("etcd-proxy") }} ExecStop={{ docker_bin_dir | default("/usr/bin") }}/docker stop {{ etcd_member_name | default("etcd-proxy") }}
Restart=always Restart=always

View file

@ -1,7 +1,7 @@
[Unit] [Unit]
Description=etcd-proxy docker wrapper Description=etcd-proxy docker wrapper
Wants=docker.socket Wants=docker.service docker.socket
After=docker.service After=docker.service docker.socket
[Service] [Service]
User=root User=root
@ -18,7 +18,7 @@ ExecStart={{ docker_bin_dir | default("/usr/bin") }}/docker run --restart=always
{% if etcd_after_v3 %} {% if etcd_after_v3 %}
{{ etcd_container_bin_dir }}etcd {{ etcd_container_bin_dir }}etcd
{% endif %} {% endif %}
ExecStartPre=-{{ docker_bin_dir | default("/usr/bin") }}/docker rm -f {{ etcd_proxy_member_name | default("etcd-proxy") }} ExecStopPost=-{{ docker_bin_dir | default("/usr/bin") }}/docker rm -f {{ etcd_proxy_member_name | default("etcd-proxy") }}
ExecReload={{ docker_bin_dir | default("/usr/bin") }}/docker restart {{ etcd_proxy_member_name | default("etcd-proxy") }} ExecReload={{ docker_bin_dir | default("/usr/bin") }}/docker restart {{ etcd_proxy_member_name | default("etcd-proxy") }}
ExecStop={{ docker_bin_dir | default("/usr/bin") }}/docker stop {{ etcd_proxy_member_name | default("etcd-proxy") }} ExecStop={{ docker_bin_dir | default("/usr/bin") }}/docker stop {{ etcd_proxy_member_name | default("etcd-proxy") }}
Restart=always Restart=always

View file

@ -2,9 +2,11 @@
Description=Kubernetes Kubelet Server Description=Kubernetes Kubelet Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes Documentation=https://github.com/GoogleCloudPlatform/kubernetes
{% if kube_network_plugin is defined and kube_network_plugin == "calico" %} {% if kube_network_plugin is defined and kube_network_plugin == "calico" %}
After=docker.service calico-node.service After=docker.service docker.socket calico-node.service
Wants=docker.service docker.socket calico-node.service
{% else %} {% else %}
After=docker.service After=docker.service docker.socket
Wants=docker.service docker.socket
{% endif %} {% endif %}
[Service] [Service]
@ -22,7 +24,7 @@ ExecStart={{ bin_dir }}/kubelet \
$KUBELET_REGISTER_NODE \ $KUBELET_REGISTER_NODE \
$KUBELET_NETWORK_PLUGIN \ $KUBELET_NETWORK_PLUGIN \
$KUBELET_CLOUDPROVIDER $KUBELET_CLOUDPROVIDER
ExecStartPre=-/usr/bin/docker rm -f kubelet ExecStopPost=-/usr/bin/docker rm -f kubelet
ExecReload=/usr/bin/docker restart kubelet ExecReload=/usr/bin/docker restart kubelet
Restart=always Restart=always
RestartSec=10s RestartSec=10s

View file

@ -1,8 +1,8 @@
[Unit] [Unit]
Description=Calico per-node agent Description=Calico per-node agent
Documentation=https://github.com/projectcalico/calico-docker Documentation=https://github.com/projectcalico/calico-docker
After=docker.service etcd-proxy.service After=docker.service docker.socket etcd-proxy.service
Wants=docker.socket Wants=docker.service docker.socket etcd-proxy.service
[Service] [Service]
User=root User=root

View file

@ -2,11 +2,11 @@
Description=Docker Application Container Engine Description=Docker Application Container Engine
Documentation=http://docs.docker.com Documentation=http://docs.docker.com
{% if ansible_os_family == "RedHat" %} {% if ansible_os_family == "RedHat" %}
After=network.target After=network.target docker-storage-setup.service
Wants=docker-storage-setup.service Wants=docker-storage-setup.service
{% elif ansible_os_family == "Debian" %} {% elif ansible_os_family == "Debian" %}
After=network.target docker.socket After=network.target docker.socket
Requires=docker.socket Wants=docker.socket
{% endif %} {% endif %}
[Service] [Service]
@ -20,6 +20,9 @@ EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/default/docker EnvironmentFile=-/etc/default/docker
{% endif %} {% endif %}
Environment=GOTRACEBACK=crash Environment=GOTRACEBACK=crash
ExecReload=/bin/kill -s HUP $MAINPID
Delegate=yes
KillMode=process
ExecStart=/usr/bin/docker daemon \ ExecStart=/usr/bin/docker daemon \
$OPTIONS \ $OPTIONS \
$DOCKER_STORAGE_OPTIONS \ $DOCKER_STORAGE_OPTIONS \

View file

@ -2,22 +2,26 @@
Description=Docker Application Container Engine Description=Docker Application Container Engine
Documentation=http://docs.docker.com Documentation=http://docs.docker.com
{% if ansible_os_family == "RedHat" %} {% if ansible_os_family == "RedHat" %}
After=network.target After=network.target docker-storage-setup.service
Wants=docker-storage-setup.service Wants=docker-storage-setup.service
{% elif ansible_os_family == "Debian" %} {% elif ansible_os_family == "Debian" %}
After=network.target docker.socket After=network.target docker.socket
Requires=docker.socket Wants=docker.socket
{% endif %} {% endif %}
[Service] [Service]
Type=notify Type=notify
EnvironmentFile=-/etc/default/docker EnvironmentFile=-/etc/default/docker
Environment=GOTRACEBACK=crash Environment=GOTRACEBACK=crash
ExecReload=/bin/kill -s HUP $MAINPID
Delegate=yes
KillMode=process
ExecStart=/usr/bin/docker daemon \ ExecStart=/usr/bin/docker daemon \
$OPTIONS \ $OPTIONS \
$DOCKER_STORAGE_OPTIONS \ $DOCKER_STORAGE_OPTIONS \
$DOCKER_NETWORK_OPTIONS \ $DOCKER_NETWORK_OPTIONS \
$INSECURE_REGISTRY $INSECURE_REGISTRY \
$DOCKER_OPTS
LimitNOFILE=1048576 LimitNOFILE=1048576
LimitNPROC=1048576 LimitNPROC=1048576
LimitCORE=infinity LimitCORE=infinity

View file

@ -6,18 +6,22 @@ After=network.target
Wants=docker-storage-setup.service Wants=docker-storage-setup.service
{% elif ansible_os_family == "Debian" %} {% elif ansible_os_family == "Debian" %}
After=network.target docker.socket After=network.target docker.socket
Requires=docker.socket Wants=docker.socket
{% endif %} {% endif %}
[Service] [Service]
Type=notify Type=notify
EnvironmentFile=-/etc/default/docker EnvironmentFile=-/etc/default/docker
Environment=GOTRACEBACK=crash Environment=GOTRACEBACK=crash
ExecReload=/bin/kill -s HUP $MAINPID
Delegate=yes
KillMode=process
ExecStart=/usr/bin/docker daemon \ ExecStart=/usr/bin/docker daemon \
$OPTIONS \ $OPTIONS \
$DOCKER_STORAGE_OPTIONS \ $DOCKER_STORAGE_OPTIONS \
$DOCKER_NETWORK_OPTIONS \ $DOCKER_NETWORK_OPTIONS \
$INSECURE_REGISTRY $INSECURE_REGISTRY \
$DOCKER_OPTS
LimitNOFILE=1048576 LimitNOFILE=1048576
LimitNPROC=1048576 LimitNPROC=1048576
LimitCORE=infinity LimitCORE=infinity

View file

@ -1,8 +1,8 @@
[Unit] [Unit]
Description=Weave Network Description=Weave Network
Documentation=http://docs.weave.works/weave/latest_release/ Documentation=http://docs.weave.works/weave/latest_release/
Requires=docker.service Wants=docker.service docker.socket
After=docker.service After=docker.service docker.socket
[Service] [Service]
EnvironmentFile=-/etc/weave.env EnvironmentFile=-/etc/weave.env

View file

@ -1,9 +1,7 @@
[Unit] [Unit]
Documentation=http://docs.weave.works/ Documentation=http://docs.weave.works/
Requires=docker.service Wants=docker.service docker.socket weave.service
Requires=weave.service After=docker.service docker.socket weave.service
After=weave.service
After=docker.service
[Service] [Service]
Type=oneshot Type=oneshot

View file

@ -1,8 +1,8 @@
[Unit] [Unit]
Description=Weave proxy for Docker API Description=Weave proxy for Docker API
Documentation=http://docs.weave.works/ Documentation=http://docs.weave.works/
Requires=docker.service Wants=docker.service docker.socket
After=docker.service After=docker.service docker.socket
[Service] [Service]
EnvironmentFile=-/etc/weave.%H.env EnvironmentFile=-/etc/weave.%H.env