> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Helm cloud deployments (v1.x)

> Cloud-specific configurations for deploying ClickStack on GKE, EKS, and AKS with the v1.x Helm chart

<Warning>
  **Deprecated — v1.x chart**

  This page documents cloud deployments for the **v1.x** inline-template Helm chart, which is in maintenance mode. For the v2.x chart, see [Helm cloud deployments](/clickstack/deployment/helm-cloud). To migrate, see the [Upgrade guide](/clickstack/deployment/helm-upgrade).
</Warning>

This guide covers cloud-specific configurations for deploying ClickStack on managed Kubernetes services. For basic installation, see the [main Helm deployment guide](/clickstack/deployment/helm-v1).

<h2 id="google-kubernetes-engine-gke">
  Google Kubernetes Engine (GKE)
</h2>

When deploying to GKE, you may need to override certain values due to cloud-specific networking behavior.

<h3 id="loadbalancer-dns-resolution-issue">
  LoadBalancer DNS resolution issue
</h3>

GKE's LoadBalancer service can cause internal DNS resolution issues where pod-to-pod communication resolves to external IPs instead of staying within the cluster network. This specifically affects the OTEL collector's connection to the OpAMP server.

**Symptoms:**

* OTEL collector logs showing "connection refused" errors with cluster IP addresses
* OpAMP connection failures like: `dial tcp 34.118.227.30:4320: connect: connection refused`

**Solution:**

Use the fully qualified domain name (FQDN) for the OpAMP server URL:

```shell theme={null}
helm install my-clickstack clickstack/clickstack \
  --set hyperdx.frontendUrl="http://your-external-ip-or-domain.com" \
  --set otel.opampServerUrl="http://my-clickstack-clickstack-app.default.svc.cluster.local:4320"
```

<h3 id="other-gke-considerations">
  Other GKE considerations
</h3>

```yaml theme={null}
# values-gke.yaml
hyperdx:
  frontendUrl: "http://34.123.61.99"  # Use your LoadBalancer external IP

otel:
  opampServerUrl: "http://my-clickstack-clickstack-app.default.svc.cluster.local:4320"

# Adjust for GKE pod networking if needed
clickhouse:
  config:
    clusterCidrs:
      - "10.8.0.0/16"  # GKE commonly uses this range
      - "10.0.0.0/8"   # Fallback for other configurations
```

<h2 id="amazon-eks">
  Amazon EKS
</h2>

For EKS deployments, consider these common configurations:

```yaml theme={null}
# values-eks.yaml
hyperdx:
  frontendUrl: "http://your-alb-domain.com"

# EKS typically uses these pod CIDRs
clickhouse:
  config:
    clusterCidrs:
      - "192.168.0.0/16"
      - "10.0.0.0/8"

# Enable ingress for production
hyperdx:
  ingress:
    enabled: true
    host: "hyperdx.yourdomain.com"
    tls:
      enabled: true
```

<h2 id="azure-aks">
  Azure AKS
</h2>

For AKS deployments:

```yaml theme={null}
# values-aks.yaml
hyperdx:
  frontendUrl: "http://your-azure-lb.com"

# AKS pod networking
clickhouse:
  config:
    clusterCidrs:
      - "10.244.0.0/16"  # Common AKS pod CIDR
      - "10.0.0.0/8"
```

<h2 id="production-cloud-deployment-checklist">
  Production Cloud deployment checklist
</h2>

Before deploying ClickStack to production on any cloud provider:

* [ ] Configure proper `frontendUrl` with your external domain/IP
* [ ] Set up ingress with TLS for HTTPS access
* [ ] Override `otel.opampServerUrl` with FQDN if experiencing connection issues (especially on GKE)
* [ ] Adjust `clickhouse.config.clusterCidrs` for your pod network CIDR
* [ ] Configure persistent storage for production workloads
* [ ] Set appropriate resource requests and limits
* [ ] Enable monitoring and alerting
* [ ] Configure backup and disaster recovery
* [ ] Implement proper secret management

<h2 id="production-best-practices">
  Production best practices
</h2>

<h3 id="resource-management">
  Resource management
</h3>

```yaml theme={null}
hyperdx:
  resources:
    requests:
      cpu: 500m
      memory: 1Gi
    limits:
      cpu: 2000m
      memory: 4Gi
```

<h3 id="high-availability">
  High availability
</h3>

```yaml theme={null}
hyperdx:
  replicaCount: 3

  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 100
          podAffinityTerm:
            labelSelector:
              matchExpressions:
                - key: app.kubernetes.io/name
                  operator: In
                  values:
                    - clickstack
            topologyKey: kubernetes.io/hostname
```

<h3 id="persistent-storage">
  Persistent storage
</h3>

Ensure persistent volumes are configured for data retention:

```yaml theme={null}
clickhouse:
  persistence:
    enabled: true
    size: 100Gi
    storageClass: "fast-ssd"  # Use cloud-specific storage class
```

**Cloud-specific storage classes:**

* **GKE**: `pd-ssd` or `pd-balanced`
* **EKS**: `gp3` or `io2`
* **AKS**: `managed-premium` or `managed-csi`

<h3 id="browser-compatibility-notes">
  Browser compatibility notes
</h3>

For HTTP-only deployments (development/testing), some browsers may show crypto API errors due to secure context requirements. For production deployments, always use HTTPS with proper TLS certificates through ingress configuration.

See [Ingress configuration](/clickstack/deployment/helm-configuration-v1#ingress-setup) for TLS setup instructions.

<h2 id="next-steps">
  Next steps
</h2>

* [Configuration guide (v1.x)](/clickstack/deployment/helm-configuration-v1) - API keys, secrets, and ingress
* [Deployment options (v1.x)](/clickstack/deployment/helm-deployment-options-v1) - External systems configuration
* [Main Helm guide (v1.x)](/clickstack/deployment/helm-v1) - Basic installation
* [Cloud deployments (v2.x)](/clickstack/deployment/helm-cloud) - v2.x cloud guide
* [Upgrade guide](/clickstack/deployment/helm-upgrade) - Migrating from v1.x to v2.x
