Perform Local Installation

In this section, you will install GoodData.CN on your local Kubernetes cluster. You will configure the installation with the necessary settings, deploy the required Docker images, and use Helm to set up GoodData.CN in your local environment.

Configure Installation

In this section, you will configure the necessary settings for your GoodData.CN installation. For a default setup, you only need to create a namespace, set up encryption keys, and add your license key.

Steps:

  1. Create a namespace for GoodData.CN:

    kubectl apply -f - << END
    apiVersion: v1
    kind: Namespace
    metadata:
      name: gooddata-cn
      labels:
        kubernetes.io/metadata.name: gooddata-cn
    END
    
  2. Create a installation configuration file customized-values.yaml. In the following steps you will add specific configuration settings to this file.

  3. Prepare keyset for metadata encryption:

    1. Create a new keyset using Tinkey and output it into a output_keyset.json file:

      tinkey create-keyset --key-template AES256_GCM --out output_keyset.json
      
    2. Create a Kubernetes secret from the generated keyset:

      kubectl -n gooddata-cn create secret generic gdcn-encryption --from-file keySet=output_keyset.json
      
    3. Add the following snippet to customized-values.yaml:

      metadataApi:
        encryptor:
          existingSecret: gdcn-encryption
      
  4. Create a secret using your GoodData.CN license key:

    kubectl -n gooddata-cn create secret generic gooddata-cn-license --from-literal=license=key/eyJhY2NvdW50I_a_very_long_string_GfMjaRJZcg==
    

    Add the following snippet to customized-values.yaml:

    license:
      existingSecret: gooddata-cn-license
    
  5. For the purposed of this local installation, also add the following lines to customized-values.yaml:

    • Reduce the number of replicas to 1 to reduce resource usage for local testing:

      replicaCount: 1
      
    • Specify the Docker registry prefix for local images:

      image:
        repositoryPrefix: "k3d-registry:5000"
      
    • Disable unnecessary components for local testing:

      deployVisualExporter: false
      
  6. Finalize your customized-values.yaml file, if you followed the installation instructions exactly, your file should look like this:

    metadataApi:
      encryptor:
        existingSecret: gdcn-encryption
    
    license:
      existingSecret: gooddata-cn-license
    
    replicaCount: 1
    
    image:
      repositoryPrefix: "k3d-registry:5000"
    
    deployVisualExporter: false
    

Perform Installation

Having prepared the customized-values.yaml file with all necessary configurations, you can proceed with the installation of GoodData.CN using Helm.

Steps:

  1. Before installing GoodData.CN, you need to transfer necessary Docker images to your local registry. Create file imgcp.sh and add the following script to it that automates the process of pulling, tagging, and pushing required images:

    #!/bin/bash
    
    IMAGE_TAG="3.13.0"
    REGISTRY="localhost:5000"
    IMAGES=(
      "afm-exec-api"
      "api-gateway"
      "auth-service"
      "calcique"
      "export-controller"
      "metadata-api"
      "result-cache"
      "scan-model"
      "sql-executor"
      "tabular-exporter"
      "apidocs"
      "dex"
      "organization-controller"
      "tools"
      "analytical-designer"
      "dashboards"
      "home-ui"
      "ldm-modeler"
      "measure-editor"
      "web-components"
      "quiver"
      "automation"
    )
    
    img_cp() {
      image=$1
      docker pull "gooddata/$image:$IMAGE_TAG"
      docker tag "gooddata/$image:$IMAGE_TAG" "$REGISTRY/$image:$IMAGE_TAG"
      docker push "$REGISTRY/$image:$IMAGE_TAG"
    }
    for image in "${IMAGES[@]}"; do
      img_cp "$image" &
    done
    
    wait
    
  2. Run the imgcp.sh script to transfer the Docker images to your local registry:

    bash imgcp.sh
    
  3. Add the official GoodData Helm repository to your Helm configuration:

    helm repo add gooddata https://charts.gooddata.com/
    helm repo update
    
  4. Install GoodData.CN into your Kubernetes cluster, augmenting its configuration using values from your prepared customized-values.yaml file:

    helm install gooddata-cn gooddata/gooddata-cn --namespace gooddata-cn -f customized-values.yaml
    
  5. Monitor the status of GoodData.CN pods to ensure they are up and running correctly:

    kubectl -n gooddata-cn get pods
    

    Ensure all the pods are ready or completed before continuing:

    NAME                                                  READY   STATUS    RESTARTS   AGE
    gooddata-cn-afm-exec-api-79c447f4dc-fr72k             1/1     Running   0          3m28s
    gooddata-cn-analytical-designer-bc9cbf8bc-f5dd9       1/1     Running   0          3m25s
    gooddata-cn-api-gateway-76c66d4859-qvd9k              1/1     Running   0          3m25s
    gooddata-cn-apidocs-7f9f46c9d9-79gpn                  1/1     Running   0          3m28s
    gooddata-cn-auth-service-765c7fb5c8-jhrpg             1/1     Running   0          3m28s
    gooddata-cn-automation-766c7d7f85-fgcrj               1/1     Running   0          3m26s
    gooddata-cn-calcique-7c8d96dcf9-hl9g9                 1/1     Running   0          3m28s
    gooddata-cn-dashboards-85fc644588-m9xpb               1/1     Running   0          3m28s
    gooddata-cn-db-pgpool-5f8c95c5dd-b8wpf                1/1     Running   0          3m26s
    gooddata-cn-db-pgpool-5f8c95c5dd-sscwk                1/1     Running   0          3m26s
    gooddata-cn-db-postgresql-0                           2/2     Running   0          3m28s
    gooddata-cn-db-postgresql-1                           2/2     Running   0          3m28s
    gooddata-cn-db-postgresql-2                           2/2     Running   0          3m28s
    gooddata-cn-dex-6b854b5c6b-mkvk7                      1/1     Running   0          3m25s
    gooddata-cn-etcd-0                                    1/1     Running   0          3m28s
    gooddata-cn-etcd-1                                    1/1     Running   0          3m28s
    gooddata-cn-etcd-2                                    1/1     Running   0          3m28s
    gooddata-cn-export-controller-789cd75ff-bb7xb         1/1     Running   0          3m26s
    gooddata-cn-home-ui-7f996b7685-7bl5g                  1/1     Running   0          3m27s
    gooddata-cn-ldm-modeler-6c9c896f45-848fv              1/1     Running   0          3m27s
    gooddata-cn-measure-editor-665cd64764-jlwpt           1/1     Running   0          3m28s
    gooddata-cn-metadata-api-7fcfdcfdd7-nq6wn             1/1     Running   0          3m25s
    gooddata-cn-organization-controller-8d9469758-hkxnt   1/1     Running   0          3m28s
    gooddata-cn-quiver-cache-75ffb8fc7d-829rt             1/1     Running   0          3m27s
    gooddata-cn-quiver-ml-7564c59c5b-ptsgl                1/1     Running   0          3m25s
    gooddata-cn-quiver-xtab-6d789b884b-644vl              1/1     Running   0          3m28s
    gooddata-cn-redis-ha-server-0                         4/4     Running   0          3m27s
    gooddata-cn-redis-ha-server-1                         4/4     Running   0          2m12s
    gooddata-cn-redis-ha-server-2                         4/4     Running   0          84s
    gooddata-cn-result-cache-745d44577c-r5kw7             1/1     Running   0          3m28s
    gooddata-cn-scan-model-66f86b4777-hj4dp               1/1     Running   0          3m28s
    gooddata-cn-sql-executor-74c448985c-94b58             1/1     Running   0          3m27s
    gooddata-cn-tabular-exporter-8ffdfd79f-rdpzb          1/1     Running   0          3m26s
    gooddata-cn-tools-7785cd494c-v7sgc                    1/1     Running   0          3m26s
    gooddata-cn-web-components-646cf5b4c8-spg6b           1/1     Running   0          3m28s
    

    If any pods are in an Error or CrashLoopBackOff state, you may need to check the logs to diagnose and resolve any issues. To get more details about a specific pod, you can use the following command:

    kubectl -n gooddata-cn describe pod <pod-name>
    

    And to check the logs of a specific pod, use:

    kubectl -n gooddata-cn logs <pod-name>