talk-linux-native-container.../podmantalk.md

175 lines
3 KiB
Markdown
Raw Permalink Normal View History

2025-01-30 15:18:16 +01:00
---
marp: true
paginate: true
author: Max
theme: gaia
footer: 'Linux native Container mit Podman und systemd | Max | Kassel Code Meetup 29.01.2025'
---
<!-- _paginate: false -->
<!-- _footer: "" -->
<!-- _class: lead -->
# Linux native Container mit Podman und systemd
<!--
- Kurze Vorstellung.
- init systeme können wie Editors ein sehr emotional schweres Thema sein. Bitte Diskussionen nach dem Talk.
- Geht auchähnlich mit anderen toolings wie Guix, heute aber Fokus auf systemd.
-->
---
# Was ist Podman
* Container management tooling
* Daemonless
* Rootless möglich
* Docker API kompatibel
<!--
- Weitere Features wie: integrierte Autoupdates, Pods und auch Desktop Anwendung
- Entwickelt von Redhat
- Keine "Enterprise Edition"
- Nutzt crun als runtime
-->
---
# Was ist systemd
* Primär init system
* Resourcen werden in Unit files definiert
* Verschiedene Alternative für Systemtools
- journal
- resolved
- timesyncd
<!--
- Unit files beschreiben unter anderem:
- service
- socket
- timer
- etc
- Vereinheitlicht viel wie z.B. das log handling.
- Bei den meisten Linux Distributionen das default init system
- Debian
- RHEL, Fedora
- SUSE
- Arch
- etc
-->
---
# Was sind systemd generators
* Executables welche Units rendern
* Werden beim Start und `daemon-reload` ausgeführt
<!--
- Units werden bei jedem Aufruf neu generiert
-->
---
# Quadlet
* systemd generator von Podman
* Wandelt Podman eigene Units in systemd konforme
* Kann auch Kubernetes Manifeste lesen
* Schaut in verschiedenen Pfaden nach Dateien
- /etc/containers/systemd/
- ~/.config/containers/systemd/
- ...
<!--
- Eingeführt in Podman 4.4
- In Debian Stable aktuell noch 4.3, also kein Quadlet support
-->
---
`test.container`
```
[Unit]
Description=A minimal container
[Container]
Image=quay.io/centos/centos:latest
Exec=sleep 60
Volume=test.volume:/data
[Service]
TimeoutStartSec=900
[Install]
WantedBy=multi-user.target default.target
```
<!--
- Container Section bietet fast alle Möglichkeiten, welche auch die CLI als Options bietet
- oder halt compose etc
- Timeout wichtig, damit genug Zeit um image zu pullen
- Kann einen schnell mal ins dockerhub ratelimit werfen, wenn z.B. Architektur nicht vorhanden.
-->
---
`test.volume`
```
[Volume]
User=root
Group=root
Label=org.test.Key=value
```
<!--
- Kann genauso wie bei Networks eine leere Datei sein
-->
---
`test.network`
```
[Network]
Subnet=172.16.0.0/24
Gateway=172.16.0.1
IPRange=172.16.0.0/28
Label=org.test.Key=value
```
<!--
- Kann genauso wie bei Volumes eine leere Datei sein
-->
---
# Demonstration
---
# Fazit / Warum
* Klare Struktur
* Sehr nah am System und den restlichen Services
* Autoupdates
<!--
- Klare Struktur heisst, die Dateien haben klar vordefinierte Verzeichnisse, nicht wie bei docker compose wilder Westen
- Verwaltung per systemctl und logs per journalctl
- In kombination mit MicroOS sind autoupdates sehr nice
- Man kann sich mit MicroOS und Podman, "stateless appliance" basteln
-->
---
# Vielen Dank für die Aufmerksamkeit!
- Fragen
---