Listen to this Post
Gitpod’s decision to move away from Kubernetes after six years highlights critical challenges in container orchestration at scale. Their experience underscores three key pain points:
1. Resource Management
Kubernetes’ static resource allocation clashed with Gitpod’s dynamic developer workloads. Overprovisioning wasted resources, while underprovisioning risked performance. Solutions like real-time autoscaling (e.g., KEDA) or custom operators could mitigate this.
2. Networking Complexity
DNS resolution failures and iptables bottlenecks plagued their clusters. Alternatives like NodeLocal DNSCache and Cilium with eBPF (replacing kube-proxy) offer performance gains but add operational overhead.
3. Workload Isolation
Developer environments needing root access demanded robust isolation. Kubernetes 1.31’s user namespaces (beta) and VM-based solutions like Firecracker were explored but required deep customization.
You Should Know:
- Dynamic Resource Allocation: Use `kubectl top pods` and `HorizontalPodAutoscaler` to monitor and scale workloads. Example HPA config:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: gitpod-scaler spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: gitpod-worker minReplicas: 1 maxReplicas: 10 metrics:</li> <li>type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50
-
Networking Fixes:
- Deploy NodeLocal DNSCache:
kubectl apply -f https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/dns/nodelocaldns/nodelocaldns.yaml
-
Replace kube-proxy with Cilium:
helm install cilium cilium/cilium --version 1.14.0 --namespace kube-system \ --set eBPF.enabled=true \ --set kubeProxyReplacement=strict
-
Isolation Techniques:
- Enable user namespaces in Kubernetes 1.31+:
apiVersion: v1 kind: Pod metadata: name: isolated-pod spec: securityContext: runAsUser: 1000 runAsGroup: 3000 fsGroup: 2000
- Firecracker microVMs: Use `containerd` with
firecracker-runtime.
What Undercode Say:
Gitpod’s journey reflects Kubernetes’ trade-offs: flexibility vs. complexity. While K8s excels for stateless apps, stateful or multi-tenant workloads (like IDEs) may need tailored solutions. Key takeaways:
– Monitor aggressively: `kubectl describe nodes` and Prometheus for resource trends.
– Simplify networking: Avoid over-engineering; start with CNI plugins like Calico before diving into eBPF.
– Isolate wisely: Combine PodSecurityPolicies (PSPs) and `gVisor` for defense-in-depth.
Expected Output:
- Gitpod’s original post: https://www.gitpod.io/blog/we-are-leaving-kubernetes
- Cilium networking: https://cilium.io
- KEDA autoscaling: https://keda.sh
References:
Reported By: Danielepolencic Multi – Hackers Feeds
Extra Hub: Undercode MoN
Basic Verification: Pass ✅



