44 Commits

Author SHA1 Message Date
Jose Diaz-Gonzalez
8d08687706 feat: provide ability to customize chart values via scheduler-k3s:set
Dokku ships with default charts and customizes their helm values. In certain cases, it may be useful to further customize those values to better support specific installations. With this change, it is now possible to set custom values by providing the key in the format `chart.$CHART_NAME.$PROPERTY`. For instance, to increase timeouts for the keda http addon:

```shell
dokku scheduler-k3s:set --global chart.keda-add-ons-http.interceptor.tcpConnectTimeout 120s
dokku scheduler-k3s:set --global chart.keda-add-ons-http.interceptor.keepAlive 120s
dokku scheduler-k3s:set --global chart.keda-add-ons-http.interceptor.responseHeaderTimeout 120s
dokku scheduler-k3s:set --global chart.keda-add-ons-http.interceptor.idleConnTimeout 120s
dokku scheduler-k3s:set --global chart.keda-add-ons-http.interceptor.tlsHandshakeTimeout 120s
dokku scheduler-k3s:set --global chart.keda-add-ons-http.interceptor.expectContinueTimeout 120s
```

To reset a value to its default, simply set the value to an empty string.

```shell
dokku scheduler-k3s:set --global chart.keda-add-ons-http.interceptor.tcpConnectTimeout
```

Once the values are set, users will need to then run `scheduler-k3s:ensure-charts` with either the `--force` flag or specify the `--chart` flag with a list of charts to force apply.

```shell
dokku scheduler-k3s:ensure-charts --force

dokku scheduler-k3s:ensure-charts --chart keda-add-ons-http
```

Note that the existing dokku-provided values cannot be removed, but can be overridden.
2024-12-03 02:07:36 -05:00
Jose Diaz-Gonzalez
f2a4fe493a fix: do not force-reinstall the keda-http-add-on 2024-11-13 03:29:54 -05:00
Jose Diaz-Gonzalez
8aa311131e feat: add scheduler-k3s:ensure-charts
This command can be used to ensure charts are properly installed and configured according to Dokku's internal settings.
2024-11-13 01:18:40 -05:00
Jose Diaz-Gonzalez
d68eacced4 fix: do not attempt to install both k3s and traefik 2024-03-12 06:08:05 -04:00
Jose Diaz-Gonzalez
8f5a834cf0 fix: validate input for the autoscaling-auth:set command 2024-03-08 05:17:49 -05:00
Jose Diaz-Gonzalez
7c58bbf792 feat: setup cluster trigger authentication objects 2024-03-06 03:39:11 -05:00
Jose Diaz-Gonzalez
6b74cd1d6b feat: implement autoscaling-auth:report 2024-03-06 03:39:11 -05:00
Jose Diaz-Gonzalez
14f0e2fb72 refactor: use const for prefix 2024-03-06 03:39:11 -05:00
Jose Diaz-Gonzalez
3bd61d8c7f feat: add command to add or remove auth configurations 2024-03-06 03:39:11 -05:00
Jose Diaz-Gonzalez
d8946edf91 feat: add support for manipulating labels
Closes #6625
2024-03-01 17:42:24 -05:00
Jose Diaz-Gonzalez
377cfc7f59 refactor: only apply the cluster issuers helm chart when setting properties
Otherwise, we're constantly re-installing the same helm chart during deploys, leading to longer deploys.
2024-02-28 17:16:32 -05:00
Jose Diaz-Gonzalez
72067fcfd2 feat: add ability for users to specify alternative kubeconfig and kubecontext
This will provide the possibility for users to talk to existing kubernetes clusters, thereby removing one of the biggest reasons for having the old scheduler-kubernetes plugin around.
2024-02-22 07:42:15 -05:00
Jose Diaz-Gonzalez
3c6cc68086 refactor: capture output by default
This is almost certainly the correct default for Dokku. While it's a BC break and might cause an increase in memory usage, the api is mostly internal and therefore this is safe to use.
2024-02-12 20:28:31 -05:00
Jose Diaz-Gonzalez
1ae2df52f5 fix: use image pull secrets instead of registries.yaml to reference private repositories
While this will now more or less require a local docker login - which can be overridden by setting the image-pull-secrets property - this ensures every deploy has a valid context.

One annoying thing is that the secret is per-app vs global, meaning that if the secret must be rotated, all apps need to be redeployed. A future change can fix that by deploying a global secret, or if folks really desire, this can be done by setting the image-pull-secrets property on the app/globally.
2024-02-12 17:15:37 -05:00
Jose Diaz-Gonzalez
5674a29211 feat: add ability to use ingress-nginx for routing instead of traefik 2024-02-06 21:19:51 -05:00
Jose Diaz-Gonzalez
81286a0673 feat: add ability to install nginx instead of traefik 2024-02-06 21:19:14 -05:00
Jose Diaz-Gonzalez
f5f583b12b feat: add support for specifying annotations
As the command contains a colon, it must be handled in the commands binary as opposed to subcommands.

Also include a simple bats test.
2024-02-06 13:54:53 -05:00
Jose Diaz-Gonzalez
408acbe14e feat: wait until initial k3s node is ready before installing manifests 2024-02-06 13:53:34 -05:00
Jose Diaz-Gonzalez
5e1089973e refactor: use type-specific functions for writing contents to a file 2024-02-06 01:39:44 -05:00
Jose Diaz-Gonzalez
06429a384e feat: install kubectx and kubens 2024-01-30 08:01:42 -05:00
Jose Diaz-Gonzalez
ea55db2747 refactor: install traefik via helm chart directly to avoid issues where traefik silently fails installation 2024-01-24 03:58:39 -05:00
Jose Diaz-Gonzalez
57e76e29d1 fix: correct the scope on the token 2024-01-23 04:25:41 -05:00
Jose Diaz-Gonzalez
204517074b fix: allow setting a custom ip address as the ip pf the dokku server
This will provide the ability to override cases where the detected ip address is invalid for whatever reason.
2024-01-23 03:26:32 -05:00
Jose Diaz-Gonzalez
2336063ca2 refactor: move templating into pseudo-generated helm chart
The previous mechanism of constructing the helm chart was pretty obnoxious due to needing to have some things in the object and some in template files that were appended afterwards. This change simplifies that by using template files per type with minimal replacements.
2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
62c8cb770e feat: add support for global properties 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
2bee070e78 chore: unify context handling 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
2619c3db08 fix: ensure critical addons come up when the node is tainted
Rather than taint on `node-role.kubernetes.io/master=true:NoSchedule`, we check for `CriticalAddonsOnly=true:NoSchedule` and taint on that.
2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
f7acbb1e7c refactor: place all required manifests in a single location
This will make it easier for us to apply the installs.
2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
309256955d feat: label the k3s server nodes as capable of fronting traffic
The idea here is that only k3s nodes can/should handle certificate requests. While users may wish to force these onto dedicated lb nodes in the future, at least for now, separating app workloads with routing seems like an okay trade-off.
2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
0730647af7 feat: implement :cluster-list and :cluster-remove
These - and the existing :cluster-add command - do not require root.
2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
d494e01c7b chore: update error message 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
33a3e6a2fc chore: drop unused node label 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
3375474a4c feat: copy the registry file to all remote hosts 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
78bc2849cb feat: add longhorn 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
a1428ceb74 fix: do not set a static token and generate one as needed 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
69e9511666 feat: implement cluster joining for server and worker nodes
Different options get applied to each depending on what is needed for the role.

This also updates how we initialize the cluster to better support how metrics exposure and cross-server networking.
2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
e13561ec4d refactor: move registry path to const 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
6b85374857 feat: implement scheduler-k3s:show-config 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
6fb03eda4e feat: implement most of deployments
The big feature missing from deployments today is healthchecks, which require extra parsing of the app.json format since the healthchecks there aren't immediately serializable to kubernetes deployment healthchecks.

Other smaller missing functionality from the existing OSS kubernetes scheduler are:

- The ability to set custom pod annotations
- The ability to set custom deployment annotations
- The ability to mount volumes

Exposing these pieces of functionality will come at a later date, if at all.
2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
6c234c66a3 fix: guard the initialize call if k3s is already installed 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
7101d1bf7b fix: close the file before attempting to write it
Also remove the unnecessary sleep call
2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
f377c23403 feat: setup k3s registry automatically on registry login 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
ec538ce1c5 feat: implement scheduler-k3s:initialize 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
a80c73fb2c feat: create skeleton of k3s plugin 2024-01-23 03:00:27 -05:00