This is an automated email from the ASF dual-hosted git repository.
joshfischer pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-heron.git
The following commit(s) were added to refs/heads/master by this push:
new 91dbabf Updated to use default Kubernetes client discovery logic
(#3432)
91dbabf is described below
commit 91dbabfd3bac627f0a1a537f35b007c6378874f5
Author: Nicholas Nezis <[email protected]>
AuthorDate: Thu Jan 16 21:34:11 2020 -0500
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
---
deploy/kubernetes/general/apiserver.yaml | 11 ++--------
.../kubernetes/general/bookkeeper.statefulset.yaml | 3 ++-
.../general/bookkeeper.statefulset_empty.yaml | 2 +-
deploy/kubernetes/general/bookkeeper.yaml | 3 +--
deploy/kubernetes/general/tools.yaml | 2 +-
deploy/kubernetes/general/zookeeper.yaml | 3 +--
deploy/kubernetes/gke/gcs-apiserver.yaml | 9 --------
deploy/kubernetes/helm/templates/bookie.yaml | 4 ++--
deploy/kubernetes/helm/templates/tools.yaml | 9 ++------
deploy/kubernetes/helm/values.yaml.template | 1 -
deploy/kubernetes/minikube/apiserver.yaml | 11 ++--------
.../scheduler/kubernetes/AppsV1Controller.java | 24 ++++++++++++++--------
.../scheduler/kubernetes/KubernetesCompat.java | 14 +++++++++++--
heron/schedulers/tests/java/BUILD | 1 +
14 files changed, 43 insertions(+), 54 deletions(-)
diff --git a/deploy/kubernetes/general/apiserver.yaml
b/deploy/kubernetes/general/apiserver.yaml
index 470dff3..6e0cc97 100644
--- a/deploy/kubernetes/general/apiserver.yaml
+++ b/deploy/kubernetes/general/apiserver.yaml
@@ -27,7 +27,6 @@ metadata:
namespace: default
---
-
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
@@ -44,7 +43,6 @@ subjects:
namespace: default
---
-
apiVersion: apps/v1
kind: Deployment
metadata:
@@ -97,13 +95,8 @@ spec:
-D
heron.uploader.dlog.topologies.namespace.uri=distributedlog://zookeeper:2181/heron
-D
heron.statefulstorage.classname=org.apache.heron.statefulstorage.dlog.DlogStorage
-D
heron.statefulstorage.dlog.namespace.uri=distributedlog://zookeeper:2181/heron
- - name: kubectl-proxy
- image: heron/kubectl:latest
- command: ["sh", "-c"]
- args:
- - >
- kubectl proxy -p 8001
----
+
+---
apiVersion: v1
kind: Service
metadata:
diff --git a/deploy/kubernetes/general/bookkeeper.statefulset.yaml
b/deploy/kubernetes/general/bookkeeper.statefulset.yaml
index e5c9fe2..24d1ec2 100644
--- a/deploy/kubernetes/general/bookkeeper.statefulset.yaml
+++ b/deploy/kubernetes/general/bookkeeper.statefulset.yaml
@@ -34,8 +34,8 @@ data:
#BK_statsProviderClass:
org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider
# use hostname as bookie id for StatefulSets deployment
BK_useHostNameAsBookieID: "true"
----
+---
apiVersion: apps/v1
kind: StatefulSet
metadata:
@@ -122,6 +122,7 @@ spec:
resources:
requests:
storage: 10Gi
+
---
# A headless service to create DNS records
apiVersion: v1
diff --git a/deploy/kubernetes/general/bookkeeper.statefulset_empty.yaml
b/deploy/kubernetes/general/bookkeeper.statefulset_empty.yaml
index 90a158f..4c3fcb9 100644
--- a/deploy/kubernetes/general/bookkeeper.statefulset_empty.yaml
+++ b/deploy/kubernetes/general/bookkeeper.statefulset_empty.yaml
@@ -34,8 +34,8 @@ data:
#BK_statsProviderClass:
org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider
# use hostname as bookie id for StatefulSets deployment
BK_useHostNameAsBookieID: "true"
----
+---
apiVersion: apps/v1
kind: StatefulSet
metadata:
diff --git a/deploy/kubernetes/general/bookkeeper.yaml
b/deploy/kubernetes/general/bookkeeper.yaml
index 2ba4891..f757bf6 100644
--- a/deploy/kubernetes/general/bookkeeper.yaml
+++ b/deploy/kubernetes/general/bookkeeper.yaml
@@ -32,8 +32,8 @@ data:
BK_zkServers: zookeeper
# TODO: Issue 458: https://github.com/apache/bookkeeper/issues/458
#BK_statsProviderClass: org.apache.bookkeeper.stats.PrometheusMetricsProvider
----
+---
## BookKeeper servers need to access the local disks and the pods
## cannot be moved across different nodes.
## For this reason, we run BK as a daemon set, one for each node in the
@@ -107,7 +107,6 @@ spec:
path: /mnt/disks/ssd1
---
-
##
## Define the Bookie headless service
## In practice, in this case, it is only useful to have a view of
diff --git a/deploy/kubernetes/general/tools.yaml
b/deploy/kubernetes/general/tools.yaml
index a6497f1..b662557 100644
--- a/deploy/kubernetes/general/tools.yaml
+++ b/deploy/kubernetes/general/tools.yaml
@@ -85,8 +85,8 @@ spec:
limits:
cpu: "400m"
memory: "512M"
----
+---
##
## Service to expose the heron-ui
##
diff --git a/deploy/kubernetes/general/zookeeper.yaml
b/deploy/kubernetes/general/zookeeper.yaml
index 835bee5..b159593 100644
--- a/deploy/kubernetes/general/zookeeper.yaml
+++ b/deploy/kubernetes/general/zookeeper.yaml
@@ -30,8 +30,8 @@ spec:
matchLabels:
app: zk
minAvailable: 1
----
+---
## Define a StatefulSet for ZK servers
apiVersion: apps/v1
kind: StatefulSet
@@ -107,7 +107,6 @@ spec:
emptyDir: {}
---
-
##
## Define the ZooKeeper headless service
##
diff --git a/deploy/kubernetes/gke/gcs-apiserver.yaml
b/deploy/kubernetes/gke/gcs-apiserver.yaml
index d268a0f..c37c6ee 100644
--- a/deploy/kubernetes/gke/gcs-apiserver.yaml
+++ b/deploy/kubernetes/gke/gcs-apiserver.yaml
@@ -27,7 +27,6 @@ metadata:
namespace: default
---
-
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
@@ -44,7 +43,6 @@ subjects:
namespace: default
---
-
apiVersion: apps/v1
kind: Deployment
metadata:
@@ -106,15 +104,8 @@ spec:
configMapKeyRef:
name: heron-apiserver-config
key: gcs.bucket
- - name: kubectl-proxy
- image: heron/kubectl:latest
- command: ["sh", "-c"]
- args:
- - >
- kubectl proxy -p 8001
---
-
##
## Service to expose the heron API server
##
diff --git a/deploy/kubernetes/helm/templates/bookie.yaml
b/deploy/kubernetes/helm/templates/bookie.yaml
index ed01baf..c14ecd3 100644
--- a/deploy/kubernetes/helm/templates/bookie.yaml
+++ b/deploy/kubernetes/helm/templates/bookie.yaml
@@ -50,8 +50,8 @@ data:
BK_enableTaskExecutionStats: "true"
BK_statsProviderClass:
org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider
{{- end }}
----
+---
## BookKeeper servers need to access the local disks and the pods
## cannot be moved across different nodes.
## For this reason, we run BK as a daemon set, one for each node in the
@@ -195,8 +195,8 @@ spec:
requests:
storage: {{ $bookieStorageCapacity }}
{{- end }}
----
+---
##
## Define the Bookie headless service
## In practice, in this case, it is only useful to have a view of
diff --git a/deploy/kubernetes/helm/templates/tools.yaml
b/deploy/kubernetes/helm/templates/tools.yaml
index 6068b59..64d57b7 100644
--- a/deploy/kubernetes/helm/templates/tools.yaml
+++ b/deploy/kubernetes/helm/templates/tools.yaml
@@ -26,8 +26,8 @@ metadata:
data:
HERON_APISERVER_MEM_MIN: {{ $apiServerMemory | quote }}
HERON_APISERVER_MEM_MAX: {{ $apiServerMemory | quote }}
----
+---
apiVersion: apps/v1
kind: Deployment
metadata:
@@ -161,12 +161,7 @@ spec:
envFrom:
- configMapRef:
name: {{ .Release.Name }}-tools-config
- - name: kubectl-proxy
- image: {{ .Values.kubectlImage }}
- command: ["sh", "-c"]
- args:
- - >
- kubectl proxy -p 8001
+
---
##
## Service to expose the heron-ui
diff --git a/deploy/kubernetes/helm/values.yaml.template
b/deploy/kubernetes/helm/values.yaml.template
index 2652d77..ae310be 100644
--- a/deploy/kubernetes/helm/values.yaml.template
+++ b/deploy/kubernetes/helm/values.yaml.template
@@ -29,7 +29,6 @@ platform: minikube
# Heron image to use
image: heron/heron:VERSION
-kubectlImage: heron/kubectl:latest
# Heron image pull policy
imagePullPolicy: IfNotPresent
diff --git a/deploy/kubernetes/minikube/apiserver.yaml
b/deploy/kubernetes/minikube/apiserver.yaml
index 3c4a9b2..502f746 100644
--- a/deploy/kubernetes/minikube/apiserver.yaml
+++ b/deploy/kubernetes/minikube/apiserver.yaml
@@ -28,7 +28,6 @@ metadata:
namespace: default
---
-
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
@@ -45,7 +44,6 @@ subjects:
namespace: default
---
-
apiVersion: apps/v1
kind: Deployment
metadata:
@@ -84,13 +82,8 @@ spec:
-D
heron.uploader.dlog.topologies.namespace.uri=distributedlog://zookeeper:2181/heron
-D
heron.statefulstorage.classname=org.apache.heron.statefulstorage.dlog.DlogStorage
-D
heron.statefulstorage.dlog.namespace.uri=distributedlog://zookeeper:2181/heron
- - name: kubectl-proxy
- image: heron/kubectl:latest
- command: ["sh", "-c"]
- args:
- - >
- kubectl proxy -p 8001
----
+
+---
apiVersion: v1
kind: Service
metadata:
diff --git
a/heron/schedulers/src/java/org/apache/heron/scheduler/kubernetes/AppsV1Controller.java
b/heron/schedulers/src/java/org/apache/heron/scheduler/kubernetes/AppsV1Controller.java
index be02c0c..8724034 100644
---
a/heron/schedulers/src/java/org/apache/heron/scheduler/kubernetes/AppsV1Controller.java
+++
b/heron/schedulers/src/java/org/apache/heron/scheduler/kubernetes/AppsV1Controller.java
@@ -46,6 +46,7 @@ import io.kubernetes.client.custom.Quantity;
import io.kubernetes.client.custom.V1Patch;
import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.ApiException;
+import io.kubernetes.client.openapi.Configuration;
import io.kubernetes.client.openapi.apis.AppsV1Api;
import io.kubernetes.client.openapi.models.V1Container;
import io.kubernetes.client.openapi.models.V1ContainerPort;
@@ -72,12 +73,18 @@ public class AppsV1Controller extends KubernetesController {
private static final String ENV_SHARD_ID = "SHARD_ID";
- private final AppsV1Api client;
+ private final AppsV1Api appsClient;
AppsV1Controller(Config configuration, Config runtimeConfiguration) {
super(configuration, runtimeConfiguration);
- final ApiClient apiClient = new
ApiClient().setBasePath(getKubernetesUri());
- client = new AppsV1Api(apiClient);
+ try {
+ final ApiClient apiClient =
io.kubernetes.client.util.Config.defaultClient();
+ Configuration.setDefaultApiClient(apiClient);
+ appsClient = new AppsV1Api(apiClient);
+ } catch (IOException e) {
+ LOG.log(Level.SEVERE, "Failed to setup Kubernetes client" + e);
+ throw new RuntimeException(e);
+ }
}
@Override
@@ -99,7 +106,7 @@ public class AppsV1Controller extends KubernetesController {
try {
final V1StatefulSet response =
- client.createNamespacedStatefulSet(getNamespace(), statefulSet, null,
+ appsClient.createNamespacedStatefulSet(getNamespace(), statefulSet,
null,
null, null);
} catch (ApiException e) {
KubernetesUtils.logExceptionWithDetails(LOG, "Error creating topology",
e);
@@ -180,7 +187,7 @@ public class AppsV1Controller extends KubernetesController {
String.format(JSON_PATCH_STATEFUL_SET_REPLICAS_FORMAT,
patchedSpec.getReplicas().toString());
final V1Patch patch = new V1Patch(body);
- client.patchNamespacedStatefulSet(getTopologyName(),
+ appsClient.patchNamespacedStatefulSet(getTopologyName(),
getNamespace(), patch, null, null, null, null);
}
@@ -188,12 +195,13 @@ public class AppsV1Controller extends
KubernetesController {
"{\"op\":\"replace\",\"path\":\"/spec/replicas\",\"value\":%s}";
V1StatefulSet getStatefulSet() throws ApiException {
- return client.readNamespacedStatefulSet(getTopologyName(), getNamespace(),
null, null, null);
+ return appsClient.readNamespacedStatefulSet(getTopologyName(),
getNamespace(),
+ null, null, null);
}
boolean deleteStatefulSet() {
try {
- final Response response =
client.deleteNamespacedStatefulSetCall(getTopologyName(),
+ final Response response =
appsClient.deleteNamespacedStatefulSetCall(getTopologyName(),
getNamespace(), null, null, 0, null,
KubernetesConstants.DELETE_OPTIONS_PROPAGATION_POLICY, null,
null).execute();
@@ -219,7 +227,7 @@ public class AppsV1Controller extends KubernetesController {
boolean isStatefulSet() {
try {
final V1StatefulSet response =
- client.readNamespacedStatefulSet(getTopologyName(), getNamespace(),
+ appsClient.readNamespacedStatefulSet(getTopologyName(),
getNamespace(),
null, null, null);
return response.getKind().equals("StatefulSet");
} catch (ApiException e) {
diff --git
a/heron/schedulers/src/java/org/apache/heron/scheduler/kubernetes/KubernetesCompat.java
b/heron/schedulers/src/java/org/apache/heron/scheduler/kubernetes/KubernetesCompat.java
index 2c10ba9..9ce5fba 100644
---
a/heron/schedulers/src/java/org/apache/heron/scheduler/kubernetes/KubernetesCompat.java
+++
b/heron/schedulers/src/java/org/apache/heron/scheduler/kubernetes/KubernetesCompat.java
@@ -27,7 +27,9 @@ import
org.apache.heron.scheduler.TopologyRuntimeManagementException;
import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.ApiException;
+import io.kubernetes.client.openapi.Configuration;
import io.kubernetes.client.openapi.apis.CoreV1Api;
+
import okhttp3.Response;
public class KubernetesCompat {
@@ -35,13 +37,21 @@ public class KubernetesCompat {
private static final Logger LOG =
Logger.getLogger(KubernetesCompat.class.getName());
boolean killTopology(String kubernetesUri, String topology, String
namespace) {
- final CoreV1Api client = new CoreV1Api(new
ApiClient().setBasePath(kubernetesUri));
+ CoreV1Api coreClient;
+ try {
+ final ApiClient apiClient =
io.kubernetes.client.util.Config.defaultClient();
+ Configuration.setDefaultApiClient(apiClient);
+ coreClient = new CoreV1Api(apiClient);
+ } catch (IOException e) {
+ LOG.log(Level.SEVERE, "Failed to setup Kubernetes client" + e);
+ throw new RuntimeException(e);
+ }
// old version deployed topologies as naked pods
try {
final String labelSelector = KubernetesConstants.LABEL_TOPOLOGY + "=" +
topology;
final Response response =
- client.deleteCollectionNamespacedPodCall(namespace, null, null,
null, null, null,
+ coreClient.deleteCollectionNamespacedPodCall(namespace, null, null,
null, null, null,
null, labelSelector, null, null,
KubernetesConstants.DELETE_OPTIONS_PROPAGATION_POLICY,
null, null, null, null, null).execute();
diff --git a/heron/schedulers/tests/java/BUILD
b/heron/schedulers/tests/java/BUILD
index 2c0d961..0f67de7 100644
--- a/heron/schedulers/tests/java/BUILD
+++ b/heron/schedulers/tests/java/BUILD
@@ -64,6 +64,7 @@ kubernetes_deps_files = [
"//heron/schedulers/src/java:kubernetes-scheduler-java",
"//heron/schedulers/src/java:scheduler-utils-java",
"//third_party/java:kubernetes-java-client",
+ "@org_slf4j_slf4j_api//jar",
]
nomad_sdk_deps = [