Installation
Multiple ways to deploy Kubey depending on your environment.
Docker
The simplest deployment method. Perfect for local development or single-server deployments. Pull from Docker Hub:
Basic Docker Runbash
docker pull jboocodes/kubeydocker \
docker run -d \
--name kubey \
-p 8080:8080 \
-v ~/.kube:/root/.kube:ro \
jboocodes/kubeyDocker Compose
Recommended for production deployments. Includes PostgreSQL for user data persistence.
docker-compose.ymlyaml
version: '3.8'
services:
kubey:
image: jboocodes/kubey:latest
ports:
- "8080:8080"
environment:
- AUTH_MODE=shared
- DATABASE_URL=postgres://kubey:kubey@postgres:5432/kubey?sslmode=disable
- JWT_SECRET=your-secret-key-change-me
- ENCRYPTION_KEY=your-encryption-key-change-me
- GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID}
- GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET}
volumes:
- ~/.kube:/root/.kube:ro
depends_on:
- postgres
postgres:
image: postgres:16-alpine
environment:
- POSTGRES_USER=kubey
- POSTGRES_PASSWORD=kubey
- POSTGRES_DB=kubey
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:Run with:
docker compose up -dKubernetes
Deploy Kubey directly to your Kubernetes cluster. It will automatically discover the cluster it's running in.
kubey-deployment.yamlyaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: kubey
namespace: kubey
spec:
replicas: 1
selector:
matchLabels:
app: kubey
template:
metadata:
labels:
app: kubey
spec:
serviceAccountName: kubey
containers:
- name: kubey
image: jboocodes/kubey:latest
ports:
- containerPort: 8080
env:
- name: AUTH_MODE
value: "shared"
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: kubey-secrets
key: database-url
- name: JWT_SECRET
valueFrom:
secretKeyRef:
name: kubey-secrets
key: jwt-secret
---
apiVersion: v1
kind: Service
metadata:
name: kubey
namespace: kubey
spec:
selector:
app: kubey
ports:
- port: 80
targetPort: 8080
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: kubey
namespace: kubey
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: kubey-reader
rules:
- apiGroups: [""]
resources: ["pods", "services", "nodes", "namespaces", "pods/log"]
verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
resources: ["deployments", "replicasets"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kubey-reader
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: kubey-reader
subjects:
- kind: ServiceAccount
name: kubey
namespace: kubeyApply with:
kubectl create namespace kubey
kubectl apply -f kubey-deployment.yamlHelm Chart
The easiest way to deploy Kubey to Kubernetes with customizable values.
Install with Helmbash
helm repo add kubey https://charts.kubey.app
helm repo update
helm install kubey jboocodes/kubey \
--namespace kubey \
--create-namespace \
--set auth.mode=shared \
--set auth.github.clientId=YOUR_CLIENT_ID \
--set auth.github.clientSecret=YOUR_CLIENT_SECRETMonitoring Multiple Clusters
To monitor multiple clusters from a single Kubey instance, ensure your kubeconfig contains all the clusters you want to monitor:
Merge kubeconfigsbash
# Set KUBECONFIG to include multiple cluster configs
export KUBECONFIG=~/.kube/config:~/.kube/staging-config:~/.kube/prod-config
# Merge into a single file
kubectl config view --flatten > ~/.kube/merged-config
# Use the merged config with Kubey
docker run -d \
-v ~/.kube/merged-config:/root/.kube/config:ro \
-p 8080:8080 \
jboocodes/kubeyAll contexts in your kubeconfig will be automatically detected and available in Kubey.