feat(docker): Added cadvisor on all hosts, added docker metric exporter, added docker compose restart as handler, moved repetetive directory/permission creation into loops, moved repetetive values into variables, cleanup compose template for better empty lines
Signed-off-by: Tuan-Dat Tran <tuan-dat.tran@tudattr.dev>
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
# Essential
|
# Essential
|
||||||
#
|
#
|
||||||
|
|
||||||
|
root: root
|
||||||
user: tudattr
|
user: tudattr
|
||||||
timezone: Europe/Berlin
|
timezone: Europe/Berlin
|
||||||
puid: "1000"
|
puid: "1000"
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
docker:
|
docker:
|
||||||
url: "https://download.docker.com/linux"
|
url: "https://download.docker.com/linux"
|
||||||
apt_release_channel: "stable"
|
apt_release_channel: "stable"
|
||||||
dirs: "/opt/docker"
|
directories:
|
||||||
|
opt: "/opt/docker/"
|
||||||
|
compose: "/opt/docker/compose"
|
||||||
|
|
||||||
caddy:
|
caddy:
|
||||||
admin_email: me+acme@tudattr.dev
|
admin_email: me+acme@tudattr.dev
|
||||||
@@ -443,6 +445,47 @@ services:
|
|||||||
- TZ=Europe/Berlin
|
- TZ=Europe/Berlin
|
||||||
- QBT_EULA="accept"
|
- QBT_EULA="accept"
|
||||||
- QBT_WEBUI_PORT="8082"
|
- QBT_WEBUI_PORT="8082"
|
||||||
|
- name: cadvisor
|
||||||
|
vm:
|
||||||
|
- docker-host00
|
||||||
|
- docker-host01
|
||||||
|
- docker-host02
|
||||||
|
container_name: cadvisor
|
||||||
|
image: gcr.io/cadvisor/cadvisor:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- name: ""
|
||||||
|
internal: 8080
|
||||||
|
external: 8081
|
||||||
|
volumes:
|
||||||
|
- name: "Root"
|
||||||
|
internal: /rootfs:ro
|
||||||
|
external: /
|
||||||
|
- name: "Run"
|
||||||
|
internal: /var/run:rw
|
||||||
|
external: /var/run
|
||||||
|
- name: "System"
|
||||||
|
internal: /sys:ro
|
||||||
|
external: /sys
|
||||||
|
- name: "Docker"
|
||||||
|
internal: /var/lib/docker:ro
|
||||||
|
external: /var/lib/docker
|
||||||
|
# - name: template
|
||||||
|
# vm:
|
||||||
|
# -
|
||||||
|
# container_name:
|
||||||
|
# image:
|
||||||
|
# restart:
|
||||||
|
# volumes:
|
||||||
|
# - name:
|
||||||
|
# internal:
|
||||||
|
# external:
|
||||||
|
# ports:
|
||||||
|
# - name:
|
||||||
|
# internal:
|
||||||
|
# external:
|
||||||
|
# environment:
|
||||||
|
# -
|
||||||
# - name: calibre
|
# - name: calibre
|
||||||
# vm:
|
# vm:
|
||||||
# - docker-host00
|
# - docker-host00
|
||||||
|
|||||||
3
roles/docker_host/files/daemon.json
Normal file
3
roles/docker_host/files/daemon.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"metrics-addr": "0.0.0.0:9323"
|
||||||
|
}
|
||||||
@@ -4,4 +4,8 @@
|
|||||||
name: docker
|
name: docker
|
||||||
state: restarted
|
state: restarted
|
||||||
become: true
|
become: true
|
||||||
# TODO also do docker compose restart
|
|
||||||
|
- name: Restart compose
|
||||||
|
community.docker.docker_compose_v2:
|
||||||
|
project_src: "{{ docker.directories.compose }}"
|
||||||
|
state: restarted
|
||||||
|
|||||||
@@ -2,11 +2,12 @@
|
|||||||
- name: Copy docker compose file to target
|
- name: Copy docker compose file to target
|
||||||
ansible.builtin.template:
|
ansible.builtin.template:
|
||||||
src: "templates/compose.yaml.j2"
|
src: "templates/compose.yaml.j2"
|
||||||
dest: "/opt/docker/compose/compose.yaml"
|
dest: "{{ docker.directories.compose }}/compose.yaml"
|
||||||
owner: "{{ user }}"
|
owner: "{{ user }}"
|
||||||
group: "{{ user }}"
|
group: "{{ user }}"
|
||||||
mode: "644"
|
mode: "644"
|
||||||
backup: true
|
backup: true
|
||||||
notify:
|
notify:
|
||||||
- Restart docker
|
- Restart docker
|
||||||
|
- Restart compose
|
||||||
become: true
|
become: true
|
||||||
|
|||||||
@@ -1,106 +1,40 @@
|
|||||||
---
|
---
|
||||||
- name: Create /media/docker directory
|
- name: Create directories
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: /media/docker
|
path: "{{ item }}"
|
||||||
state: directory
|
state: directory
|
||||||
mode: "0755"
|
mode: "0755"
|
||||||
|
loop:
|
||||||
|
- /media/docker
|
||||||
|
- /media/series
|
||||||
|
- /media/movies
|
||||||
|
- /media/songs
|
||||||
|
- "{{ docker.directories.opt }}"
|
||||||
|
- "{{ docker.directories.compose }}"
|
||||||
|
- /opt/local
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
- name: Create /media/series directory
|
- name: Set ownership to {{ user }}
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: /media/series
|
path: "{{ item }}"
|
||||||
state: directory
|
owner: "{{ user }}"
|
||||||
mode: "0755"
|
group: "{{ user }}"
|
||||||
|
loop:
|
||||||
|
- "{{ docker.directories.opt }}"
|
||||||
|
- /opt/local
|
||||||
|
- /media
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
- name: Create /media/movies directory
|
- name: Ensure NFS mounts
|
||||||
ansible.builtin.file:
|
|
||||||
path: /media/movies
|
|
||||||
state: directory
|
|
||||||
mode: "0755"
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Create /media/songs directory
|
|
||||||
ansible.builtin.file:
|
|
||||||
path: /media/songs
|
|
||||||
state: directory
|
|
||||||
mode: "0755"
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Create /opt/docker directory
|
|
||||||
ansible.builtin.file:
|
|
||||||
path: /opt/docker
|
|
||||||
state: directory
|
|
||||||
mode: "0755"
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Create /opt/docker/compose directory
|
|
||||||
ansible.builtin.file:
|
|
||||||
path: /opt/docker/compose
|
|
||||||
state: directory
|
|
||||||
mode: "0755"
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Create /opt/local directory
|
|
||||||
ansible.builtin.file:
|
|
||||||
path: /opt/local
|
|
||||||
state: directory
|
|
||||||
mode: "0755"
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Set ownership of /opt/local to tudattr
|
|
||||||
ansible.builtin.file:
|
|
||||||
path: /opt/local
|
|
||||||
owner: tudattr
|
|
||||||
group: tudattr
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Set ownership of /opt/docker to tudattr
|
|
||||||
ansible.builtin.file:
|
|
||||||
path: /opt/docker
|
|
||||||
owner: tudattr
|
|
||||||
group: tudattr
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Set ownership of /media directories to tudattr
|
|
||||||
ansible.builtin.file:
|
|
||||||
path: /media/
|
|
||||||
owner: tudattr
|
|
||||||
group: tudattr
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Ensure /media/docker is mounted via NFS
|
|
||||||
ansible.posix.mount:
|
ansible.posix.mount:
|
||||||
path: /media/docker
|
path: "{{ item }}"
|
||||||
src: 192.168.20.12:/media/docker
|
src: "192.168.20.12:{{ item }}"
|
||||||
fstype: nfs
|
|
||||||
opts: defaults,nolock
|
|
||||||
state: mounted
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Ensure /media/series is mounted via NFS
|
|
||||||
ansible.posix.mount:
|
|
||||||
path: /media/series
|
|
||||||
src: 192.168.20.12:/media/series
|
|
||||||
fstype: nfs
|
|
||||||
opts: defaults,nolock
|
|
||||||
state: mounted
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Ensure /media/movies is mounted via NFS
|
|
||||||
ansible.posix.mount:
|
|
||||||
path: /media/movies
|
|
||||||
src: 192.168.20.12:/media/movies
|
|
||||||
fstype: nfs
|
|
||||||
opts: defaults,nolock
|
|
||||||
state: mounted
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Ensure /media/songs is mounted via NFS
|
|
||||||
ansible.posix.mount:
|
|
||||||
path: /media/songs
|
|
||||||
src: 192.168.20.12:/media/songs
|
|
||||||
fstype: nfs
|
fstype: nfs
|
||||||
opts: defaults,nolock
|
opts: defaults,nolock
|
||||||
state: mounted
|
state: mounted
|
||||||
|
loop:
|
||||||
|
- /media/docker
|
||||||
|
- /media/series
|
||||||
|
- /media/movies
|
||||||
|
- /media/songs
|
||||||
become: true
|
become: true
|
||||||
|
|||||||
11
roles/docker_host/tasks/export.yml
Normal file
11
roles/docker_host/tasks/export.yml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
- name: Copy exporter config to host
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: files/daemon.json
|
||||||
|
dest: /etc/docker/daemon.json
|
||||||
|
owner: "{{ root }}"
|
||||||
|
group: "{{ root }}"
|
||||||
|
mode: "0644"
|
||||||
|
notify:
|
||||||
|
- Restart docker
|
||||||
|
become: true
|
||||||
@@ -13,3 +13,6 @@
|
|||||||
|
|
||||||
- name: Deploy docker compose
|
- name: Deploy docker compose
|
||||||
ansible.builtin.include_tasks: deploy_compose.yml
|
ansible.builtin.include_tasks: deploy_compose.yml
|
||||||
|
|
||||||
|
- name: Publish metrics
|
||||||
|
ansible.builtin.include_tasks: export.yml
|
||||||
|
|||||||
@@ -56,8 +56,8 @@ services:
|
|||||||
- {{device.external}}:{{device.internal}}
|
- {{device.external}}:{{device.internal}}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if service.name == 'paperless' %}
|
{% if service.name == 'paperless' %}
|
||||||
|
|
||||||
{{service.name}}-broker:
|
{{service.name}}-broker:
|
||||||
container_name: paperless-broker
|
container_name: paperless-broker
|
||||||
image: docker.io/library/redis:7
|
image: docker.io/library/redis:7
|
||||||
@@ -79,13 +79,10 @@ services:
|
|||||||
POSTGRES_DB: paperless
|
POSTGRES_DB: paperless
|
||||||
POSTGRES_USER: paperless
|
POSTGRES_USER: paperless
|
||||||
POSTGRES_PASSWORD: 5fnhn%u2YWY3paNvMAjdoufYPQ2Hf3Yi
|
POSTGRES_PASSWORD: 5fnhn%u2YWY3paNvMAjdoufYPQ2Hf3Yi
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
net:
|
net:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
|
|||||||
Reference in New Issue
Block a user