Warewulf: HPC Cluster Management and Provisioning Platform webinar poster

Warewulf: HPC Cluster Management and Provisioning Platform

Watch Now

An introduction to Warewulf: an open-source HPC cluster management and provisioning platform by Gregory Kurtzer

Join us as we dig deep into HPC cluster management and provisioning with CIQ's Webinars and podcast series to help you get the answers you need and point you in the right direction.

Webinar Synopsis:

Speakers:


Note: This transcript was created using speech recognition software. While it has been reviewed by human transcribers, it may contain errors.

Full Webinar Transcript:

Zane Hamilton:

Good morning. Good afternoon. And good evening. Thank you for joining. I am Zane Hamilton with the solutions architecture team for CIQ. For those of you who have been with us before we appreciate you coming back. For those of you that are new, welcome. We would ask that you like and subscribe so that you can stay up to date with CIQ. Today we are joined by Gregory Kurtzer, the founder of Rocky Linux, CentOS, and many other open source projects, to talk about provisioning.

What is Provisioning? [00:41]

Thank you for coming, Greg. Today we wanted to talk about provisioning. Provisioning can mean a lot of different things in this industry depending on your background. Would you give us an idea of what provisioning is from your point of view?

Gregory Kurtzer:

Great question. My background is in high performance computing. I spent about 20 years of my career working in high performance computing. When I think of provisioning, I think of provisioning the HPC resource. Typically we're talking about provisioning and management of the operating system. To me, provisioning is the fastest, most effective, and flexible way to manage anything from small clusters of nodes to large clusters with thousands of nodes in an operating system. Provisioning is all about the performance compute cluster and management of those nodes.

Provisioning From an HPC Perspective [01:53]

Zane Hamilton:

Excellent. From an HPC perspective, does provisioning involve more than server provisioning? Does it also involve user provisioning, network provisioning, and the entire stack?

Gregory Kurtzer:

Yeah we're starting from bare-metal. For example, when somebody buys a high performance computing cluster they roll in racks of compute nodes. In some cases it could be thousands of compute nodes. They roll it into the data center and will provision everything from that bare-metal up the stack. Starting with bare-metal you have to build your operating system and get your operating system to the node in an efficient and scalable manner.  From there you also have to notice if there are any custom configurations on particular nodes. Do those nodes include network configurations that include service configurations? Does that include user configurations? Some of these can be provisioned or managed after the node has been provisioned. Some of them  have to be provisioned or managed before the system runs sbin/init.

Sbin/init is the parent of all processes with PID1. In some cases we have to do customizations to each node that's being provisioned before we even start PID 1. So there are some tricks that we have to be thinking about in terms of provisioning.  I usually think of provisioning as the bare-metal base operating system. That base operating system includes a number of different facets so that the cluster can function. It includes networks, service configuration, and user configurations.

Configuration [03:36]

Zane Hamilton:

You actually use an interesting word there. You're saying configuration.  Whenever you're talking about configuration management and provisioning, are they different? Are they the same thing? Are they paired together?

Gregory Kurtzer:

That has come up a bunch of times in high performance computing especially in the context of provisioning an operating system. Warewulf and other cluster provisioning systems will typically do some basic rudimentary configuration management. This rudimentary configuration management occurs in many cases before the operating system has booted. For example, when you are making a network configuration, you will want to have your network configuration in place before you call sbin/init. Sbin/init will then go through systemd and start all services and devices. You need to have that network configuration already there. It is the same thing with things like fstab. You need to have your file systems already configured. You need to have service configurations configured before systemd runs those services.

There is a side to configuration management that has to be lightweight and engraved into the provisioning system so all of the nodes are getting appropriately configured. Whether that be something as simple as a network configuration and a host name configuration or something as complicated as a whole different operating system. You have to be able to manage that at the provisioning layer. Warewulf does all of this for you, but it does not replace a more typical fully fledged configuration management solution. If you need something that's going to do more complicated configuration management tasks, provision your base system with Warewulf. Do your base configuration with Warewulf.  Once that node comes up, run your configuration management services. Then you can take over your  CM platform, or whatever you're choosing.

Stateful or Stateless [05:51]

Zane Hamilton:

Excellent. Thank you. Something that I hear often is either “Stateful or stateless?”. So when we start talking about Warewulf, how does that come into play?

Gregory Kurtzer:

This question harkens back to the foundation of Warewulf, its basic tenets, and what has differentiated Warewulf since its inception. It was created around 2001. At that time high performance computing systems were starting to bridge over into Linux and Beowulf. Also during this time we were trying to figure out how to manage operating systems with thousands of nodes. To put this into perspective, if a system administrator is high load and complicated it may be able to have over 100 separate servers. If the systems are really good or very similar you might be able to get hundreds. An HPC system could have thousands, so we needed to come up with a better way of scaling the system. There are various ways to manage scaling the system. One was an important toolkit called OSCAR that used a provisioning tool called system imager. System imager allowed you to make a template of your operating system. Then it would blast that template out to all the nodes when you booted and it would write it out to the hard drives. From that point on, all of your nodes are provisioned. Then you manage them as a cluster of workstations. There are other tools that leverage things such as Kickstart which uses Anaconda, or the red hat installer mechanism for automating deployments of resources.

There is the Rocks Cluster System (not to be confused with the similarly named Rocky Linux). Rocks uses a turnkey system that uses Kickstart to provision out all the nodes. Warewulf approached this from a completely different perspective. Instead of facilitating the installation of a massive amount of compute nodes, let's completely remove the necessity to install any compute nodes and boot directly into a runtime operating system. That shifts the paradigm, right? Our model dumped a runtime operating system on the nodes everytime they booted. We're never doing an install. Then it runs directly from being booted. It runs like a live OS or a live CD every single time.

When Warewulf boots a node that node boots. It gets the operating system bite for bite, as it was intended by that node. The same thing occurs for all of the nodes above and below. It makes it very scalable and easy to maintain. When we talk about stateless in high performance computing provisioning, we are really saying that the operating system is not written in a persistent way to the storage. This means that you could reboot that node at any given point. As you reboot that node, it's always getting a fresh version of the operating system.  Stateless is commonly confused with diskless nodes. Diskless nodes are run stateless. If you have a disk full node then you can choose to either run it stateless or stateful.

Do you want to write that operating system to memory? Do you want to run it directly out of system memory or do you  want to run that operating system off of that spinning disc? There's a lot of different kinds of options in terms of how you can choose to provision that resource and that operating system to that node. The thing that has differentiated Warewulf over the years is the fact that it has focused on stateless. There were other systems out there that were focusing on stateful  such as Rocks and Oscar, but Warewulf really focused on stateless operating system management. There are a lot of benefits in doing that when you're dealing with a large system at scale.

SegFault Story [10:58]

A story that I like to tell is, we had a compute node in a very large cluster. We had one compute node that would always segfault on one application. As we would run this application across all the nodes, all the nodes ran it perfectly except for one. This node would always segfault.  When you see a seg fault you are usually going to  assume that there's something weird going on with the software stack or or something software related. We were using Warewulf and I knew for a fact that the nodes above and the nodes below were running perfectly. It was only this one node that was having a problem.

We knew it was a hardware issue. I packed up this node and I sent it over to the hardware vendor and they said, “what's wrong with it?” I said, “I don't know, it's  seg faulting the software”. They responded, “yeah, that's the hardware. You sure?” I said, “Yeah. I'm pretty sure it's the hardware.” They looked through it and they didn't see anything wrong with it. They wanted to send it back and I said “nope, nope, there's something wrong with it.” Finally, they get around to checking the power supply under load. It turned out that the power supply under load was not providing enough juice for the motherboard in the system. This shortage of power was interpreted by the kernel as a seg fault and not as a hardware failure.

They put a new power supply in the system and it ran perfectly from that point on. It changed the paradigm in terms of how we maintain and how we think about maintaining these large systems. Especially when you consider meantime between failure is actually not that bad. Unless you're looking at a thousand plus different different nodes. Then your meantime between failures is more often. So how do you manage things like this? How do you mitigate that? With a stateless operating system provisioning system, you can take out that node, put a new node in, change the configuration to say: the hardware address of this system is now changed. Turn it on. It has now completely assumed all of the responsibilities and roles of the previous node that was there. It was very easy to deal with. 

Zane Hamilton:

This sounds a lot like a popular topic a lot of people are talking about. This sounds a lot like containerization. How is this related to containerization?

Gregory Kurtzer:

So that's a great question. When Warewulf was first conceived, similarly to Oscar using system image, it had the notion of a golden image. It was this base template image of what you're using the template for provisioning out all of your compute resources and all of your compute nodes. In Warewulf we did it a little bit differently. We had a directory called a Ute directory.  It was a Ute directory which allowed you to have another root file system in a directory location. Warewulf leveraged that as a template to make the bootable operating system for all of the compute notes. We didn't know it at the time, but what we were actually using was basically a container.

It was very similar to root a container that was essentially what we were using. We called it something different. We called it the virtual node file system and we managed this virtual node file system using tools that were very similar to containers today. One of the big switches that we made with Warewulf V4 is that we embraced the container ecosystem directly. Instead of having a separate version of this that we were using as a VFS, we said “let's just start using containers.” This has had the effect that all existing tooling people are using to build, secure, and validate containers can now be leveraged in Warewulf. 

One of the biggest changes that we made with Warewulf V4 is now it is an OCI compliant provisioner. This means that we can use any of your Docker recipes or  files. You can also use Singularity and Apptainer. You can create your container. You point Warewulf at wherever that container exists, whether it's in an OCI registry, whether that's on your local file system, or in the local Daemon running.  You say, “I just want to import that into Warewulf.” Once you've imported that into Warewulf, you can say, “I want these thousand nodes you have to boot on this container.” What Warewulf does is it actually not only blasts the operating system out. It is  actually blasting a container out to all of the compute nodes. You're running this container on bare-metal. As a result of it, we get to leverage all of the existing tools and capabilities that people probably already have today in regards to how they are managing their containers.  All that can be directly imported into Warewulf so you can provision out those containers.

How Was Warewulf Started? [16:48]

Zane Hamilton:

That's awesome. I know we already talked about this today, but I think a lot of people will be interested in how Warefulf came into existence. How did you decide this product was the best way to solve problems?

Gregory Kurtzer:

My background is actually in biochemistry. I decided to make the leap into Linux and open source as I was trying to solve computational problems for biochemistry. I got so excited over being able to do this in open source.I was so enamored with what we've been able to do in Linux and open source that it pivoted my whole career. I ended up going through some startups eventually landing at Berkeley lab at the department of energy. I was a joint appointment to UC Berkeley. I also did projects for UCOP. Around the year 2000, when I was first starting we went from scientific computing to HPC and Linux cluster computing, 

One of my first tasks when I joined Berkeley lab was to start building up some big HPC clusters.During this time, as soon as I walked in the door I was tasked with an existing load of projects. I was completely taxed out. I was at one hundred percent utilization, if not more. They said “we’re going to add some big clusters to the mix and we are tasking you with their maintenance.” I thought that there has to be some way to help me with this becauseI am not going to physically install a hundred computers and then never sleep. As a government employee, I was already overworked. So I was trying to figure out the best way to manage, install, and maintain these systems over time.I was looking at different toolkits and asking myself, “what are people using?” None of them really spoke to me in terms of the way I wanted to manage this. I decided to develop a prototype. It was very similar to many of the things that I've developed over my career. It was so close to what I needed, but it was completely wrong at the same time. Singularity started the same way. Singularity version one started off very similar to Ubuntu Snaps then ended up morphing into Singularity and Apptainer as we know it today.

I previously worked at an organization called Linuxcare. We were very well known for creating these little bootable business cards that you can put into a system. It was a little rescue CD and I left there thinking all of the world's problems could be solved with a little bootable business card. If everybody carried these around, you can have everything you ever wanted computing wise. I started using Warewulf by creating ISO images for all the compute nodes. They were stateless. The main difference is I wasn’t using the network to transmit them. In the year 2000, I went to Linux world and presented this to the people there.

The feedback I received went as follows, “We really like the management paradigm of what you’re doing, but good God, what are you thinking with these ISOs? That is just such a horrible idea.” Also present at the conference were the people responsible for Etherboot. They advised me to go over to their booth and talk to them. So I went over and spoke with them. I learned everything I could learn about Etherboot in a few days. It took me four days to port Warewulf to  be able to use Etherboot. Etherboot was a little firmware that you can either flash to your network card or you can boot it onto a floppy that had this piece of firmware on there. It sets your network card as a bootable device by loading an Option ROM into BIOS. Then the network card would actually do pixie booting. In actuality it isn’t pixie because that didn’t exist at the time, but it was very similar. That was  when Warewulf really then took off. Once I got that built up and integrated it seemed like organizations everywhere started to adopt Warewulf and move to super computing.

Demo [22:02]

Zane Hamilton:

That's awesome. I'm not going to say that I've never used a Linux CD because I have. I had to use one to rescue some stuff.  Can you show us what you prepared for us today?

Gregory Kurtzer:

 I put together some slides to show you guys that, as a company, we do more than just Warewulf. If you’re interested in these things let us know. Warewulf is a big thing that we're going to be talking about. The name Warewulf originated as a software implementation of Beowulf. That is why Warewulf is spelled wonky.  In fact it doesn’t feel right for me to spell Warewulf as the monster-human-dog thing. It just doesn’t feel right to me.

Warewulf is a software implementation of Beowulf. Beowulf is a specification for how to build a cluster using commodity parts, Linux, and open source. It's an architecture. This architecture is  roughly drafted as you see below. You got your user workstations and users SSH across the network. They get into a control system that may have a file system attached to it directly and it's sharing it out. This could also be some sort of network attached storage and it's sharing it out. Then you have a switch. You've got a private network where all of your compute nodes reside and these compute nodes may actually even be on another network that may be a high performance data network such as InfiniBand. 

Beowulf and very early versions of Warewulf were designed to solve this.  As the system got more complex we added more features.  We started adding to it in ways that users would be SSHing in. We would direct them through a reverse NAT in our firewall to land on our interactive nodes. The compute resources are in typical groups now. They are in groups because you may have different vintages. You may have different people that own different sections of them, but you have these different groups of compute nodes. You may have separate networks dedicated to each one of these groups. Warewulf, provisioning, and scheduling are usually done in some sort of redundant resource.

Typically you will have your shared storage like a home directory storage in a parallel scratch storage. That's very efficient. Warewulf needs to be looking at this not only as one flat system, but multiple flat systems. Warewulf was designed around the idea of maintaining not just simple flat systems, but also maintaining systems that have additional depth and complexity. When we built these systems at Berkeley, Berkeley lab, as well as UC Berkeley there's no state in the entire system except for the Warewulf master. So even the interactive node ran stateless. The entire architecture was stateless.

This meant that any system could blow up and we would replace it without losing anything. There was no context that was ever lost. This was how we were thinking about building systems. This is kind of how Warewulf is envisioned today. You're going to see in just a moment how you can have node configurations and then node profile configurations that are completely cascading. It really facilitates anything from a more simple kind of turnkey model going all the way up to something that will have a lot more need for flexibility. I've already set up Warewulf and built a node on this. Right now it's a virtual node so we can hack around at this a little bit and take a look. I installed it to usr/local because I didn't install it via package and usr/local is what I do. It's a usr/local and inside of etc/warewulf, you'll see you have got a few files. And if I take a look at nodes.conf, you'll see two major sections. This is YAML and it has two major sections: node profiles and nodes. Nodes are pretty easy to imagine. This is a single node. This is the configuration for a single node. We've got some information in here that is specific for this node. If you have hundreds of nodes, you may want to consolidate some of that information and configurations to profiles. Every node by default gets a profile called - default. That means you can add your configurations to the default profile.

For example, in this default profile, we have a container name which is Rocky-8t and we have a kernel version. I will show you  how I got these into the system. What I end up doing is because node zero is part of this default profile and this profile has these values.  Node zero has those values and I can supersede those. I can have multiple profiles that supersede other configurations and it's extraordinarily flexible. You can see in terms of network devices, we have a default network. What you can see is I have the net mask being kind of globally defined, but I have the IP address and the Mac address being defined specifically on just this one node. I don't want to put my IP address or my hardware address, my Mac address in a profile because all nodes would have the same IP address and same network configuration.

So that I specifically put into this node profile. This encapsulates what an entire system architecture would look like. It gives us the ability to do very cool things at a high level. I'm showing you this nodes.conf. You can edit and work with this nodes.conf directly or you can use configuration management. Most people use the tool wwctl. Wwctl is the primary interface for Warewulf.You can do wwctl node list -a. This will show all attributes and see how many nodes are configured. You can see in node zero, we have all of these different fields or keys that are associated with this.

We can see all the different values for them and we can see where we get that configuration. If it says default under profile, that means we  got it from this default profile. For example, the container name and kernel version came from the default profile. That's exactly what you see here. This is listed here because there are some configurations that may have many node profiles. In some cases it's best to see where a particular value is coming from. If we may have a default profile on some nodes, I want to test a new kernel. I can have another profile for a new testing kernel and then add that profile right here. And we'll be able to have a certain group of nodes testing that newer kernel. It's extraordinarily featureful. I don't want to get too bogged down on this, but I really wanted to explain this because it is narrowly capable with regards to configuration of nodes. As we're looking at building systems that may be more complicated like this, it makes it very easy to group these nodes together with a profile and then define all the attributes for this profile. Warewulf gives you that functionality very easily.

What Is Required To Install The Warewulf controller? [30:40]

Zane Hamilton:

Real quick. Since you said you recently installed this, what is required to install the Warewulf controller?

What does it look for? How complicated is that?

Gregory Kurtzer:

Good question.Thank you for bringing me back to this. I meant to show this, but I forgot as I just wanted to jump into the tech. If you go to Warewulf.org you can click on docs. From docs, you can click on Quickstarts and we have an Enterprise Linux 8 (EL8) quick start. I will quickly run through this, so you can kind of see how this operates. The first section is installing it from git. You can install it from packages and releases. Basically you install the dependencies, you do a get clone, you do a make all, and then pseudo may install, super easy install. Excuse me, once you've done that, you run these commands to configure the firewall appropriately.

This is the warewulf.conf file. You're going to edit this and make the appropriate changes.You are probably going to need to edit your IP address and maybe your net mask. Then you probably also want to take a look at your range. Start and range end for the most part. Everything else is going to be pretty standard. Then what we're going to do is create some systemd to run this. You create the users Then start warewulf from systemd. At this point we now have Warewulf installed. What we're going to do is we're going to run a wwctl, configure all. What this will do is this will go through all of the system services that Warewulf needs for it to boot.

For example, it's going to need things like pixie. Pixie has certain requirements like DHCP and TFTP. It also needs NFS running via this configuration file. It'll set up DHCP. Make sure TFTP is running properly and drop the appropriate files in there. This will configure your underlying system. This has been tested and is known to work on Enterprise Linux variants, SUSE variants, Debian, and Ubuntu. We're going to start working with Warewulf directly. I showed you that I had a container called Rocky eight. This was how I got it. I just did wwctl container import.  I pointed it at a Docker registry. You can reach this from anywhere. This is public on Docker hub and you can then import your Rocky eight image.

We're going to name it Rocky eight and we're going to set it as default. Setting it as default  adds it to the default profile. Then what we're going to do is do the same thing with the Kernel. We're going to wwct kernel import and we're going to give it our current version name of the kernel we're running. We're going to set that as default. This is going to take a snapshot from your host. You can get the kernel from a variety of other locations. Take a look at the help output for kernel import. This will in its simplest form, take the kernel running from your control server. If you're running GPUs or if you're running InfiniBand make sure those drivers are currently installed on your host kernel or whatever kernel you're importing from. Warewulf will automatically pull all of those kernel drivers and support for that kernel.  Then import that into Warewulf. The set default will put it right here.

If you didn't use the set default, this is how you would set your profile to be exactly as I previously demonstrated. Wwctl profile set.  We're going to user set the default profile. This means assume yes set on the default profile. We're going to set the kernel and we're going to set the container. The next thing we're going to do is set it on the profile again. We're going to set a basic network configuration. As you can see this is exactly what has already been done. I didn't set the gateway. I guess I was slacking on that. Slack has a whole new meaning now doesn't it? I can't use that one anymore. Lastly, we can now add a node and you can do wwctl node add, and give it a node name. Then we're basically going to specify some network information and we're going to make this node discoverable. This means that when the node boots, it will automatically be added to the Warewulf database and it'll be automatically configured. It will automatically put in this Mac address onto the network device you have set as the default.

Warewulf Overlays [35:42]

The next thing to talk about is Warewulf overlays. So far we have taken a container out of Docker hub and now we are going to blast this out to “n” number of hosts. this would actually work perfect if every host was identical, but we do have some node specific things to take care of. Everything from network, service configuration, and user configuration. Some small amounts of data and configurations may need to be changed on a per node basis. That is done via overlays and I'll show some of these overlays features in just a moment. Overlays are a way of adding information to a provisioning system using text templates. 

That is what I did to get this system up to speed. I'm going to start off by showing an overlay. If I do a wwctl overlay you will see all of the sub commands for overlay. If I just type in wwctl, you'll see all the primary commands. We're going to do wwctl overlay from here.  Lets to a list to see what exists on this system. I've got two overlays: generic and wwinit.  To show how this relates to the node, I'm going to do a node list minus a again. And you're going to see, we have got two overlays here: system overlay and a runtime overlay. The system overlay we're calling on is wwinit and the runtime overlay is generic.

These are in parentheses because they are not a configured attribute in the node configuration This means they are defaults. If you set them in the node configuration, the parentheses will go away and it will look like everything else. It'll be whatever you set it to, but if they're not set those are the defaults. So the wwinit and the generic overlay can be found here. If you want to see what's inside of them, you'll see, for example, the generic overlay has seven files and the wwinit overlay has 46. We are going to do a list.. This shows us all of the different files, their permissions, and ownership in the wwinit overlay. You can see all the different files that are going to be provisioned with this wwinit overlay. Notice some of them have the ending or the suffix of .ww. This indicates that this is a template file and just like autoconf with the .in, as soon as this gets resolved the .ww will disappear.  The contents of this file will automatically be replaced with the templates that are in there. I'm going to show one.

If I do a wwctl overlay edit. The first thing I need to do is tell it what overlay I'm going to be editing a file in and do that. When I do that this looks like a regular if config file, except for the fact it has these template macros in here. These template macros get replaced for every node that is getting provisioned. This gives me the ability with a single template or with a single overlay. I can have any number of nodes booting with unique configurations for each one of them. The texting language is actually very featureful. If there's anything that you want to include such as conditionals, loops, or ranges, it supports all of that. It's very easy to customize this with large granularity. There is so much you can do. There are a few other things I can demonstrate. I’ll show you this one involving containers. Wwctl container and we're going to do a list. I've got one container imported called rocky-8 built and ready to be utilized. It's configured on one node. Do container shell rocky-8and you can see I'm now sitting inside of that environment. So if I do cat /etc/os-release  I'm actually sitting inside of the operating system, the VFS, or the container. I imported that container out of Docker hub. If I exit this, it will tell me it's going to rebuild the container automatically. It skipped it because it's current.

It quickly did it at some timestamp comparisons and realized it doesn't need to rebuild anything. If you want to install something into this do something as follows. etc I'm going to put into the container's Mount directory. And so if I do this, you'll see I've got all the files there. So if you want to  install something like the MOED, user space component you can get that into the container by using a bind and then doing an install just as you would with any other container or you can have that built via whatever CI pipeline you're using, to manage all of your containers and building your containers. I've kind of walked through the general interface of wwctl. I don’t believe there is anything else specific that needs to be addressed.

The goal of Warewulf is to be simple, lightweight, and very flexible. The commands that you'll see here should be fairly self-documenting. The configure command is  to manage the system services as we did at the very beginning container. We walked through the kernel. I demonstrated a node. I can show that in a little bit more detail.  We can add nodes, we can use IPMI and at some point we're actually working on some red fish integration. You can get a console on that and you can set status. When you do node status, you're going to see we have this node, but it hasn't booted yet.

So there's been no last scene. When we boot the node, we're going to actually watch this and see what happens. We also have a profile, which is the interface for managing different profiles. We've got power. This is basically for power management when you do things like if you want to reboot the entire cluster, it will automatically manage a parallelized fan out with an appropriate number of concurrent tasks. It does not completely overload your network.  Half a second to boot each node as you're going through that loop actually has a profound effect in terms of booting efficiently. Also DHCP is very not scalable. The server is basically the Warewulf Daemon that is running actually comes from this binary. You can definitely interact with it here, but since we're running this through systemd it's better just to let this be and let systemd manage this. o system, ctl, and you can see it's in there and it is properly running.  We're going to test boot a node and we're going to add the w option and  watch this update. If I come over here, I just so happen to have a virtual machine that we are going to boot. This has been configured to pixie boot. Doing pixie booting on VMware fusion, as you can see that I'm doing, has gotten incredibly difficult because now everything is using max DHCP services. If anybody wants to know how to do that, and they get bogged down with DHCP issues, send me a message. I wrote a quick script that blocks max ability to do this.

When you boot this up, you'll see we're doing an UEFI boot, and it's basically going to start with pixie You got to watch fast because it moves pretty quick. You can see now we're sending it the container, which is happening down here at the same time. Next we're going to send it to the different overlays. Here is the K mods overlay system overlay runtime overlay. Once it's got that it now is managing a little bit on the back end. Now it's doing some booting through Warewulf init and we're now done. It was super fast. There was no operating system installed on this node. Everything came over the network. When you're actually booting on real hardware, it's actually faster. It should be noted that I'm using a fairly small and basic container.

If you have a bigger container it will take more time but it is a fast provision. It is designed to be very scalable for lots of nodes, parallel booting, and default updates.I also want to mention there are multiple overlays. I can even show you the different overlays.  We're going to get into the weeds a little bit right here, but if you look at the default, pixie script, you're going to see that we've got four pieces that we're pulling into in a NRD. What you're going to see is we got our base container, we got our kernel modules, we got our system overlay and we got our runtime overlay. What we're actually doing is overlaying all of these overlays on top of the container.

This gives us the ability to start with a base and then add in the appropriate necessary bits that we need for this node to operate properly. The system overlay is only provisioned once at boot at provision time. The runtime overlay actually is  reoccurring. If you have user accounts, we can look at what was inside of that. If we do the overlay list, remember the generic. So if we do wwctl node list-a, you'll see that the runtime overlay is set to generic. Let's take a look at what's in there, overlay list generic - long. And you'll see, we have user information in here. We've got our group's host file and password. As well as roots, SSH, authorized_keys. This gives us the ability for root to drop into that node easily.

What we have now is we have things like the password file and that password file is going to be automatically updated as users are added into the host system. If you add a user into this host system because of this overlay default configuration within one minute, all your nodes will automatically be configured to have that user account added because that's the update interval for the runtime overlay. You can see as soon as this hits 59, you're going to see another message which is another request to get the update from this node that's booting. You can also sort this file or this output based on what nodes have not checked in. You saw it turn yellow there for a split second. That's because it hit that maximum time for the overlay request.

If we don't see it in the update interval that we're supposed to see it in, then that's a warning. So it turns to yellow. You can search for all of those sorts of things as you are managing your node. If you have a thousand nodes it can be hard to find the one node that didn't provision all the way or the one node that didn't reboot via its IPMI command. There could also be a DHCP error. DHCP seems to be one of the most limiting factors of scalability of the parallel booting of hundreds of compute nodes at once. You may end up with DHCP conflicts. You can quickly see what nodes have been provisioned and what nodes have not using this tool. I think this is everything I planned to go through. Are there any questions?

BMCs and Pre-OS polling [48:55]

Zane Hamilton:

We have a question here. “I will have *many* questions that relate to tighter integration with the baseboard management controllers, as well as data center layout, switch configuration, and related topics. Let's start with BMC. Isn’t it possible to do everything that Warewulf wants to do through pre-OS polling and configuration file preparation by interrogating the BMCs for each node? (We have open-sourced software we developed to do this using IPMI)

Gregory Kurtzer:

The problem with using BMCs is it's not a standard interface for every vendor. Everybody's done their BMC differently and even many vendors have actually done IPMI differently depending on what additional features they're trying to add now at this point. IPMI is stabilized, but the BMC controllers are very vendor specific. We do not have a direct integration into the BMC controller with one major exception, that is to help secure the provisioning process. You probably noticed when we looked at the overlay list generically and we looked at the files, you'll see files like the password and group file. Are there now, granted there's no passwords in the password file. We stopped adding passwords in the password file 20 years ago.

There's still user account information in that password file. You may have other things that you put into these overlays, which you may not want users to find because we're using TFTP to download the first stage. Then we're using HTTP via pixie. That doesn't give you the option of having a whole lot of security. What we've done is if we look at the default pixie file, you're going to see that we're using things like the asset key and the asset tag. The only thing we interface with the BMC with today are things like the hardware's UUID and the asset tags. If you specify an asset tag on that hardware, it's interesting because users cannot get to that.

It requires a route to be able to get to that asset tag using something like a DMID code. It gives us the ability to leverage that asset tag is almost like a key or a token. Unless that token is properly passed to Warewulf, Warewulf will not hand out any of this information to anybody requesting it. It's actually a way that we can gain some security optimizations through this booting process. Whenever you're talking about security through provisioning, you have to have a root of trust somewhere. This gives us a very easy way of kind of managing that root of trust directly on the hardware via the BMC. Sorry that I didn’t directly answer your question.

What is Not Possible to Provision Through Warewulf? [52:32]

Zane Hamilton:

 We have another question, I agree the ability to set up different profiles is very powerful. I’ve used it to provision nodes for diagnostics. What type of functionality could not be possible to provision through Warewulf?

Gregory Kurtzer:

Windows will not do Warewulf. There are a few types of operating system images that are difficult with Warewulf. For example, if you have very large operating system images, it can be very difficult to deal with their provisioning. It is more optimal to have small operating system images for a large scalable system. If you have more complicated requirements, containers are a better way to manage large dependency stacks,than putting it directly on the base operating system. If you have a very large operating system image it is difficult to get that out to all of those nodes in an efficient way.

The other thing is we are also consuming memory for those operating system images. If you have a big operating system image, hopefully you also have a hard drive that you can set up swap on. If you want to set up a swap space on your hard drive, you simply put that into your Fs tab or the kernel will automatically. The space we're using in memory as it's needed by applications. This whole operating system image and memory will end up being swappable. As long as you do have a physical disk on your system, just set up a swap space and that mitigates the issue.

Ansible Playbooks and Redfish IPMI [54:42]

Zane Hamilton:

Thank you for your question Herman, but I think this is related to what Alan posted. His question is “would you need Ansible playbooks or the redfish IPMI? Or would you need to write a playbook?

Gregory Kurtzer:

There are two ways you can use Ansible playbooks or any configuration system management toolkit in Warewulf. The first way is after provisioning. You use it to take over on the configuration management instead of using Warewulf for that. To be blunt, Warewulf is very basic in regards to how it does configuration management. It's very simple and you can't do a lot with it, but it gives you that core functionality of pre-running sbin/init, that you would need. The second piece of how people use Warewulf and Ansible is if you have multiple Warewulf control nodes for managing your Warewulf control node. It's a jab at HPC people like me. I've heard of a number of people from enterprises and clouds saying, “what do you mean you use SSH for nodes?”

We don't even want our administrators using SSH anymore. Everything should go through something like Ansible. We've heard that a number of times you actually can manage your entire Warewulf control server using Ansible or other configuration management and you never actually touch it.

Is There a Tool to Make Configuration Easier? [56:29]

Zane Hamilton:

Here is a question that you are going to love. Is there a tool that will let you lay out groups and nodes in a visual/gui mode that will make configuration easier? 

Gregory Kurtzer:

So not at this point. It is something we've talked about quite a bit. We're dealing with a straight YAML and building a graphical environment around management of that configuration file actually is not difficult to develop. It's something that has to be developed. We have considered it and we are planning on it. We just haven’t done it yet.

How Many Nodes Per Warewulf Control Server? [57:16]

Zane Hamilton:

That is all the questions we have. If there are any questions, post them quickly.

Gregory Kurtzer:

One of the frequently asked questions is how many nodes can you boot on a single Warewulf control server? The number that I recommend is 1000 to 1500 nodes.. I don’t recommend this, but I have heard of large systems with 3,500 nodes without any redundancy or load balancing. The nice thing about the provisioning system is it does not have to be high availability. Once that node has been provisioned, you can take the entire provisioner offline.

If it goes down, all of those nodes are still provisioned. You're not actually affecting anything. It does not have to be high availability. In some cases you may want it to be load balanced. If you're trying to boot thousands of nodes at once. I have seen RFPs that dictate hundred and thousand plus node systems need to be booted and provisioned within 5 minutes from scratch.  Warewulf is pretty good at that in a general sense. Granted, you may have to build up your control server with a very fast ethernet controller and, or split and bisect it between two separate broadcast domains. There's different ways of thinking about that and different ways of handling it, but you can definitely boot very large systems with Warewulf quickly.

Zane Hamilton:

That's fantastic. I don’t see any more questions. We are also over our allotted time. Thanks for your time, Greg. It's always great to hear the stories of how this stuff started and to be able to see it in action. I really appreciate it. I am looking forward to further conversation in the future.

Transcript

good morning good afternoon and good evening thank you for joining i am zane hamilton with the solutions architecture team with ciq for those of you who have been with us before we appreciate you coming back for those of you that are new welcome yeah we would ask that you like and subscribe so you can stay up to what's going on with ciq today we're going to be talking about provisioning and we're actually talking about provisioning with the founder of rocky linux and centos as well as many other open source projects gregory kurtzer hopefully bring greg in hi greg thank you for coming so today we

wanted to talk about provisioning and i think if if you would just give us an idea of the provisioning from your mindset and kind of where you're coming from because i think if you look throughout the industry provision can mean a lot of different things to a lot of different people so from your perspective and from where you're coming from in your background what's provisioning mean so great question um my background is in high performance computing specifically um i spent about 20 years-ish of my career doing high performance computing so when i think of provisioning i think of provisioning the hpc resource and typically we're

talking about provisioning the operating system in this particular case and management of that operating system so provisioning to me is basically what is the most effective fastest and flexible way to provision an operating system out to you know whether it be a small cluster of tens of nodes or a large cluster of thousands of nodes what's the best way of doing that and managing the operating system on all of those those compute nodes so for me provisioning is kind of about that that high performance compute cluster and management of those nodes excellent so when you look at it from an hpc perspective provisioning is not

just server provisioning it's like user provisioning network provisioning the whole stack right yeah so we're starting from bare metal so you can imagine it as somebody buys a high performance computing cluster they roll in racks of compute nodes in some cases as i said it could be thousands of compute nodes they roll it into the data center and you're basically provisioning everything from that bare metal up the stack and so starting with that bare metal you basically have to um build you know put your operating system get your operating system to the node in a very you know efficient scalable manner but from there you

View full transcriptHide full transcript

also have to do things like are there any custom configurations on particular nodes does that include network configurations that include service configurations does that include user configurations and some of these can be provisioned or managed after the node has been provisioned but some of them actually have to be before the system uh runs s been init and spin in it is the parent of all processes with pid number one so in some cases we actually have to do customizations to each node that's being provisioned before we even start pid number one so there's some tricks that we have to be thinking about in terms of

provisioning but you're exactly right even though i think of provisioning as being that bare metal kind of base operating system that base operating system includes a number of different facets uh such that the cluster can work properly and again that includes networks service configuration user and user configurations and whatnot great question so you actually use an interesting word there you're saying configuration so whenever whenever you're talking about configuration management and provisioning are are they different are they the same thing are they paired together oh that's come up a bunch of times in in high performance computing especially as we're talking about and thinking about provisioning

of the operating system excuse me so werewolf and other cluster provisioning systems will typically do some basic rudimentary configuration management but that rudimentary configuration management as i kind of alluded to a moment ago occurs in many cases before the operating system has booted so you're basically making these configurations like like your network configuration for example uh you want to have your network configuration um in place before you call s been in it and then aspen and it goes through systemd and and starts all of your services starts all of your your devices you need to have that network configuration already there same thing with things

like fstab right you need to have your your file systems already configured you need to have you know any any you know service configurations configured before systemd runs those services so there's a side of this configuration management which has to be very kind of lightweight and and engraved into that provisioning system such that you're getting all of the nodes are basically getting their appropriate configurations whether that be something as simple as just a network configuration and a hostname configuration or that be something as complicated as a whole different operating system you have to be able to manage that at the provisioning layer and werewolf does

all of this for you but it does not replace a more typical and much more fully fully fledged configuration management solution um so if you need something that's going to do much more complicated configuration management tasks that's something that we would say well provision your base system with werewolf do your base configuration with werewolf but once that node comes up run your configuration management services so then you can actually then take over with your cm uh platform whatever you're choosing excellent thank you so i think one of the other things that i hear quite often the conversations i have is stateful or stateless so when

we start talking about werewolf how does how does that come into it come into play so this this kind of even goes down to the foundation of of werewolf and kind of some of its basic tenets of of what differentiates and has differentiated werewolf all the way since the beginning um so if i go back in time um let's see it was created in 2000 2001 um yeah i'm i'm way that old uh basically at that point um high performance computing systems uh were traditionally as we were starting to make the bridge over into linux and the beowulf was was all the rage at the

point at that point we were basically trying to figure out how do we manage the operating systems on again hundreds or thousands of compute nodes um and to kind of again put this into perspective many organizations say well you know for every system administrator you know maybe it's you know if it's a high you know high load uh you know high complicated you know systems a system administrator may be able to do 50 maybe 100 um separate servers if they're really good or if the systems are fairly similar you might be able to get you know hundreds but an hpc system could be thousands and

we're not going to have you know we need to come up with better ways of scaling uh scaling the system administrators time scaling how we're doing this so there there came to be toolkits on how to manage this and there's there's various different ways of doing this so um one that was very big at the time was called oscar oscar used a system um or provisioning uh tool called system imager and um system imager basically allowed you to basically make a a template of your operating system and then it would blast that template out to all the nodes um when you boot it and would

write it out to the hard drives and from that point on all of your nodes are kind of provisioned and then you you manage them as a cluster of workstations in a matter of speaking um there's other tools that leverage things like kickstart which is anacondas of the or the red hat originally the red hat installer uh mechanism for automating deployments of of resources so uh there's tools so the rox cluster system not to be confused with rocky similar name but rox uses um basically a you know it's a turnkey system that basically uses kickstart uh to basically provision out all the nodes and um

werewolf though approach this from a completely different perspective instead of facilitating the installation of a massive amount of compute nodes let's completely remove the necessity to install any compute nodes let's just boot directly in to a runtime operating system and all of a sudden that kind of shifts the paradigm a little bit right so every time a node boots our model was let's just put it let's just dump a real you know a runtime operating system onto that we're never doing an install and then it runs directly from being booted it runs kind of almost like a live os or a live cd and um

every single time so so when werewolf boots a node every single time that node boots it gets a you know the the operating system byte for byte as it was intended by that node and all of the nodes above and all of the nodes below and it makes it very scalable it makes it very easy to maintain and so when we talk about stateless in high performance computing provisioning we're basically saying that the operating system is not written in a persistent way to the storage so this means that you could reboot that node at any given point and as you reboot that node it's always

getting a fresh version of the operating system now stateless is usually confused with diskless and a diskless node i mean obviously you'd have to run that stateless but if you have a disk full node you can choose if you want to run that stateless or or stateful you can also choose do you want to write that operating system to um memory and do you want to run it directly out of system memory or do you want to run that operating system off of that spinning disk there's a lot of different kind of options in terms of how you can choose to provision that resource uh

in in you know that operating system to that node werewolf the thing that's really differentiated werewolf over the years is the fact that it really uh focused on stateless so there were other systems out there that were focusing on stateful and i kind of i mentioned rocks and oscar but werewolf really focused on stateless operating system management and again there's there's a lot of benefits in doing that when you're when you're dealing with a large system at scale a story that i like to tell is you know at some point we had a compute node in a very large cluster we had one compute node

that would always seg fault on one application and as we would run this you know this this application across all the nodes all the nodes ran it perfectly except for one node and it was but it was a seg fault and um you know typically when you see a seg fault you usually are going to assume that there's something kind of weird going on with with the the software stack or uh you know something something's going on but it's usually software related but because we were using werewolf and i knew with fact that the nodes above and the nodes below are running perfectly but this

one node is having a problem we knew it was a hardware issue so i packed up this node and i sent it over to the hardware vendor and they said what's wrong with it and i said i don't know it's it's seg-faulting the software and they're like yeah that's the hardware you sure yeah i'm pretty sure it's the hardware and um you know they they look through it and they didn't see anything wrong with it they wanted to send it back i'm like nope nope there's something wrong with it finally they get around the checking the power supply under load and it turned out that

the power supply under load was not providing enough juice for the motherboard in the system and that's where um the the i don't know how i'm not a hardware guy but that's how it somehow was interpreted by the kernel you know something ended up coming up a little bit short on power and it was interpreted as a seg fault not a hardware failure and um they put a new power supply in the system system ran perfectly from that point on so it kind of changed the paradigm in terms of how do we maintain and how do we think about maintaining these large these large systems

and especially when you consider mean time between failure is actually not that bad unless you're looking at you know a thousand plus different different nodes then your mean time between failures is actually it hits quite often so how do you manage things like this how do you mitigate that again with a stateless operating system provisioning system you can basically just take out that node put a new node in change the configuration to say okay the hardware address of this system is now changed just turn it on and it has now completely assumed all of the responsibilities and roles of the previous node that was there

very easy to deal with so stateless versus stateful so this sounds just using something that a lot of people are talking about today is a very popular topic this sounds a lot like containerization so how is this or how is it or would it be related anyway to containerization so that's a great question so um when werewolf was first uh conceived and very similar to oscar as i mentioned before using system imager it had the notion of a golden image this this base template image of what you're using for the template to provisioning out all of your compute resources and all of your compute nodes

excuse me so in werewolf we did it a little bit different uh we basically had a directory and it was a root directory if there's any you know engineers or admins in the room uh it was at your root directory which basically allowed you to have like another root file system in an in a directory location and werewolf leveraged that as a template uh to make the operating system make the bootable operating system for all of the compute nodes now we didn't know it at the time but what we were actually using was basically a container and i know it to root and a container

is very similar already but that's basically what we were using we called it something different we called it the virtual node file system and we manage this virtual node file system using tools that were well quite honestly very similar to containers today so one of the big switches that we just made with werewolf v4 is that we have basically just embraced the container ecosystem directly so instead of us kind of having a separate version of this that we were basically using as a vnfs we basically said well it's not a big jump to just say well let's just start using containers this has the effect

that all of the existing tooling and everything that people are doing today with containers to build containers to secure containers to validate containers well we can just leverage that directly in werewolf now so that was one of the biggest change that we made with with werewolf v4 is it now is basically an oci compliant provisioner and this means that we can basically you can use any of your your docker recipes your docker files you can use singularity apptaner you can create your container you just point werewolf at wherever that container exists whether it's in an oci registry or whether that's on your local file system

or in the local daemon running and you basically say i just want to import that into werewolf once you've imported that into werewolf you can say okay i want these thousand nodes or however many nodes you have to boot on this container and what werewolf does is it actually not only blasts you know the the operating system out it's actually blasting a container out to all of the compute nodes so you're basically running this container on bare metal and as a result of it again we we get to leverage all of the existing tools um and uh and capabilities that people probably already have today

with regards to their containers and how they're managing containers and so on and so forth so all that can be basically directly directly imported into werewolf and then you can provision out those containers it's awesome so i think we've talked about kind of what it is today i think a lot of people are interested to know how did i mean 2002 it's 20 years ago how did you get started and what brought werewolf to life what what what story did you have or what were you going through at the time that made you decide you had to go do something else or do this obviously

it's solving a problem so how did it become so um my background is actually in in biochemistry and i made the jump the leap into linux and open source um as i was trying to solve problems computational problems for biochemistry and i got so excited over um being able to do this for you know in open source and i was so enamored with with what we've been able to do in linux and open source and whatnot that uh it pivoted my whole career on that as a result of that i ended up landing you know going through some startups but i landed at berkeley lab

at the department of energy and i was joined appointment to to uc uh berkeley um and i did projects for ucop and uh and whatnot but when when i first started this i went from not only scientific computing but we started you know the advent of you know 2000 ish was kind of you know hpc you know cluster computing linux cluster computing was starting to get become a really big deal and so one of my first tasks when i joined berkeley lab was to basically start you know building up some big hpc clusters and um at the time as soon as i walked in the

front door i was basically tasked with um an existing you know existing load of projects and i was completely taxed out like i was at 100 utilization if not more and uh they they basically said okay now we're going to basically add you know some pretty big clusters to the mix and we need you to maintain this and i started looking at well okay there has to be some way to help me with this because i am not going to you know physically install you know 100 computers and uh basically exactly exactly i mentioned this was a government position too right um and uh so

i i was basically you know which which means we're already overworked uh by the way so this basically means that i'm trying to figure out what is the best way to manage these systems to install them to to build them and then maintain them over time and so i was looking at different tool kits and what are people using and and just honestly none of them really spoke to me in terms of the way i wanted to manage this so uh i developed a prototype very similar to it seems like many of the things that i've developed over my career i develop a prototype which

was close but at the same time completely wrong at exactly the same time um so singularity started the same way singularity version one those of you who followed singularity know that um it was it started off basically being almost like ubuntu snaps and then ended up morphing into what you know today as being singularity and apptaner in this particular case i worked at a previous organization called linuxcare and we we were very well known for creating these little bootable business cards that you can put into a system there's a little rescue cd and i left there thinking all of the world's problems could be solved

with a little bootable business card and uh if everybody just carried these around you can you can have everything you ever wanted uh obviously computing wise maybe more i don't know uh so uh i started werewolf actually with werewolf actually created iso images for all of the compute nodes so they were stateless it's just i wasn't using the network to transmit them and uh i went to linux world and i think it was 2000 and uh i i went and i talked to people about this and i presented this and the feedback that i got is wow we really like the management paradigm of what

you're doing but good god what are you thinking with these isos that is just such a horrible idea and um and they said you know there's a booth over there called ether boot which was the predecessor to pixie in in many regards it says go talk to the ether boot guys and like ether boot oh cool so i went over and talked to them i learned everything i could learn about ether boot in a few days and it just took me like four days to port werewolf to now you go use ether boot and ether boot was basically a little firmware that you can either

flash to your your network card um or you can boot on a floppy that just had this little piece of firmware on there which basically set your network card as a bootable device by basically loading an option rom into the bios to do that and and then the network card would actually do the pixie booting well it wasn't pixie at the time but it would do something like pixie and that was then the real that's where werewolf really then took off is once i got that built up and integrated and then it seemed like organizations all over the place uh started adopting werewolf started going

to super computing and everybody was talking about werewolf uh for quite some time that's awesome i'm not going to say that i've ever used the linux cd because i have rescue rescued some stuff so i know that yeah you've we've talked about werewolf i know a lot of people are here because they want to see where we'll so i know you've prepared something for us let's let's see what you got yeah absolutely all right so i put together some some slides um real quick um you know just so you can kind of see um we're doing more than just werewolf obviously as a company and

i'm not going to go into this i don't want to sound sales or marketing wise but if you're interested in any of these things definitely please let us know and werewolf is a big thing that we're going to be talking about so when when we talk about werewolf we usually describe it as um you know even the name comes from you know it's a software implementation of the bao wolf and that's why werewolf is spelt totally wonky as a matter of fact if you ever ask me to spell werewolf as the big you know monster human dog thing um i can't it actually it doesn't

feel right to me it's it's there's something wrong with it um so i werewolf this is this is how i've it's just engraved now at this point um but basically werewolf is a software implementation of the beowulf and the beowulf is a specification for how to build a cluster using commodity parts using linux using open source and it's an architecture and this architecture is roughly drafted as you see below right you got your user workstations and users ssh across the network and they basically get into a a control system that control system may have a file system attached to it directly and it's sharing it

out or this could be a some sort of network attached storage and it's sharing it out but then you have a switch you've got a private network where all of your compute nodes reside and these compute nodes may actually even be on another network that may be a high performance data network something like infiniband and this is basically kind of like a you know very basic beowulf first and early versions of werewolf were designed to solve this but as we got more and more complicated and we were looking for more features in what these systems look like we started adding to it and we started

adding to it in such ways that again users would basically be sshinging in we'd become basically directing them through a reverse nat in our firewall to land on our interactive nodes and the compute resources are in typically groups now and they're in groups because you may have different vintages you may have different people that own different sections of them and whatnot but you have these different groups of compute nodes you may have separate networks kind of dedicated to each one of these groups and so on and so forth um werewolf and um or provisioning and scheduling are usually done in some sort of redundant um

uh resource and again you've got your shared storage and typically by the way you just you usually have like a a home directory storage and some form of parallel uh scratch storage that's very efficient now werewolf now needs to be looking at this not only as just a completely flat system you know like you may see here but multiple flat systems and werewolf now is is was built around the idea of how do you maintain you know not only these these simple or kind of flat systems but how do you maintain systems that have additional depth and additional complexity and when we built these systems

at berkeley and berkeley lab as well as uc berkeley we basically have there's no state in the entire system except for the werewolf master so even the interactive notes ran stateless the entire architecture was stateless and this meant that every any system could basically blow up and we can just replace it and we didn't lose anything there was no context that was ever lost so this was how we were thinking about building systems and this is kind of how werewolf is envisioned today and you're going to see in just a moment how you can have node configurations and then node profile configurations that are completely

cascading and it really facilitates anything from again a more simple kind of turnkey model going all the way up to something that may be a lot more have a lot more need for flexibility so if we take a look at so i've already set up werewolf and i've basically built a node on this and it's a virtual node so we can we can hack around at this a little bit and take a look uh i'm right now and i installed it to user local just because i didn't install it via package and user local is what i do so it's in user local and inside

of etsy werewolf you'll see you got a few files and if i take a look at the nodes.conf you'll see two major sections now this is yaml uh and we've got two major sections in it we got node profiles and we've got nodes now nodes are pretty easy to imagine right this is a single node right this is the configuration for a single node we've got some information in here that is maybe specific for this node and if you have hundreds of nodes you may want to consolidate some of that information and configurations to profiles now every node by default gets a profile called well

default and that means you can actually add your configurations to the default profile so for example in this in this no default profile we have a container name which is rocky8 and we have a kernel version and i'll show you basically how i got to these how i got these into the system here in just a moment but basically what i end up doing is because node 0 is part of this default profile and this profile has these values node 0 has those values and i can supersede those i can have multiple profiles that supersede other configurations and it's extraordinarily flexible you can see in

terms of network devices we have a default network and what you can see is basically i have the netmask being kind of globally defined but i have the ip address and the mac address being defined specifically on just this one node so obviously i don't want to put my ip address or my hardware address my mac address in a profile because then all nodes would have the same ip address and same network configuration so that i specifically put into this node profile so this kind of encapsulates what an entire system architecture would look like and it gives us the ability at a very high level

to actually do very kind of cool things now i'm showing you this nodes.conf and you can edit and work with thisnodes.com directly if you want or you can use configuration management but most people use the tool ww control now ww control is basically the primary interface for werewolf so you can do ww control for example node list and i want to see all attributes so i'm going to use the minus a and you can see now if we had many nodes configured this would basically be a giant list but you can see in node 0 we have all of these different fields or keys that

are associated with this we can see all the different values for them and we can see where did we get that configuration if it says default under profile that means we basically got it from this default profile so for example container name and kernel version came from the default profile and that's exactly what you see here this is listed here because there are some configurations that may have many node profiles and in some cases it's best to see you know where is a particular value coming from so if we may have let's say a default profile but on some nodes i want to test a

new kernel i can have another profile for a new testing kernel and then add that profile right here and we'll basically be able to have you know a certain group of nodes testing that that newer kernel it's extraordinarily featureful and i don't want to get too bogged down on this but i really wanted to explain this because it is extraordinarily capable with regards to configuration of node so as we're looking at building systems that may be more complicated like this it makes it very easy to group these nodes together with a profile and then define all the attributes for this profile werewolf gives you that

functionality very very easily okay greg real quick i got a question for you whenever you i mean you said you just installed this what is required to install the the werewolf controller ah how complicated is that good question and thank you for bringing me back to this i meant to show this but um i totally forgot as i just wanted to jump into the tech um if you go to werewolf.org um you can click on docs and from docs you can click on quick starts and we have a an enterprise 8 enterprise linux 8 quick start and as you go through this i'll quickly run

through this you can kind of see what how this operates the first section is just installing it from git um you can install it from packages from the releases etc but this is just from git and it's basically you just you install the dependencies you do a git clone you do a make all and then sudo make install super easy install excuse me once you've done that you basically just run these commands to configure the firewall appropriately this is the werewolf.com file you're going to edit this and just make the appropriate changes probably going to need to edit your ip address maybe your netmask and

then you probably also want to take a look at your range start and range end for the most part everything else is going to be you know pretty standard um then what we're going to do is you can create some if you want system d to run this um you basically just create the needed users and whatnot and um and then basically just start werewolf d from systemd and at this point we now have werewolf installed now what we're going to do is we're going to run a ww control configure all what this will do is this will basically go through all of the system

services that werewolf needs for it to boot so for example it's going to need things like pixie it's going to need thing well pixie excuse me has certain requirements like dhcp and tftp it's going to need nfs to be running if you want nfs to be running via this configuration file it will set up dhcp as i mentioned make sure tftp is running properly and drop the appropriate files in there so this will just kind of configure your underlying system and this has been tested and works on enterprise linux variants on soos variants um as well as debian and ubuntu from here now we're going

to start basically working with werewolf directly i showed you that i had a container called rocky8 this was how i got it i just did ww control container import and i pointed it at a docker registry you can reach this from anywhere this is public on docker hub and you can then import your rocky 8 image we're going to name it rocky8 and we're going to set it as default what's setting it as default does is it basically adds it to the default profile as you see right there then what we're going to do is do the same thing with the kernel we're going to

ww control kernel import and we're going to give it our current version name of the kernel that we're running and we're going to set that as default what this is going to do is it's going to take a snapshot from your host you can get the kernel from a variety of other locations if you wish just look at the help output for kernel import but what this will do is its simplest form is take the kernel running from your control server so if you're running gpus if you're running infiniband make sure those drivers are currently installed on your host kernel or whatever kernel you're importing

from and werewolf will automatically pull all of those kernel drivers and support for that kernel and then import that into werewolf and again the set default then puts it right here now once we've done that oh and then if you didn't use the set default this is how you would set your profile to basically be exactly as i just showed ww control profile set we're basically going to use set the default profile this just basically means assume yes set on the default profile we're going to set the kernel and we're going to set the container the next thing we're going to do is we're going

to set on the profile again we're going to set a basic network configuration and again this is exactly what is what has already been done as you can see here i didn't set the gateway though i guess i was slacking on that slack has a whole new meaning now doesn't it i can't use that word anymore okay easy [Laughter] and um lastly we can now add a node and you can do www control node add give it a give it a node name and um then we're basically going to specify some network information and we're going to make this node discoverable this means that when

the node boots it will automatically be added to the werewolf database and it'll be automatically configured so it will automatically put in this mac address onto whatever network device you have set as the default so it will automatically do that the next thing to talk about a little bit about is werewolf overlays what what we've just done so far is we've taken a container out of docker hub and we're going to blast this out to any number of of of hosts um that actually would work perfect if every host was identical but we do have some some node-specific things everything from network to um to

service configuration user configuration as we were talking about earlier so some small amounts of data and configurations may need to be changed on a per node basis and that is done via overlays and i'll show some of these overlays features here in just a moment but overlays is basically a way of adding information to a to a provisioning system using uh text templates and i can show that here in just a moment all right so that's basically what i did to get this system up to speed and that's where we kind of ended up so i'm going to start off by showing overlay so if

i do a ww control overlay you'll basically see all of the sub commands for for overlay if i just type in ww control you'll see all the primary commands so we're going to do ww control overlay from here um let's do a list let's see what exists on this system and you'll see i've got two overlays one is called generic and one is ww init to show how this relates to the node i'm to do a node list minus a again and you're going to see we've got two overlays here system overlay and a runtime overlay the system overlay we're calling on is ww inet

and this and excuse me yeah and the runtime overlay is generic these are in parentheses because they are not a configured attribute in the node configuration which is up here so that means they are defaults if you set them in the node configuration the parentheses um will go away and it will look like everything else and it'll be whatever you set it to but if they're not set those are the defaults so the wwe and net and the generic overlay um are can be found here now if you want to see what's inside of them you'll see for example the generic overlay has seven files and the wwe knit overlay has 46.

so let's do this and we're going to do a list this shows us all of the different files their permissions and ownership in the wwe init overlay and you can see all the different files that are basically going to be provisioned with this ww init overlay notice some of them have the ending or the suffix of dot ww this indicates that this is a template file and just like auto conf with the dot in n as soon as this gets resolved for a node the dot w w will disappear and the contents of this file will automatically get replaced with whatever templates is in there

so i'm going to show one which is this one so if i do ww control overlay edit so the first thing i need to do is tell it what overlay i'm going to be editing a file in and do that and when i do that you'll see this looks pretty much like a regular if config file except for it's got these template macros in here and these template macros get replaced for every node that this is getting provisioned for so this gives me the ability with a single template or with a single overlay i can actually have any number of nodes booting with unique configurations

for each one of them and again the the text templating language is actually very featurable so if there's anything that you want to include anything you know conditionals loops ranges it supports all of that so it's very easy to customize this um you know with very large granularity like there's a lot you can do so there's a few other pieces in here i can demonstrate and i'll show you this one real quick so ww control container because we talked a little bit about containers so ww control container and we're going to do a list and you'll see i've got one container imported called rocky8 it's

it's built and it's ready to go and it's configured on one node so we could do something like this container shell rocky 8 and you can see i'm now sitting inside of that environment all right so if i do cat etsy os release i'm actually sitting inside of this operating system this this this vnfs or this container and i imported that container just out of docker hub if i exit this it will tell me it's going to rebuild the container automatically but it skipped it because it's current uh it quickly did some time stamp comparisons and realized it doesn't need to rebuild anything if you

want to install something into this you can do something like this i'm just going to demonstrate it with the etsy but the host etsy directory i'm going to put into the container's mount directory and so if i do this you'll see i've got all the files there so if you want to install something like the mofed user space component you can put that you can get that into the container by using a bind and then doing an install just as you would with any other container or you can have that built um via whatever ci pipeline you're using to manage your to manage all of

your containers and building your containers so i've kind of walked through the general interface of ww control i don't think there's anything else to really talk about in terms of specifics that i haven't shared already uh the the goal of werewolf is to be very simple it's to be lightweight it's to be simple it's to be easy to use and very flexible so um the commands that you'll see here they should be fairly self-documenting right the configure command is basically just to manage the system services as we did at the very beginning container we walked through kernel i demonstrated note i can show that a

little bit more detail we can add nodes we can use ipmi and at some point we're actually working on some redfish integration so you can get a console on that you can look at sensors you can set status and and whatnot and when you do for example node status you're going to see we have this node but it hasn't booted yet so there's been no last scene so when we boot the node we're going to actually watch this and see what happens and see we also have profile which is the interface for managing profiles different profiles we've got power this is basically for power management

when you do things like you want to reboot the entire cluster it will automatically manage a parallelized fan out with an appropriate number of concurrent tasks so it does not completely overload your network um you know little things like waiting you know half a second to boot each node as you're going through that loop actually has a profound effect in terms of booting efficiently little things like that also dhcp is very not scalable and then server is basically the werewolf daemon that is running actually comes from this binary but you can you can definitely interact with it here but it since we're running this through

systemd it's better just to to let this be and let systemd kind of manage this and you can see so system control um and you can see it's in there and it is properly running so what we're going to do now is we're going to actually test boot a node and we're going to add the w option to the which is to watch this update and if i come over here i just so happen to have a virtual machine that we are going to boot and this is going to this has been configured to pixie boot by the way doing pixie booting on vmware fusion

as you can see that i'm doing has gotten incredibly difficult because now everything is using max dhcp services and whatnot so um if anybody wants to know how to do that and they're get they get bogged down with dhcp issues send me a message um i wrote a quick script that just blocks mac's ability to do this um so when you basically boot this up you'll see we're doing an efi uefi boot and it's basically going to start with pixi and you got to watch fast because it it moves pretty quick um but you can see now we're basically sending it the container which is

happening down here at the same time next we're going to send it the different overlays here's the k mods overlay system overlay runtime overlay once it's got that it now is managing a little bit on the back end now it's doing some basically booting through werewolf and knit and we're now done it was super fast as you can see there was no operating system installed on this node whatsoever everything just came over the network and when you're actually booting on real hardware it's actually faster so granted i'm using a fairly small and basic container so if you have a bigger container will take a little

bit longer but it is a very fast provision um and again it's designed to be very scalable uh yeah for lots of nodes booting parallel and um the default update and i didn't talk about this before so i'm just going to mention it real quick there's multiple overlays as you saw and i can even show you the different overlays so if we look at we're going to kind of get into the weeds a little bit right here but if you look at the default ipixi script you're going to see that we've got four pieces that we're pulling into in a nit rd and what you're

going to see is we got our base container we've got our kernel modules we've got our system overlay and we've got our runtime overlay what we're actually doing is is overlaying all of these overlays on top of the container and what that gives us the ability to do is to start with a base and then add in the appropriate necessary bits that we need for this node to operate properly the system overlay is only provisioned once at boot at provision time the runtime overlay actually happens um reoccurring so if you have user accounts and we can look at what was inside of that so if

we do the overlay list remember the generic so if we do ww control node list minus a you'll see that the runtime overlay is set to generic so let's take a look at what's in there overlay list generic minus long and you'll see we basically got user information in here so we've got our groups hosts file and password as well as you know roots ssh authorized keys but basically this gives us the ability for root now just to drop into that node easily but basically what we have now is we have things like the password file and that password file is going to be automatically

updated as users are added into the host system so if you add a user into this host system because of this overlay default configuration within one minute all your nodes will automatically be configured to have that user account added because that's the update interval for for the runtime overlay and you can see as soon as this hits basically 59 you're going to see another message another request to to get the update from this node that's booting so um you can also sort by the way this file or this output based on uh you know what what nodes have not checked in you saw it turn

yellow there for just a split second um and that's just because it hit that maximum time for the overlay uh request and it said well if we don't see it in in the update interval that we're supposed to see it in then that's a warning so it basically turns to yellow and again you can search for all of those sorts of things as you are managing your node so if you've got a thousand nodes sometimes it's hard to find the one node that didn't provision all the way or the one node that didn't reboot via its ipmi command which does happen or there was a

dhcp error again i kind of alluded to it dhcp seems to be one of the most limiting factors of scalability of parallel booting of hundreds of compute nodes at once so you end up with dhcp conflicts and whatnot so you can quickly see what nodes have been provisioned and what nodes have not using this tool i think i've pretty much gone through everything that i planned to go through um are there any questions i haven't we do have several questions uh alan allen has some good questions one of them we actually covered we talked about containers he was asking if uh if you can integrate

tools like boot to container but he he said that wasn't answered so this one's got a lot of parts to it greg and i'll i'll try to read it up there we go perfect um so is there an ability to have tight integration with baseball baseboard management controllers as well as data center layout switch configuration related topics let's start with bcm is it possible to do essentially everything that werewolf wants to do through the pre-os polling configuration file preparation by integrating with bcms tools for each node with open source software such as ipmi you kind of hit on ipmi but i think there's a lot

of that question so yeah so um the problem with using bmc's is it's not a standard interface for every vendor so everybody's done their bmc differently and even many organ many many vendors have actually done ipmi differently uh depending on you know what what additional features are trying to add now now at this point ipmi is kind of stabilized but the bmc controllers are very vendor specific um we do not have a direct integration into the bmc controller with one major exemption which is to help secure the provisioning process you probably noticed when we looked at where's my mouse there we go we looked at

overlay list www oops generic uh we looked at the files you'll see files like the password and group file are there now granted there's no passwords in the password file um which is you know we changed we stopped doing that like 20 years ago more than 20 years ago at this point but there's still user account information in that password file and you may have other things that you put into these overlays which you may not want users to find because we're using tftp to download all this stuff well excuse me to download the first stage then we're using http via pixi it doesn't give

you the option of having a whole lot of security so what we've done and if we look at the default ipixi file you're going to see that we're using things like the asset key and the asset tag so the only thing we really inter interface with the bmc with today are things like the hardware's uuid and the asset tags and if you specify did my voice just crack there that was funny if you if you specify an asset tag on that hardware it's interesting because users cannot get to that it requires root to be able to get to that asset tag using something like a

dmid code but this it gives us the ability to leverage that asset tag is almost like a a key or a token that unless that token is properly passed to werewolf werewolf will not hand out any of this information to anybody requesting it so it's actually a way that we can gain some security optimizations um through this booting process which of course whenever you're talking about security through provisioning you have to have a route of trust somewhere and this gives us a very easy way of kind of managing that route of trust which is directly on the hardware via the bmc and i don't think

this answered your question directly alan aside from it was a very fancy and long-winded way of saying no so alan i know you you've sent a link uh about some things that you're working on as well i know you and i have talked about redfish before um it's certainly something that greg and i can come back and follow up with you on and and have the conversation uh let's see one of the other questions we have is uh for maria asking about uh i've used what types of functionality would not be possible to provision through werewolf like what is not a good use case or

instance for werewolf uh i i gotta say it um windows werewolf will not do windows [Laughter] um that's the big one uh there are a few types of operating system images that um are difficult with werewolf for example if you have very very large operating system images uh it can be very difficult to deal with the provisioning of those so it's more optimal and especially just because of you know building a good you know big large scalable system you do want to have small operating system images and if you have more complicated requirements containers is actually a better way to manage you know large dependency

stacks and whatnot than putting it directly on the base operating system but if you have a very large operating system image uh it does it it's difficult you know from a scalability factor of getting that out to all of the nodes um in a in a in an efficient way there's also the second piece which is we are consuming memory for those operating system images so if you have a big operating system image hopefully you also have a hard drive that you can set up swap on if you want to set up a swap space on your hard drive you simply put that into your

fs tab and werewolf will or rather the kernel will automatically swap um uh the the space we're using in memory as it's needed by applications uh so this whole operating system image and memory will end up being swappable so as long as you do have a physical disk on your system just set up a swap space and that mitigates the issue thank you herman i believe your question was kind of in relation to what allen had posted i i could be wrong but i think you're kind of referring to what allen had talked about that's something that would probably be better if we followed up

with you so we'll get with alan and then we'll get with herman real quick i could i could also say that the um you can use ansible playbooks um or any even configuration or system management toolkit in werewolf there's two ways that most people think about it the first way is kind of after provisioning you use it to take over on the configuration management instead of using werewolf for that which to be blunt werewolf is very uh basic with regards to how does it do configuration management it's very simple and um you can't do a lot with it but it gives you that core functionality

a pre-running espion init that you would need um but the uh can you put that question up now i'm blanking out on uh answer oh yeah yeah so um the second piece of how people use werewolf and ansible is if you have multiple werewolf control nodes or managing your werewolf control node uh it's it's funny as as a jab to hpc people like myself i've heard a number of people from enterprises and clouds saying um what do you mean you use ssh for for nodes we don't even want our administrators using ssh anymore everything should go through something like ansible and so we've heard that

a number of times you actually can manage your entire werewolf control server using ansible or other configuration management and you never actually touch it so that's the other way i hear of people using ansible with with werewolf so here's the question now you're gonna love craig it's from kenneth thanks for the question and he's asking about is there a tool that will help you lay out groups and nodes in a visual gui mode it makes configuration easier so not at this point but it is something we've actually talked about quite a bit um because we're dealing with straight yaml uh building a graphical environment around

management of that configuration file actually is not not difficult to develop it's just something that has to be developed so that thought is actually been broast we've we've we've considered it and we're actually planning on doing it we just haven't done it yet and kenneth great to great to see you again alan that's all the questions we've had come in and if you guys have other questions post them quickly the biggest clusters i can i can just blab for a little while while we're waiting for questions um uh some of the biggest clusters that i know running werewolf people always ask me one of the

frequently asked questions is how many nodes can you boot on a single werewolf control server and the number um that i usually recommend is i say you know it's good for you know a thousand to 1500 nodes but i know people doing much more many more than that the biggest system is a that i know of is about 3 500 nodes on one werewolf control server um without any redundancy and without any load balancing i don't recommend doing that but the nice thing about the provisioning system is is it does not have to be high availability once that node has been provisioned you can actually

take the entire provisioner offline and if it goes down all of those nodes are still provisioned you're not actually affecting anything so they do not it does not have to be high availability in some cases you may want it to be load balanced if you're trying to boot thousands of nodes at once and i have seen rfps that says all nodes in the system whether it be a 100 node system or be a thousand plus node system the entire system needs to be booted and provisioned in less than five minutes from scratch and werewolf actually generally speaking is very good at that granted you may

have to build up your control server with a nice you know very fast ethernet controller and or split and bisect it between two separate broadcast domains so there's different ways of thinking about that uh different ways of handling it but you can definitely boot very large systems with werewolf very very quickly it's fantastic greg i i don't see any more questions coming in and i think we're a little bit over so uh greg thanks for the time it's always great to hear the stories of how this stuff started and be able to see it in action so really appreciate it looking forward to what else

we talk about later absolutely thank you everybody for coming join us again next time guys appreciate it bye thank you

Built for scale. Chosen by the world’s best.

2.75M+

Rocky Linux instances

Being used world wide

90%

Of fortune 100 companies

Use CIQ supported technologies

250k

Avg. monthly downloads

Rocky Linux

Have questions about your infrastructure?

Talk to a CIQ engineer about Rocky Linux, HPC, and AI infrastructure.

Talk to an Expert