diff --git a/docs/REFERENCE.md b/docs/REFERENCE.md index d026c47..7788e4f 100644 --- a/docs/REFERENCE.md +++ b/docs/REFERENCE.md @@ -1078,6 +1078,33 @@ kubectl get secret keycloak-client- -n keycloak -o jsonpath='{.metadata.ann **See**: [Developer Guide - Adding a New Keycloak Client](DEVELOPER-GUIDE.md#adding-a-new-keycloak-client) +### Karpor + +**Chart**: `karpor` from `https://kusionstack.github.io/charts` +**Version**: 0.7.6 (app v0.6.4) +**Namespace**: `karpor` +**Sync Wave**: 1 + +**Purpose**: Kubernetes visualization and intelligence tool. Provides cross-cluster resource search, compliance checking, and topology visualization. Gives platform engineers a unified view of all cluster resources and their relationships. + +**Architecture** (4 components): +- **Server** — main Karpor API/UI (port 7443) +- **Syncer** — syncs cluster state into the search index +- **ElasticSearch** — search backend for resource indexing +- **etcd** — persistent key-value store (10Gi PVC) + +**Configuration** (`infra/values/base/karpor-values.yaml`): +- `namespaceEnabled: false` — ArgoCD manages namespace creation +- Default resource limits tuned for small clusters +- ElasticSearch: 2 CPU / 4Gi memory (the heaviest component) +- AI features available but not enabled (requires `server.ai.authToken` + backend config) + +**Access**: Port-forward to reach the UI: +```bash +kubectl port-forward svc/karpor-release-server -n karpor 7443:7443 +# Open https://localhost:7443 +``` + ### Renovate **Chart**: `renovate` (OCI: `ghcr.io/renovatebot/charts`) diff --git a/infra/base/karpor.yaml b/infra/base/karpor.yaml new file mode 100644 index 0000000..0bd6a25 --- /dev/null +++ b/infra/base/karpor.yaml @@ -0,0 +1,42 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: karpor + namespace: argocd + annotations: + argocd.argoproj.io/sync-wave: "1" + labels: + app.kubernetes.io/name: karpor + app.kubernetes.io/part-of: developer-portal + app.kubernetes.io/managed-by: argocd + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: default + + sources: + - repoURL: https://kusionstack.github.io/charts + chart: karpor + targetRevision: "0.7.6" + helm: + releaseName: karpor + valueFiles: + - $values/infra/values/base/karpor-values.yaml + + - repoURL: ssh://git@git.forteapps.net:2222/Forte/launchpad.git + targetRevision: HEAD + ref: values + + destination: + server: https://kubernetes.default.svc + namespace: karpor + + syncPolicy: + automated: + prune: true + selfHeal: true + allowEmpty: false + syncOptions: + - CreateNamespace=true + - Validate=true + - ServerSideApply=true diff --git a/infra/base/kustomization.yaml b/infra/base/kustomization.yaml index 5c1beb1..a88000f 100644 --- a/infra/base/kustomization.yaml +++ b/infra/base/kustomization.yaml @@ -22,3 +22,4 @@ resources: - tempo.yaml - grafana-dashboards.yaml - network-policies-application.yaml +- karpor.yaml diff --git a/infra/values/base/karpor-values.yaml b/infra/values/base/karpor-values.yaml new file mode 100644 index 0000000..3f67b15 --- /dev/null +++ b/infra/values/base/karpor-values.yaml @@ -0,0 +1,44 @@ +# Karpor - Kubernetes Visualization & Intelligence Tool +# Helm chart: https://github.com/KusionStack/charts/tree/master/charts/karpor + +# Let the ArgoCD Application manage the namespace +namespaceEnabled: false + +server: + replicas: 1 + port: 7443 + resources: + requests: + cpu: 250m + memory: 256Mi + limits: + cpu: 500m + memory: 1Gi + +syncer: + replicas: 1 + port: 7443 + resources: + requests: + cpu: 250m + memory: 256Mi + limits: + cpu: 500m + memory: 1Gi + +elasticsearch: + replicas: 1 + port: 9200 + resources: + requests: + cpu: 500m + memory: 2Gi + limits: + cpu: "2" + memory: 4Gi + +etcd: + replicas: 1 + port: 2379 + persistence: + size: 5Gi