|
| 1 | +--- |
| 2 | +slug: /use-cases/observability/clickstack/deployment/helm-cloud |
| 3 | +title: 'Helm cloud deployments' |
| 4 | +pagination_prev: null |
| 5 | +pagination_next: null |
| 6 | +sidebar_position: 5 |
| 7 | +description: 'Cloud-specific configurations for deploying ClickStack on GKE, EKS, and AKS' |
| 8 | +doc_type: 'guide' |
| 9 | +keywords: ['ClickStack GKE', 'ClickStack EKS', 'ClickStack AKS', 'Kubernetes cloud deployment', 'production deployment'] |
| 10 | +--- |
| 11 | + |
| 12 | +This guide covers cloud-specific configurations for deploying ClickStack on managed Kubernetes services. For basic installation, see the [main Helm deployment guide](/docs/use-cases/observability/clickstack/deployment/helm). |
| 13 | + |
| 14 | +## Google Kubernetes Engine (GKE) {#google-kubernetes-engine-gke} |
| 15 | + |
| 16 | +When deploying to GKE, you may need to override certain values due to cloud-specific networking behavior. |
| 17 | + |
| 18 | +### LoadBalancer DNS resolution issue {#loadbalancer-dns-resolution-issue} |
| 19 | + |
| 20 | +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. |
| 21 | + |
| 22 | +**Symptoms:** |
| 23 | +- OTEL collector logs showing "connection refused" errors with cluster IP addresses |
| 24 | +- OpAMP connection failures like: `dial tcp 34.118.227.30:4320: connect: connection refused` |
| 25 | + |
| 26 | +**Solution:** |
| 27 | + |
| 28 | +Use the fully qualified domain name (FQDN) for the OpAMP server URL: |
| 29 | +```shell |
| 30 | +helm install my-clickstack clickstack/clickstack \ |
| 31 | + --set hyperdx.frontendUrl="http://your-external-ip-or-domain.com" \ |
| 32 | + --set otel.opampServerUrl="http://my-clickstack-clickstack-app.default.svc.cluster.local:4320" |
| 33 | +``` |
| 34 | + |
| 35 | +### Other GKE considerations {#other-gke-considerations} |
| 36 | + |
| 37 | +```yaml |
| 38 | +# values-gke.yaml |
| 39 | +hyperdx: |
| 40 | + frontendUrl: "http://34.123.61.99" # Use your LoadBalancer external IP |
| 41 | + |
| 42 | +otel: |
| 43 | + opampServerUrl: "http://my-clickstack-clickstack-app.default.svc.cluster.local:4320" |
| 44 | + |
| 45 | +# Adjust for GKE pod networking if needed |
| 46 | +clickhouse: |
| 47 | + config: |
| 48 | + clusterCidrs: |
| 49 | + - "10.8.0.0/16" # GKE commonly uses this range |
| 50 | + - "10.0.0.0/8" # Fallback for other configurations |
| 51 | +``` |
| 52 | +
|
| 53 | +## Amazon EKS {#amazon-eks} |
| 54 | +
|
| 55 | +For EKS deployments, consider these common configurations: |
| 56 | +```yaml |
| 57 | +# values-eks.yaml |
| 58 | +hyperdx: |
| 59 | + frontendUrl: "http://your-alb-domain.com" |
| 60 | + |
| 61 | +# EKS typically uses these pod CIDRs |
| 62 | +clickhouse: |
| 63 | + config: |
| 64 | + clusterCidrs: |
| 65 | + - "192.168.0.0/16" |
| 66 | + - "10.0.0.0/8" |
| 67 | + |
| 68 | +# Enable ingress for production |
| 69 | +hyperdx: |
| 70 | + ingress: |
| 71 | + enabled: true |
| 72 | + host: "hyperdx.yourdomain.com" |
| 73 | + tls: |
| 74 | + enabled: true |
| 75 | +``` |
| 76 | +
|
| 77 | +## Azure AKS {#azure-aks} |
| 78 | +
|
| 79 | +For AKS deployments: |
| 80 | +```yaml |
| 81 | +# values-aks.yaml |
| 82 | +hyperdx: |
| 83 | + frontendUrl: "http://your-azure-lb.com" |
| 84 | + |
| 85 | +# AKS pod networking |
| 86 | +clickhouse: |
| 87 | + config: |
| 88 | + clusterCidrs: |
| 89 | + - "10.244.0.0/16" # Common AKS pod CIDR |
| 90 | + - "10.0.0.0/8" |
| 91 | +``` |
| 92 | +
|
| 93 | +## Production Cloud deployment checklist {#production-cloud-deployment-checklist} |
| 94 | +
|
| 95 | +Before deploying ClickStack to production on any cloud provider: |
| 96 | +
|
| 97 | +- [ ] Configure proper `frontendUrl` with your external domain/IP |
| 98 | +- [ ] Set up ingress with TLS for HTTPS access |
| 99 | +- [ ] Override `otel.opampServerUrl` with FQDN if experiencing connection issues (especially on GKE) |
| 100 | +- [ ] Adjust `clickhouse.config.clusterCidrs` for your pod network CIDR |
| 101 | +- [ ] Configure persistent storage for production workloads |
| 102 | +- [ ] Set appropriate resource requests and limits |
| 103 | +- [ ] Enable monitoring and alerting |
| 104 | +- [ ] Configure backup and disaster recovery |
| 105 | +- [ ] Implement proper secret management |
| 106 | + |
| 107 | +## Production best practices {#production-best-practices} |
| 108 | + |
| 109 | +### Resource management {#resource-management} |
| 110 | + |
| 111 | +```yaml |
| 112 | +hyperdx: |
| 113 | + resources: |
| 114 | + requests: |
| 115 | + cpu: 500m |
| 116 | + memory: 1Gi |
| 117 | + limits: |
| 118 | + cpu: 2000m |
| 119 | + memory: 4Gi |
| 120 | +``` |
| 121 | + |
| 122 | +### High availability {#high-availability} |
| 123 | + |
| 124 | +```yaml |
| 125 | +hyperdx: |
| 126 | + replicaCount: 3 |
| 127 | + |
| 128 | + affinity: |
| 129 | + podAntiAffinity: |
| 130 | + preferredDuringSchedulingIgnoredDuringExecution: |
| 131 | + - weight: 100 |
| 132 | + podAffinityTerm: |
| 133 | + labelSelector: |
| 134 | + matchExpressions: |
| 135 | + - key: app.kubernetes.io/name |
| 136 | + operator: In |
| 137 | + values: |
| 138 | + - clickstack |
| 139 | + topologyKey: kubernetes.io/hostname |
| 140 | +``` |
| 141 | + |
| 142 | +### Persistent storage {#persistent-storage} |
| 143 | + |
| 144 | +Ensure persistent volumes are configured for data retention: |
| 145 | +```yaml |
| 146 | +clickhouse: |
| 147 | + persistence: |
| 148 | + enabled: true |
| 149 | + size: 100Gi |
| 150 | + storageClass: "fast-ssd" # Use cloud-specific storage class |
| 151 | +``` |
| 152 | + |
| 153 | +**Cloud-specific storage classes:** |
| 154 | +- **GKE**: `pd-ssd` or `pd-balanced` |
| 155 | +- **EKS**: `gp3` or `io2` |
| 156 | +- **AKS**: `managed-premium` or `managed-csi` |
| 157 | + |
| 158 | +### Browser compatibility notes {#browser-compatibility-notes} |
| 159 | + |
| 160 | +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. |
| 161 | + |
| 162 | +See [Ingress configuration](/docs/use-cases/observability/clickstack/deployment/helm-configuration#ingress-setup) for TLS setup instructions. |
| 163 | + |
| 164 | +## Next steps {#next-steps} |
| 165 | + |
| 166 | +- [Configuration guide](/docs/use-cases/observability/clickstack/deployment/helm-configuration) - API keys, secrets, and ingress |
| 167 | +- [Deployment options](/docs/use-cases/observability/clickstack/deployment/helm-deployment-options) - External systems configuration |
| 168 | +- [Main Helm guide](/docs/use-cases/observability/clickstack/deployment/helm) - Basic installation |
0 commit comments