Provides easy integration for Dropwizard applications with the Fabric8 Kubernetes API client.
This bundle comes with out-of-the-box support for:
- Configuration (providing YAML as an option on top of the existing ways to configure the fabric8 client)
- Kubernetes client connection lifecycle management
- Kubernetes API health checks
- Metrics instrumentation for the OKHttpClient underpinning the kubernetes-client.
- Distributed tracing integration using Brave
For more information on the Kubernetes API, take a look at the official documentation here: https://kubernetes.io/docs/reference/#api-reference
| dropwizard-kubernetes | Dropwizard v1.3.x | Dropwizard v2.0.x | Dropwizard v2.1.x | Dropwizard v3.0.x | Dropwizard v4.0.x |
|---|---|---|---|---|---|
| v1.3.x | ✅ | ✅ | ❌ | ❌ | ❌ |
| v1.4.x | ✅ | ✅ | ❌ | ❌ | ❌ |
| v1.5.x | ✅ | ✅ | ✅ | ❌ | ❌ |
| v3.0.x | ❌ | ❌ | ❌ | ✅ | ❌ |
| v4.0.x | ❌ | ❌ | ❌ | ❌ | ✅ |
Add dependency on library.
Maven:
<dependency> <groupId>io.dropwizard.modules</groupId> <artifactId>dropwizard-kubernetes</artifactId> <version>${dropwizard-kubernetes.version}</version> </dependency>Gradle:
compile "io.dropwizard.modules:dropwizard-kubernetes:$dropwizardKubernetesVersion"In your application's Configuration class, add a KubernetesClientFactory object:
public class ExampleConfiguration extends Configuration { ... @Valid @NotNull @JsonProperty("kubernetes-client") private KubernetesClientFactory kubernetesClientFactory; public KubernetesClientFactory getKubernetesClientFactory() { return kubernetesClientFactory; } public void setKubernetesClientFactory(final KubernetesClientFactory kubernetesClientFactory) { this.kubernetesClientFactory = kubernetesClientFactory; } }Add a KubernetesClientBundle to the Boostrap object in your initialize method:
private final KubernetesClientBundle<ExampleConfiguration> kubernetesClient = new KubernetesClientBundle<ExampleConfiguration>() { @Override public KubernetesClientFactory getKubernetesClientFactory(ExampleConfiguration configuration) { return configuration.getKubernetesClientFactory(); } }; @Override public void initialize(Bootstrap<ExampleConfiguration> bootstrap) { bootstrap.addBundle(kubernetesClient); } @Override public void run(ExampleConfiguration config, Environment environment) { final KubernetesAPIThing kubernetesAPIThing = new KubernetesAPIThing(kubernetesClient.getKubernetesClient()); environment.jersey().register(new KubernetesAPIThingResource(kubernetesAPIThing)); }Configure your factory in your config.yml file:
kubernetes-client: name: my-k8s-usecase config: masterUrl: https://localhost:443 apiVersion: v1 namespace: default currentContext: my-context userAgent: generic-crud-app requestConfig: watchReconnectInterval: 3s watchReconnectLimit: 25 connectionTimeout: 10s requestTimeout: 4s rollingTimeout: 5s scaleTimeout: 6s webSocketTimeout: 3s webSocketPingInterval: 10s loggingInterval: 20s httpClient: followRedirects: false followSslRedirects: false proxy: url: "https://127.0.0.1:6379" username: admin password: hunter2 security: trustCerts: true caCert: type: string caCert: abc123def456 trustStore: src/test/resources/truststore.p12 trustStorePassword: changeit interceptors: - type: backwards-compatibility - type: oauth oAuthToken: type: string token: 123abc456defPlease file bug reports and feature requests in GitHub issues.