forked from gethomepage/homepage
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
143 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,143 @@ | ||
# 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 | ||
``` |