Overview
What is warewulf4
A simple, scalable, stateless and very flexible operating
system provisioning system
Features
I Lightweight: nodes are stateless
I Agnostic: node images are containers
I Flexible: go templates for configs
I Open Source (BSD-3-Clause)
History
Warewulf 3
I successful and widely used (openHPC)
I overhead due to different storage back ends
I implemented in perl
I perl versions may differ
I transported its own busybox
I licensing issues
I proprietary image creation
I hard to maintain for every distro
Who is developing Warewulf 4
I HPCng
I Apptainer (aka singularity)
I CTRIQ/CIQ
I CentOS/Rocky
Warewulf 4.3.0 core components
Mandatory
I warewulfd serves containers/overlays
I tftp starts up iPXE
I dhcpd needed for basic networking
I central dhcpd is also possible
I wwctl command line tool for management
I edit of nodes.conf possible (plain yaml)
Optional
I ssh-key distribution
I nfs-server on warewulf4 host
OS Container
Definition
A container is the base operation system for a node. It is completely
independent from the operating system of the server running the
warewulf 4 services.
The boot image is derived from this container.
How to get a container
I download from any container registry
registry.opensuse.org/science/warewulf
I use docker,buildah. . . to build container
I use apptainer. . . to build chroot
How to modify a container
I only package level modifications recommended
I shell into container and so stuff
wwctl container shell CONTAINERNAME
Overlay
Definition
An overlay is a individual cpio archive for every node. This archive is
simply extracted on the node. Node specific files are generated with go
templates. Templates must have the .ww suffix.
SystemOverlay
I available at boot time
I not updated at runtime
I should e.g. contain network configuration
RuntimeOverlay
I updated at regular intervals
I pulled by nodes with wwclient
I should contain e.g. munge key, slurm.conf
Overlay
HostOverlay
I overlays on the host running warewulf are possible
I manages /etc/exports, /etc/hosts, /etc/dhcpd.conf
Template Example: issue.ww
Warewulf Node: {{. Id}}
Container: {{. Container }}
Kernel: {{. Kernel.Version }}
Kernelargs : {{. Kernel.Args }}
Network:
{{- range $devname , $netdev := .NetDevs }}
{{ $devname }}: {{ $netdev.Device }}
{{ $devname }}: {{ $netdev.IpCIDR }}
{{if $netdev.Ipaddr6 }} {{ $devname }}: {{ $netdev.Ipaddr6 }}{{ end -}}
{{if $netdev.Hwaddr }} {{ $devname }}: {{ $netdev.Hwaddr }}{{ end -}}
{{end}}
Warewulf configuration
Data model
Warewulf has an abstract data model for nodes and collection of nodes
called profiles. Overlays, Kernel and Containers are only uncompressed
chroots under /var/lib/warewulf/[overlays|chroots].
node/profile configuration options
I container
I SystemOverlays and RuntimeOverlays
I kernel, kernel options (optional)
I network device configuration
I IPMI configuration
I arbitrary key value pairs
Warewulf configuration
Data inheritance
For every node data item its value is determined in following way:
I take node specific value, if set
I take profile specific value, if no node specific value set
I take default value, if no node/profile specific value set
Example fort KernelArgs
I default: quiet crashkernel=no vga=791
I profile: vga=791
I node: noacpi
Node boot process
PXE and UEFI boot process
I node get iPXE binary per tftp (shipped with warewulf)
I iPXE boots, gets dynamic IP address
I iPXE fetches kernel per http from warewulfd
I iPXE fetches kmods, container, SystemOverlay builds magic single
image
I iPXE boots kernel with magic single image
I kernel calls init, provided in the SystemOverlay
I SysV like init configures basic stuff like, IPMI
I SysV like init calls systemd/init of the container
I container OS boots
I wwclient downloads RuntimeOverlay
Future
Planned features
I gRPC interface
I JSON/Rest interface
Possible features
I simple disk management
I persistent node install
I load balancing
Contribution
I https://github.com/hpcng/warewulf
I HPCng slack channel
I (Bi)weekly meeting Wednesday evening 21:00 (CET)