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: 123abc456def
Please file bug reports and feature requests in GitHub issues.