Advanced Kadeploy
What you need to know before starting
The first thing to understand is that by using kadeploy3, you will be running a command that attempts to remotely reboot nodes, and boot them using configuration files hosted on a server, many nodes at a time. On some clusters, there is a failure rate associated with this operation that is not null. You might therefore experience failures on some operations during this tutorial. In this case, retry. The system doesn't retry for you as this implies waiting for long timeouts in all cases, even those where a 90% success rate is sufficient.
What is an Environment ?
Where we describe what exactly is image
, kernel
, initrd
and postinstall
An environment in kadeploy3
is a set of
file describing a fully functional Operating System.
To be able to setup a Operating System, kadeploy3
needs at least 4 files in the most common cases:
- An image
- An image is a file containing all the Operating System files. It can be a compressed archive (ie tgz file) or a dump of a device (ie dd file). In this tutorial, you will learn to build new images for Kadeploy3
- A kernel file
- For the Unix based environment, the kernel file specifies which kernel to boot. It is the full path of the
kernel
file.
- For the Unix based environment, the kernel file specifies which kernel to boot. It is the full path of the
- initrd file (optional)
- For the Linux based environment, the optional
initrd
file allows to use an initial ramdisk which will be used as the root filesytem at the boot sequence. More information: Initrd on Wikipedia
- For the Linux based environment, the optional
- A postinstall file (optional)
- The postinstall file allows you to correctly configure all specificity on each cluster. It is not mandatory to specify it for Kadeploy3 environment but if you know what you are doing, feel free to define it.
Once you have this set of files, you can describe your environment to kadeploy3
. This description represents an environment
in the kadeploy3
sense.
How can I make my own environment ?
To create our own environment they are two main ways. A first way consist to deploy an existing environment and the other way is to create a from scrath environment from a classical ISO installation. In both situation you can customize and save your environment in order to use it again later.
Make your own environment from a existing environment
Search an environment
Grid'5000 maintains several reference environments directly available on any site. These environments are based on various versions of debian. And for each debian version you will find different variants of reference environments.
They are called reference environments because they can be used to generate customized environments. You will find different variants of reference environments, depending on which version of debian they are based on.
The complete list all available environments, with their different variants, and the sites where they are available are listed on the wiki page:
From that same page there is a link for each variant of each reference environments to another page which gives a thorough description of the environment content, how it was build and how to use it with kadeploy3. An example in the next link :
![]() |
Sidebar > User Docs > Kadeploy > Kadeploy environments directory > Debian based > Squeeze-x64-base-1.1
|
An environment library is maintained on each site in the /grid5000
directory of the frontend
node. So all environments available on each site are stored in that directory.
To deploy a registered environment, you must know its name as registered in the Kadeploy database. It is the first information on the environment description page. This tutorial uses the squeeze-x64-base
environment.
You can also list all available environment in a site by using the kaenv3
command :
This command lists all public as well as your private environments.
We distinguish three levels of visibility for an environment :
- public: All users can see those environments. Only administrators can tag them this way.
- shared: Every users can see the environment provided they use the -u option to specify the user the environment belong to.
- private: The environment is only visible by the user the environment belong to.
For example, a shared environment added by user user
is listed this way :
Being able to reproduce the experiments that are done is a desirable feature. Therefore, you should always try to control as much as possible the environment the experiment is done in. Therefore, we will attempt to check that the environment that was chosen in the environment directory is the one available on a given cluster. On the cluster you would like to deploy, type the following command to print information about an environment :
You must specify the user option. In our case, all public environments belong to user deploy
.
Check that the tarball
file is the expected one by checking its name and its checksum which you should find on the identification sheet:
In theory, you should also check the post-install script. A post-install script adapts an environment to the site it is deployed on. In the same way as for environments, you should be able to find a description of the post-install script on pages such as here. Post-install scripts is an evolving matter, so don't be too worried if you don't find things as described here. If everything seems ok, please proceed to the next step.
Make a job on a deployable node
By default, Grid'5000 nodes are running on the production environment. Which already contains most of the important features and can be used to run experiments. But you will not have administrative privileges (root privileges) on these nodes. So you will not be able to customize these environments at will. In fact, only reference environments can be customized at will. But to have the right to deploy a reference environment on a node, you must supply the option -t deploy
when submitting your job.
For this part of the tutorial, job made will be interactive (-I
), of the deploy type (-t deploy
), on only one machine (-l nodes=1
) to do environment customization (we will give ourselves 3 hours with -l walltime=3
), which gives us the following command, that will open a new shell session on the frontend node:
Since all Grid'5000 nodes do not necessary have console access, it is recommended, for the smooth of this tutorial, to add the option rconsole="YES"
in your reservation command. The utility of this feature will be explained in a section below.
Indeed, when you submit a job of the deploy type, a new shell is opened on the frontend node and not on the first machine of the job as for standard jobs. When you exit from this shell, the job ends. The shell is populated with OAR_*
environment variables. You should look at the list of available variables to get an idea of the information you can use to script deployment later. As usual, if the job is successfull, you will get the name of the machine allocated to your job with:
Deploy an reference environment
To deploy your environment, you must discover the nodes you were allocated by OAR. The simplest way of doing this is to look at the content of the file whose name is stored in $OAR_FILE_NODES
(this variable is labelled $OAR_NODE_FILE
too) or the messages displayed when the job was made. This variable $OAR_NODE_FILE
simply stores the url of the file containing the FQDN of all your reserved nodes. Deployment happens when you run the following command:
You can automate this to deploy on all nodes of your job with Kadeploy3's -f option:
If you want to be able to connect to the node as root
without any password prompting you can use the -k
option and proceed by two ways :
- You can either specify the public key that will be copied in
/root/.ssh/authorized_keys
on the deployed nodes :
- Or you can supply the
-k
option without argument. This will automatically copy your~/.ssh/authorized_keys
and replace the/root/.ssh/authorized_keys
file on the deployed nodes.
The second case is actually the simplest way. One of its advantages is that after deployments, you will be able to connect directly from your local computer to the deployed nodes, the same way you connect to the frontend of the site were those nodes are.
Once kadeploy has run successfully, the allocated node is deployed under squeeze-x64-base
environment. It will then be possible to tune this environment according to your needs.
![]() |
Note |
---|---|
It is not necessary here, but you can specify destination partition with the -p option. You can find on the Node storage page all informations about the partitions table used on G5K |
Make your own environment from a classical ISO installation
First of all, this method is OS independant, so you can create Kadeploy3 tgz (linux based systems) or ddgz (other systems) images for any kind of OS from a CD/DVD ISO.
This procedure is based on the usage of virtualization (KVM) mechanism to boot the CD/DVD iso of the OS installer. The system will be installed on a physical partition of a node and then copied as a Kadeploy3 system image.
To be sure the installed system will be bootable, we will make the OS installer install the system on the Grid'5000 deployment partition (more information).
To make this possible, we will create a temporaty partition, migrate the running system on this partition and then install the system on the deployment partition.
Preparation
- Download your the CD/DVD ISO of your OS installer (say
OS_ISO
) and upload it on the frontend of the target site help here
Note: In this tutorial we will use one ISO image file available from the frontend: /grid5000/iso/ubuntu-11.10-server-amd64.iso
- Make a reservation with 1 node, with the deployment mode, one hour should be enough help here
- Deploy a minimal system on the node, use your ssh key (since Grid'5000 is more Debian friendly, let's say Debian/squeeze) help here
- Connect to the node and install the needed packages
First update the packages definition
Then install the needed packages
Finish by cleaning the packages cache (smaller disk to migrate)
Migrate the files of the running system on a temporary partition
- Process overview
- On Grid'5000 the deployment partition (the one used to store the system installed by Kadeploy3) is
/dev/sda3
. With the default partitioning, the last primary partition/dev/sda4
is used to host extended partitions such as/dev/sda5
used to store/tmp
. You can have more information about Grid'5000's partitioning help here.
- On Grid'5000 the deployment partition (the one used to store the system installed by Kadeploy3) is
Note: This method is recommanded if the size of the partition /tmp
is greater or equals than the size of the deployment partition.
The idea here is to use the partition /dev/sda5
(/tmp
) to host the system installed by Kadeploy3 (which is in use) in order to be able to install our OS on /dev/sda3
.
This is done by reformating /dev/sda5
, copying the running filesystem on it and then load this system to be able to format /dev/sda3
.
- Format the
/tmp
partition- First of all we umount then format the
/tmp
partition using the filesystem type of/dev/sda3
- First of all we umount then format the
![]() |
NODE :
|
wget -q -O - http://public.nancy.grid5000.fr/~lsarzyniec/kaimg/formatpart.sh | bash -s /dev/sda 3 5 |
- Copy our the filesystem of the running OS
- Then we copy the filesystem of the running OS on
/dev/sda5
.
- Then we copy the filesystem of the running OS on
![]() |
NODE :
|
wget -q -O - http://public.nancy.grid5000.fr/~lsarzyniec/kaimg/migratepart.sh | bash -s /dev/sda 3 5 |
- Pivot/Reboot on the system based on the temporary partition
- We reboot (using Kexec) on the
/dev/sda5
filesystem.
- We reboot (using Kexec) on the
![]() |
NODE :
|
wget -q -O - http://public.nancy.grid5000.fr/~lsarzyniec/kaimg/pivotpart.sh | bash -s /dev/sda 3 5; exit |
Note: You should then wait for the node to reboot (~1min) before trying to reconnect.
Run the CD/DVD OS installer using KVM/VNC
- Preparation
- Copy the OS's ISO to the node
- Install vncviewer and kvm on the system.
- Launch the virtual machine, booting on the OS's ISO, using VNC output
![]() |
NODE :
|
kvm -drive file=/dev/sda -cpu host -m 1024 -net nic,model=e1000,macaddr=$MACADDR -net user -k fr -vnc :1 -boot d -cdrom OS_ISO |
Note: This is currently hard to build an image from KVM for nodes that network devices need specific drivers (bnx2, ...).
To be sure your node network device is compatible with the e1000e driver you can check the API using:
![]() |
frontend :
|
curl -s -k https://api.grid5000.fr/stable/grid5000/sites/SITE /clusters/CLUSTERS /nodes/NODE |
(The node has to be specified by basename: griffon-42.nancy.grid5000.fr → griffon-42)
- Connect to the node using SSH X11 forwarding
- Get the screen of our virtual machine using VNC
Note: If your OS installer is changing the screen resolution, your vncviewer will be closed, you'll just have to relaunch the command to get the screen back.
- Installation process IMPORTANT instructions
- You MUST install your system and it's root on a single partition:
/dev/sda3
- The system size is limited to Grid'5000's deployment partition default size (around 6GiB)
- If your installer need to access to the internet, you should specify a Proxy server:http://
proxy.
SITE
.grid5000.fr
:3128 (the allowed access are listed here). - You must install an SSH server
- A bootloader should be installed on the partition
/dev/sda3
and not on the MBR
- You MUST install your system and it's root on a single partition:
- Install the system
Note: after the installation process, the virtual machine will fail to boot, it's normal. You can close vncviewer and kvm.
Create a Kadeploy3 image of the filesystem of our OS
A documentation is available here.
- Create the mounting point directory
- Mount the partition
- If you want to add a custom script that dynamically setup your node's hostname, you can take a look at [1].
- Save the filesystem in a tgz archive help here
- Create an environment description file such as:
### name : IMAGE_NAME version : 1 description : My OS Image author : me@domain.tld tarball : /path/to/IMAGE_FILE.tgz|tgz postinstall : /grid5000/postinstalls/debian-x64-min-1.0-post.tgz|tgz|traitement.ash /rambin kernel : /path/to/the/kernel/in/the/image initrd : /path/to/the/initrd/in/the/image fdisktype : 83 filesystem : ext3 environment_kind : linux visibility : shared
Note: You can use Grid'5000 files for the postinstall
Note: For linux systems, most of times the path to the kernel file is /vmlinuz
and the path to the initrd is /initrd.img
. You can locate those files by connecting to NODE
and checking the /mnt/myos
directory.
- Test it !
Tune an environment to build another one: customize authentification parameters
Here you will learn to connect to a deployed environment, customize and add it to Kadeploy3 database with kaenv3
.
Connect to the deployed environment and customize it
Connection
On reference environments managed by the staff, you can use root
account for login through ssh
(kadeploy checks that sshd is running before declaring success of a deployment). To connect to the node type :
In case this doesn't work, please take a look at the kadeploy section of the Sidebar > FAQ
Customization
Using the root
account for all your experiments is possible, but you will probably be better off creating a user account. You could even create user accounts for all the users that would be using your environment. However, if the number of users is greater than 2 or 3, you should better configure an LDAP client by tuning the post-install script or using a fat version of this script (beyond the scope of this tutorial). Two ways of doing things.
The simplest is to create a dedicated account (e.g. the generic user g5k
) and move in all experiment data at the beginning and back at the end of an experiment, using scp
or rsync
. A more elaborate approach is to locally recreate our usual Grid'5000 account with the same uid/gid on our deployed environment. This second approach could simplify file rights management if you need to store temporary data on shared volumes.
To create your local unix group on your environment, first find your primary group on the frontend
node with:
The output of this command is for instance of the form:
uid=19002(dmargery) gid=19000(rennes) groups=9998(CT),9999(grid5000),19000(rennes)
Where :
userId
= 19002userLogin
= dmargerygroupId
= 19000groupName
= rennes
Then, as root, on the deployed machine:
Now, to enable access to your local user account on your environment, as root, on the deployed machine:
Finally, as root, become the newly created user and place your ssh key:
![]() |
node :
|
su - userLogin mkdir ~/.ssh exit cp /root/.ssh/authorized_keys /home/userLogin /.ssh/ chown userLogin :groupName /home/userLogin /.ssh/authorized_keys |
Now you can login to the node with your user account
Adding software to an environment
Where you learn to install software using the package repository of your distribution on Grid'5000 (using proxys)...
You can therefore update your environment (to add missing libraries that you need, or remove packages that you don't so that sizes down the image and speeds up the deployment process, etc.) using:
![]() |
node :
|
apt-get update apt-get upgrade apt-get install list of desired packages and libraries apt-get --purge remove list of unwanted packages apt-get clean |
![]() |
Note |
---|---|
On reference environments, |
Create a new environment from a customized environment
We now need to save this customized environment, where you have a user account, to be able to use this account again each time you deploy it.
The first step to create an environment is to create an archive of the node you just customized. Because of the various implementations of the /dev
filesystem tree, this can be a more or less complex operation.
![]() |
Warning |
---|---|
udev, a rule based daemon which helps with hardware detection on Linux systems, can have unexpected behaviour when deploying the same environment on multiple nodes, especially with network interfaces naming. On Debian based systems, once deployed and booted, your system could have network interfaces named eth{2..n} instead of eth0. You are advised to delete the appropriate udev rules before creating the archive: This warning applies for manual and dd methods explained below . But does not apply for the tgz-g5k method since late versions oftgz-g5k (from version 1.0.7) automatically removes those unnecessary files.
|
Use the provided tools
- You can use TGZ-G5K, a script installed in all reference environments. You can find all instructions on how to use it on its TGZ-G5K page.
Examples :
This will create a file path_to_image.tgz
into your home directory on frontend
. The first example is to be preferred, as it can ran password-less or passphrase-less without adding your private key to the image.
Describe the newly created environment for deployments
Kadeploy3 works using an environment description. The easiest way to create a description for your new environment is to change the description of the environment it is based on. We have based this tutorial on the squeeze-x64-base
environment of user deploy
. We therefore print its description to a file that will be used as a good basis:
It should be edited to change the name
, description
, author
lines, as well as the tarball
line. The visibility line should be removed, or changed to shared
or private
. Once this is done, the newly created environment can be deployed using:
This kind of deployment is called anonymous deployment because the description is not recorded into the Kadeploy3 database. It is particularly useful when you perform the tuning of your environment if you have to update the environment tarball several times.
Once your customized environment is successfully tuned, you can save it to Kadeploy3 database so that you can directly deploy it with kadeploy3
, by specifying its name:
With kaenv3
command, you can manage your environments at your ease. Please refer to its documentation for an overview of its features.
Tuning the Kadeploy3 deployment workflow (curious users)
kadeploy3
allows to fully modify the deployment workflow.
First of all you have to understand the different steps of a deployment. There are 3 macro-steps:
SetDeploymentEnv
: this step aims at setting up the deployment environment that contains all the required tools to perform a deployment ;BroadcastEnv
: this step aims at broadcasting the new environment to the nodes and writing it to disk;BootNewEnv
: this step aims at rebooting the nodes on their new environment.
kadeploy3
provides several implementations for each of those 3 macro-steps. You can consult that list in the kadeploy3 page.
In Grid'5000, we use the following steps by default in all our clusters :
SetDeploymentEnv
->SetDeploymentEnvUntrusted
: use an embedded deployment environmentBroadcastEnv
->BroadcastEnvKastafior
: use the Kastafior tool to broadcast the environmentBootNewEnv
->BootNewEnvKexec
: the nodes use kexec to reboot (if it fails, aBootNewEnvClassical
, classical reboot, will be performed)
Each one of these implementations is divided in micro steps. You can can see the name of those micro-steps if you use the kadeploy3 option --verbose-level 4
. And to see what is actually executed during those micro-steps you can add the debug option of kadeploy3 -d
![]() |
frontend :
|
kadeploy3 -f $OAR_FILE_NODES -k -e squeeze-x64-base --verbose-level 4 -d > ~/kadeploy3_steps |
This command will store the kadeploy3 standard output in the file ~/kadeploy3_steps
. Lets analyse its content:
This command will print on the terminal all the micro-steps executed during the deployment process, and the time spent for each execution. Here are the micro-steps that you should see:
SetDeploymentEnvUntrusted
-switch_pxe
: Configures the PXE server so that this node will boot on an environment that contains all the required tools to perform the deployment,SetDeploymentEnvUntrusted
-reboot
: Sends a reboot signal to the nodeSetDeploymentEnvUntrusted
-wait_reboot
: Waits for the node to restart.SetDeploymentEnvUntrusted
-send_key_in_deploy_env
: Sends kadeploy's user's ssh public key into the node's authorized_keys to ease the following ssh connections,SetDeploymentEnvUntrusted
-create_partition_table
: Creates the partition tableSetDeploymentEnvUntrusted
-format_deploy_part
: Format the partition where your environment will be installed. This partition is by default /dev/sda3SetDeploymentEnvUntrusted
-mount_deploy_part
: Mounts the deployment partition in a local directory.SetDeploymentEnvUntrusted
-format_tmp_part
: Format the partition defined as tmp (by default, /dev/sda5)SetDeploymentEnvUntrusted
-format_swap_part
: Format the swap partitionBroadcastEnvKastafior
-send_environment
: Sends your environments into the node and untar it into the deployment partition.BroadcastEnvKastafior
-manage_admin_post_install
: Execute post installation instructions defined by the site admins, in general to adapt to the specificities of the cluster: console baud rate, Infiniband, Myrinet, proxy address,...BroadcastEnvKastafior
-manage_user_post_install
: Execute user defined post installation instructions to automatically configure its node depending on its cluster, site, network capabilities, disk capabilities,...BroadcastEnvKastafior
-send_key
: Sends the user public ssh key(s) to the node (if the user specified it with the option-k
).BroadcastEnvKastafior
-install_bootloader
: Properly configures the bootloaderBootNewEnvKexec
-switch_pxe
: Configure the PXE server so that this node will boot on the partition where your environment has been installedBootNewEnvKexec
-umount_deploy_part
: Umount the deployment partition from the directory where it has been mounted during the step 7.BootNewEnvKexec
-mount_deploy_part
: ReMount the deployment partitionBootNewEnvKexec
-kexec
: Perform a kexec reboot on the nodeBootNewEnvKexec
-set_vlan
: Properly configure the node's VLANBootNewEnvKexec
-wait_reboot
: Wait for the node to be up.
That is it. You now know all the default micro-steps used to deploy your environments.
![]() |
Note |
---|---|
It is recommended to consult the Node storage page to understand which partition is used at which step. |
Adjusting timeout for some environments
Since kadeploy3
provides multiple macro-steps and micro-steps, its is important to detect when a step in failing its execution. This error detection is done by using timeout on each step. When a timeout is reached, the nodes that have not completed the given step are discarded from the deployment process.
The value of those timeouts varies from one cluster to another since they depend on the hardware configuration (network speed, hard disk speed, reboot speed, ...).
All defaults timeouts are entered in the configurations files on the kadeploy3 server. But you can consult the default timeouts of each macro-steps by using the command kastat3
gsimo,gdx-121.orsay.grid5000.fr,SetDeploymentEnvUntrusted,BroadcastEnvKastafior,BootNewEnvClassical,550,600,400,0,0,0,1302763272,107,50,0,squeeze-x64-base:5,false,,true,
This command will simply print information of the last deployment made on that site. The format of the output is the following :
user,hostname,step1,step2,step3,timeout_step1,timeout_step2,timeout_step3,retry_step1,retry_step2,retry_step3,start,step1_duration,step2_duration,step3_duration,env,md5,success,error
You can verify the format by asking for help to kastat3, and look for the option --field
:
![]() |
Note |
---|---|
Please consult the kastat3 page for more features information. |
Nevertheless, kadeploy3
allow users to change timeouts in the command line. In some cases, when you try to deploy an environment with a large tarball or with a post-install that lasts too long, you may get discarded nodes. This false positive behavior can be avoided by manually modifying the timeouts for each step at the deployment time.
For instance, in our previous example, the timeout of each steps are:
SetDeploymentEnvUntrusted
: 550BroadcastEnvKastafior
: 600BootNewEnvClassical
: 400
You can increase the timeout of the second step to 1200 seconds with the following command :
![]() |
frontend :
|
kadeploy3 -e my_big_env -f $OAR_FILE_NODES -k --force-steps "SetDeploymentEnv|SetDeploymentEnvUntrusted:1:450&BroadcastEnv|BroadcastEnvKastafior:1:1200&BootNewEnv|BootNewEnvClassical:1:400" |
Set Break-Point during deployment
As mentioned in the section above, a deployment is a succession of micro steps that can be consulted and modified.
Moreover, kadeploy3
allows user to set a break-point during deployment.
![]() |
frontend :
|
kadeploy3 -f $OAR_FILE_NODES -k -e squeeze-x64-base --verbose-level 4 -d --breakpoint BroadcastEnvKastafior :manage_user_post_install |
This command can be used for debugging purpose. It performs a deployment with the maximum verbose level and it asks to stop the deployment workflow just before executing the manage_user_post_install micro-step of the BroadcastEnvKastafior macro-step. Thus you will be able to connect in the deployment environment and to manually run the user post install script to debug it.