【问题标题】:Micronaut liveness always unknownMicronaut 的活跃度始终未知
【发布时间】:2021-05-25 19:50:22
【问题描述】:

我目前正在尝试将 livenessreadiness 端点添加到我的服务中,以便将其部署在 k8s 上。

我正在使用最新的 micronaut 版本 (2.5.4),并具有以下设置:

application.yml:

micronaut:
  application:
    name: sandbox

endpoints:
  health:
    enabled: true
    sensitive: false
    details-visible: ANONYMOUS

build.gradle:

plugins {
    id("org.jetbrains.kotlin.jvm") version "1.4.32"
    id("org.jetbrains.kotlin.kapt") version "1.4.32"
    id("com.github.johnrengelman.shadow") version "7.0.0"
    id("io.micronaut.application") version "1.5.0"
    id("org.jetbrains.kotlin.plugin.allopen") version "1.4.32"
}

version = "0.1"
group = "com.example"

repositories {
    mavenCentral()
}

micronaut {
    runtime("netty")
    testRuntime("junit5")
    processing {
        incremental(true)
        annotations("com.example.*")
    }
}

dependencies {
    implementation("io.micronaut:micronaut-http-client")
    implementation("io.micronaut:micronaut-management")
    implementation("io.micronaut:micronaut-runtime")
    implementation("io.micronaut.kotlin:micronaut-kotlin-runtime")
    implementation("javax.annotation:javax.annotation-api")
    implementation("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}")
    runtimeOnly("ch.qos.logback:logback-classic")
    implementation("io.micronaut:micronaut-validation")

    runtimeOnly("com.fasterxml.jackson.module:jackson-module-kotlin")

}


application {
    mainClass.set("com.example.ApplicationKt")
}
java {
    sourceCompatibility = JavaVersion.toVersion("11")
}

tasks {
    compileKotlin {
        kotlinOptions {
            jvmTarget = "11"
        }
    }
    compileTestKotlin {
        kotlinOptions {
            jvmTarget = "11"
        }
    }


}

每当我到达端点 localhost:8080/health/liveness 时,我得到的响应是:

{"name":"sandbox","status":"UNKNOWN"}

但是,当我打电话给localhost:8080/health/readiness 时,我得到了正确的回复:

{"name":"sandbox","status":"UP","details":{"compositeDiscoveryClient()":{"name":"sandbox","status":"UP"},"diskSpace":{"name":"sandbox","status":"UP","details":{"total":499963174912,"free":384382533632,"threshold":10485760}},"service":{"name":"sandbox","status":"UP"}}}

我似乎遗漏了一些东西,但我在 Micronaut 文档中找不到任何关于此的内容...

【问题讨论】:

  • 您的上下文中是否有任何带有@Liveness 标记的bean?
  • 现在我没有,但是当我这样做时仍然有相同的结果,只是里面有一个未知的部分(我模仿了 Cassandra liveness 类)
  • 我无法重现。如果您可以在示例应用程序中重现它,请在github.com/micronaut-projects/micronaut-core/issues 提出问题,我们可以进行调查。像 gist.github.com/jeffbrown/b6c881f92e142878e4b4aaee3be2fcc5 这样的 @Liveness bean 应该可以工作。感谢您的反馈!
  • 像魅力一样工作 - 我误解了 @Liveness 的用法,并希望它也能像 @Singleton 一样工作。非常感谢!
  • 太棒了。我很高兴你解决了。如果我们能提供任何帮助,请告诉我们!

标签: micronaut kubernetes-health-check


【解决方案1】:

当前接受的答案不会报告反映真实应用程序状态的状态,因为您强制应用程序始终返回UP,无论其中发生什么错误。

您的application.yaml 应该是正确的设置:

endpoints:
  all:
    # Expose all management endpoints on a different port. This allows us to control access
    port: 8081
    sensitive: false
  info:
    enabled: true
    sensitive: false
  health:
    details-visible: ANONYMOUS
    enabled: true
    sensitive: false

你的 k8s deployment 应该设置正确,例如

      ports:
        - name: management
          containerPort: 8081
          protocol: TCP
      livenessProbe:
        failureThreshold: 3
        httpGet:
          path: /health
          port: 8081
        initialDelaySeconds: 50
      readinessProbe:
        failureThreshold: 3
        httpGet:
          path: /info
          port: 8081
        initialDelaySeconds: 15

如果这不起作用,请检查您的网络政策

【讨论】:

    【解决方案2】:

    在 cmets 的帮助下,我设法解决了这个问题。

    要使 liveness 工作,您需要添加类似于以下形式的 Liveness 实现:

    @Singleton
    @Liveness
    class LivenessIndicator : HealthIndicator {
        override fun getResult(): Publisher<HealthResult> =
            Flowable.just(HealthResult.builder(LIVENESS_NAME).status(HealthStatus.UP).build())
    
        companion object {
            private const val LIVENESS_NAME = "liveness"
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-18
      • 2020-09-12
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多