# 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 ```sh 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`. ```yaml mode: default ``` ## Widgets The Kubernetes widget can show a high-level overview of the cluster, individual nodes, or both. ```yaml - 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: ```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. ```yaml - 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: ```yaml - 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](https://longhorn.io). Configure it from the `widgets.yaml`. ```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](k3d/README.md).