From 9d44127245990cc55dbdff5a4bd0a1524348f110 Mon Sep 17 00:00:00 2001 From: Max Audron Date: Sun, 6 Mar 2022 14:50:00 +0100 Subject: 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. --- src/util/Cargo.toml | 3 +++ src/util/config.rs | 7 +++++++ src/util/error.rs | 3 +++ 3 files changed, 13 insertions(+) (limited to 'src/util') 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, /// Consul service name to use pub consul_service_name: Option, + /// Kubernetes namespace the service discovery resources are be created in + pub kubernetes_namespace: Option, + /// Service name to filter for in k8s custom resources + pub kubernetes_service_name: Option, + /// 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), -- cgit v1.2.3