39 Commits

Author SHA1 Message Date
Jose Diaz-Gonzalez
23fe19faaa fix: bypass deletion error if k3s is the configured scheduler and it isn't installed 2024-02-22 07:42:15 -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
93323bd0ff feat: add ability to clear out default values
Also add some tests
2024-02-22 06:55:02 -05:00
Jose Diaz-Gonzalez
193b1d8103 fix: set lower cpu/memory requests 2024-02-21 18:31:46 -05:00
Jose Diaz-Gonzalez
14eb60160c fix: avoid setting empty cpu/memory requests 2024-02-21 18:30:48 -05:00
Jose Diaz-Gonzalez
05c48430c5 fix: correct issue where resource values were ignored 2024-02-21 18:13:47 -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
047a3c00f5 chore: remove default false values when calling CallExecCommand 2024-02-12 20:07:43 -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
abbc13cb85 fix: ensure the ingress class is properly set for certificate usage
Without this, switching to nginx ingress fails as the cluster issuer isn't properly configured
2024-02-12 01:31:39 -05:00
Jose Diaz-Gonzalez
cd4f9db95b fix: use annotation instead of location snippet 2024-02-07 13:15:16 -05:00
Jose Diaz-Gonzalez
980979ef87 feat: properly handle nginx annotation merging 2024-02-06 22:48:22 -05:00
Jose Diaz-Gonzalez
416a119904 feat: pull nginx properties as ingress annotations 2024-02-06 22:12:54 -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
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
029e1f5f48 feat: add the dokku logo as the chart icon 2024-01-26 06:55:46 -05:00
Jose Diaz-Gonzalez
1d99e0bc6e fix: guard against missing healthcheck config
Also add support for liveness and readiness probes.
2024-01-24 02:39:39 -05:00
Jose Diaz-Gonzalez
578afc0ef7 fix: use correct name for cluster-issuers 2024-01-24 02:19:21 -05:00
Jose Diaz-Gonzalez
4a7db5ce24 feat: apply the cluster issuers on every app deploy
This ensures we can always get certificates regardless of what app gets deployed with whatever configuration.
2024-01-23 07:25:03 -05:00
Jose Diaz-Gonzalez
a9e6e96697 feat: implement scheduler-k3s:report 2024-01-23 05:01:23 -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
001ae3c83b fix: set default value for rollback-on-failure 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
01ec08fd79 refactor: simplify port string 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
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
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
9cd0644883 refactor: fix issues with pod entering
- ensure we always wait for the specific pod we want to be ready
- enter the default container if none is specified
2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
7bce908c2d fix: properly set the command for herokuish apps 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
297853781f refactor: move all k8s code behind client
Also fix an issue where attaching to pods fails in rare cases
2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
1c5505f78b refactor: move functions around and ensure we respect local versions of golang dependencies 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
8b8444fb1f feat: implement run and run:detached
This utilizes a Kubernetes Job to start a pod in order to take advantage of completed Job cleanup in Kubernetes. It also properly handles interactivity by ensuring the container has a TTY.

Note that there is currently no provision for parsing docker arguments and translating them into their Kubernetes equivalents.
2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
dfa7d0f78c feat: mark created namespaces as managed by dokku 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
737f54a5c7 feat: implement dokku enter for k8s scheduler 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