You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
homepage/kubernetes.md

3.4 KiB

Kubernetes Support

Requirements

  • Kubernetes 1.19+
  • Metrics service
  • An Ingress controller

Deployment

Use the unofficial helm chart: https://github.com/jameswynn/helm-charts/tree/main/charts/homepage

helm repo add jameswynn https://jameswynn.github.io/helm-charts
helm install my-release jameswynn/homepage

Configuration

Set the mode in the kubernetes.yaml to cluster.

mode: default

Widgets

The Kubernetes widget can show a high-level overview of the cluster, individual nodes, or both.

- kubernetes:
    cluster:
      # Shows the cluster node
      show: true
      # Shows the aggregate CPU stats
      cpu: true
      # Shows the aggregate memory stats
      memory: true
      # Shows a custom label
      showLabel: true
      label: "cluster"
    nodes:
      # Shows the clusters
      show: true
      # Shows the CPU for each node
      cpu: true
      # Shows the memory for each node
      memory: true
      # Shows the label, which is always the node name
      showLabel: true

Service Discovery

Sample yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: homepage
  annotations:
    gethomepage.dev/enabled: "true"
    gethomepage.dev/description: Dynamically Detected Homepage
    gethomepage.dev/group: Operations
    gethomepage.dev/icon: homepage.png
    gethomepage.dev/name: Homepage
spec:
  rules:
    - host: homepage.example.com
      http:
        paths:
          - backend:
              service:
                name: homepage
                port:
                  number: 3000
            path: /
            pathType: Prefix

Service Widgets

To manually configure a Service Widget the namespace and app fields must be configured on the service entry.

- Home Automation
    - Home-Assistant:
        icon: home-assistant.png
        href: https://home.example.com
        description: Home Automation
        app: home-assistant
        namespace: home

This works by creating a label selector app.kubernetes.io/name=home-assistant, which typically will be the same both for the ingress and the deployment. However, some deployments can be complex and will not conform to this rule. In such cases the podSelector variable can bridge the gap. Any field selector can be used in it which allows for some powerful selection capabilities.

For instance, it can be utilized to roll multiple underlying deployments under one application to see a high-level aggregate:

- Comms
    - Element Chat:
        icon: matrix-light.png
        href: https://chat.example.com
        description: Matrix Synapse Powered Chat
        app: matrix-element
        namespace: comms
        podSelector: >-
            app.kubernetes.io/instance in (
                matrix-element,
                matrix-media-repo,
                matrix-media-repo-postgresql,
                matrix-synapse
            )            

Longhorn Widget

There is a widget for showing storage stats from Longhorn. Configure it from the widgets.yaml.

- longhorn:
    # Show the expanded
    expanded: true
    # Shows a node representing the aggregate values
    total: true
    # Shows the node names as labels
    labels: true
    # Show the nodes
    nodes: true
    # An explicit list of nodes to show. All are shown by default if "nodes" is true
    include:
      - node1
      - node2

Testing

Refer to the k3d readme.