前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Fabric8 Kubernetes 教程——OpenShift 客户端

Fabric8 Kubernetes 教程——OpenShift 客户端

作者头像
FunTester
发布于 2025-04-06 14:06:30
发布于 2025-04-06 14:06:30
9700
代码可运行
举报
文章被收录于专栏:FunTesterFunTester
运行总次数:0
代码可运行

OpenShift客户端(oc)是Red Hat推出的开源容器平台OpenShift的命令行工具,用于与OpenShift集群交互。通过oc,开发者可以高效管理应用全生命周期——包括部署、扩展、监控及调试容器化应用。它支持Kubernetes原生操作,同时扩展了OpenShift特有功能(如构建镜像、触发部署)。

Fabric8 Kubernetes 客户端提供了一个 OpenShift 扩展,支持 OpenShift 特有的资源。以下是 OpenShift 客户端 DSL 的使用示例。

1. 初始化 OpenShift 客户端

默认初始化:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try (OpenShiftClient client = new KubernetesClientBuilder().build().adapt(OpenShiftClient.class)) {
    // 使用客户端进行操作
}

自定义配置初始化:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Config kubeConfig = new ConfigBuilder()
    .withMasterUrl("https://api.ci-ln-3sbdl1b-d5d6b.origin-ci-int-aws.dev.FunTestercloud.com:6443")
    .withOauthToken("xxxxxxxx-41FunTesteroafKI6iU637-xxxxxxxxxxxxx")
    .build();

try (OpenShiftClient client = new KubernetesClientBuilder().withConfig(kubeConfig).build().adapt(OpenShiftClient.class)) {
    // 使用客户端进行操作
}

2. DeploymentConfig

从 YAML 加载 DeploymentConfig

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DeploymentConfig deploymentConfig = client.deploymentConfigs()
    .inNamespace("FunTester")
    .load(new FileInputStream("FunTester-deploymentconfig.yml")).item();

获取 DeploymentConfig

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DeploymentConfig dc = client.deploymentConfigs()
    .inNamespace("FunTester")
    .withName("deploymentconfig1").get();

创建 DeploymentConfig

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DeploymentConfig dc = new DeploymentConfigBuilder()
    .withNewMetadata().withName("deploymentconfig1").endMetadata()
    .withNewSpec()
    .withReplicas(2)
    .withNewTemplate()
    .withNewMetadata().addToLabels("app", "database").endMetadata()
    .withNewSpec()
    .addNewContainer()
    .withName("mysql")
    .withImage("openshift/mysql-55-centos7")
    .endContainer()
    .endSpec()
    .endTemplate()
    .endSpec()
    .build();

DeploymentConfig dcCreated = client.deploymentConfigs()
    .inNamespace("FunTester").resource(dc).create();

列出 DeploymentConfig

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DeploymentConfigList dcList = client.deploymentConfigs()
    .inNamespace("FunTester").list();

删除 DeploymentConfig

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
client.deploymentConfigs()
    .inNamespace("FunTester")
    .withName("deploymentconfig1").delete();

3. BuildConfig

从 YAML 加载 BuildConfig

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BuildConfig buildConfig = client.buildConfigs()
    .inNamespace("FunTester")
    .load(new FileInputStream("test-buildconfig.yml")).item();

创建 BuildConfig

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BuildConfig buildConfig = new BuildConfigBuilder()
    .withNewMetadata().withName("bc1").endMetadata()
    .withNewSpec()
    .addNewTrigger().withType("GitHub").withNewGithub().withSecret("secret101").endGithub().endTrigger()
    .withNewSource().withType("Git").withNewGit().withUri("https://github.com/openshift/ruby-hello-world").endGit().endSource()
    .withNewStrategy().withType("Source").withNewSourceStrategy()
    .withNewFrom().withKind("ImageStreamTag").withName("origin-ruby-sample:latest").endFrom()
    .endSourceStrategy().endStrategy()
    .withNewOutput().withNewTo().withKind("ImageStreamTag").withName("origin-ruby-sample:latest").endTo().endOutput()
    .endSpec()
    .build();

client.buildConfigs().inNamespace("FunTester").resource(buildConfig).create();

列出 BuildConfig

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BuildConfigList bcList = client.buildConfigs()
    .inNamespace("FunTester").list();

4. Route

从 YAML 加载 Route

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Route route = client.routes()
    .inNamespace("FunTester")
    .load(new FileInputStream("test-route.yml")).item();

创建 Route

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Route route = new RouteBuilder()
    .withNewMetadata().withName("route1").endMetadata()
    .withNewSpec()
    .withHost("www.FunTester.com")
    .withNewTo().withKind("Service").withName("service-name1").endTo()
    .endSpec()
    .build();

client.routes().inNamespace("FunTester").resource(route).create();

5. Project

创建 Project

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ProjectRequest request = client.projectrequests().create(
    new ProjectRequestBuilder()
        .withNewMetadata().withName("thisisatest").endMetadata()
        .withDescription("Fabric8")
        .withDisplayName("Fabric8")
        .build()
);

列出 Project

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ProjectList projectList = client.projects().list();

6. ImageStream

从 YAML 加载 ImageStream

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageStream imageStream = client.imageStreams()
    .load(new FileInputStream("test-imagestream.yml")).item();

创建 ImageStream

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageStream imageStream = new ImageStreamBuilder()
    .withNewMetadata().withName("FunTester-camel-cdi").endMetadata()
    .withNewSpec()
    .addNewTag().withName("latest").endTag()
    .withDockerImageRepository("fabric8/FunTester-camel-cdi")
    .endSpec()
    .build();

client.imageStreams().inNamespace("FunTester").resource(imageStream).create();

7. CatalogSource

创建 CatalogSource

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CatalogSource cs = new CatalogSourceBuilder()
    .withNewMetadata().withName("foo").endMetadata()
    .withNewSpec()
    .withSourceType("Foo")
    .withImage("nginx:latest")
    .withDisplayName("Foo Bar")
    .withPublisher("Fabric8")
    .endSpec()
    .build();

client.operatorHub().catalogSources().inNamespace("FunTester").resource(cs).create();

8. PrometheusRule

创建 PrometheusRule

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PrometheusRule prometheusRule = new PrometheusRuleBuilder()
    .withNewMetadata().withName("foo").endMetadata()
    .withNewSpec()
    .addNewGroup()
    .withName("./FunTester-rules")
    .addNewRule()
    .withAlert("FunTesterAlert")
    .withNewExpr().withStrVal("vector(1)").endExpr()
    .endRule()
    .endGroup()
    .endSpec()
    .build();

client.monitoring().prometheusRules().inNamespace("FunTester").resource(prometheusRule).create();

9. ServiceMonitor

创建 ServiceMonitor

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ServiceMonitor serviceMonitor = new ServiceMonitorBuilder()
    .withNewMetadata()
    .withName("foo")
    .addToLabels("prometheus", "frontend")
    .endMetadata()
    .withNewSpec()
    .withNewNamespaceSelector().withAny(true).endNamespaceSelector()
    .withNewSelector()
    .addToMatchLabels("prometheus", "frontend")
    .endSelector()
    .addNewEndpoint()
    .withPort("http-metric")
    .withInterval("15s")
    .endEndpoint()
    .endSpec()
    .build();

client.monitoring().serviceMonitors().inNamespace("FunTester").resource(serviceMonitor).create();

10. ClusterResourceQuota

创建 ClusterResourceQuota

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Map<String, Quantity> hard = new HashMap<>();
hard.put("pods", new Quantity("10"));
hard.put("secrets", new Quantity("20"));

ClusterResourceQuota crq = new ClusterResourceQuotaBuilder()
    .withNewMetadata().withName("foo").endMetadata()
    .withNewSpec()
    .withNewSelector()
    .addToAnnotations("openshift.io/requester", "foo-user")
    .endSelector()
    .withQuota(new ResourceQuotaSpecBuilder().withHard(hard).build())
    .endSpec()
    .build();

client.quotas().clusterResourceQuotas().resource(crq).create();

11. EgressNetworkPolicy

创建 EgressNetworkPolicy

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
EgressNetworkPolicy enp = new EgressNetworkPolicyBuilder()
    .withNewMetadata()
    .withName("foo")
    .withNamespace("FunTester")
    .endMetadata()
    .withNewSpec()
    .addNewEgress()
    .withType("Allow")
    .withNewTo().withCidrSelector("1.2.3.0/24").endTo()
    .endEgress()
    .addNewEgress()
    .withType("Allow")
    .withNewTo().withDnsName("www.foo.com").endTo()
    .endEgress()
    .endSpec()
    .build();

client.egressNetworkPolicies().inNamespace("FunTester").resource(enp).create();

12. Tekton 客户端

初始化 Tekton 客户端:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try (TektonClient client = new KubernetesClientBuilder().build().adapt(TektonClient.class)) {
    // 使用客户端进行操作
}

创建 PipelineRun

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PipelineRun pipelineRun = new PipelineRunBuilder()
    .withNewMetadata().withName("demo-run-1").endMetadata()
    .withNewSpec()
    .withNewPipelineRef().withName("demo-pipeline").endPipelineRef()
    .addNewParam().withName("greeting").withNewValue("Hello World!").endParam()
    .endSpec()
    .build();

client.v1().pipelineRuns().inNamespace("FunTester").resource(pipelineRun).create();

13. Knative 客户端

初始化 Knative 客户端:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try (KnativeClient client = new KubernetesClientBuilder().build().adapt(KnativeClient.class)) {
    // 使用客户端进行操作
}

创建 Service

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Service service = new ServiceBuilder()
    .withNewMetadata().withName("helloworld-go").endMetadata()
    .withNewSpec()
    .withNewTemplate()
    .withNewSpec()
    .addToContainers(new ContainerBuilder()
        .withImage("gcr.io/knative-samples/helloworld-go")
        .addNewEnv().withName("TARGET").withValue("Go Sample V1").endEnv()
        .build())
    .endSpec()
    .endTemplate()
    .endSpec()
    .build();

client.services().inNamespace("FunTester").resource(service).serverSideApply();

14. 日志记录

配置日志记录:

simplelogger.properties 文件中设置日志级别:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
org.slf4j.simpleLogger.defaultLogLevel=trace

Show You Code

以下是一个完整的示例,展示如何使用 Fabric8 OpenShift 客户端 DSL 来管理 OpenShift 集群中的资源。这个示例包括初始化 OpenShift 客户端、创建 DeploymentConfig、创建 Route,以及列出和删除资源。

示例代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.ConfigBuilder;
import io.fabric8.openshift.api.model.*;
import io.fabric8.openshift.client.OpenShiftClient;
import io.fabric8.openshift.client.DefaultOpenShiftClient;

import java.io.FileInputStream;
import java.util.Collections;

publicclass OpenShiftClientFunTester {

    public static void main(String[] args) {
        // 初始化 OpenShift 客户端
        try (OpenShiftClient client = new DefaultOpenShiftClient()) {
            String namespace = "FunTester";

            // 1. 创建 DeploymentConfig
            DeploymentConfig deploymentConfig = new DeploymentConfigBuilder()
                    .withNewMetadata()
                    .withName("FunTester-dc")
                    .endMetadata()
                    .withNewSpec()
                    .withReplicas(2)
                    .withNewTemplate()
                    .withNewMetadata()
                    .addToLabels("app", "FunTester-app")
                    .endMetadata()
                    .withNewSpec()
                    .addNewContainer()
                    .withName("nginx")
                    .withImage("nginx:latest")
                    .addNewPort().withContainerPort(80).endPort()
                    .endContainer()
                    .endSpec()
                    .endTemplate()
                    .endSpec()
                    .build();

            // 创建 DeploymentConfig
            client.deploymentConfigs().inNamespace(namespace).resource(deploymentConfig).create();
            System.out.println("DeploymentConfig 创建成功!");

            // 2. 创建 Route
            Route route = new RouteBuilder()
                    .withNewMetadata()
                    .withName("FunTester-route")
                    .endMetadata()
                    .withNewSpec()
                    .withHost("www.FunTester.com")
                    .withNewTo()
                    .withKind("Service")
                    .withName("FunTester-service")
                    .endTo()
                    .endSpec()
                    .build();

            // 创建 Route
            client.routes().inNamespace(namespace).resource(route).create();
            System.out.println("Route 创建成功!");

            // 3. 列出 DeploymentConfig
            DeploymentConfigList dcList = client.deploymentConfigs().inNamespace(namespace).list();
            System.out.println("当前命名空间中的 DeploymentConfig:");
            dcList.getItems().forEach(dc -> System.out.println(dc.getMetadata().getName()));

            // 4. 列出 Route
            RouteList routeList = client.routes().inNamespace(namespace).list();
            System.out.println("当前命名空间中的 Route:");
            routeList.getItems().forEach(r -> System.out.println(r.getMetadata().getName()));

            // 5. 删除 DeploymentConfig
            client.deploymentConfigs().inNamespace(namespace).withName("FunTester-dc").delete();
            System.out.println("DeploymentConfig 删除成功!");

            // 6. 删除 Route
            client.routes().inNamespace(namespace).withName("FunTester-route").delete();
            System.out.println("Route 删除成功!");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

示例说明

  1. 初始化 OpenShift 客户端
    • 使用 DefaultOpenShiftClient 初始化客户端,默认会从 ~/.kube/config 文件中读取配置。
  2. **创建 DeploymentConfig**:
    • 定义了一个 DeploymentConfig,包含 2 个副本的 Nginx 容器。
    • 使用 client.deploymentConfigs().create() 方法创建资源。
  3. **创建 Route**:
    • 定义了一个 Route,将流量路由到名为 FunTester-service 的服务。
    • 使用 client.routes().create() 方法创建资源。
  4. 列出资源
    • 使用 client.deploymentConfigs().list()client.routes().list() 列出当前命名空间中的资源。
  5. 删除资源
    • 使用 client.deploymentConfigs().delete()client.routes().delete() 删除之前创建的资源。

运行示例

确保已安装 OpenShift 集群,并且 kubeconfig 文件已正确配置。

将上述代码保存为 OpenShiftClientFunTester.java

编译并运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
javac -cp fabric8-openshift-client-<version>.jar OpenShiftClientFunTester.java
java -cp .:fabric8-openshift-client-<version>.jar OpenShiftClientFunTester

观察控制台输出,确认资源创建、列出和删除的操作是否成功。

输出示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DeploymentConfig 创建成功!
Route 创建成功!
当前命名空间中的 DeploymentConfig:
FunTester-dc
当前命名空间中的 Route:
FunTester-route
DeploymentConfig 删除成功!
Route 删除成功!
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Fabric8 Kubernetes 教程——客户端基础
俗话说,工欲善其事,必先利其器。在使用 Kubernetes 时,首先需要初始化客户端。通常情况下,我们可以这样创建 Kubernetes 客户端:
FunTester
2025/03/20
940
Fabric8 Kubernetes 教程——客户端基础
Fabric8 Kubernetes 教程——CSR、ListOptions、DeleteOptions
CertificateSigningRequest (CSR) 是 Kubernetes 中用于请求集群证书颁发机构(CA)签发证书的对象,通常用于为节点或用户申请 TLS 证书。
FunTester
2025/04/04
720
Fabric8 Kubernetes 教程——CSR、ListOptions、DeleteOptions
Fabric8 Kubernetes 教程——Replication、ConfigMap、Secret
ReplicationController (RC) 是 Kubernetes 中用于确保指定数量的 Pod 副本始终运行的早期控制器,已被更灵活的 ReplicaSet 取代。
FunTester
2025/03/24
600
Fabric8 Kubernetes 教程——Replication、ConfigMap、Secret
Fabric8 Kubernetes 教程——PVC、PV、Network、PDB、Role、Cluster
EndpointSlice 是 Kubernetes 中用于扩展和优化 Endpoints 功能的一种资源对象。它是对传统 Endpoints 的改进,主要用于更高效地管理和存储服务后端的端点信息。
FunTester
2025/03/31
910
Fabric8 Kubernetes 教程——PVC、PV、Network、PDB、Role、Cluster
Fabric8 Kubernetes 教程——Metrics、Resource
Kubernetes 客户端提供了丰富的 API 来管理和操作 Kubernetes 集群中的资源。以下是一些常见的操作示例,涵盖了指标获取、资源管理、自定义资源定义(CRD)以及类型化和无类型资源 API 的使用。
FunTester
2025/04/04
670
Fabric8 Kubernetes 教程——Metrics、Resource
从零上手 Fabric8 KubernetesClient
在 Kubernetes 的世界里,管理容器资源的方法可谓是八仙过海,各显神通。最直接的方式当然是使用 kubectl 命令,但如果想在 Java 代码里优雅地操作 Kubernetes,那就得借助 Kubernetes Java 客户端了。虽然官方提供了 kubernetes-client-java,但相比之下,Fabric8 KubernetesClient 更加简洁、强大,API 设计友好,特别适合 Java 开发者。
FunTester
2025/02/24
1110
从零上手 Fabric8 KubernetesClient
Kubernetes官方java客户端之八:fluent style
如果您不想自己搭建kubernetes环境,推荐使用腾讯云容器服务TKE:无需自建,即可在腾讯云上使用稳定, 安全,高效,灵活扩展的 Kubernetes 容器平台;
程序员欣宸
2021/06/02
1.2K0
Kubernetes官方java客户端之八:fluent style
Fabric8 Kubernetes 教程——job、service、ingress、statefulSet、daemonSet
在 Kubernetes 的世界中,掌握各种资源的管理和操作是每个开发者和运维人员的必修课。无论是 Job、CronJob、Namespace、ServiceAccount 还是 Ingress,它们都是 Kubernetes 生态中不可或缺的一部分。下面,我们将通过一些常见的操作示例,带您深入了解这些资源的使用方法。
FunTester
2025/03/29
1000
Fabric8 Kubernetes 教程——job、service、ingress、statefulSet、daemonSet
(译)自己的 Kubernetes 控制器(2)——用 Java 开发
前面文章中,我们大概描述了开发自定义 Kubernetes 控制器的基础内容。其中我们提到,只要能够使用 HTTP/JSON 就可以满足开发需求。本文中就言归正传开始开发。
崔秀龙
2020/05/07
1.1K0
创建资源池租户
Java版云管平台项目中创建资源池租户,南向接口需要对底层的Kubernetes创建namespace的同时创建同名Kubernetes用户。
后端云
2021/10/09
7170
利用K8S技术栈打造个人私有云(连载之:K8S资源控制)
基于前面系列文章的详细阐述,我们已经可以手工去K8S集群的命令行下将CentOS 7.4操作系统的Docker镜像启动起来,然后用户可以通过SSH登录到CentOS容器之中进行使用。但实际使用过程中不同的用户不可能每次都手动去命令行启动一个CentOS镜像,然后用命令去查看该容器的IP地址和端口是多少,然后再通过ssh去连接。我们最好可以将Docker容器的启动、查询、删除等再封装一层,然后通过WEB页面去提供给用户操作,这才符合用户行为需求!
CodeSheep
2018/04/27
2.1K1
利用K8S技术栈打造个人私有云(连载之:K8S资源控制)
OpenShift总体架构设计
OpenShift被其供应商Red Hat称为“ 企业级Kubernetes”。其实Kubernetes是OpenShift不可或缺的一部分,并围绕它构建了更多功能。
网络安全观
2021/03/01
1.2K0
从一张图看Devops全流程
一、持续交付工具链全图 上图源自网络。上图很清晰地列出了CD几个阶段使用的工具。 CD的工具链很长,但并不是每个模块所有工具都那么流行;换言之,我们在每个模块用好一种工具就足够了。 Build 在SC
魏新宇
2018/03/22
14K0
从一张图看Devops全流程
DHorse改用fabric8的SDK与k8s集群交互
在dhorse 1.4.0版本之前,一直使用k8s官方提供的sdk与k8s集群交互,官方sdk的Maven坐标如下:
用户9398785
2023/10/30
1690
六种开发环境部署大全:基于Openshift
前言 本文包含在Openshift上部署六种开发环境的步骤,分别是: OpenShift for Fuse Developers Eclipse Vert.x development Spring Boot development WildFly Swarm development Node.js development Java EE Batch Processing with OpenShift, WildFly 文中实验源自:https://learn.openshift.com/middlewar
魏新宇
2018/03/22
3.9K0
六种开发环境部署大全:基于Openshift
OpenShift:关于OpenShift(OKD)通过命令行的方式部署镜像以及S2I流程Demo
傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波
山河已无恙
2023/10/25
6930
OpenShift:关于OpenShift(OKD)通过命令行的方式部署镜像以及S2I流程Demo
OpenShift 4 监控技术栈解析
红帽OpenShift 4.6最新版刚出来, 最新的监控技术栈经过了较大的调整并且GA(生产可用)了.
东风微鸣
2022/04/21
1.2K0
OpenShift 4 监控技术栈解析
Spark Kubernetes 的源码分析系列 - submit
Kubernetes 是作为新的 resouceManager 集成到 Spark 中的,集成的思路跟将 YARN 集成是类似的,Spark 本身提供 Standalone 这种资源管理的模式,当然是不够的。
runzhliu
2020/08/06
1.5K0
Spring Boot 微服务上容器平台的最佳实践 - 4
今天开始第四篇, 主要介绍下 几个微服务的部署. 介绍2种方法, 一种是分步的, 构建jar、打镜像、传到镜像库、K8S部署;另一种直接通过Maven + Farbic8 一气呵成。
东风微鸣
2022/04/21
9700
Spring Boot 微服务上容器平台的最佳实践 - 4
spring-cloud-kubernetes的服务发现和轮询实战(含熔断)
本文是《spring-cloud-kubernetes实战系列》的第四篇,主要内容是在kubernetes上部署两个应用:Web-Service和Account-Service,通过spring-cloud-kubernetes提供的注册发现能力,实现Web-Service调用Account-Service提供的http服务;
程序员欣宸
2019/07/02
2.6K0
spring-cloud-kubernetes的服务发现和轮询实战(含熔断)
推荐阅读
相关推荐
Fabric8 Kubernetes 教程——客户端基础
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验