我正在運行具有最低生產要求(3 個控制平面和兩個計算節點)的自托管 OKD 4 集群。此設定包括 Jenkins 安裝 - 通過 Helm ( https://www.jenkins.io/doc/book/installing/kubernetes/ )安裝到目前為止一切正常:當更改推送到 Github 并且成功時構建自動啟動部署到運行 Jenkins 的同一個集群。
但目前我面臨的問題是,當構建作業執行 Spring Boot 測驗時,會觸發持久性背景關系。一旦 Spring 啟動持久性背景關系,構建代理(jdk-11 映像,請參閱下面的 additionalAgent 配置)就會被終止。下載依賴項和編譯作業正常,順便說一句。
additionalAgents:
jdk-11:
podName: jdk-11
customJenkinsLabels: jdk-11
image: jenkins/jnlp-agent-jdk11
tag: latest
...
當測驗被禁用時,作業運行良好。但是一旦持久性被初始化,代理就會被殺死。
這些是我為測驗嘗試的配置:
- 從記憶體中的 h2 資料庫和 flyway 配置開始。
- 沒有飛路配置。
- 即使沒有設定資料庫連接字串。
作業被殺死的時間幾乎相同:對于 1. 它是
2021-10-20 22:44:06.637 INFO 299 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2021-10-20 22:44:07.032 INFO 299 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 310 ms. Found 2 JPA repository interfaces.
2021-10-20 22:44:08.240 INFO 299 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=1c9e8306-7514-338e-8a9f-3cfba5c1169b
2021-10-20 22:44:10.527 INFO 299 --- [ main] o.f.c.internal.license.VersionPrinter : Flyway Community Edition 7.7.3 by Redgate
2021-10-20 22:44:10.532 INFO 299 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2021-10-20 22:44:11.744 INFO 299 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2021-10-20 22:44:12.041 INFO 299 --- [ main] o.f.c.i.database.base.DatabaseType : Database: jdbc:h2:mem:testdb (H2 1.4)
Killed
對于 2。
2021-10-21 19:50:51.604 INFO 306 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2021-10-21 19:50:52.005 INFO 306 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 391 ms. Found 2 JPA repository interfaces.
2021-10-21 19:50:53.510 INFO 306 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=0fd77ef3-b5a2-35cb-b157-6d27c0cfe9a5
2021-10-21 19:50:56.405 INFO 306 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2021-10-21 19:50:56.708 INFO 306 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.32.Final
2021-10-21 19:50:57.503 INFO 306 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
Killed
而對于 3。
2021-10-21 22:02:48.810 INFO 309 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2021-10-21 22:02:49.198 INFO 309 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 380 ms. Found 2 JPA repository interfaces.
2021-10-21 22:02:50.509 INFO 309 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=0fd77ef3-b5a2-35cb-b157-6d27c0cfe9a5
2021-10-21 22:02:53.523 INFO 309 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2021-10-21 22:02:53.898 INFO 309 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.32.Final
Killed
Jenkins pod 的日志只是說明
Terminated Kubernetes instance for agent jenkins/jdk-11-bjtz5
Disconnected computer jdk-11-bjtz5
2021-10-21 22:02:57.342 0000 [id=465] INFO o.c.j.p.k.KubernetesSlave#deleteSlavePod: Terminated Kubernetes instance for agent jenkins/jdk-11-bjtz5
2021-10-21 22:02:57.342 0000 [id=465] INFO o.c.j.p.k.KubernetesSlave#_terminate: Disconnected computer jdk-11-bjtz5
2021-10-21 22:02:57.356 0000 [id=436] INFO j.s.DefaultJnlpSlaveReceiver#channelClosed: Computer.threadPoolForRemoting [#56] for jdk-11-bjtz5 terminated: java.nio.channels.ClosedChannelException
在所有情況下,都沒有例外、堆疊跟蹤或可疑事件。這些步驟是可重復的——當我再次使用相同的配置運行構建時,代理在測驗中完全相同的步驟被殺死。
設定:
- 詹金斯版本 2.303.2
- Jenkins 使用運行在同一集群中的 MySQL 資料庫
- 所有 Jenkins 插件都是最新的
- OKD 目前運行在 4.8.0-0.okd-2021-10-10-030117 版本
- 目前沒有設定資源配額,系統仍有大量免費資源
我假設缺少一點配置來完成這項作業。但我就是找不到它可能是什么。所以我問:這里有人遇到過同樣的問題嗎?或者您猜猜丟失的部分可能是什么?
有資料遺漏請指出,我會補充。
uj5u.com熱心網友回復:
退一步后,我查看了運行構建的實際 pod。并發現代理的記憶體限制是問題所在。
所以增加限制解決了問題!
我通過修改本地jenkins-values.yaml并更新其中limits的agent:塊部分來做到這一點。
對我來說有點困惑的是,沒有日志條目說明記憶體使用量超過了這一事實。
接下來的想法是,我將通過 Java 選項為測驗步驟設定記憶體限制,以在 pod 超出限制之前殺死 maven 行程。猜猜它在構建中會更透明。
作為旁注:之前已將限制設定為 512Mi,并且已超出約 10 MiB -.-
幸運的是我在這一點上找到了它,而其他運行良好的構建作業只是由于缺乏資源使用(沒想到剛啟動 Hibernate 會超過 512 MiB 標記)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/342371.html
