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.

Create a local mirror

After you prepare an offline copy of artifacts as described in Prepare an offline copy for an air-gapped cluster, proceed to create and configure a local mirror that is a demo CDN for testing purposes and for transfering an offline copy to a private CDN. For more details about demo CDN, see Demo CDN storage size.

Prepare a demo CDN

  1. Log in to the node where the offline copy is supposed to be located.

  2. Make sure that the offline copy content is availabe in the AIRGAPPED_WORKSPACE directory by either mounting the offline copy volume to the AIRGAPPED_WORKSPACE mount point, or copying its entire content to AIRGAPPED_WORKSPACE.

  3. Change the directory to <AIRGAPPED_WORKSPACE>/kaas-bootstrap.

  4. Make sure that the AIRGAPPED_WORKSPACE variable in airgapped.env matches your airgapped workspace path.

  5. Import the helper Docker images:

    ./docker-load.sh
    
  6. Export the required files and images. For example:

    ./airgapped.sh export \
    --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-14 11:13:07 [INFO   ] Exporting files ... Reading cache
    2025-08-14 11:13:19 [INFO   ] Exporting filesystem layout ...
    2025-08-14 11:13:24 [INFO   ] Exporting filesystem layout - done.
    2025-08-14 11:13:24 [INFO   ] Exporting files - OK. Total files - 43406, failed files - 0.
    2025-08-14 11:13:24 [INFO   ] Exporting images ... Reading cache
    2025-08-14 11:13:24 [INFO   ] Exporting images to OCI layout ...
    2025-08-14 11:13:25 [INFO   ] Exporting images to OCI layout - done.
    2025-08-14 11:13:25 [INFO   ] Exporting images - OK. Total images - 161, failed images - 0.
    
  7. Initialize the demo CDN services:

    ./airgapped.sh demo --init --san-ip <DEMO_CDN_IP>
    

    DEMO_CDN_IP is an IP address of a system where you run the demo CDN Docker services. It can be either the host IP address of a physical node or a floating IP address of an OpenStack instance.

    Warning

    Run the demo --init command only once as it creates a CA certificate each time unconditionally. Previously created .crt / .key files will be backed up, but backup keeps only one most recent version of each file.

    The CA certificate named demo-ca.crt is saved in the ${AIRGAPPED_WORKSPACE}/shared/ directory and is available by the http://<DEMO_CDN_IP>:8080/demo-ca.crt link.

  8. Start the demo CDN services:

    ./airgapped.sh demo up -d
    
  9. Push Docker images. For example:

    ./airgapped.sh push \
    --kaas-release kaas-2-29-6 \
    --cluster-release mke-16-4-6-3-7-24 \
    --cluster-release mosk-17-4-6-25-1-1 \
    --url-map="registry=<DEMO_CDN_IP>" \
    --insecure-registry
    

    Example of system response extract:

    ...
    2025-08-14 11:31:14 [INFO   ] Pushing images to remote registry ...
    2025-08-14 11:32:50 [INFO   ] Pushing images done (passed / failed): 161 / 0
    
  10. Validate the demo CDN. For example:

    ./airgapped.sh validate \
    --kaas-release kaas-2-29-6 \
    --cluster-release mke-16-4-6-3-7-24 \
    --url-map "binary=https://<DEMO_CDN_IP>:8081" \
    --url-map "debian=https://<DEMO_CDN_IP>:8082" \
    --url-map "mcr-repo=https://<DEMO_CDN_IP>:8083" \
    --url-map "registry=<DEMO_CDN_IP>"
    

    Example of system response extract:

    ...
    2025-08-14 11:48:47 [INFO   ] Validating files ...
    2025-08-14 11:48:47 [INFO   ] Validating remote files ... Total files: 43406, running 75 workers.
    2025-08-14 11:57:35 [INFO   ] Validating release files ... Total files: 343, running 41 workers.
    2025-08-14 11:57:37 [INFO   ] Validating release files - OK. Total files: 343, bad files - 0.
    2025-08-14 11:57:37 [INFO   ] Validating remote files - OK. Total files: 43406, bad files - 0.
    2025-08-14 11:57:37 [INFO   ] Validating files - OK.
    2025-08-14 11:57:37 [INFO   ] Validating images ...
    2025-08-14 11:57:37 [INFO   ] Validating remote images ... Total images 161, running 18 threads.
    2025-08-14 11:57:38 [INFO   ] Validating remote images - OK. Total images - 161, failed images - 0, errors - 0
    2025-08-14 11:57:38 [INFO   ] Validating images - OK.
    

    If some artifacts are missing:

    1. Add missing artifacts:

      • For Docker images, run airgapped.sh push

      • For files, run airgapped.sh export --files --no-images

    2. Repeat the demo CDN validation.

Transfer artifacts from the demo CDN to private CDN

  1. Copy validated artifacts from the demo CDN to the private CDN by keeping the directory structure under each CDN intact. Use your preferred tool, for example, skopeo, curl, rsync, or JFrog CLI.

    If you need complete lists of files and images available on each type of demo CDN, use the previously prepared make-artifacts-list.py script to generate these lists:

    ./make-artifacts-list.py
    

    The lists of files and images are available in the following locations:

    • binary resource files –> http://<DEMO_CDN_IP>:8080/binary_files.txt

    • debian resource files –> http://<DEMO_CDN_IP>:8080/debian_repo_files.txt

    • mcr-repo resource files –> http://<DEMO_CDN_IP>:8080/mcr_repo_files.txt

    • registry resource images –> http://<DEMO_CDN_IP>:8080/docker_images.txt

    Caution

    To keep these lists synchronized with the demo CDN content, run make-artifacts-list.py each time after the airgapped.sh export command.

  2. Mandatory. Validate the artifacts in the private CDN after transfering. For example:

    ./airgapped.sh validate \
    --kaas-release kaas-2-29-6 \
    --cluster-release mke-16-4-6-3-7-24 \
    --cluster-release mke-16-4-6-3-7-24 \
    --url-map "binary=<MCC_CDN_BINARY>" \
    --url-map "debian=<MCC_CDN_DEBIAN>" \
    --url-map "mcr-repo=<MCC_CDN_MCR_REPO>" \
    --url-map "registry=<MCC_CDN_DOCKER>"
    

    Example of system response extract:

    ...
    2025-08-14 11:48:47 [INFO   ] Validating files ...
    2025-08-14 11:48:47 [INFO   ] Validating remote files ... Total files: 43406, running 75 workers.
    2025-08-14 11:57:35 [INFO   ] Validating release files ... Total files: 343, running 41 workers.
    2025-08-14 11:57:37 [INFO   ] Validating release files - OK. Total files: 343, bad files - 0.
    2025-08-14 11:57:37 [INFO   ] Validating remote files - OK. Total files: 43406, bad files - 0.
    2025-08-14 11:57:37 [INFO   ] Validating files - OK.
    2025-08-14 11:57:37 [INFO   ] Validating images ...
    2025-08-14 11:57:37 [INFO   ] Validating remote images ... Total images 161, running 18 threads.
    2025-08-14 11:57:38 [INFO   ] Validating remote images - OK. Total images - 161, failed images - 0, errors - 0
    2025-08-14 11:57:38 [INFO   ] Validating images - OK.
    

    If some artifacts are missing in the offline copy:

    1. Re-run make-artifacts-list.py to update the artifacts list.

    2. Repeat the artifacts transfering steps.

    3. Repeat the artifacts validation.

Proceed to Deploy an air-gapped management cluster.