Skip to content

SvenW/capacitor

This branch is 7 commits behind gimlet-io/capacitor:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Oct 2, 2024
7f2b8ae · Oct 2, 2024
Oct 1, 2024
Dec 1, 2023
Oct 1, 2024
Oct 2, 2024
Jan 16, 2024
Oct 2, 2024
Oct 1, 2024
Dec 1, 2023
Oct 16, 2023
Apr 14, 2024
Sep 25, 2024
Oct 1, 2024
Oct 1, 2024

Repository files navigation

Capacitor

A general purpose UI for FluxCD.

Capacitor - Services

Installation

Capacitor requires Flux v2.0.0.

Flux

Deploy the latest Capacitor release in the flux-system namespace by adding the following manifests to your Flux repository:

---
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: OCIRepository
metadata:
  name: capacitor
  namespace: flux-system
spec:
  interval: 12h
  url: oci://ghcr.io/gimlet-io/capacitor-manifests
  ref:
    semver: ">=0.1.0"
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: capacitor
  namespace: flux-system
spec:
  targetNamespace: flux-system
  interval: 1h
  retryInterval: 2m
  timeout: 5m
  wait: true
  prune: true
  path: "./"
  sourceRef:
    kind: OCIRepository
    name: capacitor

Note that Flux will check for Capacitor releases every 12 hours and will automatically deploy the new version if it is available.

Access Capacitor UI with port-forwarding:

kubectl -n flux-system port-forward svc/capacitor 9000:9000

(Optional) Verify OCIRepository with Cosign

This feature requires Flux v2.2.0.

---
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: OCIRepository
metadata:
  name: capacitor
  namespace: flux-system
spec:
  interval: 12h
  url: oci://ghcr.io/gimlet-io/capacitor-manifests
  ref:
    semver: ">=0.1.0"
+  verify:
+    provider: cosign
+    matchOIDCIdentity:
+      - issuer: "https://token.actions.githubusercontent.com"
+        subject: "^https://github.com/gimlet-io/capacitor.*$" 
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: capacitor
  namespace: flux-system
spec:
  targetNamespace: flux-system
  interval: 1h
  retryInterval: 2m
  timeout: 5m
  wait: true
  prune: true
  path: "./"
  sourceRef:
    kind: OCIRepository
    name: capacitor

Kubernetes manifests

kubectl apply -f https://raw.githubusercontent.com/gimlet-io/capacitor/main/deploy/k8s/rbac.yaml
kubectl apply -f https://raw.githubusercontent.com/gimlet-io/capacitor/main/deploy/k8s/manifest.yaml

kubectl port-forward svc/capacitor -n flux-system 9000:9000

For adding an Ingress, a Kubernetes NetworkPolicy is required. An example would be:

---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: capacitor-ingress
  namespace: flux-system
spec:
  policyTypes:
    - Ingress
  ingress:
    - from:
      - namespaceSelector: {}
  podSelector:
    matchLabels:
      app.kubernetes.io/instance: capacitor
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: capacitor-ingress
  namespace: flux-system
spec:
  rules:
    - host: gitops.example.com
      http:
        paths:
          - pathType: Prefix
            path: /
            backend:
              service:
                name: capacitor
                port:
                  number: 9000

Helm

kubectl apply -f https://raw.githubusercontent.com/gimlet-io/capacitor/main/deploy/k8s/rbac.yaml

helm repo add onechart https://chart.onechart.dev

helm upgrade -i capacitor -n flux-system onechart/onechart -f https://raw.githubusercontent.com/gimlet-io/capacitor/main/deploy/helm/onechart-helm-values.yaml

kubectl port-forward svc/capacitor -n flux-system 9000:9000

Why

FluxCD is an amazing backend for all things gitops.

It is a shame that ArgoCD gained so much traction mostly because developers appreciate the UI. Rolling out a read-only ArgoCD UI made Argo the de-facto kubernetes dashboard, where people look at logs and various kubernetes resources.

Capacitor's goal is to level the field: providing a UI option for Flux users that matches or exceeds the level of ArgoCD.

Built in public

The vision: https://www.youtube.com/watch?v=LaDRRDvsRAs

Capacitor is built currently by Gimlet.io founder Laszlo Fogas on live streams:

Philosophy

Capacitor wants to be more than a tool that displays Flux's CRDs in tables. Capacitor wants to provide contextualized information for developers to best operate their applications.

Screenshots

Kustomizations: Kustomizations

Error Handling: Capacitor - Error handling

HelmReleases: Capacitor - Helm Releases

Service Logs: Capacitor - Service logs

Roadmap

  • DONE: Flux CRD data ("sync state") backend
  • DONE: Flux CRD data ("sync state") frontend
  • DONE: UI for kubernetes resources deployed by Flux
  • DONE: Quick actions: logs, events, describe, port-forward
  • Displaying Errors
  • Error notifications
  • Support for environments
  • Display application meta information - service catalog items

Star History

Star History Chart

Please push ✨

About

A general purpose UI for FluxCD.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 53.1%
  • Go 44.3%
  • Shell 1.2%
  • HTML 0.7%
  • Makefile 0.4%
  • Dockerfile 0.2%
  • CSS 0.1%