Set up a Docker registry

Prepare a Docker registry on the Internet-connected machine that contains all of the images that are necessary to install MSR. Kubernetes will pull the required images from this registry to the offline nodes during the installation of the prerequisites and MSR.

  1. On the Internet-connected machine, set up a Docker registry that the offline Kubernetes cluster can access using a private IP address. For more information, refer to Docker official documentation: Deploy a registry server.

  2. Add the msrofficial, postgres-operator, jetstack, and rethinkdb-operator Helm repositories:

    helm repo add msrofficial https://registry.mirantis.com/charts/msr/msr
    helm repo add postgres-operator https://opensource.zalando.com/postgres-operator/charts/postgres-operator
    helm repo add jetstack https://charts.jetstack.io
    helm repo add rethinkdb-operator https://registry.mirantis.com/charts/rethinkdb/rethinkdb-operator/
    helm repo update
    
  3. Obtain the names of all the images that are required for installing MSR from the desired version of the Helm charts, for MSR, postgres-operator, cert-manager, and rethinkdb-operator. You can do this by templating each chart and grepping for image::

    helm template msr msrofficial/msr \
    --version=<msr-chart-version> \
    --api-versions=acid.zalan.do/v1 \
    --api-versions=cert-manager.io/v1 | grep image:
    
    helm template postgres-operator postgres-operator/postgres-operator \
    --version 1.12.2 \
    --set configKubernetes.spilo_runasuser=101 \
    --set configKubernetes.spilo_runasgroup=103 \
    --set configKubernetes.spilo_fsgroup=103 | grep image:
    
    helm template cert-manager jetstack/cert-manager \
    --version 1.12.3 \
    --set installCRDs=true | grep image:
    
    helm template rethinkdb-operator rethinkdb-operator/rethinkdb-operator \
      --version 1.0.0 | grep image:
    
  4. Pull the images listed in the previous step.

  5. Tag each image, including its original namespace, in preparation for pushing the image to the Docker registry. For example:

    docker tag registry.mirantis.com/msr/msr-api:<msr-version> <registry-ip>/msr/msr-api:<msr-version>
    
  6. Push all the required images to the Docker registry. For example:

    docker push <registry-ip>/msr/msr-api:<msr-version>
    
  7. Create the following YAML files, which you will reference to override the image repository information that is contained in the Helm charts used for MSR installation:

    • my_postgres_values.yaml:

      image:
        registry: <registry-ip>
      
      configGeneral:
        docker_image: <registry-ip>/acid/spilo-14:<version>
      
      configLogicalBackup:
        logical_backup_docker_image: <registry-ip>/acid/logical-backup:<version>
      
      configConnectionPooler:
        connection_pooler_image: <registry-ip>/acid/pgbouncer:<version>
      
    • my_certmanager_values.yaml:

      image:
        registry: <registry-ip>
        repository: jetstack/cert-manager-controller
      
      webhook:
        image:
          registry: <registry-ip>
          repository: jetstack/cert-manager-webhook
      
      cainjector:
        image:
          registry: <registry-ip>
          repository: jetstack/cert-manager-cainjector
      
      startupapicheck:
        image:
          registry: <registry-ip>
          repository: jetstack/cert-manager-ctl
      
      • my_rethinkdb_operator_values.yaml:

        controllerManager:
          kubeRbacProxy:
            image:
              repository: <registry-ip>/kubebuilder/kube-rbac-proxy
              tag: <tag>
          manager:
            image:
              repository: <registry-ip>/msr/rethinkdb-operator
              tag: <tag>