Deploy

Deploy the Cloud Reporter app to Kubernetes via Helm.

The chart deploys a CronJob for periodic reporter invocation.

Step 1: Prerequisites
Requirement Description
Log10x License Your license key (get one)
Helm Helm CLI installed
kubectl Configured to access your cluster
GitHub Token Personal access token for config repo (create one)
Analyzer Credentials API keys for your platform: Splunk, Elasticsearch, Datadog, or CloudWatch
Step 2: Add Helm Repository
helm repo add log10x https://log-10x.github.io/helm-charts

Verify the chart appears:

helm search repo log10x-cron
Step 3: Configure Deployment Settings

Create a new file called my-cloud-reporter.yaml in your working directory. This Helm values file will be used in all subsequent steps.

my-cloud-reporter.yaml
# License key added to all pods via TENX_LICENSE env var
log10xLicense: "YOUR-LICENSE-KEY-HERE"

jobs:
  - name: reporter-job
    runtimeName: my-cloud-reporter      # Optional: identifies this instance
    schedule: "*/10 * * * *"            # Run every 10 minutes
    args:
      - "@apps/cloud/reporter"
Step 4: Load Configuration

Load the 10x Engine config folder into the cluster using one of the methods below.

If you skip this step, the default configuration bundled with the Log10x image is used.

An init container clones your configuration repository before each CronJob run, ensuring always up-to-date configuration. Works with GitHub, GitLab, Bitbucket, or any HTTPS-accessible Git provider.

  1. Fork the Config Repository
  2. Create a branch for your configuration changes
  3. Edit the app configuration to match your analyzer input and metric output

Add to your Helm values:

my-cloud-reporter.yaml
config:
  git:
    enabled: true
    url: "https://github.com/YOUR-ACCOUNT/config.git"
    branch: "my-cloud-reporter-config"    # Optional

gitToken: "YOUR-GIT-TOKEN"

For production, store the token in a Kubernetes Secret rather than in the values file.

Mount an existing PersistentVolumeClaim that contains your configuration directory. This approach works in air-gapped environments and requires no external network access.

  1. Create a PVC containing your configuration files (cloned from the Config Repository)
  2. Reference it in your Helm values:
my-cloud-reporter.yaml
config:
  volume:
    enabled: true
    claimName: "my-config-pvc"
Step 5: Configure Secrets

Store sensitive credentials in Kubernetes Secrets rather than plain files.

Important: Only add secrets for analyzer inputs and metric outputs you've configured in your Cloud Reporter app configuration.

Create the secret (example for Splunk):

kubectl create secret generic cloud-reporter-credentials \
  --from-literal=splunk-username=YOUR_USERNAME \
  --from-literal=splunk-password=YOUR_PASSWORD

Add secret references to your my-cloud-reporter.yaml:

my-cloud-reporter.yaml
jobs:
  - name: reporter-job
    # ... (previous config)

    extraEnv:
      # From k8s Secret (example for Splunk)
      - name: SPLUNK_USERNAME
        valueFrom:
          secretKeyRef:
            name: cloud-reporter-credentials
            key: splunk-username
      - name: SPLUNK_PASSWORD
        valueFrom:
          secretKeyRef:
            name: cloud-reporter-credentials
            key: splunk-password

      # For other platforms (see vendor docs for credentials):
      # Elasticsearch: ELASTIC_USERNAME, ELASTIC_PASSWORD
      # Datadog: DD_API_KEY, DD_APP_KEY
      # CloudWatch: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
Step 6: Deploy
helm install my-cloud-reporter log10x/log10x-cron -f my-cloud-reporter.yaml
Step 7: Verify

Check the CronJob was created:

kubectl get cronjobs

Trigger a manual run to test:

kubectl create job --from=cronjob/reporter-job my-cloud-reporter-test

Check pod logs for errors:

kubectl logs -l job-name=my-cloud-reporter-test --tail=100

Verify no errors appear in the log file.

View results in the dashboard:

Once running, view your cost analytics in the Cloud Reporter Dashboard.

Quickstart Full Sample
my-cloud-reporter.yaml
log10xLicense: "YOUR-LICENSE-KEY-HERE"

jobs:
  - name: cloud-reporter
    runtimeName: my-first-cloud-reporter
    schedule: "*/15 * * * *"
    args:
      - "@apps/cloud/reporter"

    github:
      config:
        token: "YOUR-GITHUB-TOKEN"
        repo: "YOUR-ACCOUNT/REPO-NAME"
        branch: "my-cloud-reporter-config"

    extraEnv:
      - name: SPLUNK_USERNAME
        valueFrom:
          secretKeyRef:
            name: cloud-reporter-credentials
            key: splunk-username
      - name: SPLUNK_PASSWORD
        valueFrom:
          secretKeyRef:
            name: cloud-reporter-credentials
            key: splunk-password