Skip to content
This repository was archived by the owner on Mar 3, 2023. It is now read-only.

Commit 91dbabf

Browse files
nicknezisjoshfischer1108
authored andcommitted
Updated to use default Kubernetes client discovery logic (#3432)
* Updated to use default Kubernetes client discovery logic * Removed kubectl-proxy container * Remove kubectl-proxy image property * Syntax cleanup * Added missing kubernetes dependency
1 parent b16973a commit 91dbabf

File tree

14 files changed

+43
-54
lines changed

14 files changed

+43
-54
lines changed

deploy/kubernetes/general/apiserver.yaml

+2-9
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ metadata:
2727
namespace: default
2828

2929
---
30-
3130
apiVersion: rbac.authorization.k8s.io/v1beta1
3231
kind: ClusterRoleBinding
3332
metadata:
@@ -44,7 +43,6 @@ subjects:
4443
namespace: default
4544

4645
---
47-
4846
apiVersion: apps/v1
4947
kind: Deployment
5048
metadata:
@@ -97,13 +95,8 @@ spec:
9795
-D heron.uploader.dlog.topologies.namespace.uri=distributedlog://zookeeper:2181/heron
9896
-D heron.statefulstorage.classname=org.apache.heron.statefulstorage.dlog.DlogStorage
9997
-D heron.statefulstorage.dlog.namespace.uri=distributedlog://zookeeper:2181/heron
100-
- name: kubectl-proxy
101-
image: heron/kubectl:latest
102-
command: ["sh", "-c"]
103-
args:
104-
- >
105-
kubectl proxy -p 8001
106-
---
98+
99+
---
107100
apiVersion: v1
108101
kind: Service
109102
metadata:

deploy/kubernetes/general/bookkeeper.statefulset.yaml

+2-1
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ data:
3434
#BK_statsProviderClass: org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider
3535
# use hostname as bookie id for StatefulSets deployment
3636
BK_useHostNameAsBookieID: "true"
37-
---
3837

38+
---
3939
apiVersion: apps/v1
4040
kind: StatefulSet
4141
metadata:
@@ -122,6 +122,7 @@ spec:
122122
resources:
123123
requests:
124124
storage: 10Gi
125+
125126
---
126127
# A headless service to create DNS records
127128
apiVersion: v1

deploy/kubernetes/general/bookkeeper.statefulset_empty.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ data:
3434
#BK_statsProviderClass: org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider
3535
# use hostname as bookie id for StatefulSets deployment
3636
BK_useHostNameAsBookieID: "true"
37-
---
3837

38+
---
3939
apiVersion: apps/v1
4040
kind: StatefulSet
4141
metadata:

deploy/kubernetes/general/bookkeeper.yaml

+1-2
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ data:
3232
BK_zkServers: zookeeper
3333
# TODO: Issue 458: https://github.com/apache/bookkeeper/issues/458
3434
#BK_statsProviderClass: org.apache.bookkeeper.stats.PrometheusMetricsProvider
35-
---
3635

36+
---
3737
## BookKeeper servers need to access the local disks and the pods
3838
## cannot be moved across different nodes.
3939
## For this reason, we run BK as a daemon set, one for each node in the
@@ -107,7 +107,6 @@ spec:
107107
path: /mnt/disks/ssd1
108108

109109
---
110-
111110
##
112111
## Define the Bookie headless service
113112
## In practice, in this case, it is only useful to have a view of

deploy/kubernetes/general/tools.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ spec:
8585
limits:
8686
cpu: "400m"
8787
memory: "512M"
88-
---
8988

89+
---
9090
##
9191
## Service to expose the heron-ui
9292
##

deploy/kubernetes/general/zookeeper.yaml

+1-2
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ spec:
3030
matchLabels:
3131
app: zk
3232
minAvailable: 1
33-
---
3433

34+
---
3535
## Define a StatefulSet for ZK servers
3636
apiVersion: apps/v1
3737
kind: StatefulSet
@@ -107,7 +107,6 @@ spec:
107107
emptyDir: {}
108108

109109
---
110-
111110
##
112111
## Define the ZooKeeper headless service
113112
##

deploy/kubernetes/gke/gcs-apiserver.yaml

-9
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ metadata:
2727
namespace: default
2828

2929
---
30-
3130
apiVersion: rbac.authorization.k8s.io/v1beta1
3231
kind: ClusterRoleBinding
3332
metadata:
@@ -44,7 +43,6 @@ subjects:
4443
namespace: default
4544

4645
---
47-
4846
apiVersion: apps/v1
4947
kind: Deployment
5048
metadata:
@@ -106,15 +104,8 @@ spec:
106104
configMapKeyRef:
107105
name: heron-apiserver-config
108106
key: gcs.bucket
109-
- name: kubectl-proxy
110-
image: heron/kubectl:latest
111-
command: ["sh", "-c"]
112-
args:
113-
- >
114-
kubectl proxy -p 8001
115107

116108
---
117-
118109
##
119110
## Service to expose the heron API server
120111
##

deploy/kubernetes/helm/templates/bookie.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ data:
5050
BK_enableTaskExecutionStats: "true"
5151
BK_statsProviderClass: org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider
5252
{{- end }}
53-
---
5453

54+
---
5555
## BookKeeper servers need to access the local disks and the pods
5656
## cannot be moved across different nodes.
5757
## For this reason, we run BK as a daemon set, one for each node in the
@@ -195,8 +195,8 @@ spec:
195195
requests:
196196
storage: {{ $bookieStorageCapacity }}
197197
{{- end }}
198-
---
199198

199+
---
200200
##
201201
## Define the Bookie headless service
202202
## In practice, in this case, it is only useful to have a view of

deploy/kubernetes/helm/templates/tools.yaml

+2-7
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ metadata:
2626
data:
2727
HERON_APISERVER_MEM_MIN: {{ $apiServerMemory | quote }}
2828
HERON_APISERVER_MEM_MAX: {{ $apiServerMemory | quote }}
29-
---
3029

30+
---
3131
apiVersion: apps/v1
3232
kind: Deployment
3333
metadata:
@@ -161,12 +161,7 @@ spec:
161161
envFrom:
162162
- configMapRef:
163163
name: {{ .Release.Name }}-tools-config
164-
- name: kubectl-proxy
165-
image: {{ .Values.kubectlImage }}
166-
command: ["sh", "-c"]
167-
args:
168-
- >
169-
kubectl proxy -p 8001
164+
170165
---
171166
##
172167
## Service to expose the heron-ui

deploy/kubernetes/helm/values.yaml.template

-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ platform: minikube
2929

3030
# Heron image to use
3131
image: heron/heron:VERSION
32-
kubectlImage: heron/kubectl:latest
3332

3433
# Heron image pull policy
3534
imagePullPolicy: IfNotPresent

deploy/kubernetes/minikube/apiserver.yaml

+2-9
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ metadata:
2828
namespace: default
2929

3030
---
31-
3231
apiVersion: rbac.authorization.k8s.io/v1beta1
3332
kind: ClusterRoleBinding
3433
metadata:
@@ -45,7 +44,6 @@ subjects:
4544
namespace: default
4645

4746
---
48-
4947
apiVersion: apps/v1
5048
kind: Deployment
5149
metadata:
@@ -84,13 +82,8 @@ spec:
8482
-D heron.uploader.dlog.topologies.namespace.uri=distributedlog://zookeeper:2181/heron
8583
-D heron.statefulstorage.classname=org.apache.heron.statefulstorage.dlog.DlogStorage
8684
-D heron.statefulstorage.dlog.namespace.uri=distributedlog://zookeeper:2181/heron
87-
- name: kubectl-proxy
88-
image: heron/kubectl:latest
89-
command: ["sh", "-c"]
90-
args:
91-
- >
92-
kubectl proxy -p 8001
93-
---
85+
86+
---
9487
apiVersion: v1
9588
kind: Service
9689
metadata:

heron/schedulers/src/java/org/apache/heron/scheduler/kubernetes/AppsV1Controller.java

+16-8
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import io.kubernetes.client.custom.V1Patch;
4747
import io.kubernetes.client.openapi.ApiClient;
4848
import io.kubernetes.client.openapi.ApiException;
49+
import io.kubernetes.client.openapi.Configuration;
4950
import io.kubernetes.client.openapi.apis.AppsV1Api;
5051
import io.kubernetes.client.openapi.models.V1Container;
5152
import io.kubernetes.client.openapi.models.V1ContainerPort;
@@ -72,12 +73,18 @@ public class AppsV1Controller extends KubernetesController {
7273

7374
private static final String ENV_SHARD_ID = "SHARD_ID";
7475

75-
private final AppsV1Api client;
76+
private final AppsV1Api appsClient;
7677

7778
AppsV1Controller(Config configuration, Config runtimeConfiguration) {
7879
super(configuration, runtimeConfiguration);
79-
final ApiClient apiClient = new ApiClient().setBasePath(getKubernetesUri());
80-
client = new AppsV1Api(apiClient);
80+
try {
81+
final ApiClient apiClient = io.kubernetes.client.util.Config.defaultClient();
82+
Configuration.setDefaultApiClient(apiClient);
83+
appsClient = new AppsV1Api(apiClient);
84+
} catch (IOException e) {
85+
LOG.log(Level.SEVERE, "Failed to setup Kubernetes client" + e);
86+
throw new RuntimeException(e);
87+
}
8188
}
8289

8390
@Override
@@ -99,7 +106,7 @@ boolean submit(PackingPlan packingPlan) {
99106

100107
try {
101108
final V1StatefulSet response =
102-
client.createNamespacedStatefulSet(getNamespace(), statefulSet, null,
109+
appsClient.createNamespacedStatefulSet(getNamespace(), statefulSet, null,
103110
null, null);
104111
} catch (ApiException e) {
105112
KubernetesUtils.logExceptionWithDetails(LOG, "Error creating topology", e);
@@ -180,20 +187,21 @@ private void doPatch(V1StatefulSetSpec patchedSpec) throws ApiException {
180187
String.format(JSON_PATCH_STATEFUL_SET_REPLICAS_FORMAT,
181188
patchedSpec.getReplicas().toString());
182189
final V1Patch patch = new V1Patch(body);
183-
client.patchNamespacedStatefulSet(getTopologyName(),
190+
appsClient.patchNamespacedStatefulSet(getTopologyName(),
184191
getNamespace(), patch, null, null, null, null);
185192
}
186193

187194
private static final String JSON_PATCH_STATEFUL_SET_REPLICAS_FORMAT =
188195
"{\"op\":\"replace\",\"path\":\"/spec/replicas\",\"value\":%s}";
189196

190197
V1StatefulSet getStatefulSet() throws ApiException {
191-
return client.readNamespacedStatefulSet(getTopologyName(), getNamespace(), null, null, null);
198+
return appsClient.readNamespacedStatefulSet(getTopologyName(), getNamespace(),
199+
null, null, null);
192200
}
193201

194202
boolean deleteStatefulSet() {
195203
try {
196-
final Response response = client.deleteNamespacedStatefulSetCall(getTopologyName(),
204+
final Response response = appsClient.deleteNamespacedStatefulSetCall(getTopologyName(),
197205
getNamespace(), null, null, 0, null,
198206
KubernetesConstants.DELETE_OPTIONS_PROPAGATION_POLICY, null, null).execute();
199207

@@ -219,7 +227,7 @@ boolean deleteStatefulSet() {
219227
boolean isStatefulSet() {
220228
try {
221229
final V1StatefulSet response =
222-
client.readNamespacedStatefulSet(getTopologyName(), getNamespace(),
230+
appsClient.readNamespacedStatefulSet(getTopologyName(), getNamespace(),
223231
null, null, null);
224232
return response.getKind().equals("StatefulSet");
225233
} catch (ApiException e) {

heron/schedulers/src/java/org/apache/heron/scheduler/kubernetes/KubernetesCompat.java

+12-2
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,31 @@
2727

2828
import io.kubernetes.client.openapi.ApiClient;
2929
import io.kubernetes.client.openapi.ApiException;
30+
import io.kubernetes.client.openapi.Configuration;
3031
import io.kubernetes.client.openapi.apis.CoreV1Api;
32+
3133
import okhttp3.Response;
3234

3335
public class KubernetesCompat {
3436

3537
private static final Logger LOG = Logger.getLogger(KubernetesCompat.class.getName());
3638

3739
boolean killTopology(String kubernetesUri, String topology, String namespace) {
38-
final CoreV1Api client = new CoreV1Api(new ApiClient().setBasePath(kubernetesUri));
40+
CoreV1Api coreClient;
41+
try {
42+
final ApiClient apiClient = io.kubernetes.client.util.Config.defaultClient();
43+
Configuration.setDefaultApiClient(apiClient);
44+
coreClient = new CoreV1Api(apiClient);
45+
} catch (IOException e) {
46+
LOG.log(Level.SEVERE, "Failed to setup Kubernetes client" + e);
47+
throw new RuntimeException(e);
48+
}
3949

4050
// old version deployed topologies as naked pods
4151
try {
4252
final String labelSelector = KubernetesConstants.LABEL_TOPOLOGY + "=" + topology;
4353
final Response response =
44-
client.deleteCollectionNamespacedPodCall(namespace, null, null, null, null, null,
54+
coreClient.deleteCollectionNamespacedPodCall(namespace, null, null, null, null, null,
4555
null, labelSelector, null, null,
4656
KubernetesConstants.DELETE_OPTIONS_PROPAGATION_POLICY,
4757
null, null, null, null, null).execute();

heron/schedulers/tests/java/BUILD

+1
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ kubernetes_deps_files = [
6464
"//heron/schedulers/src/java:kubernetes-scheduler-java",
6565
"//heron/schedulers/src/java:scheduler-utils-java",
6666
"//third_party/java:kubernetes-java-client",
67+
"@org_slf4j_slf4j_api//jar",
6768
]
6869

6970
nomad_sdk_deps = [

0 commit comments

Comments
 (0)