Deploy Additional Packages¶
This section explains how to download and deploy additional software packages and container images on the cluster nodes using Omnia local repositories.
Overview¶
Omnia supports deploying additional packages and container images at two stages:
- During first-time deployment -- Packages are included in the cluster node images before provisioning.
- After cluster provisioning -- Packages are added to running nodes post-deployment.
For adding extra RPM repositories (not individual packages), see Deploy Additional Repositories.
Prerequisites¶
Configure additional container images from a user registry to the local repository. Omnia supports configuring additional container images from specified user registries to the Omnia Local Repository, so that these images are available and can be pulled by Service Kubernetes Cluster nodes as per requirement. User registries may be hosted either on OIM or on an external server, and both HTTP and HTTPS registries are supported.
- To view the steps to set up an HTTP user registry, see Set Up an HTTP User Registry.
- To view the steps to set up an HTTPS user registry, see Set Up an HTTPS User Registry.
After the registry is ready, mention the inputs in local_repo_config.yml.
See Local Repo Config.
Steps¶
Step 1: Add additional_packages to software_config.json¶
Open /opt/omnia/input/project_default/software_config.json and add the
additional_packages entry under the softwares list. Also define the
additional_packages section to specify which node roles should receive the
additional packages.Save the software_config.json file.
Sample software_config.json with additional_packages enabled:
{
"cluster_os_type": "rhel",
"cluster_os_version": "10.0",
"repo_config": "partial",
"softwares": [
{"name": "default_packages", "arch": ["x86_64","aarch64"]},
{"name": "additional_packages", "arch": ["x86_64","aarch64"]}
],
"additional_packages": [
{"name": "slurm_control_node"},
{"name": "slurm_node"},
{"name": "login_node"},
{"name": "login_compiler_node"},
{"name": "service_kube_control_plane"},
{"name": "service_kube_node"},
{"name": "os"}
]
}
Note
- Ensure the
archlist matches your cluster architecture(s). - To install debug packages, also add:
{"name": "admin_debug_packages", "arch": ["x86_64", "aarch64"]}
Step 2: Configure additional_packages.json¶
Update the additional_packages.json file at
/opt/omnia/input/project_default/config/<architecture>/rhel/10.0/ with the
required packages and images.Save the additional_packages.json file.
Each entry needs:
- For RPM packages:
package,type: "rpm", andrepo_name - For container images:
package,type: "image", andtagordigest
Sample additional_packages.json:
{
"additional_packages": {
"cluster": [
{
"package": "fuse-overlayfs",
"type": "rpm",
"repo_name": "appstream"
},
{
"package": "sssd",
"type": "rpm",
"repo_name": "baseos"
},
{
"package": "quay.io/strimzi/kafka-bridge",
"type": "image",
"tag": "0.33.1"
},
{
"package": "172.16.0.254:7000/ubuntu/squid",
"type": "image",
"tag": "latest"
}
]
},
"os": {
"cluster": [
{
"package": "podman",
"type": "rpm",
"repo_name": "appstream"
},
{
"package": "curl",
"type": "rpm",
"repo_name": "baseos"
}
]
}
}
Note
All container images specified in additional_packages.json are
configured in the Omnia local repository and can be pulled on all Service
Kubernetes Cluster nodes.
Architecture-Specific Guidelines¶
The additional_packages feature has architecture-specific functional group
support:
- x86_64:
slurm_control_node,slurm_node,login_node,login_compiler_node,service_kube_control_plane,service_kube_control_plane_first,service_kube_node,os - aarch64:
slurm_node,login_node,login_compiler_node,os
Architecture-specific JSON files are located at:
/opt/omnia/input/<project_name>/config/x86_64/rhel/<version>/additional_packages.json/opt/omnia/input/<project_name>/config/aarch64/rhel/<version>/additional_packages.json
Warning
- Kubernetes-related groups (
service_kube_*) andslurm_control_nodeare only supported on x86_64. - Include only supported functional groups for each architecture.
- Review validation logs at
/opt/omnia/log/core/playbooks/validation_omnia_<project_name>.logfor warnings.
Deploy Additional Packages During First-Time Deployment¶
-
Configure
software_config.jsonandadditional_packages.jsonas described above. -
After the local repositories are created, build the cluster node images and PXE boot the nodes using the images:
-
Build images: Build Cluster Images
- Discover nodes and PXE boot: Discover Nodes
Deploy Additional Packages After Cluster Provisioning¶
-
Configure
software_config.jsonandadditional_packages.jsonas described above. -
Re-run the
local_repo.ymlplaybook to download the new packages/images to the Pulp container. -
After the local repositories are updated:
-
Install RPM packages on the required nodes:
Run on: compute nodednf install <package-name> -
Pull container images on the required nodes (see Pulling images from a user registry via Pulp below).
-
Verify the installed packages/images:
Run on: compute nodednf list installed <package-name> crictl images
Pulling Images from a User Registry via Pulp on a Service Kubernetes Cluster¶
When the container images from a user registry are specified in the
additional_packages.json, running local_repo.yml thereafter uploads those
images to the configured Pulp registry.
After this synchronization:
- All cluster nodes must pull images from Pulp, not directly from the user registry.
- This enables centralized image management and supports offline or air-gapped environments.
Example: Image defined in additional_packages.json:
"additional_packages": {
"cluster": [
{
"package": "100.10.0.76:3445/library/nginx",
"type": "image",
"tag": "1.25.2-alpine-slim"
}
]
}
In this example, 100.10.0.76:3445 is the user registry. Omnia syncs the
image to the Pulp registry. Cluster nodes must subsequently pull the image
from Pulp.
Retrieve the Pulp Registry Endpoint¶
On the Omnia Core container, run:
pulp status | jq -r '.content_settings.content_origin'
Sample output: https://172.16.255.254:2225
Remove the https:// prefix and use only 172.16.255.254:2225.
Configure Compute Nodes to Pull from Pulp¶
On each Kubernetes compute node:
-
Edit the CRI-O configuration file:
Run on: compute nodevi /etc/containers/registries.conf.d/crio.conf -
Append this configuration at the end of the file:
[[registry]] prefix = "100.10.0.76:3445" location = "100.10.0.76:3445" [[registry.mirror]] location = "172.16.255.254:2225" -
Reload and restart CRI-O:
Run on: compute nodesystemctl daemon-reload systemctl restart crio
Pull the Image¶
Pull the image using the original registry reference (CRI-O transparently redirects to Pulp):
crictl pull 100.10.0.76:3445/library/nginx:1.25.2-alpine-slim
The image will be retrieved from the Pulp mirror automatically.
Next Steps¶
- Deploy Additional Repositories -- Add extra RPM repositories for ad-hoc package installation.
- Apptainer -- Pull and run container images using Apptainer.