diff --git a/README.md b/README.md index 6b24bb5..a165098 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ Role Name ========= -A role that configures a docker swarm cluster, adding portainer CE and haproxy +A role that configures a docker swarm cluster, adding Portainer CE and HAPROXY +cAdvisor is also installed, as standalone package and not as container. The standalone package does not require a local Prometheus instance Role Variables -------------- diff --git a/defaults/main.yml b/defaults/main.yml index b090f7d..62f3a31 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -15,6 +15,15 @@ docker_swarm_api_check_availability: false docker_swarm_api_networks_acl: - '127.0.0.1/8' docker_swarm_api_haproxy_mode: http + +# cAdvisor +docker_swarm_cluster_cadvisor_install: true +docker_swarm_cluster_cadvisor_deb_pkg: true +docker_swarm_cluster_cadvisor_docker_endpoint: "unix:///var/run/docker.sock" +docker_swarm_cluster_cadvisor_port: 4194 +docker_swarm_cluster_cadvisor_github_url: "https://github.com/google/cadvisor/releases/download/v0.47.0/cadvisor-v0.47.0-linux-amd64" +docker_swarm_cluster_cadvisor_binary_path: /usr/local/bin/cadvisor + # Portainer docker_swarm_cluster_portainer_install: true docker_swarm_portainer_hostname: 'portainer-swarm.example.com' diff --git a/handlers/main.yml b/handlers/main.yml index 547b2f2..4429435 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,5 +1,9 @@ --- - name: Reload the HAPROXY configuration - shell: docker kill --signal USR2 $(docker container ls --filter name=haproxy --quiet) - ignore_errors: True - + ansible.builtin.shell: docker kill --signal USR2 $(docker container ls --filter name=haproxy --quiet) + ignore_errors: true + +- name: Restart cadvisor + ansible.builtin.service: + name: cadvisor + state: restarted diff --git a/tasks/cadvisor.yml b/tasks/cadvisor.yml new file mode 100644 index 0000000..b0609c0 --- /dev/null +++ b/tasks/cadvisor.yml @@ -0,0 +1,49 @@ +--- +- name: Manage the installation of cAdvisor deb package + when: docker_swarm_cluster_cadvisor_deb_pkg + tags: ['cadvisor', 'docker_cadvisor', 'docker_swarm', 'docker'] + block: + - name: Install the cadvisor package + ansible.builtin.apt: + pkg: cadvisor + state: present + cache_valid_time: 1800 + +- name: Manage the installation of cAdvisor Linux binary from GitHub + when: not docker_swarm_cluster_cadvisor_deb_pkg + tags: ['cadvisor', 'docker_cadvisor', 'docker_swarm', 'docker'] + block: + - name: Download the cAdvisor executable from GitHub + ansible.builtin.get_url: + url: "{{ docker_swarm_cluster_cadvisor_github_url }}" + dest: "{{ docker_swarm_cluster_cadvisor_binary_path }}" + owner: root + group: root + mode: 0755 + + - name: Install the cAdvisor systemd unit + ansible.builtin.template: + src: cadvisor.systemd.j2 + dest: /lib/systemd/system/cadvisor.service + owner: root + group: root + mode: 0644 + notify: Restart cadvisor + +- name: Manage the cAdvisor service + tags: ['cadvisor', 'docker_cadvisor', 'docker_swarm', 'docker'] + block: + - name: Install the cadvisor default + ansible.builtin.template: + src: cadvisor.default.j2 + dest: /etc/default/cadvisor + mode: 0600 + owner: root + group: root + notify: Restart cadvisor + + - name: Ensure that the cAdvisor service is up and running + ansible.builtin.service: + name: cadvisor + state: started + enabled: true diff --git a/tasks/main.yml b/tasks/main.yml index 58a386b..261b794 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,5 +1,10 @@ --- -- import_tasks: haproxy_conf.yml +- name: Import the HAPROXY tasks + ansible.builtin.import_tasks: haproxy_conf.yml when: docker_swarm_cluster_haproxy_install -- import_tasks: portainer.yml +- name: Import the portainer tasks + ansible.builtin.import_tasks: portainer.yml when: docker_swarm_cluster_portainer_install +- name: Import the cAdvisor tasks + ansible.builtin.import_tasks: cadvisor.yml + when: docker_swarm_cluster_cadvisor_install diff --git a/templates/cadvisor.default.j2 b/templates/cadvisor.default.j2 new file mode 100644 index 0000000..c374078 --- /dev/null +++ b/templates/cadvisor.default.j2 @@ -0,0 +1,44 @@ +# config options for cadvisor(1) +# + +# Docker endpoint to connect to +# Default: unix:///var/run/docker.sock +CADVISOR_DOCKER_ENDPOINT="{{ docker_swarm_cluster_cadvisor_docker_endpoint }}" + +# Port to listen on +# Default: 8080 +# kubernetes expects it on port 4194 +CADVISOR_PORT="{{ docker_swarm_cluster_cadvisor_port }}" + +# Storage driver +# Default: none/blank +# +# Available Options: +# - [none] +# - bigquery +# - influxdb +CADVISOR_STORAGE_DRIVER="" + +# Storage driver host +# Default: localhost:8086" +CADVISOR_STORAGE_DRIVER_HOST="localhost:8086" + +# Storage driver password +# Default: root +CADVISOR_STORAGE_DRIVER_PASSWORD="root" + +# Storage driver secure connection +# Default: false +CADVISOR_STORAGE_DRIVER_SECURE="false" + +# Storage driver user +# Default: root +CADVISOR_STORAGE_DRIVER_USER="root" + +# Log to stderr ("true" logs to journal on systemd +# and to "/var/log/cadvisor.log" on SysV) +# Default: false +CADVISOR_LOG_TO_STDERR="true" + +# Other options: +#DAEMON_ARGS="" diff --git a/templates/cadvisor.systemd.j2 b/templates/cadvisor.systemd.j2 new file mode 100644 index 0000000..55b664a --- /dev/null +++ b/templates/cadvisor.systemd.j2 @@ -0,0 +1,20 @@ +[Unit] +Description=cAdvisor +Documentation=man:cadvisor +Documentation=https://github.com/google/cadvisor + +[Service] +EnvironmentFile=/etc/default/cadvisor +ExecStart={{ docker_swarm_cluster_cadvisor_binary_path }} \ + --docker=${CADVISOR_DOCKER_ENDPOINT} \ + --port=${CADVISOR_PORT} \ + --storage_driver=${CADVISOR_STORAGE_DRIVER} \ + --storage_driver_host=${CADVISOR_STORAGE_DRIVER_HOST} \ + --storage_driver_password=${CADVISOR_STORAGE_DRIVER_PASSWORD} \ + --storage_driver_secure=${CADVISOR_STORAGE_DRIVER_SECURE} \ + --storage_driver_user=${CADVISOR_STORAGE_DRIVER_USER} \ + --logtostderr=${CADVISOR_LOG_TO_STDERR} \ + ${DAEMON_ARGS} + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/templates/portainer-agent-stack.yml.j2 b/templates/portainer-agent-stack.yml.j2 index 44aa05f..afc30b1 100644 --- a/templates/portainer-agent-stack.yml.j2 +++ b/templates/portainer-agent-stack.yml.j2 @@ -1,4 +1,4 @@ -version: '3.2' +version: '3.8' volumes: portainer_server_data: @@ -86,4 +86,3 @@ services: logging: driver: 'journald' {% endif %} -