Mirantis Container Cloud (MCC) becomes part of Mirantis OpenStack for Kubernetes (MOSK)!
Starting with MOSK 25.2, the MOSK documentation set covers all product layers, including MOSK management (formerly MCC). This means everything you need is in one place. The separate MCC documentation site will be retired, so please update your bookmarks for continued easy access to the latest content.
Prepare an offline copy for an air-gapped cluster¶
Available since MCC 2.30.0 (21.0.0 and 20.0.0) TechPreview
After you prepare resources as described in Requirements for air-gapped clusters, proceed to creating an offline copy of files and images required to deploy a MOSK cluster.
Set up airgapped-tools¶
Ensure
docker
anddocker-compose
are installed. For details, see Docker documentation: Install Docker Engine on Ubuntu.Ensure an unprivileged user can execute the docker command:
Add your current user to the
docker
group:sudo usermod -a -G sudo $(whoami)
Log out and log back in so that your group membership is re-evaluated.
Download and run the latest bootstrap script:
wget https://binary.mirantis.com/releases/get_container_cloud.sh chmod +x get_container_cloud.sh ./get_container_cloud.sh
Change the directory to the
kaas-bootstrap
directory created by the script.Identify the
container-cloud
tool version:./container-cloud version
Example of system response:
Git Version: 1.42.26
Create and configure
~/kaas-bootstrap/airgapped.env
using the following variables. Define the required versions depending on thecontainer-cloud
tool version. For example:AIRGAPPED_WORKSPACE=/opt/airgapped AIRGAPPED_IMAGE=mirantis.azurecr.io/core/airgapped-tools:1.42.26 RELEASE_ARTIFACTS_TAR=release_artifacts-mcc_2.29.6.tar.gz RELEASES_TAR=release_files-mcc_2.29.6.tar.gz
Environment variables for airgapped.env¶ Variable
Description
AIRGAPPED_WORKSPACE
The workspace directory where all content will be stored. Consider mounting an external volume at that location if running inside a cloud VM, for example, using OpenStack. An offline copy may consume a significant amount of disk space (~10 GiB per
KaasRelease
+ ~50-130 GiB perClusterRelease
). When selecting the volume size, add 20% to the total size, calculated by the inspect command.AIRGAPPED_IMAGE
The main entrypoint for the
airgap
tool. The image version must match thecontainer-cloud
tool version obtained in the previous step.RELEASE_ARTIFACTS_TAR
Name of the tarball file with artifacts metadata. Its version matches the required
KaasRelease
version defined in/kaas-bootstrap/releases/kaas/<version>.yaml
.RELEASES_TAR
Name of the tarball file with files metadata. Its version matches the required
KaasRelease
version defined in/kaas-bootstrap/releases/kaas/<version>.yaml
.
Estimate storage size¶
An offline copy and private mirror consist of regular files (text, binaries, archives, and so on) and Docker images (layers and metadata). The offline copy uses deduplication for efficient space usage and does not keep the same content of a file twice even if the file uses different names. Due to this reason, different rules are used below to estimate the required size for the offline copy volume and for private mirror storage.
Each release that is a ReleaseArtifacts
tarball contains metadata for a
single KaasRelease
and multiple ClusterReleases
. Mirantis recommends
synchronizing KaasRelease
and only those ClusterRelease
versions that
you use for cluster deployment or update.
To estimate storage size of a private mirror and offline copy:
Set up
airgapped-tools
as described in Set up airgapped-tools.Estimate the size of all artifacts in the tarball:
./airgapped.sh inspect
Example of system response:
2025-08-20 16:21:26 [INFO ] Inspecting ArtifactsTarball 'release_artifacts-mcc_2.29.6.tar.gz' (/workspace/release_artifacts-mcc_2.29.6.tar.gz) ... +-------------+---------------------+-------------+------------+--------------+-------------+-------------+------------+ | KaaSRelease | ClusterRelease | Files Count | Files Size | Images Count | Images Size | Total Count | Total Size | +-------------+---------------------+-------------+------------+--------------+-------------+-------------+------------+ | kaas-2-29-6 | | 109 | 26.0GiB | 387 | 2.9GiB | 496 | 28.9GiB | | kaas-2-29-6 | mke-16-3-0-3-7-12 | 83137 | 86.8GiB | 1054 | 9.2GiB | 84191 | 96.1GiB | | kaas-2-29-6 | mke-16-3-10-3-7-23 | 43065 | 44.9GiB | 1085 | 9.0GiB | 44150 | 53.9GiB | | kaas-2-29-6 | mke-16-3-4-3-7-17 | 83569 | 89.2GiB | 1064 | 8.8GiB | 84633 | 98.1GiB | | kaas-2-29-6 | mke-16-3-5-3-7-18 | 83445 | 90.4GiB | 1064 | 8.8GiB | 84509 | 99.2GiB | | kaas-2-29-6 | mke-16-3-6-3-7-20 | 42904 | 43.9GiB | 1063 | 8.8GiB | 43967 | 52.7GiB | | kaas-2-29-6 | mke-16-3-7-3-7-20 | 42921 | 43.6GiB | 1062 | 8.7GiB | 43983 | 52.4GiB | | kaas-2-29-6 | mke-16-3-8-3-7-22 | 42921 | 43.6GiB | 1061 | 8.8GiB | 43982 | 52.4GiB | | kaas-2-29-6 | mke-16-3-9-3-7-23 | 43028 | 44.5GiB | 1085 | 8.9GiB | 44113 | 53.4GiB | | kaas-2-29-6 | mke-16-4-0-3-7-19 | 42822 | 43.5GiB | 1085 | 8.7GiB | 43907 | 52.2GiB | | kaas-2-29-6 | mke-16-4-1-3-7-20 | 42905 | 43.9GiB | 1085 | 8.8GiB | 43990 | 52.7GiB | | kaas-2-29-6 | mke-16-4-2-3-7-20 | 42922 | 43.6GiB | 1085 | 8.8GiB | 44007 | 52.4GiB | | kaas-2-29-6 | mke-16-4-3-3-7-22 | 42922 | 43.6GiB | 1084 | 8.8GiB | 44006 | 52.5GiB | | kaas-2-29-6 | mke-16-4-4-3-7-23 | 43029 | 44.5GiB | 1108 | 8.9GiB | 44137 | 53.4GiB | | kaas-2-29-6 | mke-16-4-5-3-7-23 | 43066 | 44.9GiB | 1108 | 9.0GiB | 44174 | 53.9GiB | | kaas-2-29-6 | mke-16-4-6-3-7-24 | 43317 | 45.1GiB | 1109 | 9.1GiB | 44426 | 54.2GiB | | kaas-2-29-6 | mosk-17-3-0-24-3 | 83191 | 90.1GiB | 2007 | 34.0GiB | 85198 | 124.1GiB | | kaas-2-29-6 | mosk-17-3-10-24-3-7 | 43083 | 48.2GiB | 2007 | 34.3GiB | 45090 | 82.5GiB | | kaas-2-29-6 | mosk-17-3-4-24-3-1 | 83587 | 92.6GiB | 2020 | 33.8GiB | 85607 | 126.4GiB | | kaas-2-29-6 | mosk-17-3-5-24-3-2 | 83463 | 93.7GiB | 2020 | 33.7GiB | 85483 | 127.5GiB | | kaas-2-29-6 | mosk-17-3-6-24-3-3 | 42922 | 47.2GiB | 2019 | 34.4GiB | 44941 | 81.6GiB | | kaas-2-29-6 | mosk-17-3-7-24-3-4 | 42939 | 47.0GiB | 2032 | 34.8GiB | 44971 | 81.7GiB | | kaas-2-29-6 | mosk-17-3-8-24-3-5 | 42939 | 47.0GiB | 2034 | 34.9GiB | 44973 | 81.9GiB | | kaas-2-29-6 | mosk-17-3-9-24-3-6 | 43046 | 47.8GiB | 2033 | 34.6GiB | 45079 | 82.4GiB | | kaas-2-29-6 | mosk-17-4-0-25-1 | 42842 | 47.1GiB | 1745 | 27.0GiB | 44587 | 74.1GiB | | kaas-2-29-6 | mosk-17-4-6-25-1-1 | 43337 | 48.6GiB | 1704 | 27.1GiB | 45041 | 75.7GiB | | * | * | 1317431 | 1.4TiB | 36210 | 464.6GiB | 1353641 | 1.9TiB | +-------------+---------------------+-------------+------------+--------------+-------------+-------------+------------+
The last row with asterisks displays estimated sizes for files, images, and total files together with images for all selected versions. When estimating the size for a private mirror, pay attention to values in the
Files Size
andImages Size
columns.By default, a
ReleaseArtifacts
tarball contains artifacts for everyClusterRelease
that is supported by oneKaasRelease
. For an initial deployment, it is enough to mirror only theKaasRelease
(first row in the example above) and twoClusterReleases
: one release with themke-
prefix that has the latest version and one release with themosk-
prefix:A major
mosk-
version contains five numbers (for example,mosk-17-4-0-25-1
)A patch
mosk-
version contains six numbers (for example,mosk-17-4-0-25-1-1
)
For the latest supported major and patch releases, see Release Notes. For differences between major and patch releases, see MOSK major and patch releases.
Select one
mke-
and onemosk-
release depending on your use case. Mirantis recommends using the latest available releases.Estimate the size of only necessary deduplicated artifacts for the offline copy. For example:
./airgapped.sh inspect \ --kaas-release kaas-2-29-6 \ --cluster-release mke-16-4-6-3-7-24 \ --cluster-release mosk-17-4-6-25-1-1 \ --unique
Example of system response:
2025-08-20 16:31:58 [INFO ] Inspecting ArtifactsTarball 'release_artifacts-mcc_2.29.6.tar.gz' (/workspace/release_artifacts-mcc_2.29.6.tar.gz) ... +-------------+--------------------+-------------+------------+--------------+-------------+-------------+------------+ | KaaSRelease | ClusterRelease | Files Count | Files Size | Images Count | Images Size | Total Count | Total Size | +-------------+--------------------+-------------+------------+--------------+-------------+-------------+------------+ | kaas-2-29-6 | | 86 | 10.7GiB | 317 | 2.7GiB | 403 | 13.4GiB | | kaas-2-29-6 | mke-16-4-6-3-7-24 | 43223 | 43.1GiB | 670 | 6.7GiB | 43893 | 49.7GiB | | kaas-2-29-6 | mosk-17-4-6-25-1-1 | 10 | 1.5GiB | 537 | 14.9GiB | 547 | 16.4GiB | | * | * | 43319 | 55.2GiB | 1524 | 24.3GiB | 44843 | 79.6GiB | +-------------+--------------------+-------------+------------+--------------+-------------+-------------+------------+
Mirantis recommends adding 20% to the total of
Files Size
andImages Size
. For example: 79.6 GiB + 20% = 95.52 GiB.Estimate a demo CDN storage size for a quick export of files from an offline copy through HTTP/HTTPS and Docker registry. For details, see Demo CDN storage size.
Warning
Do not use the demo CDN in production deployments.
To estimate the volume size for the Docker registry to use a demo CDN, use the following example:
./airgapped.sh inspect \ --kaas-release kaas-2-29-6 \ --cluster-release mke-16-4-6-3-7-24 \ --cluster-release mosk-17-4-6-25-1-1 \ --unique
Example of system response:
2025-08-20 16:31:58 [INFO ] Inspecting ArtifactsTarball 'release_artifacts-mcc_2.29.6.tar.gz' (/workspace/release_artifacts-mcc_2.29.6.tar.gz) ... +-------------+--------------------+-------------+------------+--------------+-------------+-------------+------------+ | KaaSRelease | ClusterRelease | Files Count | Files Size | Images Count | Images Size | Total Count | Total Size | +-------------+--------------------+-------------+------------+--------------+-------------+-------------+------------+ | kaas-2-29-6 | | 86 | 10.7GiB | 317 | 2.7GiB | 403 | 13.4GiB | | kaas-2-29-6 | mke-16-4-6-3-7-24 | 43223 | 43.1GiB | 670 | 6.7GiB | 43893 | 49.7GiB | | kaas-2-29-6 | mosk-17-4-6-25-1-1 | 10 | 1.5GiB | 537 | 14.9GiB | 547 | 16.4GiB | | * | * | 43319 | 55.2GiB | 1524 | 24.3GiB | 44843 | 79.6GiB | +-------------+--------------------+-------------+------------+--------------+-------------+-------------+------------+
In the example above, use the value from the last row of the
Images Size
column. The configuration disk size must be 24.3 GiB + 80 GiB = 104.3 GiB.
Fetch the release_files tarball and sync data¶
Change the directory to
~/kaas-bootstrap
.Fetch the required
release_files-<version>
tarball:./airgapped.sh fetch-release-files
Example of system response extract:
2025-08-13 16:35:13 [INFO ] Fetching release files ... 2025-08-13 16:35:14 [INFO ] Processing KaasRelease files ... 2025-08-13 16:35:21 [INFO ] Processing ClusterRelease files ... 2025-08-13 16:35:40 [INFO ] Processing DiagnosticRelease files ... 2025-08-13 16:35:40 [INFO ] Creating Release files tarball '/workspace/./release_files-mcc_2.29.6.tar.gz' from '/tmp/tmp5bqihq38' ... 2025-08-13 16:35:41 [INFO ] Release files fetched.
Sync the selected
KaasRelease
andClusterReleases
. For example:./airgapped.sh sync \ --kaas-release kaas-2-29-6 \ --cluster-release mke-16-4-6-3-7-24 \ --cluster-release mosk-17-4-6-25-1-1
Example of system response extract:
... 2025-08-13 16:11:28 [INFO ] Synchronizing files ... 2025-08-13 16:25:19 [INFO ] Synchronizing images ... 2025-08-13 16:30:00 [INFO ] Synchronizing files - OK. Processed 43406 files, bad files - 0. 2025-08-13 16:30:00 [INFO ] Synchronizing images - OK. Processed 161 images, bad images - 0. Processed 1319 blobs, bad blobs - 0.
Depending on the selected
KaasRelease
andClusterReleases
and network connection, the process may take up to a few hours. The offline copy files are created in the directory set using theAIRGAPPED_WORKSPACE
variable.To monitor the sync status in JSON format, add the
--json
flag: airgapped.sh --json sync .... For details, see Monitor the airgapped tool status in JSON format.Validate cached blobs to ensure that the sync was successful. For example:
./airgapped.sh validate --cached \ --kaas-release kaas-2-29-6 \ --cluster-release mke-16-4-6-3-7-24 \ --cluster-release mosk-17-4-6-25-1-1
Example of system response extract:
2025-08-13 16:38:10 [INFO ] Validating files ... 2025-08-13 16:38:10 [INFO ] Validating cached files ... 2025-08-13 16:38:22 [INFO ] Validating cached files - OK. Total files - 43406, bad files - 0. 2025-08-13 16:38:22 [INFO ] Validating files - OK. 2025-08-13 16:38:22 [INFO ] Validating images ... 2025-08-13 16:38:22 [INFO ] Validating cached images ... 2025-08-13 16:38:22 [INFO ] Validating cached images - OK. Total images - 161, bad images - 0, total blobs - 1319, bad blobs - 0. 2025-08-13 16:38:22 [INFO ] Validating images - OK.
To monitor the validation status in JSON format, add the
--json
flag: airgapped.sh --json validate --cached .... For details, see Monitor the airgapped tool status in JSON format.If some artifacts are missing:
Repeat the sync step.
Repeat the cached artifacts validation step.
Export the following Docker images for the node dedicated for the offline copy:
airgapped-tools
nginx
registry
Use the helper
docker-save.sh
script:Download the script:
Save the script in the same directory as
airgapped.env
.Make the script executable and run it:
chmod +x ./docker-save.sh ./docker-save.sh
Prepare the helper
docker-load.sh
script for importing Docker images:Download the script:
Save the script in
${AIRGAPPED_WORKSPACE}/kaas-bootstrap
.Make the script executable:
chmod +x ./docker-load.sh
Prepare the helper
make-artifacts-list.py
script for generating complete lists of artifacts available on each type of demo CDN. These lists help copy artifacts from a demo to a private CDN.Download the script:
Save the script in
${AIRGAPPED_WORKSPACE}/kaas-bootstrap
.Make the script executable:
chmod +x ./make-artifacts-list.py
Copy the
kaas-bootstrap
directory toAIRGAPPED_WORKSPACE
:cp -r ~/kaas-bootstrap "${AIRGAPPED_WORKSPACE}"
Transfer the entire
AIRGAPPED_WORKSPACE
directory of the offline copy to the airgapped environment.
Proceed to Create a local mirror.