You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kyuubi.apache.org by ch...@apache.org on 2023/03/07 06:02:36 UTC
[kyuubi] branch master updated: [KYUUBI #4453][Improvement][K8S] Bump Kubernetes Client Version to 6.4.1
This is an automated email from the ASF dual-hosted git repository.
chengpan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kyuubi.git
The following commit(s) were added to refs/heads/master by this push:
new 1bc05e5e4 [KYUUBI #4453][Improvement][K8S] Bump Kubernetes Client Version to 6.4.1
1bc05e5e4 is described below
commit 1bc05e5e45838cbff206db7438ba7f357bf127a7
Author: zwangsheng <22...@qq.com>
AuthorDate: Tue Mar 7 14:02:26 2023 +0800
[KYUUBI #4453][Improvement][K8S] Bump Kubernetes Client Version to 6.4.1
### _Why are the changes needed?_
Close #4453
kubernetes client [compare](https://github.com/fabric8io/kubernetes-client/compare/v5.12.1...v6.4.1)
version | K8s 1.26.0 | K8s 1.25.3 | K8s 1.24.7 | K8s 1.23.13 | K8s 1.22.1 | K8s 1.21.1 | K8s 1.20.2 | K8s 1.19.1 | K8s 1.18.0 | K8s 1.17.0 | K8s 1.16.0 | K8s 1.15.3 | K8s 1.14.2 | K8s 1.12.0 | K8s 1.11.0 | K8s 1.10.0 | K8s 1.9.0
--|-- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | --
kubernetes-client 6.4.1 | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -
kubernetes-client 5.12.1 | | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -
### _How was this patch tested?_
- [ ] Add some test cases that check the changes thoroughly including negative and positive cases if possible
- [ ] Add screenshots for manual tests if appropriate
- [ ] [Run test](https://kyuubi.readthedocs.io/en/master/develop_tools/testing.html#running-tests) locally before make a pull request
- [x] [Run ci test]
Closes #4456 from zwangsheng/bump/kubernetes-client-6.4.1.
Closes #4453
39039f0f9 [zwangsheng] [KYUUBI #4453] Remove dup dependence
4a5b27ce8 [zwangsheng] [KYUUBI #4453] IT test with same logic
95a292f99 [zwangsheng] [KYUUBI #4453] Fix Dependency
e4bf0107e [zwangsheng] [KYUUBI #4453] Init Bump
Authored-by: zwangsheng <22...@qq.com>
Signed-off-by: Cheng Pan <ch...@apache.org>
---
dev/dependencyList | 47 +++++++++++-----------
integration-tests/kyuubi-kubernetes-it/pom.xml | 6 ---
.../apache/kyuubi/kubernetes/test/MiniKube.scala | 21 ++++++++--
.../test/WithKyuubiServerOnKubernetes.scala | 4 +-
kyuubi-server/pom.xml | 5 +++
.../engine/KubernetesApplicationOperation.scala | 28 ++++++-------
.../org/apache/kyuubi/util/KubernetesUtils.scala | 7 +++-
pom.xml | 12 +++++-
8 files changed, 79 insertions(+), 51 deletions(-)
diff --git a/dev/dependencyList b/dev/dependencyList
index ff2550804..509e28405 100644
--- a/dev/dependencyList
+++ b/dev/dependencyList
@@ -22,7 +22,6 @@ annotations/4.1.1.4//annotations-4.1.1.4.jar
antlr-runtime/3.5.3//antlr-runtime-3.5.3.jar
antlr4-runtime/4.9.3//antlr4-runtime-4.9.3.jar
aopalliance-repackaged/2.6.1//aopalliance-repackaged-2.6.1.jar
-automaton/1.11-8//automaton-1.11-8.jar
classgraph/4.8.138//classgraph-4.8.138.jar
commons-codec/1.15//commons-codec-1.15.jar
commons-collections/3.2.2//commons-collections-3.2.2.jar
@@ -37,7 +36,6 @@ error_prone_annotations/2.14.0//error_prone_annotations-2.14.0.jar
failsafe/2.4.4//failsafe-2.4.4.jar
failureaccess/1.0.1//failureaccess-1.0.1.jar
fliptables/1.0.2//fliptables-1.0.2.jar
-generex/1.0.2//generex-1.0.2.jar
grpc-api/1.48.0//grpc-api-1.48.0.jar
grpc-context/1.48.0//grpc-context-1.48.0.jar
grpc-core/1.48.0//grpc-core-1.48.0.jar
@@ -104,27 +102,30 @@ jetty-util-ajax/9.4.50.v20221201//jetty-util-ajax-9.4.50.v20221201.jar
jetty-util/9.4.50.v20221201//jetty-util-9.4.50.v20221201.jar
jline/0.9.94//jline-0.9.94.jar
jul-to-slf4j/1.7.36//jul-to-slf4j-1.7.36.jar
-kubernetes-client/5.12.1//kubernetes-client-5.12.1.jar
-kubernetes-model-admissionregistration/5.12.1//kubernetes-model-admissionregistration-5.12.1.jar
-kubernetes-model-apiextensions/5.12.1//kubernetes-model-apiextensions-5.12.1.jar
-kubernetes-model-apps/5.12.1//kubernetes-model-apps-5.12.1.jar
-kubernetes-model-autoscaling/5.12.1//kubernetes-model-autoscaling-5.12.1.jar
-kubernetes-model-batch/5.12.1//kubernetes-model-batch-5.12.1.jar
-kubernetes-model-certificates/5.12.1//kubernetes-model-certificates-5.12.1.jar
-kubernetes-model-common/5.12.1//kubernetes-model-common-5.12.1.jar
-kubernetes-model-coordination/5.12.1//kubernetes-model-coordination-5.12.1.jar
-kubernetes-model-core/5.12.1//kubernetes-model-core-5.12.1.jar
-kubernetes-model-discovery/5.12.1//kubernetes-model-discovery-5.12.1.jar
-kubernetes-model-events/5.12.1//kubernetes-model-events-5.12.1.jar
-kubernetes-model-extensions/5.12.1//kubernetes-model-extensions-5.12.1.jar
-kubernetes-model-flowcontrol/5.12.1//kubernetes-model-flowcontrol-5.12.1.jar
-kubernetes-model-metrics/5.12.1//kubernetes-model-metrics-5.12.1.jar
-kubernetes-model-networking/5.12.1//kubernetes-model-networking-5.12.1.jar
-kubernetes-model-node/5.12.1//kubernetes-model-node-5.12.1.jar
-kubernetes-model-policy/5.12.1//kubernetes-model-policy-5.12.1.jar
-kubernetes-model-rbac/5.12.1//kubernetes-model-rbac-5.12.1.jar
-kubernetes-model-scheduling/5.12.1//kubernetes-model-scheduling-5.12.1.jar
-kubernetes-model-storageclass/5.12.1//kubernetes-model-storageclass-5.12.1.jar
+kubernetes-client-api/6.4.1//kubernetes-client-api-6.4.1.jar
+kubernetes-client/6.4.1//kubernetes-client-6.4.1.jar
+kubernetes-httpclient-okhttp/6.4.1//kubernetes-httpclient-okhttp-6.4.1.jar
+kubernetes-model-admissionregistration/6.4.1//kubernetes-model-admissionregistration-6.4.1.jar
+kubernetes-model-apiextensions/6.4.1//kubernetes-model-apiextensions-6.4.1.jar
+kubernetes-model-apps/6.4.1//kubernetes-model-apps-6.4.1.jar
+kubernetes-model-autoscaling/6.4.1//kubernetes-model-autoscaling-6.4.1.jar
+kubernetes-model-batch/6.4.1//kubernetes-model-batch-6.4.1.jar
+kubernetes-model-certificates/6.4.1//kubernetes-model-certificates-6.4.1.jar
+kubernetes-model-common/6.4.1//kubernetes-model-common-6.4.1.jar
+kubernetes-model-coordination/6.4.1//kubernetes-model-coordination-6.4.1.jar
+kubernetes-model-core/6.4.1//kubernetes-model-core-6.4.1.jar
+kubernetes-model-discovery/6.4.1//kubernetes-model-discovery-6.4.1.jar
+kubernetes-model-events/6.4.1//kubernetes-model-events-6.4.1.jar
+kubernetes-model-extensions/6.4.1//kubernetes-model-extensions-6.4.1.jar
+kubernetes-model-flowcontrol/6.4.1//kubernetes-model-flowcontrol-6.4.1.jar
+kubernetes-model-gatewayapi/6.4.1//kubernetes-model-gatewayapi-6.4.1.jar
+kubernetes-model-metrics/6.4.1//kubernetes-model-metrics-6.4.1.jar
+kubernetes-model-networking/6.4.1//kubernetes-model-networking-6.4.1.jar
+kubernetes-model-node/6.4.1//kubernetes-model-node-6.4.1.jar
+kubernetes-model-policy/6.4.1//kubernetes-model-policy-6.4.1.jar
+kubernetes-model-rbac/6.4.1//kubernetes-model-rbac-6.4.1.jar
+kubernetes-model-scheduling/6.4.1//kubernetes-model-scheduling-6.4.1.jar
+kubernetes-model-storageclass/6.4.1//kubernetes-model-storageclass-6.4.1.jar
libfb303/0.9.3//libfb303-0.9.3.jar
libthrift/0.9.3//libthrift-0.9.3.jar
log4j-1.2-api/2.20.0//log4j-1.2-api-2.20.0.jar
diff --git a/integration-tests/kyuubi-kubernetes-it/pom.xml b/integration-tests/kyuubi-kubernetes-it/pom.xml
index 9d92a1f4b..a796ccab5 100644
--- a/integration-tests/kyuubi-kubernetes-it/pom.xml
+++ b/integration-tests/kyuubi-kubernetes-it/pom.xml
@@ -60,12 +60,6 @@
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>io.fabric8</groupId>
- <artifactId>kubernetes-client</artifactId>
- <scope>test</scope>
- </dependency>
-
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client-minicluster</artifactId>
diff --git a/integration-tests/kyuubi-kubernetes-it/src/test/scala/org/apache/kyuubi/kubernetes/test/MiniKube.scala b/integration-tests/kyuubi-kubernetes-it/src/test/scala/org/apache/kyuubi/kubernetes/test/MiniKube.scala
index cd373873a..f4cd557bb 100644
--- a/integration-tests/kyuubi-kubernetes-it/src/test/scala/org/apache/kyuubi/kubernetes/test/MiniKube.scala
+++ b/integration-tests/kyuubi-kubernetes-it/src/test/scala/org/apache/kyuubi/kubernetes/test/MiniKube.scala
@@ -17,7 +17,11 @@
package org.apache.kyuubi.kubernetes.test
-import io.fabric8.kubernetes.client.{Config, DefaultKubernetesClient}
+import io.fabric8.kubernetes.client.{Config, KubernetesClient, KubernetesClientBuilder}
+import io.fabric8.kubernetes.client.okhttp.OkHttpClientFactory
+import okhttp3.{Dispatcher, OkHttpClient}
+
+import org.apache.kyuubi.util.ThreadUtils
/**
* This code copied from Aapache Spark
@@ -44,7 +48,7 @@ object MiniKube {
executeMinikube(true, "ip").head
}
- def getKubernetesClient: DefaultKubernetesClient = {
+ def getKubernetesClient: KubernetesClient = {
// only the three-part version number is matched (the optional suffix like "-beta.0" is dropped)
val versionArrayOpt = "\\d+\\.\\d+\\.\\d+".r
.findFirstIn(minikubeVersionString.split(VERSION_PREFIX)(1))
@@ -65,7 +69,18 @@ object MiniKube {
"For minikube version a three-part version number is expected (the optional " +
"non-numeric suffix is intentionally dropped)")
}
+ // https://github.com/fabric8io/kubernetes-client/issues/3547
+ val dispatcher = new Dispatcher(
+ ThreadUtils.newDaemonCachedThreadPool("kubernetes-dispatcher"))
+ val factoryWithCustomDispatcher = new OkHttpClientFactory() {
+ override protected def additionalConfig(builder: OkHttpClient.Builder): Unit = {
+ builder.dispatcher(dispatcher)
+ }
+ }
- new DefaultKubernetesClient(Config.autoConfigure("minikube"))
+ new KubernetesClientBuilder()
+ .withConfig(Config.autoConfigure("minikube"))
+ .withHttpClientFactory(factoryWithCustomDispatcher)
+ .build()
}
}
diff --git a/integration-tests/kyuubi-kubernetes-it/src/test/scala/org/apache/kyuubi/kubernetes/test/WithKyuubiServerOnKubernetes.scala b/integration-tests/kyuubi-kubernetes-it/src/test/scala/org/apache/kyuubi/kubernetes/test/WithKyuubiServerOnKubernetes.scala
index ed9cbce09..595fdd431 100644
--- a/integration-tests/kyuubi-kubernetes-it/src/test/scala/org/apache/kyuubi/kubernetes/test/WithKyuubiServerOnKubernetes.scala
+++ b/integration-tests/kyuubi-kubernetes-it/src/test/scala/org/apache/kyuubi/kubernetes/test/WithKyuubiServerOnKubernetes.scala
@@ -18,14 +18,14 @@
package org.apache.kyuubi.kubernetes.test
import io.fabric8.kubernetes.api.model.Pod
-import io.fabric8.kubernetes.client.DefaultKubernetesClient
+import io.fabric8.kubernetes.client.KubernetesClient
import org.apache.kyuubi.KyuubiFunSuite
trait WithKyuubiServerOnKubernetes extends KyuubiFunSuite {
protected def connectionConf: Map[String, String] = Map.empty
- lazy val miniKubernetesClient: DefaultKubernetesClient = MiniKube.getKubernetesClient
+ lazy val miniKubernetesClient: KubernetesClient = MiniKube.getKubernetesClient
lazy val kyuubiPod: Pod = miniKubernetesClient.pods().withName("kyuubi-test").get()
lazy val kyuubiServerIp: String = kyuubiPod.getStatus.getPodIP
lazy val miniKubeIp: String = MiniKube.getIp
diff --git a/kyuubi-server/pom.xml b/kyuubi-server/pom.xml
index aebce5dda..83698fa5a 100644
--- a/kyuubi-server/pom.xml
+++ b/kyuubi-server/pom.xml
@@ -92,6 +92,11 @@
<artifactId>kubernetes-client</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.fabric8</groupId>
+ <artifactId>kubernetes-httpclient-okhttp</artifactId>
+ </dependency>
+
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-metastore</artifactId>
diff --git a/kyuubi-server/src/main/scala/org/apache/kyuubi/engine/KubernetesApplicationOperation.scala b/kyuubi-server/src/main/scala/org/apache/kyuubi/engine/KubernetesApplicationOperation.scala
index bee69b117..1dd5ff83f 100644
--- a/kyuubi-server/src/main/scala/org/apache/kyuubi/engine/KubernetesApplicationOperation.scala
+++ b/kyuubi-server/src/main/scala/org/apache/kyuubi/engine/KubernetesApplicationOperation.scala
@@ -17,9 +17,10 @@
package org.apache.kyuubi.engine
-import io.fabric8.kubernetes.api.model.{Pod, PodList}
+import java.util
+
+import io.fabric8.kubernetes.api.model.Pod
import io.fabric8.kubernetes.client.KubernetesClient
-import io.fabric8.kubernetes.client.dsl.FilterWatchListDeletable
import org.apache.kyuubi.Logging
import org.apache.kyuubi.config.KyuubiConf
@@ -58,17 +59,17 @@ class KubernetesApplicationOperation extends ApplicationOperation with Logging {
debug(s"Deleting application info from Kubernetes cluster by $tag tag")
try {
// Need driver only
- val operation = findDriverPodByTag(tag)
- val podList = operation.list().getItems
+ val podList = findDriverPodByTag(tag)
if (podList.size() != 0) {
- toApplicationState(podList.get(0).getStatus.getPhase) match {
+ val targetPod = podList.get(0)
+ toApplicationState(targetPod.getStatus.getPhase) match {
case FAILED | UNKNOWN =>
(
false,
- s"Target Pod ${podList.get(0).getMetadata.getName} is in FAILED or UNKNOWN status")
+ s"Target Pod ${targetPod.getMetadata.getName} is in FAILED or UNKNOWN status")
case _ =>
(
- operation.delete(),
+ !kubernetesClient.pods.withName(targetPod.getMetadata.getName).delete().isEmpty,
s"Operation of deleted appId: ${podList.get(0).getMetadata.getName} is completed")
}
} else {
@@ -88,8 +89,7 @@ class KubernetesApplicationOperation extends ApplicationOperation with Logging {
if (kubernetesClient != null) {
debug(s"Getting application info from Kubernetes cluster by $tag tag")
try {
- val operation = findDriverPodByTag(tag)
- val podList = operation.list().getItems
+ val podList = findDriverPodByTag(tag)
if (podList.size() != 0) {
val pod = podList.get(0)
val info = ApplicationInfo(
@@ -114,14 +114,14 @@ class KubernetesApplicationOperation extends ApplicationOperation with Logging {
}
}
- private def findDriverPodByTag(tag: String): FilterWatchListDeletable[Pod, PodList] = {
- val operation = kubernetesClient.pods()
- .withLabel(KubernetesApplicationOperation.LABEL_KYUUBI_UNIQUE_KEY, tag)
- val size = operation.list().getItems.size()
+ private def findDriverPodByTag(tag: String): util.List[Pod] = {
+ val podList = kubernetesClient.pods()
+ .withLabel(KubernetesApplicationOperation.LABEL_KYUUBI_UNIQUE_KEY, tag).list().getItems
+ val size = podList.size()
if (size != 1) {
warn(s"Get Tag: ${tag} Driver Pod In Kubernetes size: ${size}, we expect 1")
}
- operation
+ podList
}
override def stop(): Unit = {
diff --git a/kyuubi-server/src/main/scala/org/apache/kyuubi/util/KubernetesUtils.scala b/kyuubi-server/src/main/scala/org/apache/kyuubi/util/KubernetesUtils.scala
index 921aa04ae..0c934b51d 100644
--- a/kyuubi-server/src/main/scala/org/apache/kyuubi/util/KubernetesUtils.scala
+++ b/kyuubi-server/src/main/scala/org/apache/kyuubi/util/KubernetesUtils.scala
@@ -22,7 +22,7 @@ import java.io.File
import com.fasterxml.jackson.databind.ObjectMapper
import com.google.common.base.Charsets
import com.google.common.io.Files
-import io.fabric8.kubernetes.client.{Config, ConfigBuilder, DefaultKubernetesClient, KubernetesClient}
+import io.fabric8.kubernetes.client.{Config, ConfigBuilder, KubernetesClient, KubernetesClientBuilder}
import io.fabric8.kubernetes.client.Config.autoConfigure
import io.fabric8.kubernetes.client.okhttp.OkHttpClientFactory
import okhttp3.{Dispatcher, OkHttpClient}
@@ -93,7 +93,10 @@ object KubernetesUtils extends Logging {
debug("Kubernetes client config: " +
new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(config))
- Some(new DefaultKubernetesClient(factoryWithCustomDispatcher.createHttpClient(config), config))
+ Some(new KubernetesClientBuilder()
+ .withHttpClientFactory(factoryWithCustomDispatcher)
+ .withConfig(config)
+ .build())
}
implicit private class OptionConfigurableConfigBuilder(val configBuilder: ConfigBuilder)
diff --git a/pom.xml b/pom.xml
index ed5eb48d6..2082499dc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -167,7 +167,7 @@
<jetty.version>9.4.50.v20221201</jetty.version>
<jline.version>0.9.94</jline.version>
<junit.version>4.13.2</junit.version>
- <kubernetes-client.version>5.12.1</kubernetes-client.version>
+ <kubernetes-client.version>6.4.1</kubernetes-client.version>
<kudu.version>1.15.0</kudu.version>
<ldapsdk.version>6.0.5</ldapsdk.version>
<log4j.version>2.20.0</log4j.version>
@@ -595,6 +595,16 @@
<artifactId>kubernetes-client</artifactId>
<version>${kubernetes-client.version}</version>
</dependency>
+ <!--
+ according to kubernetes-client MIGRATION-v6.md, we should include this dependency
+ for doing any customization to OkHttp clients.
+ https://github.com/fabric8io/kubernetes-client/blob/master/doc/MIGRATION-v6.md#okhttp-httpclient
+ -->
+ <dependency>
+ <groupId>io.fabric8</groupId>
+ <artifactId>kubernetes-httpclient-okhttp</artifactId>
+ <version>${kubernetes-client.version}</version>
+ </dependency>
<!--
because of THRIFT-4805, we don't upgrade to libthrift:0.12.0,