Articolul de față își propune să arate cum începem să lucrăm cu Podman și cum ridicăm câteva containere. Pentru exemplificare, voi ridica un cluster de monitorizare format containere ale arhicunoscutelor aplicații Prometheus, Alertmanager, Node Exporter și Grafana.
Despre Prometheus am mai scris. Pe scurt, cu Prometheus putem vizualiza metrici, configura anumite reguli și, în cazul în care pragurile definite în regulile noastre sunt depășite, se trimit alerte către Alertmanager, o componentă care, configurată corect, gestionează alertele trimise de serverul Prometheus și le rutează către diferite sisteme de notificare (email, Slack, etc.). Grafana poate, prin intermediul dashboard-urilor, să vizualizeze datele din diferite surse (una din ele poate fi Prometheus); totodată, Grafana permite și definirea unor alerte.
După ce am instalat Podman, nu ne rămâne decât să ridicăm containerele aplicațiilor.
Deschiderea porturilor
În funcție de firewall-ul folosit, trebuie să deschidem următoarele porturi:
- 9090 (folosit de Prometheus)
- 9093 (folosit de Alertmanager)
- 9100 (folosit de Node Exporter pentru a expune metricile)
- 3000 (folosit de Grafana)
În distribuțiile din familia Ubuntu se folosește UFW - aici sunt reguli de configurare.
În distribuțiile din familia RedHat se folosește Firewalld - aici sunt reguli de configurare.
Pentru iptables se adaugă regulile:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 9090 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 9093 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 9100 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3000 -j ACCEPT
Se restartează serviciul iptables și se listează regulile încărcate:
systemctl restart iptables
iptables -S
Pentru început, vom face un nou director unde vom ține fișierele de configurare pentru fiecare aplicație în parte - de aici le vom încărca la lansarea containerului.
mkdir ~/files
cd files
ls
> alertmanager.yml alert.rules persistence-grafana prometheus.yml
În directorul de mai sus avem următoarele fișiere:
- prometheus.yml este fișierul de configurare pentru Prometheus - exemplu aici https://gitlab.com/Bobses/prometheus/-/blob/master/prometheus.yml
- alert.rules este fișierul cu reguli pentru Prometheus - exemplu aici https://gitlab.com/Bobses/prometheus/-/blob/master/alert.rules
- alertmanager.yml este fișierul de configurare pentru Alertmanager - exemplu aici https://gitlab.com/Bobses/prometheus/-/blob/master/alert.rules
- in directorul persistence-grafana își va asigura Grafana persistența (astfel încât să nu pierdem setările la pornirea unui nou container).
Ridicarea containerelor
Dacăa ați mai lucrat cu Docker, cu podman
e la fel de simplu să ridicăm și să gestionăm containere, iar opțiunile sunt asemănătoare:
- flagul -d (--detach) ridică containerul în background și-i afișează id-ul
- flagul --name atribuie un nume containerului
- flagul -p expune un port de pe host (sau un range de porturi) către un port al containerului (sau către un range de porturi)
- flagul -v (--volume) montează un volum într-un container (de exemplu, montăm un fișier de configurare ca volum în container)
- putem specifica diverse variabile cu flagul -e
- la final specificăm imaginea folosită
podman run -d --name prometheus-container -p 9090:9090 -v ~/files/prometheus.yml:/etc/prometheus/prometheus.yml -v ~/files/alert.rules:/etc/prometheus/alert.rules prom/prometheus
podman run -d --name alertmanager-container -p 9093:9093 -v ~/files/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager
podman run -d --name node-exporter-container --net="host" --pid="host" -v "/:/host:ro,rslave" quay.io/prometheus/node-exporter:latest --path.rootfs=/host
podman run -d --name grafana-container -p 3000:3000 -v ~/files/persistence-grafana:/var/lib/grafana -e "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource" grafana/grafana
Câteva comenzi utile
Listăm noile containere ridicate cu comanda podman ps
:
Listarea tuturor containerelor (inclusiv a celor Exited): podman ps -a
Afișarea configurației unui container se face cu comanda podman inspect container-id
.
Vizualizarea logurilor se face cu comanda podman logs
container-id
.
Obținerea ajutorului și câteva exemple:
podman --help
podman run --help
podman inspect --help
podman logs --help
podman generate --help
- etc.
Crearea serviciilor
Față de Docker, unde rulează un daemon în spate și are grijă de ridicarea containerelor la pornirea unui sistem, la Podman trebuie să procedăm în altă manieră. Tot documentația Podman ne ajută și ne oferă posbilitatea de a crea un servciu folosind un fișier systemd generat de comanda podman generate systemd
.
Vom instala servciile nou create sub userul care a creat containerul: generăm fișierul cu prima comandă, facem un director nou în subdirectorul .config din home-ul userului, copiem conținutul generat în fișierul respectiv și, la urmă, activăm servicul să pornească la boot:
podman generate systemd --restart-policy=always -t 1 prometheus-container
mkdir -p $HOME/.config/systemd/user
vi .config/systemd/user/prometheus-container.service
systemctl --user enable prometheus-container.service
podman generate systemd --restart-policy=always -t 1 alertmanager-container
vi .config/systemd/user/alertmanager-container.service
systemctl enable --user alertmanager-container.service
podman generate systemd --restart-policy=always -t 1 grafana-container
vi .config/systemd/user/grafana-container.service
systemctl enable --user grafana-container.service
podman generate systemd --restart-policy=always -t 1 node-exporter-container
vi .config/systemd/user/node-exporter-container.service
systemctl enable --user node-exporter-container.service
Pentru a vedea conținutul unui fișier generat ca mai sus, se dă comanda:
systemctl cat nume_serviciu --user
Să nu uitați, dacă ștergeți și recreați unul din aceste containere, e musai fie să editați fișierul de serviciu cu noul container-id, fie să generați un fișier nou.
Vizualizare aplicații din containere
Pentru a vedea aplicațiile proaspăt instalate în containere, scrieți în browser:
- Prometheus: http://localhost:9090
- Alertmanager: http://localhost:9093
- Grafana (logare inițială cu admin/admin, apoi vi se cere să schimbați parola): http://localhost:3000
- Node Exporter: http://localhost:9100
În imaginea de mai jos este un exemplu de dashboard Grafana care afișează date din sistemele monitorizate de Prometheus:
Asta e tot pentru acest articol. În articolul viitor voi arăta cum se face configurarea Alertmanagerului astfel încât să trimită emailuri folosind fie Gmail, fie SendGrid.
[…] prin ce metodă am instalat Prometheus și Alertmanager (servicii de sine stătătoare, containere sau ca operator într-un cluster Kubernetes), trebuie să configurăm serverul SMTP din Prometheus […]