Deployment Packages
===================
Deployment Packages and Applications are a concept introduced in the
|software_prod_name|.
They are used to simplify the deployment of applications to the edge.
Deployment Packages are a collection of Applications and Deployment
Profiles. Deployment Profiles are configurations that define how an
Application should be deployed to an Edge Node.
See :doc:`/developer_guide/app_orch/arch/data_model`
for a detailed explanation of the data model. The diagram gives an
overview of the relationships between Deployment Packages, Applications
and their Profiles and Registries.
.. figure:: ../images/deployment-package-relationships.png
:alt: Deployment Packages and relationships
Creating a Deployment Package
------------------------------
A user may use the |software_prod_name| Web UI to create an Application
and Deployment Package through a series of steps in the web pages **OR**
may choose to create them as YAML files and import these into the Web UI
before deploying them to an Edge Node. A comprehensive guide on how to
create Deployment Packages and Applications in the Web UI can be found
in the :doc:`/user_guide/package_software/index`.
The :doc:`/api/app_catalog` also allows uploading of multiple YAML formatted
files together.
When using the YAML format, the user should use `yamllint
`_ to check the syntax of the YAML
files and the `YAML schema
`_
to validate that the file is structured correctly. Many IDEs allow importing a
YAML schema to aid in the editing process. These checks will also be applied by
the API and UI when the files are uploaded.
Deployment Package structure
----------------------------
The layout of Deployment Packages and Applications is designed to
simplify deployments. At its core:
- Applications represent a 1:1 link to a Helm Chart through the
combination of a Chart Name and Registry.
- The Registry is a reference to a container registry that holds the
Helm Chart, with the ability to set a password and SSL certificate if
necessary. The Registry is a global object that can be used by multiple
Applications.
- A set of Registries are already loaded into the |software_prod_name|
platform and may be reused.
- Each Application Profile refers to a values file that is used to
configure the Helm Chart.
- This allows the user to easily group different configurations for the
same Helm Chart.
- A Deployment Package is a collection of Applications.
- A Deployment Profile is a collection of Applications Profiles.
- This allows the user to easily choose Application Profiles for many
Applications at deploy time.
.. note:: There always needs to be a Deployment Package, even if it has
only a reference to one Application (Helm Chart), as this is the
principal unit of deployment.
Here's a `Reference Deployment Package`_ for the example application
shown in :doc:`/user_guide/package_software/quick_start_guide`.
Deployment Package design strategies
-------------------------------------
If you need to deploy multiple Helm Charts together, there are a few
strategies you can use:
- Create an Application for each Helm Chart and a single Deployment
Package that contains all the Applications **OR**
- Create an "umbrella" Helm Chart that contains all the Helm Charts and
create a single Application and Deployment Package **OR**
- Create multiple Deployment Packages, each with one or more Applications
**OR**
- Any combination of the above
The choice of strategy will depend on the complexity of the deployment
and the need for reusability.
.. note:: It is also possible to reuse some of the "Extensions" Deployment
Packages that are provided by the |software_prod_name| team. See more on
Extensions at :doc:`../../app_orch/arch/data_model`
Deployment Packages have a number of features that make it worthwhile
taking the multiple Applications with a single Deployment Package
approach:
- You can have many different Profiles for each Application, allowing you
to configure each Application differently.
- You can assign Namespaces to each application individually.
- You can assign different Registries to each Application.
- You can mark that one Application is dependent on another being
installed first.
- You can define namespaces with labels and annotations to be created
before the Application is installed.
.. note:: Having a single Deployment Package with multiple Applications
allows you to deploy them in a single step.
Fine tuning Applications
-------------------------
Applications have a number of features that allow you to fine-tune the
deployment:
- **Application Profiles**, which are like value files in Helm Charts,
allow a variety of scenarios to be catered for at deployment time.
- **Parameter Templates** allow further fine-tuning at deployment time.
These are used to specify values that are impossible to know at the
time of creating the values file. They can be marked as required or
optional, secret or plain text, or given default values.
- **Ignore Resources** allows you to ignore changes to certain Kubernetes
resources that will be deployed by the Helm Chart.
- This is useful in the case where some Job or Hook in the Helm Chart
changes a value in the resource after deployment from what was
originally specified in the Helm Chart. Because |software_prod_name|
tracks all changes to Resources by default, this feature can provide
the flexibility to ignore certain changes, thereby allowing the
deployment to complete.
Reference Deployment Package
----------------------------
Store the content mentioned here in the specified files in a folder on
your local machine and import the folder into the |software_prod_name| through
Import Deployment Package. See
:doc:`/user_guide/package_software/import_deployment`.
deployment-package.yaml::
# SPDX-FileCopyrightText: (C) 2025 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
specSchema: DeploymentPackage
schemaVersion: "0.1"
$schema: "https://schema.intel.com/catalog.orchestrator/0.1/schema"
description: "My Hello World Deployment Package"
name: "hello-world-dp"
displayName: "hello-world-dp"
version: "0.1.0"
applications:
- name: hello-world-app
version: "0.1.0"
defaultNamespaces:
hello-world-app: hello-world
application.yaml::
# SPDX-FileCopyrightText: (C) 2025 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
specSchema: Application
schemaVersion: "0.1"
$schema: "https://schema.intel.com/catalog.orchestrator/0.1/schema"
name: hello-world-app
version: "0.1.0"
description: "My hello world app"
imageRegistry: "harbor-docker-oci"
helmRegistry: "harbor-helm-oci"
chartName: "hello-world"
chartVersion: "0.1.0"
profiles:
- name: "default"
valuesFileName: "hello-world-values.yaml"
hello-world-values.yaml::
# SPDX-FileCopyrightText: (C) 2025 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
---
service:
type: ClusterIP
replicaCount: 1
imagePullSecrets:
- name: '%GeneratedDockerCredential%'
.. note::
Refer to Image Pull Secrets
:doc:`/user_guide/package_software/image_pull_secret` to understand the
usage of ``%GeneratedDockerCredential%``.