在fabric8中KubernetesClient和OpenshiftClient有什么区别?



我正在学习织物,

当我使用KubernetesClient时,它可以访问pod并返回res

KubernetesClient k8sClient = new DefaultKubernetesClient();
try {
PodList podList = k8sClient.pods().inNamespace("myns").list();
logger.info("There are {} }pods in myns namespace.", podList.getItems().size());
} catch (KubernetesClientException exception) {
logger.info("error: {}", exception.getMessage());
}

当我使用openshiftClient时,它没有返回任何结果,也没有任何错误。

OpenShiftClient openshiftClient = new DefaultOpenShiftClient();

try {
PodList podList = openshiftClient.pods().inNamespace("myns").list();
logger.info("There are {} }pods in myns namespace.", podList.getItems().size());
} catch (KubernetesClientException exception) {
logger.info("error: {}", exception.getMessage());
}

我很好奇KubernetesClient和OpenshiftClient有什么区别。实际上我的集群是OpenShift 4.7.32,我的fabbric8版本是

implementation group: 'io.fabric8', name: 'kubernetes-client', version: '5.8.0'
implementation group: 'io.fabric8', name: 'kubernetes-api', version: '3.0.12'

有什么想法吗?

KubernetesClient是Fabric8提供的所有客户端的基础。它是所有提供的模块中最受欢迎的模块,当用户只需要访问Kubernetes本地资源(例如,Deployment,Pod,Service等)或自定义资源(通过Fabric8 KubernetesClient CustomResource API)时使用。在大多数情况下,您只需要管理基本的Kubernetes资源,并且只需要KubernetesClient,它可以通过以下依赖项获得:

<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
<version>5.9.0</version>
</dependency>

OpenShiftClient特定于Red Hat OpenShift容器平台。它是KubernetesClient的超集,这意味着您可以获得KubernetesClient的所有功能以及对OpenShift特定API组的一些额外支持。例如:

  • DeploymentConfigopenshiftClient.deploymentConfigs()
  • 路由openshiftClient.routes()BuildConfigopenshiftClient.buildConfigs()
  • ImageStreamopenshiftClient.imageStreams()
  • 项目openshiftClient.projects()
  • 模板openshiftClient.templates()

如果你没有使用OpenShiftClient,你将通过Fabric8 KubernetesClient通用API访问这些资源。使用OpenShiftClient,您可以获得针对这些OpenShift特定资源的模型类和DSL支持。您可以查看OpenShiftClient接口,以查看所提供的所有附加DSL端点。您可以通过openshift-client模块访问它:

<dependency>
<groupId>io.fabric8</groupId>
<artifactId>openshift-client</artifactId>
<version>5.9.0</version>
</dependency>

我试图通过在OpenShiftCluster上运行这些代码示例,在Red Hat OpenShift Developer Sandbox上尝试您的代码来再现您的问题:

KubernetesClient:

public static void main(String[] args) {
try (KubernetesClient k8sClient = new DefaultKubernetesClient()) {
PodList podList = k8sClient.pods().inNamespace("rokumar-dev").list();
logger.info("There are {} pods in myns namespace.", podList.getItems().size());
} catch (KubernetesClientException exception) {
logger.info("error: {}", exception.getMessage());
}
}

OpenShiftClient:

public static void main(String[] args) {
try (OpenShiftClient k8sClient = new DefaultOpenShiftClient()) {
PodList podList = k8sClient.pods().inNamespace("rokumar-dev").list();
logger.info("There are {} pods in myns namespace.", podList.getItems().size());
} catch (KubernetesClientException exception) {
logger.info("error: {}", exception.getMessage());
}
}

然而,它在两种情况下给我相同的结果。我看到你正在使用kubernetes-api(它使用的是相当旧的Fabric8 OpenShift客户端(见这里的代码))。该模块被标记为已弃用,不再维护。我认为如果你运行这段代码与openshift-client的依赖,它应该工作

最新更新