#spring-boot #kubernetes #kubernetes-helm #spring-boot-actuator
Вопрос:
В настоящее время я пытаюсь запустить сервер конфигурации spring cloud и запустить его как приложение для загрузки spring. Я настроил зависимости в pom.xml для /привода, а также есть шаблон выпуска руля с приложением.свойства в виде конфигурационной карты, как показано ниже. После развертывания, когда я описываю модуль, я продолжаю получать неудачные тесты на живучесть/готовность, из-за которых модуль переходит в бесконечный цикл перезапусков. Любые указания на то, что я делаю неправильно, были бы замечательными.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.asdf.asdf.configserver</groupId>
<artifactId>asdf-config-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<java.version>1.8</java.version>
<spring-cloud.version>2020.0.3</spring-cloud.version>
</properties>
<dependencies>
<!-- <dependency>-->
<!-- <groupId>org.springframework.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-bus-amqp</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>maven-public</id>
<url>https://nexus.tools.asdfasd.asdfasdf.com/repository/maven-public/</url>
</repository>
<repository>
<id>releases</id>
<url>https://nexus.tools.fxi-asdfasdf.asdf.com/repository/maven-releases/</url>
</repository>
<repository>
<id>snapshots</id>
<url>https://nexus.tools.asdfasdf.com/repository/maven-snapshots/</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.5.RELEASE</version>
</plugin>
</plugins>
</build>
</project>
replicaCount: 1
java_app: true
memory_limit: 1024
memory_percent: 20
resources:
limits:
cpu: "0.5"
# memory: 256Mi
requests:
cpu: "0.1"
# memory: 256Mi
container:
ports:
- name: http
containerPort: 8080
servicePort: 80
protocol: TCP
ingress:
internal:
enabled: true
port: http
healthChecks:
livenessProbe:
httpGet:
path: /actuator/health
port: http
initialDelaySeconds: 90
timeoutSeconds: 25
periodSeconds: 20
failureThreshold: 3
readinessProbe:
httpGet:
path: /actuator/health
port: http
initialDelaySeconds: 90
timeoutSeconds: 25
periodSeconds: 20
failureThreshold: 3
# Container environment variables
extraVars:
- name: SPRING_CONFIG_LOCATION
value: "/spring/config/"
configMaps:
/spring/config:
inline:
- name: application.properties
content: |-
server.port=8080
spring.application.name=asdf-configserver-service
spring.cloud.config.server.git.uri=https://github.asdfad.com/asdfa/configs
spring.cloud.config.server.git.password={GITHUB_TOKEN}
spring.cloud.config.server.git.default-label=test
spring.cloud.config.server.git.searchPaths={application}
management.metrics.tags.application=asdf-configserver-service
management.metrics.tags.version=@project.version@
management.security.enabled=false
management.endpoint.info.enabled=true
management.endpoint.health.enabled=true
management.endpoint.shutdown.enabled=true
management.endpoints.jmx.exposure.include=health,info
management.endpoints.web.exposure.include=*
endpoints.health.sensitive=false
security.basic.enabled=false
management.endpoint.health.show-details=always
management.server.ssl.enabled=false
management.endpoint.metrics.enabled=true
management.endpoint.prometheus.enabled=true
management.metrics.export.prometheus.enabled=true
info.app.name=adsfasdf-configserver-service
info.app.description=asdfasd asdfasdf config server.
info.app.version=1.0.0
akv2k8s:
GITHUB_TOKEN:
vault: asdfasdfasdfasdfzcxva
type: secret
secretName: github-token
Комментарии:
1. Вы пытались проверить, хорошо ли работает конечная точка /привод/работоспособность? Временно отключите проверки работоспособности, чтобы избежать перезапуска модуля, и разверните приложение. Затем вызовите эту конечную точку вашего приложения и проверьте, возвращает ли оно статус 200 (и некоторый ответ, например «статус»: «ВВЕРХ»). Таким образом, вы сможете определить неисправную часть — будь то невозможность доступа к конечной точке с помощью проверки работоспособности, или конфигурация приложения, из-за которой конечная точка работает неправильно, или что-то не так с приложением, поэтому оно не возвращает 200. Также проверьте журналы вашего приложения.
2. да, спасибо за совет по отладке. Когда я устанавливаю порт-вперед, чтобы увидеть, если /привод/здоровье конечной точки добраться не наедаться «статус»: «до» и я вижу, что приложение записывает нормально, но журналы ошибок в порт-вперед, как показано ниже — E1005 22:26:52.593027 56807 portforward.перейти:340] ошибка при создании потока ошибок на порту 9000 -> 8080: тайм-аут произошел
3. @Avi Можете ли вы попробовать решение из документации Spring для зондов Kubernetes с различными путями для зондов живучести и готовности? путь: /привод/здоровье/жизнестойкость путь: /привод/здоровье/готовность
4. Это не должно иметь никакого значения, потому что в документации Spring также четко указано, что, хотя она предоставляет отдельные конечные точки для проверки живучести и готовности (поэтому ее стоит использовать), она все равно должна работать, если вы используете только /привод/здоровье. Но в целом это правильно, что стоит использовать эти отдельные конечные точки. @Avi, вы определили услугу? Я не вижу этого в вашем коде, и в этом случае ваш контейнер недоступен извне.
5. @PawelWoroniecki — да, вы правы, это не имеет значения, если мы добавим /живость и /готовность к /приводу/здоровью, хотя это хорошая практика. В любом случае, я наконец-то решил проблему с /приводом/конечной точкой работоспособности и вижу ответ ниже: