diff options
author | Max Audron <audron@cocaine.farm> | 2022-03-06 14:50:00 +0100 |
---|---|---|
committer | Max Audron <audron@cocaine.farm> | 2022-03-12 13:05:52 +0100 |
commit | 9d44127245990cc55dbdff5a4bd0a1524348f110 (patch) | |
tree | 82110b06619b6cd7031398d8c1c6d42f7308b152 /src/util | |
parent | c00b2c9948bc686a5f33805a5cc4295c933a723a (diff) | |
download | garage-9d44127245990cc55dbdff5a4bd0a1524348f110.tar.gz garage-9d44127245990cc55dbdff5a4bd0a1524348f110.zip |
add support for kubernetes service discovery
This commit adds support to discover garage instances running in
kubernetes.
Once enabled by setting `kubernetes_namespace` and
`kubernetes_service_name` garage will create a Custom Resources
`garagenodes.deuxfleurs.fr` with nodes public key as the resource name.
and IP and Port information as spec in the namespace configured by
`kubernetes_namespace`.
For discovering nodes the resources are filtered with the optionally set
`kubernetes_service_name` which sets a label
`garage.deuxfleurs.fr/service` on the resources.
This allows to separate multiple garage deployments in a single
namespace.
the `kubernetes_skip_crd` variable allows to disable the creation of the
CRD by garage itself. The user must deploy this manually.
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/Cargo.toml | 3 | ||||
-rw-r--r-- | src/util/config.rs | 7 | ||||
-rw-r--r-- | src/util/error.rs | 3 |
3 files changed, 13 insertions, 0 deletions
diff --git a/src/util/Cargo.toml b/src/util/Cargo.toml index d5200f98..4e3c8c25 100644 --- a/src/util/Cargo.toml +++ b/src/util/Cargo.toml @@ -38,3 +38,6 @@ netapp = "0.3.0" http = "0.2" hyper = "0.14" + +kube = { version = "0.62", features = ["runtime", "derive"] } +k8s-openapi = { version = "0.13", features = ["v1_22"] } diff --git a/src/util/config.rs b/src/util/config.rs index f1f4b06a..19c75478 100644 --- a/src/util/config.rs +++ b/src/util/config.rs @@ -52,6 +52,13 @@ pub struct Config { pub consul_host: Option<String>, /// Consul service name to use pub consul_service_name: Option<String>, + /// Kubernetes namespace the service discovery resources are be created in + pub kubernetes_namespace: Option<String>, + /// Service name to filter for in k8s custom resources + pub kubernetes_service_name: Option<String>, + /// Skip creation of the garagenodes CRD + #[serde(default)] + pub kubernetes_skip_crd: bool, /// Sled cache size, in bytes #[serde(default = "default_sled_cache_capacity")] diff --git a/src/util/error.rs b/src/util/error.rs index bdb3a69b..93b28038 100644 --- a/src/util/error.rs +++ b/src/util/error.rs @@ -23,6 +23,9 @@ pub enum Error { #[error(display = "Invalid HTTP header value: {}", _0)] HttpHeader(#[error(source)] http::header::ToStrError), + #[error(display = "kubernetes error: {}", _0)] + Kubernetes(#[error(source)] kube::Error), + #[error(display = "Netapp error: {}", _0)] Netapp(#[error(source)] netapp::error::Error), |