Prepare an offline copy for an air-gapped cluster
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
dockeranddocker-composeare 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
dockergroup: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-bootstrapdirectory created by the script.Identify the
container-cloudtool version:./container-cloud versionExample of system response:
Git Version: 1.42.26
Create and configure
~/kaas-bootstrap/airgapped.envusing the following variables. Define the required versions depending on thecontainer-cloudtool 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
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-toolsas described in Set up airgapped-tools.Estimate the size of all artifacts in the tarball:
./airgapped.sh inspectExample 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 SizeandImages Sizecolumns.By default, a
ReleaseArtifactstarball contains artifacts for everyClusterReleasethat 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 SizeandImages 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 Sizecolumn. 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-filesExample 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
KaasReleaseandClusterReleases. 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
KaasReleaseandClusterReleasesand network connection, the process may take up to a few hours. The offline copy files are created in the directory set using theAIRGAPPED_WORKSPACEvariable.To monitor the sync status in JSON format, add the
--jsonflag: 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
--jsonflag: 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.
If the validation fails with the Size mismatch and Digest mismatch errors, use the workaround for the known issue 59171.
Export the following Docker images for the node dedicated for the offline copy:
airgapped-toolsnginxregistry
Use the helper
docker-save.shscript: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.shscript 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.pyscript 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-bootstrapdirectory toAIRGAPPED_WORKSPACE:cp -r ~/kaas-bootstrap "${AIRGAPPED_WORKSPACE}"
Transfer the entire
AIRGAPPED_WORKSPACEdirectory of the offline copy to the airgapped environment.
Proceed to Create a local mirror.