kubernetes - Hystrix-dashboard 无法与 Kubernetes 上的 Kubeflix 配合使用

标签 kubernetes hystrix spring-cloud-netflix fabric8 turbine

我正在使用 Spring Boot、Fabric8 的 Spring-Cloug-Kubernetes 将微服务部署到 Kubernetes,现在我想要一个 Hystrix 仪表板,由 Fabric8 Kubeflix 提供.

我已在部署上设置标签:

metadata : 
    labels:
        hystrix.cluster: default
        hystrix.enabled: true
spec:
    template:
        metadata : 
            labels:
                hystrix.cluster: default
                hystrix.enabled: true

它也在我的 pod 上:

metadata : 
    labels:
        hystrix.cluster: default
        hystrix.enabled: true

在涡轮服务器 Pod 日志中我有:

2017-03-31T15:23:10.514696068Z 2017-03-31 15:23:10.514  INFO [turbine-server,,,] 1 --- [        Timer-0] c.n.t.discovery.InstanceObservable       : Found hosts that have been previously terminated: 0
2017-03-31T15:23:10.514700568Z 2017-03-31 15:23:10.514  INFO [turbine-server,,,] 1 --- [        Timer-0] c.n.t.discovery.InstanceObservable       : Hosts up:0, hosts down: 0

其/discovery 端点显示:

Hystrix Endpoints:

涡轮服务器application.yml:

spring:
  application:
    name: turbine-server
turbine:
  instanceUrlSuffix: :80/hystrix.stream
  aggregator:
    clusterConfig: default
InstanceDiscovery:
  impl: io.fabric8.kubeflix.turbine.TurbineDiscovery

在我的微服务上,我只有一个

@EnableCircuitBreaker
@EnableHystrix

在他们的主要应用程序类中。

我将端口 80 设置为涡轮机后缀,因为我有 Kubernetes 服务公开 pod 的端口 80:

spec: 
    ports: [
        name: default   
        protocol:   TCP,
        port:   80,
        targetPort: 8080,
        nodePort:   32193
    ],
    clusterIP:  10.0.72.62,
    type:   NodePort

当我对我的服务执行/health 时:

"status": "UP",
"hystrix": {
    "status": "UP"
},

以及/hystrix.stream :

data: {"type":"HystrixCommand","name":"getLabel","group":"LabelController","currentTime":1491222462325,"isCircuitBreakerOpen":false,"errorPercentage":0,"errorCount":0,"requestCount":0,"rollingCountBadRequests":0,"rollingCountCollapsedRequests":0,"rollingCountEmit":0,"rollingCountExceptionsThrown":0,"rollingCountFailure":0,"rollingCountFallbackEmit":0,"rollingCountFallbackFailure":0,"rollingCountFallbackMissing":0,"rollingCountFallbackRejection":0,"rollingCountFallbackSuccess":0,"rollingCountResponsesFromCache":0,"rollingCountSemaphoreRejected":0,"rollingCountShortCircuited":0,"rollingCountSuccess":0,"rollingCountThreadPoolRejected":0,"rollingCountTimeout":0,"currentConcurrentExecutionCount":0,"rollingMaxConcurrentExecutionCount":0,"latencyExecute_mean":0,"latencyExecute":{"0":0,"25":0,"50":0,"75":0,"90":0,"95":0,"99":0,"99.5":0,"100":0},"latencyTotal_mean":0,"latencyTotal":{"0":0,"25":0,"50":0,"75":0,"90":0,"95":0,"99":0,"99.5":0,"100":0},"propertyValue_circuitBreakerRequestVolumeThreshold":20,"propertyValue_circuitBreakerSleepWindowInMilliseconds":5000,"propertyValue_circuitBreakerErrorThresholdPercentage":50,"propertyValue_circuitBreakerForceOpen":false,"propertyValue_circuitBreakerForceClosed":false,"propertyValue_circuitBreakerEnabled":true,"propertyValue_executionIsolationStrategy":"THREAD","propertyValue_executionIsolationThreadTimeoutInMilliseconds":1000,"propertyValue_executionTimeoutInMilliseconds":1000,"propertyValue_executionIsolationThreadInterruptOnTimeout":true,"propertyValue_executionIsolationThreadPoolKeyOverride":null,"propertyValue_executionIsolationSemaphoreMaxConcurrentRequests":10,"propertyValue_fallbackIsolationSemaphoreMaxConcurrentRequests":10,"propertyValue_metricsRollingStatisticalWindowInMilliseconds":10000,"propertyValue_requestCacheEnabled":true,"propertyValue_requestLogEnabled":true,"reportingHosts":1,"threadPool":"LabelController"}
data: {"type":"HystrixThreadPool","name":"LabelController","currentTime":1491222462325,"currentActiveCount":0,"currentCompletedTaskCount":2,"currentCorePoolSize":10,"currentLargestPoolSize":2,"currentMaximumPoolSize":10,"currentPoolSize":2,"currentQueueSize":0,"currentTaskCount":2,"rollingCountThreadsExecuted":0,"rollingMaxActiveThreads":0,"rollingCountCommandRejections":0,"propertyValue_queueSizeRejectionThreshold":5,"propertyValue_metricsRollingStatisticalWindowInMilliseconds":10000,"reportingHosts":1}

hystrix-dashboard 接收以下turbo.stream:

{"reportingHostsLast10Seconds":0,"name":"meta","type":"meta","timestamp":1491222578286}

版本:

Spring Boot : 1.4.1.RELEASE
io.fabric8.kubernetes-client : 1.4.14
io.fabric8.kuberflix.turbine-discovery : 1.0.28
Spring cloud Neflix : 1.2.4.RELEASE
Netflix hystrix : 1.5.6

我的涡轮服务器出了什么问题?为什么它没有从我的微服务中检测到 hystrix.stream ?

最佳答案

好吧,它有效,我必须禁用默认的 Eureka 发现:

ribbon.eureka.enabled: false
eureka.client.enabled: false

以便使用 Kubernetes。

instanceUrlSuffix 仍然需要是:8080/hystrix.stream,因为它采用 pod 的内部 k8s IP。

关于kubernetes - Hystrix-dashboard 无法与 Kubernetes 上的 Kubeflix 配合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43184943/

相关文章:

kubernetes - 如何更新本地 Kubernetes API 服务器以通过 Dex 启用 OIDC?

kubernetes - 从自身内部调用CloudRun端点

java - 增加 Hystrix 断路器超时?

spring - Hystrix中使用ThreadPool的优点

kubernetes - 在事件/就绪探测中指定 httpGet 和 exec 处理程序

java - Kubernetes Java API 不使用提供的用户名密码

java - Hystrix 仪表板始终显示加载屏幕

F5 或 ZUUl/Eureka/Services 处的 SSL 终止?

java - 获取标题假装 netflix

spring - 如何在独立的 Turbine 应用程序中激活/turbine.stream 端点