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

  1. Ensure docker and docker-compose are installed. For details, see Docker documentation: Install Docker Engine on Ubuntu.

  2. Ensure an unprivileged user can execute the docker command:

    1. Add your current user to the docker group:

      sudo usermod -a -G sudo $(whoami)
      
    2. Log out and log back in so that your group membership is re-evaluated.

  3. 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
    
  4. Change the directory to the kaas-bootstrap directory created by the script.

  5. Identify the container-cloud tool version:

    ./container-cloud version
    

    Example of system response:

    Git Version: 1.42.26
    
  6. Create and configure ~/kaas-bootstrap/airgapped.env using the following variables. Define the required versions depending on the container-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 per ClusterRelease). 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 the container-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:

  1. Set up airgapped-tools as described in Set up airgapped-tools.

  2. 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 and Images Size columns.

    By default, a ReleaseArtifacts tarball contains artifacts for every ClusterRelease that is supported by one KaasRelease. For an initial deployment, it is enough to mirror only the KaasRelease (first row in the example above) and two ClusterReleases: one release with the mke- prefix that has the latest version and one release with the mosk- 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.

  3. Select one mke- and one mosk- release depending on your use case. Mirantis recommends using the latest available releases.

  4. 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 and Images Size. For example: 79.6 GiB + 20% = 95.52 GiB.

  5. 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

  1. Change the directory to ~/kaas-bootstrap.

  2. 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.
    
  3. Sync the selected KaasRelease and ClusterReleases. 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 and ClusterReleases and network connection, the process may take up to a few hours. The offline copy files are created in the directory set using the AIRGAPPED_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.

  4. 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:

    1. Repeat the sync step.

    2. Repeat the cached artifacts validation step.

  5. Export the following Docker images for the node dedicated for the offline copy:

    • airgapped-tools

    • nginx

    • registry

    Use the helper docker-save.sh script:

    1. Download the script:

      docker-save.sh

    2. Save the script in the same directory as airgapped.env.

    3. Make the script executable and run it:

      chmod +x ./docker-save.sh
      ./docker-save.sh
      
  6. Prepare the helper docker-load.sh script for importing Docker images:

    1. Download the script:

      docker-load.sh

    2. Save the script in ${AIRGAPPED_WORKSPACE}/kaas-bootstrap.

    3. Make the script executable:

      chmod +x ./docker-load.sh
      
  7. 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.

    1. Download the script:

      make-artifacts-list.py

    2. Save the script in ${AIRGAPPED_WORKSPACE}/kaas-bootstrap.

    3. Make the script executable:

      chmod +x ./make-artifacts-list.py
      
  8. Copy the kaas-bootstrap directory to AIRGAPPED_WORKSPACE:

    cp -r ~/kaas-bootstrap "${AIRGAPPED_WORKSPACE}"
    
  9. Transfer the entire AIRGAPPED_WORKSPACE directory of the offline copy to the airgapped environment.

Proceed to Create a local mirror.