Argo CD

Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. Argo CD aligns with the GitOps principles, ensuring that the deployment of groundcover is always in sync with the predefined configurations in your Git repository. This means that any changes made to the deployment configurations are automatically applied to the cluster, streamlining updates and ensuring that all instances of groundcover are consistent across different environments.

Argo CD’s multi-environment support ensures that groundcover can be deployed consistently across various Kubernetes clusters, whether they are designated for development, testing, or production.

To deploy groundcover through Argo CD, use the following steps.

The steps below require a user with admin permissions

Create the groundcover namespace

groundcover requires setting up several secrets in the installation namespace prior to creating the ArgoCD application. For that reason we will start by creating the groundcover namespace:

kubectl create namespace groundcover

Create secrets

In the following steps you will create the follow Kubernetes secrets objects:

  1. API Key secret

  2. ClickHouse password secret

Create the API Key secret

Step 1 - Fetch the API key

Start by fetching the API key associated with your workspace using the following CLI command:

groundcover auth print-api-key

Create a secret in the groundcover namespace using the following snippet:

Step 2 - Create the spec file

Create the spec file using the following snippet:

Make sure to replace the <apikey> value below with the value fetched in the previous step

cat << EOF > groundcover_apikey_secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: groundcover-api-key
  namespace: groundcover
stringData:
  API_KEY: <apikey>
type: Opaque
EOF

Step 3 - Create the secret

Apply the spec file from above:

kubectl apply -f groundcover_apikey_secret.yaml

Create the ClickHouse password secret

Step 1 - Create a random password

Start by generating a random password for ClickHouse. For example using openssl rand:

opensslis just one way to do it - you can use any random string you wish

openssl rand -hex 16 

Step 2 - Create the spec file

Create the spec file using the following snippet:

Make sure to replace the <password> value below with the result of the previous step

cat << EOF > groundcover_clickhouse_secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: groundcover-clickhouse
  namespace: groundcover
type: Opaque
stringData:
  admin-password: <password>
EOF

Step 3 - Create the secret

Apply the spec file from above:

kubectl apply -f groundcover_clickhouse_secret.yaml

Create the Argo CD Application Manifest

Make sure to set the following values in the manifest:

  • <project-name> - to match your environment

  • <targetRevision> - set the deployment version. EIther a specific groundcover chart version, or use "≥ 1.0.0" for auto upgrades. You can use the following commands to fetch the latest chart version:

    • helm repo update

    • helm search repo groundcover/groundcover

The <cluster-name> value in the values part in the manifest can be any name you wish to assign to the cluster where the platform is installed. In multi-cluster installations, make sure to change it according to the cluster being installed.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: groundcover
  namespace: argocd
spec:
  project: <project-name>
  source:
    chart: groundcover
    repoURL: https://helm.groundcover.com
    targetRevision: <groundcover-version>
    helm:
      releaseName: groundcover
      values: |
        clusterId: <cluster-name>
        global:
          groundcoverPredefinedTokenSecret:
            secretKey: API_KEY
            secretName: groundcover-api-key
          clickhouse:
            auth:
              existingSecretKey: admin-password
              existingSecret: groundcover-clickhouse
  destination:
    server: "https://kubernetes.default.svc"
    namespace: groundcover
  # avoid OutOfSync state on secrets with random-data.
  # https://argo-cd.readthedocs.io/en/stable/user-guide/helm/#random-data
  syncPolicy:
    syncOptions:
    - CreateNamespace=true
    - RespectIgnoreDifferences=true
  ignoreDifferences:
  - kind: Secret
    jsonPointers:
    - /data
    - /stringData
  - group: apps
    kind: '*'
    jsonPointers:
    - /spec/template/metadata/annotations/checksum~1secret

Inspect the groundcover namespace

After creating the manifest above the groundcover deployments will start spinning up in the namespace. When all pods are running you can access the platform at app.groundcover.comto access new data from the environment.

If you encounter any issues in the installation let us know over Slack.

Last updated