Skip to content

Commit ded6fdf

Browse files
authored
Merge pull request #1386 from yue9944882/separate-examples
Separate examples sub-modules
2 parents 0996774 + 73e6f16 commit ded6fdf

File tree

74 files changed

+2871
-127
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+2871
-127
lines changed

README.md

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -73,48 +73,48 @@ Consider either catch and ignore the JsonSyntaxException or do the deletion in t
7373

7474
We prepared a few examples for common use-cases which are shown below:
7575
- __Configuration__:
76-
- [InClusterClientExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/InClusterClientExample.java):
76+
- [InClusterClientExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/InClusterClientExample.java):
7777
Configure a client while running inside the Kubernetes cluster.
78-
- [KubeConfigFileClientExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/KubeConfigFileClientExample.java):
78+
- [KubeConfigFileClientExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/KubeConfigFileClientExample.java):
7979
Configure a client to access a Kubernetes cluster from outside.
8080
- __Basics__:
81-
- [SimpleExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/Example.java):
81+
- [SimpleExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/Example.java):
8282
Simple minimum example of how to use the client.
83-
- [ProtoExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/ProtoExample.java):
83+
- [ProtoExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/ProtoExample.java):
8484
Request/receive payloads in protobuf serialization protocol.
85-
- ([5.0.0+](https://github.com/kubernetes-client/java/tree/client-java-parent-5.0.0)) [PatchExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/PatchExample.java):
85+
- ([5.0.0+](https://github.com/kubernetes-client/java/tree/client-java-parent-5.0.0)) [PatchExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/PatchExample.java):
8686
Patch resource objects in various supported patch formats, equal to `kubectl patch`.
87-
- [FluentExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/FluentExample.java):
87+
- [FluentExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/FluentExample.java):
8888
Construct arbitrary resource in a fluent builder style.
89-
- [YamlExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/YamlExample.java):
89+
- [YamlExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/YamlExample.java):
9090
Suggested way to load or dump resource in Yaml.
9191
- __Streaming__:
92-
- [WatchExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/WatchExample.java):
92+
- [WatchExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/WatchExample.java):
9393
Subscribe watch events from certain resources, equal to `kubectl get <resource> -w`.
94-
- [LogsExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/LogsExample.java):
94+
- [LogsExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/LogsExample.java):
9595
Fetch logs from running containers, equal to `kubectl logs`.
96-
- [ExecExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/ExecExample.java):
96+
- [ExecExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/ExecExample.java):
9797
Establish an "exec" session with running containers, equal to `kubectl exec`.
98-
- [PortForwardExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/PortForwardExample.java):
98+
- [PortForwardExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/PortForwardExample.java):
9999
Maps local port to a port on the pod, equal to `kubectl port-forward`.
100-
- [AttachExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/AttachExample.java):
100+
- [AttachExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/AttachExample.java):
101101
Attach to a process that is already running inside an existing container, equal to `kubectl attach`.
102-
- [CopyExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/CopyExample.java):
102+
- [CopyExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/CopyExample.java):
103103
Copy files and directories to and from containers, equal to `kubectl cp`.
104-
- [WebSocketsExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/WebSocketsExample.java):
104+
- [WebSocketsExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/WebSocketsExample.java):
105105
Establish an arbitrary web-socket session to certain resources.
106106
- __Advanced__: (NOTE: The following example requires `client-java-extended` module)
107-
- ([5.0.0+](https://github.com/kubernetes-client/java/tree/client-java-parent-5.0.0)) [InformerExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/InformerExample.java):
107+
- ([5.0.0+](https://github.com/kubernetes-client/java/tree/client-java-parent-5.0.0)) [InformerExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/InformerExample.java):
108108
Build an informer which list-watches resources and reflects the notifications to a local cache.
109-
- ([5.0.0+](https://github.com/kubernetes-client/java/tree/client-java-parent-5.0.0)) [PagerExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/PagerExample.java):
109+
- ([5.0.0+](https://github.com/kubernetes-client/java/tree/client-java-parent-5.0.0)) [PagerExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/PagerExample.java):
110110
Support Pagination (only for the list request) to ease server-side loads/network congestion.
111-
- ([6.0.0+](https://github.com/kubernetes-client/java/tree/client-java-parent-6.0.0)) [ControllerExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/ControllerExample.java):
111+
- ([6.0.0+](https://github.com/kubernetes-client/java/tree/client-java-parent-6.0.0)) [ControllerExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/ControllerExample.java):
112112
Build a controller reconciling the state of world by list-watching one or multiple resources.
113-
- ([6.0.0+](https://github.com/kubernetes-client/java/tree/client-java-parent-6.0.0)) [LeaderElectionExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/LeaderElectionExample.java):
113+
- ([6.0.0+](https://github.com/kubernetes-client/java/tree/client-java-parent-6.0.0)) [LeaderElectionExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/LeaderElectionExample.java):
114114
Leader election utilities to help implement HA controllers.
115-
- ([9.0.0+](https://github.com/kubernetes-client/java/tree/client-java-parent-9.0.0)) [SpringIntegrationControllerExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/SpringControllerExample.java):
115+
- ([9.0.0+](https://github.com/kubernetes-client/java/tree/client-java-parent-9.0.0)) [SpringIntegrationControllerExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/SpringControllerExample.java):
116116
Building a kubernetes controller based on spring framework's bean injection, see additional documentation [here](./docs/java-controller-tutorial-rewrite-rs-controller.md).
117-
- ([9.0.0+](https://github.com/kubernetes-client/java/tree/client-java-parent-9.0.0)) [GenericKubernetesClientExample](https://github.com/kubernetes-client/java/blob/master/examples/src/main/java/io/kubernetes/client/examples/GenericClientExample.java):
117+
- ([9.0.0+](https://github.com/kubernetes-client/java/tree/client-java-parent-9.0.0)) [GenericKubernetesClientExample](./examples/examples-release-last/src/main/java/io/kubernetes/client/examples/GenericClientExample.java):
118118
Construct a generic client interface for any kubernetes types, including CRDs.
119119

120120

File renamed without changes.
File renamed without changes.
File renamed without changes.

examples/examples-release-10/pom.xml

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2+
<modelVersion>4.0.0</modelVersion>
3+
4+
<parent>
5+
<groupId>io.kubernetes</groupId>
6+
<artifactId>client-java-examples-parent</artifactId>
7+
<version>1.0.0-SNAPSHOT</version>
8+
<relativePath>../pom.xml</relativePath>
9+
</parent>
10+
11+
<artifactId>client-java-examples-release-10</artifactId>
12+
<packaging>bundle</packaging>
13+
<name>client-java-examples-release-10</name>
14+
15+
<properties>
16+
<kubernetes.client.version>10.0.0</kubernetes.client.version>
17+
</properties>
18+
<dependencies>
19+
<dependency>
20+
<groupId>io.prometheus</groupId>
21+
<artifactId>simpleclient</artifactId>
22+
<version>0.9.0</version>
23+
</dependency>
24+
<dependency>
25+
<groupId>io.prometheus</groupId>
26+
<artifactId>simpleclient_httpserver</artifactId>
27+
<version>0.9.0</version>
28+
</dependency>
29+
<dependency>
30+
<groupId>io.kubernetes</groupId>
31+
<artifactId>client-java-api</artifactId>
32+
<version>${kubernetes.client.version}</version>
33+
</dependency>
34+
<dependency>
35+
<groupId>io.kubernetes</groupId>
36+
<artifactId>client-java</artifactId>
37+
<version>${kubernetes.client.version}</version>
38+
</dependency>
39+
<dependency>
40+
<groupId>io.kubernetes</groupId>
41+
<artifactId>client-java-extended</artifactId>
42+
<version>${kubernetes.client.version}</version>
43+
</dependency>
44+
<dependency>
45+
<groupId>io.kubernetes</groupId>
46+
<artifactId>client-java-spring-integration</artifactId>
47+
<version>${kubernetes.client.version}</version>
48+
</dependency>
49+
<dependency>
50+
<groupId>io.kubernetes</groupId>
51+
<artifactId>client-java-proto</artifactId>
52+
<version>${kubernetes.client.version}</version>
53+
</dependency>
54+
<dependency>
55+
<groupId>com.google.guava</groupId>
56+
<artifactId>guava</artifactId>
57+
</dependency>
58+
<dependency>
59+
<groupId>commons-cli</groupId>
60+
<artifactId>commons-cli</artifactId>
61+
</dependency>
62+
<dependency>
63+
<groupId>io.kubernetes</groupId>
64+
<artifactId>client-java-cert-manager-models</artifactId>
65+
<version>10.0.0</version>
66+
</dependency>
67+
<dependency>
68+
<groupId>io.kubernetes</groupId>
69+
<artifactId>client-java-prometheus-operator-models</artifactId>
70+
<version>10.0.0</version>
71+
</dependency>
72+
<!-- test dependencies -->
73+
<dependency>
74+
<groupId>junit</groupId>
75+
<artifactId>junit</artifactId>
76+
<scope>test</scope>
77+
</dependency>
78+
<dependency>
79+
<groupId>com.github.tomakehurst</groupId>
80+
<artifactId>wiremock</artifactId>
81+
<scope>test</scope>
82+
</dependency>
83+
</dependencies>
84+
<build>
85+
<plugins>
86+
<plugin>
87+
<groupId>org.apache.felix</groupId>
88+
<artifactId>maven-bundle-plugin</artifactId>
89+
<extensions>true</extensions>
90+
</plugin>
91+
<plugin>
92+
<groupId>org.apache.maven.plugins</groupId>
93+
<artifactId>maven-deploy-plugin</artifactId>
94+
<version>2.8.2</version>
95+
<configuration>
96+
<skip>true</skip>
97+
</configuration>
98+
</plugin>
99+
<plugin>
100+
<groupId>org.apache.maven.plugins</groupId>
101+
<artifactId>maven-assembly-plugin</artifactId>
102+
<executions>
103+
<execution>
104+
<phase>package</phase>
105+
<goals>
106+
<goal>single</goal>
107+
</goals>
108+
<configuration>
109+
<archive>
110+
<manifest>
111+
<mainClass>io.kubernetes.client.examples.Example</mainClass>
112+
</manifest>
113+
</archive>
114+
<descriptorRefs>
115+
<descriptorRef>jar-with-dependencies</descriptorRef>
116+
</descriptorRefs>
117+
</configuration>
118+
</execution>
119+
</executions>
120+
</plugin>
121+
</plugins>
122+
</build>
123+
124+
</project>
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
/*
2+
Copyright 2020 The Kubernetes Authors.
3+
Licensed under the Apache License, Version 2.0 (the "License");
4+
you may not use this file except in compliance with the License.
5+
You may obtain a copy of the License at
6+
http://www.apache.org/licenses/LICENSE-2.0
7+
Unless required by applicable law or agreed to in writing, software
8+
distributed under the License is distributed on an "AS IS" BASIS,
9+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10+
See the License for the specific language governing permissions and
11+
limitations under the License.
12+
*/
13+
package io.kubernetes.client.examples;
14+
15+
import io.kubernetes.client.extended.controller.Controller;
16+
import io.kubernetes.client.extended.controller.ControllerManager;
17+
import io.kubernetes.client.extended.controller.LeaderElectingController;
18+
import io.kubernetes.client.extended.controller.builder.ControllerBuilder;
19+
import io.kubernetes.client.extended.controller.reconciler.Reconciler;
20+
import io.kubernetes.client.extended.controller.reconciler.Request;
21+
import io.kubernetes.client.extended.controller.reconciler.Result;
22+
import io.kubernetes.client.extended.event.EventType;
23+
import io.kubernetes.client.extended.event.legacy.EventBroadcaster;
24+
import io.kubernetes.client.extended.event.legacy.EventRecorder;
25+
import io.kubernetes.client.extended.event.legacy.LegacyEventBroadcaster;
26+
import io.kubernetes.client.extended.leaderelection.LeaderElectionConfig;
27+
import io.kubernetes.client.extended.leaderelection.LeaderElector;
28+
import io.kubernetes.client.extended.leaderelection.resourcelock.EndpointsLock;
29+
import io.kubernetes.client.informer.SharedIndexInformer;
30+
import io.kubernetes.client.informer.SharedInformerFactory;
31+
import io.kubernetes.client.informer.cache.Lister;
32+
import io.kubernetes.client.openapi.ApiClient;
33+
import io.kubernetes.client.openapi.apis.CoreV1Api;
34+
import io.kubernetes.client.openapi.models.V1EventSource;
35+
import io.kubernetes.client.openapi.models.V1Node;
36+
import io.kubernetes.client.openapi.models.V1NodeList;
37+
import io.kubernetes.client.util.CallGeneratorParams;
38+
import java.io.IOException;
39+
import java.time.Duration;
40+
import java.util.concurrent.TimeUnit;
41+
import okhttp3.OkHttpClient;
42+
43+
public class ControllerExample {
44+
public static void main(String[] args) throws IOException {
45+
46+
CoreV1Api coreV1Api = new CoreV1Api();
47+
ApiClient apiClient = coreV1Api.getApiClient();
48+
OkHttpClient httpClient =
49+
apiClient.getHttpClient().newBuilder().readTimeout(0, TimeUnit.SECONDS).build();
50+
apiClient.setHttpClient(httpClient);
51+
52+
// instantiating an informer-factory, and there should be only one informer-factory
53+
// globally.
54+
SharedInformerFactory informerFactory = new SharedInformerFactory();
55+
// registering node-informer into the informer-factory.
56+
SharedIndexInformer<V1Node> nodeInformer =
57+
informerFactory.sharedIndexInformerFor(
58+
(CallGeneratorParams params) -> {
59+
return coreV1Api.listNodeCall(
60+
null,
61+
null,
62+
null,
63+
null,
64+
null,
65+
null,
66+
params.resourceVersion,
67+
params.timeoutSeconds,
68+
params.watch,
69+
null);
70+
},
71+
V1Node.class,
72+
V1NodeList.class);
73+
informerFactory.startAllRegisteredInformers();
74+
75+
EventBroadcaster eventBroadcaster = new LegacyEventBroadcaster(coreV1Api);
76+
77+
// nodeReconciler prints node information on events
78+
NodePrintingReconciler nodeReconciler =
79+
new NodePrintingReconciler(
80+
nodeInformer,
81+
eventBroadcaster.newRecorder(
82+
new V1EventSource().host("localhost").component("node-printer")));
83+
84+
// Use builder library to construct a default controller.
85+
Controller controller =
86+
ControllerBuilder.defaultBuilder(informerFactory)
87+
.watch(
88+
(workQueue) ->
89+
ControllerBuilder.controllerWatchBuilder(V1Node.class, workQueue)
90+
.withWorkQueueKeyFunc(
91+
(V1Node node) ->
92+
new Request(node.getMetadata().getName())) // optional, default to
93+
.withOnAddFilter(
94+
(V1Node createdNode) ->
95+
createdNode
96+
.getMetadata()
97+
.getName()
98+
.startsWith("docker-")) // optional, set onAdd filter
99+
.withOnUpdateFilter(
100+
(V1Node oldNode, V1Node newNode) ->
101+
newNode
102+
.getMetadata()
103+
.getName()
104+
.startsWith("docker-")) // optional, set onUpdate filter
105+
.withOnDeleteFilter(
106+
(V1Node deletedNode, Boolean stateUnknown) ->
107+
deletedNode
108+
.getMetadata()
109+
.getName()
110+
.startsWith("docker-")) // optional, set onDelete filter
111+
.build())
112+
.withReconciler(nodeReconciler) // required, set the actual reconciler
113+
.withName("node-printing-controller") // optional, set name for controller
114+
.withWorkerCount(4) // optional, set worker thread count
115+
.withReadyFunc(nodeInformer::hasSynced) // optional, only starts controller when the
116+
// cache has synced up
117+
.build();
118+
119+
// Use builder library to manage one or multiple controllers.
120+
ControllerManager controllerManager =
121+
ControllerBuilder.controllerManagerBuilder(informerFactory)
122+
.addController(controller)
123+
.build();
124+
125+
LeaderElectingController leaderElectingController =
126+
new LeaderElectingController(
127+
new LeaderElector(
128+
new LeaderElectionConfig(
129+
new EndpointsLock("kube-system", "leader-election", "foo"),
130+
Duration.ofMillis(10000),
131+
Duration.ofMillis(8000),
132+
Duration.ofMillis(5000))),
133+
controllerManager);
134+
135+
leaderElectingController.run();
136+
}
137+
138+
static class NodePrintingReconciler implements Reconciler {
139+
140+
private Lister<V1Node> nodeLister;
141+
private EventRecorder eventRecorder;
142+
143+
public NodePrintingReconciler(
144+
SharedIndexInformer<V1Node> nodeInformer, EventRecorder recorder) {
145+
this.nodeLister = new Lister<>(nodeInformer.getIndexer());
146+
this.eventRecorder = recorder;
147+
}
148+
149+
@Override
150+
public Result reconcile(Request request) {
151+
V1Node node = this.nodeLister.get(request.getName());
152+
System.out.println("triggered reconciling " + node.getMetadata().getName());
153+
this.eventRecorder.event(
154+
node,
155+
EventType.Normal,
156+
"Print Node",
157+
"Successfully printed %s",
158+
node.getMetadata().getName());
159+
return new Result(false);
160+
}
161+
}
162+
}

0 commit comments

Comments
 (0)