Skip to content

Commit 547d00d

Browse files
authored
Merge pull request #9 from hellofresh/patch/CRS-1632-add-cadvisor
CRS-1632 Add cadvisor
2 parents 404a866 + 4dd878a commit 547d00d

File tree

12 files changed

+293
-27
lines changed

12 files changed

+293
-27
lines changed

Readme.md

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,17 @@ An ansible role that installs docker host on ubuntu
55

66
### Role Variables
77
```yaml
8-
dockerhost_group : "docker"
9-
docker_compose_version : "1.25.3"
10-
docker_compose_dir : "/opt/docker_compose"
11-
docker_compose_install : True
8+
dockerhost_group : "docker"
9+
docker_compose_version : "1.29.1"
10+
docker_compose_dir : "/opt/docker_compose"
11+
docker_compose_install : True
12+
dockerhost_daemon_config : {}
13+
dockerhost_install_cadvisor : True
14+
dockerhost_cadvisor_version : "v0.37.5"
15+
dockerhost_cadvisor_config_flags : {}
16+
dockerhost_cadvisor_config_docker_endpoint : unix:///run/docker.sock
17+
dockerhost_cadvisor_config_listen_port : 8100
18+
dockerhost_cadvisor_config_listen_interface : 0.0.0.0
1219
```
1320
1421
## License

defaults/main.yml

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,29 @@
11
---
22

3-
dockerhost_group : "docker"
4-
docker_compose_version : "1.25.3"
5-
docker_compose_dir : "/opt/docker_compose"
6-
docker_compose_install : True
7-
docker_install_py_module : False
3+
dockerhost_group : "docker"
4+
docker_compose_version : "1.29.1"
5+
docker_compose_dir : "/opt/docker_compose"
6+
docker_compose_install : True
7+
docker_install_py_module : False
88

9-
docker_gpg_url : https://download.docker.com/linux/ubuntu/gpg
9+
docker_gpg_url : https://download.docker.com/linux/ubuntu/gpg
10+
11+
dockerhost_daemon_config : {}
12+
13+
dockerhost_install_cadvisor : True
14+
dockerhost_prometheus_exporters_common_user : prometheus
15+
dockerhost_prometheus_exporters_common_group : prometheus
16+
17+
dockerhost_prometheus_exporters_common_root_dir : /opt/prometheus/exporters
18+
dockerhost_prometheus_exporters_common_dist_dir : "{{ dockerhost_prometheus_exporters_common_root_dir }}/dist"
19+
dockerhost_prometheus_exporters_common_conf_dir : "/etc/prometheus/exporters"
20+
21+
dockerhost_cadvisor_version : v0.37.5
22+
dockerhost_cadvisor_release_name : "cadvisor-{{ dockerhost_cadvisor_version }}.linux-amd64"
23+
dockerhost_cadvisor_config_flags : {}
24+
dockerhost_cadvisor_config_docker_endpoint : unix:///run/docker.sock
25+
dockerhost_cadvisor_config_listen_port : 8100
26+
dockerhost_cadvisor_config_listen_interface : 0.0.0.0
27+
28+
# Since cAdvisor can potentially replace node exporter, add an option to disable node exporter
29+
dockerhost_disable_prometheus_node_exporter : False

handlers/main.yml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,22 @@
11
---
22
- name: restart docker
3-
service:
3+
service:
44
name: docker
55
state: restarted
66

77
- name: restart docker systemd
8-
systemd:
8+
systemd:
99
name: docker
1010
state: restarted
1111
daemon_reload: True
12+
13+
- name: reenable cadvisor service
14+
command: systemctl reenable cadvisor.service
15+
16+
- name: reinit cadvisor
17+
command: initctl reload-configuration
18+
19+
- name: restart cadvisor
20+
service:
21+
name: cadvisor
22+
state: restarted

meta/main.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ galaxy_info:
88
platforms:
99
- name: Ubuntu
1010
versions:
11+
- 20.04
1112
- 18.04
1213
- 16.04
1314
categories:
14-
- web
15-
dependencies: []
15+
- web
16+
dependencies:
17+
- UnderGreen.prometheus-exporters-common

tasks/apt.yml

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,20 @@
22

33
- name: Ensure apt works with HTTPS and certificates are installed and kernel extrax
44
apt:
5-
pkg="{{ item }}"
6-
state="installed"
7-
update_cache="yes"
8-
cache_valid_time=3600
9-
with_items:
5+
pkg:
106
- apt-transport-https
117
- ca-certificates
8+
state: present
9+
update_cache: yes
10+
cache_valid_time: 3600
1211

13-
- name: Add apt repo GPG
12+
- name: Add apt repo GPG
1413
apt_key:
1514
id="{{ dockerhost_id }}"
1615
url="{{ docker_gpg_url }}"
1716

1817
- name: Add docker apt repo
19-
apt_repository:
18+
apt_repository:
2019
repo="deb https://download.docker.com/linux/ubuntu {{ ansible_lsb.codename }} stable"
2120
update_cache="yes"
2221

tasks/cadvisor.yml

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
---
2+
3+
- name: Create binary directory
4+
file:
5+
path: "{{ dockerhost_prometheus_exporters_common_dist_dir }}/{{ dockerhost_cadvisor_release_name }}"
6+
state: directory
7+
owner: "{{ dockerhost_prometheus_exporters_common_user }}"
8+
group: "{{ dockerhost_prometheus_exporters_common_group }}"
9+
10+
- name: download cadvisor binary
11+
get_url:
12+
url: "{{ dockerhost_cadvisor_download_url }}"
13+
dest: "{{ dockerhost_prometheus_exporters_common_dist_dir }}/{{ dockerhost_cadvisor_release_name }}/cadvisor"
14+
mode: "0755"
15+
16+
- name: create symlink to the current release
17+
file:
18+
src: "{{ dockerhost_prometheus_exporters_common_dist_dir }}/{{ dockerhost_cadvisor_release_name }}"
19+
path: "{{ dockerhost_prometheus_exporters_common_root_dir }}/cadvisor_current"
20+
state: link
21+
22+
- name: create systemd service unit
23+
template:
24+
src: cadvisor/systemd-unit.j2
25+
dest: /etc/systemd/system/cadvisor.service
26+
owner: root
27+
group: root
28+
mode: 0644
29+
when: ansible_service_mgr == 'systemd'
30+
notify:
31+
- reenable cadvisor service
32+
- restart cadvisor
33+
34+
- name: get upstart version
35+
command: initctl version
36+
when: ansible_service_mgr == 'upstart'
37+
register: upstart_version
38+
39+
- name: create init service unit
40+
template:
41+
src: cadvisor/upstart.j2
42+
dest: /etc/init/cadvisor.conf
43+
owner: root
44+
group: root
45+
mode: 0644
46+
when: ansible_service_mgr == 'upstart'
47+
notify:
48+
- reinit cadvisor
49+
- restart cadvisor
50+
51+
- name: create sysvinit service unit
52+
template:
53+
src: cadvisor/init.j2
54+
dest: /etc/init.d/cadvisor
55+
owner: root
56+
group: root
57+
mode: 0755
58+
when: ansible_service_mgr == 'sysvinit'
59+
notify:
60+
- restart cadvisor
61+
62+
- name: disable node exporter service
63+
when: dockerhost_disable_prometheus_node_exporter|bool
64+
service:
65+
name: prometheus-node-exporter
66+
state: stopped
67+
enabled: no
68+
69+
- meta: flush_handlers
70+
71+
- name: ensure cadvisor is running
72+
service:
73+
name: cadvisor
74+
enabled: yes
75+
state: started

tasks/main.yml

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#https://docs.docker.com/engine/installation/linux/ubuntulinux/
44

55
- name: Add docker group
6-
group:
6+
group:
77
name: "{{ dockerhost_group }}"
88
system: True
99
state: present
@@ -24,25 +24,36 @@
2424
when: docker_compose_install
2525

2626
- name: Create docker conf
27-
template:
27+
template:
2828
src: docker_conf.j2
2929
dest: /etc/default/docker
3030
when: ansible_service_mgr != 'systemd'
31-
notify:
31+
notify:
3232
- restart docker
3333

3434
- name: Create docker systemd unit file
35-
template:
35+
template:
3636
src: docker_systemd_service.j2
3737
dest: /etc/systemd/system/docker.service
3838
when: ansible_service_mgr == 'systemd'
39-
notify:
39+
notify:
40+
- restart docker systemd
41+
42+
- name: Create docker daemon config file
43+
template:
44+
src: daemon.json.j2
45+
dest: /etc/docker/daemon.json
46+
notify:
4047
- restart docker systemd
4148

4249
- meta: flush_handlers
4350

4451
- name: Ensure docker is running and starts by default
45-
service:
52+
service:
4653
name: docker
4754
state: started
4855
enabled: True
56+
57+
- name: Include cadvisor
58+
include: cadvisor.yml
59+
when: dockerhost_install_cadvisor

templates/cadvisor/init.j2

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
#!/bin/sh
2+
#
3+
# <daemonname> <summary>
4+
#
5+
# chkconfig: 345 99 01
6+
# description: Manage service cadvisor
7+
8+
9+
### BEGIN INIT INFO
10+
# Provides: cadvisor
11+
# Required-Start:
12+
# Required-Stop:
13+
# Should-Start:
14+
# Should-Stop:
15+
# Default-Start:
16+
# Default-Stop:
17+
# Short-Description:
18+
# Description: Manage service cadvisor
19+
### END INIT INFO
20+
21+
# Source function library.
22+
. /etc/rc.d/init.d/functions
23+
24+
exec="/opt/prometheus/exporters/cadvisor_current/cadvisor"
25+
prog="cadvisor"
26+
# cadvisor is not able to manage configuration file
27+
#config="<path to major config file>"
28+
29+
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
30+
31+
lockfile=/var/lock/subsys/$prog
32+
33+
start() {
34+
[ -x $exec ] || exit 5
35+
#[ -f $config ] || exit 6
36+
echo -n $"Starting $prog: "
37+
# if not running, start it up here, usually something like "daemon $exec"
38+
daemon {{ dockerhost_prometheus_exporters_common_root_dir }}/cadvisor_current/cadvisor --docker="{{ dockerhost_cadvisor_config_docker_endpoint }}" --listen_ip="{{ dockerhost_cadvisor_config_listen_interface }}" --port="{{ dockerhost_cadvisor_config_listen_port }}" {% for flag, flag_value in dockerhost_cadvisor_config_flags.items() %}--{{ flag }}={{ flag_value }} {% endfor %}
39+
echo
40+
[ $retval -eq 0 ] && touch $lockfile
41+
return $retval
42+
}
43+
44+
stop() {
45+
echo -n $"Stopping $prog: "
46+
# stop it here, often "killproc $prog"
47+
killproc /opt/prometheus/exporters/cadvisor_current/cadvisor
48+
retval=$?
49+
echo
50+
[ $retval -eq 0 ] && rm -f $lockfile
51+
return $retval
52+
}
53+
54+
restart() {
55+
stop
56+
start
57+
}
58+
59+
reload() {
60+
restart
61+
}
62+
63+
force_reload() {
64+
restart
65+
}
66+
67+
rh_status() {
68+
# run checks to determine if the service is running or use generic status
69+
status $prog
70+
}
71+
72+
rh_status_q() {
73+
rh_status >/dev/null 2>&1
74+
}
75+
76+
77+
case "$1" in
78+
start)
79+
rh_status_q && exit 0
80+
$1
81+
;;
82+
stop)
83+
rh_status_q || exit 0
84+
$1
85+
;;
86+
restart)
87+
$1
88+
;;
89+
reload)
90+
rh_status_q || exit 7
91+
$1
92+
;;
93+
force-reload)
94+
force_reload
95+
;;
96+
status)
97+
rh_status
98+
;;
99+
condrestart|try-restart)
100+
rh_status_q || exit 0
101+
restart
102+
;;
103+
*)
104+
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
105+
exit 2
106+
esac
107+
exit $?

templates/cadvisor/systemd-unit.j2

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
[Unit]
2+
Description=cadvisor
3+
After=network.target
4+
5+
[Service]
6+
Type=simple
7+
User=root
8+
Group=root
9+
ExecStart={{ dockerhost_prometheus_exporters_common_root_dir }}/cadvisor_current/cadvisor --docker="{{ dockerhost_cadvisor_config_docker_endpoint }}" --listen_ip="{{ dockerhost_cadvisor_config_listen_interface }}" --port="{{ dockerhost_cadvisor_config_listen_port }}" {% for flag, flag_value in dockerhost_cadvisor_config_flags.items() %}--{{ flag }}={{ flag_value }} {% endfor %}
10+
11+
SyslogIdentifier=cadvisor
12+
Restart=always
13+
14+
[Install]
15+
WantedBy=multi-user.target

templates/cadvisor/upstart.j2

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
description "cadvisor"
2+
start on (local-filesystems and net-device-up IFACE!=lo)
3+
stop on runlevel [016]
4+
5+
respawn
6+
{% if upstart_version.stdout | replace("init (upstart ", "") |replace(")","") | version_compare('1.4', '>=') %}
7+
setuid root
8+
setgid root
9+
{% endif %}
10+
11+
script
12+
exec >> "{{ dockerhost_prometheus_exporters_common_log_dir }}/cadvisor.log"
13+
exec 2>&1
14+
exec {{ dockerhost_prometheus_exporters_common_root_dir }}/cadvisor_current/cadvisor --docker="{{ dockerhost_cadvisor_config_docker_endpoint }}" --listen_ip="{{ dockerhost_cadvisor_config_listen_interface }}" --port="{{ dockerhost_cadvisor_config_listen_port }}" {% for flag, flag_value in dockerhost_cadvisor_config_flags.items() %}--{{ flag }}={{ flag_value }} {% endfor %}
15+
16+
end script

0 commit comments

Comments
 (0)