Skip to content

Commit 861330e

Browse files
committed
Release 1.2.0 for joylive-injector
1 parent 75da0c1 commit 861330e

File tree

6 files changed

+366
-3
lines changed

6 files changed

+366
-3
lines changed

charts/joylive-injector/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ type: application
1515
# This is the chart version. This version number should be incremented each time you make changes
1616
# to the chart and its templates, including the app version.
1717
# Versions are expected to follow Semantic Versioning (https://semver.org/)
18-
version: 1.1.0
18+
version: 1.2.0
1919

2020
keywords:
2121
- joylive
@@ -26,4 +26,4 @@ home: https://github.com/jd-opensource/joylive-injector
2626
# incremented each time you make changes to the application. Versions are not expected to
2727
# follow Semantic Versioning. They should reflect the version the application is using.
2828
# It is recommended to use it with quotes.
29-
appVersion: "1.1.0"
29+
appVersion: "1.2.0"
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# joylive-injector
2+
3+
[![GitHub repo](https://img.shields.io/badge/GitHub-repo-blue)](https://github.com/jd-opensource/joylive-injector)
4+
[![GitHub release](https://img.shields.io/github/release/jd-opensource/joylive-injector.svg)](https://github.com/jd-opensource/joylive-injector/releases)
5+
[![Slack Status](https://img.shields.io/badge/slack-join_chat-white.svg?logo=slack&style=social)](https://joylivehq.slack.com)
6+
7+
[English](./README.md) | 简体中文
8+
9+
## 介绍
10+
这是一个针对kubernetes的动态准入控制webhook,它可以用于修改`kubernete`资源。
11+
此程序监视`deployments`的CREATE、UPDATE、DELETE事件和`pods`的CREATE事件,并为`POD`添加initContainer、默认增加环境变量`JAVA_TOOL_OPTIONS`、挂载configmap、修改主容器的卷装载等操作。
12+
13+
## 特性
14+
- 支持自动将`joylive-agent`注入Java应用的Pod。
15+
- 支持多版本`joylive-agent`与对应配置管理。
16+
- 支持注入指定版本`joylive-agent`及对应配置。
17+
18+
## 使用方式
19+
20+
因证书签名已按照命名空间为`joylive`预生成,所以须指定安装到对应命名空间。 执行命令:
21+
```bash
22+
helm repo add joylive https://jd-opensource.github.io/joylive-helm-charts
23+
kubectl create namespace joylive
24+
helm install joylive-injector joylive/joylive-injector -n joylive
25+
```

charts/joylive-injector/README.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# joylive-injector
2+
3+
[![GitHub repo](https://img.shields.io/badge/GitHub-repo-blue)](https://github.com/jd-opensource/joylive-injector)
4+
[![GitHub release](https://img.shields.io/github/release/jd-opensource/joylive-injector.svg)](https://github.com/jd-opensource/joylive-injector/releases)
5+
[![Slack Status](https://img.shields.io/badge/slack-join_chat-white.svg?logo=slack&style=social)](https://joylivehq.slack.com)
6+
7+
English | [简体中文](./README-zh.md)
8+
9+
## Description
10+
This is a dynamic admission control webhook for kubernetes, it can be used to mutate kubernetes resources.
11+
This program monitors the `CREATE`, `UPDATE`, `DELETE` events for `deployments` and the `CREATE` events for `pods` and adds the initContainer for `Pod` , adds the environment variable `JAVA_TOOL_OPTIONS` by default, mounts the configmap, modifies the volume load for the main container, and so on.
12+
13+
## Features
14+
- Supports automatically injecting `joylive-agent` into Pods of Java applications.
15+
- Supports multi-version `joylive-agent` and corresponding configuration management.
16+
- Support injection of specified version `joylive-agent` and corresponding configuration.
17+
18+
## Used
19+
Since the certificate signature has been pre-generated according to the namespace `joylive`, it is necessary to specify installation to the corresponding namespace. Execute the command:
20+
```bash
21+
helm repo add joylive https://jd-opensource.github.io/joylive-helm-charts
22+
kubectl create namespace joylive
23+
helm install joylive-injector joylive/joylive-injector -n joylive
24+
```

charts/joylive-injector/values.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ image:
1414
repository: ghcr.m.daocloud.io/jd-opensource/joylive-injector
1515
pullPolicy: Always
1616
# Overrides the image tag whose default is the chart appVersion.
17-
tag: latest
17+
tag: v1.2.0
1818

1919
configMapName: joylive-injector-config
2020

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: injector.joylive.io/v1
2+
kind: AgentVersion
3+
metadata:
4+
labels:
5+
app.kubernetes.io/name: joylive-injector
6+
app.kubernetes.io/managed-by: joylive-injector
7+
name: agentversion-1.0.0-e979a2d-amd64
8+
namespace: joylive
9+
spec:
10+
version: 1.0.0-e979a2d-AMD64
11+
configMapName: joylive-agent-config-1.0.0-e979a2d-amd64
12+
enable: true
Lines changed: 302 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,302 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: joylive-agent-config-1.0.0-e979a2d-amd64
5+
namespace: joylive
6+
labels:
7+
app.kubernetes.io/name: joylive-injector
8+
app.kubernetes.io/instance: joylive-injector
9+
app: joylive-injector
10+
data:
11+
bootstrap.properties: |
12+
app.name=${APPLICATION_NAME}
13+
app.service.name=${APPLICATION_SERVICE_NAME:${APPLICATION_NAME}}
14+
app.service.namespace=${APPLICATION_SERVICE_NAMESPACE:default}
15+
app.service.group=${APPLICATION_SERVICE_GROUP:default}
16+
app.service.gateway=${APPLICATION_SERVICE_GATEWAY:NONE}
17+
app.location.region=${APPLICATION_LOCATION_REGION}
18+
app.location.zone=${APPLICATION_LOCATION_ZONE}
19+
app.location.liveSpaceId=${APPLICATION_LOCATION_LIVESPACE_ID:${CONFIG_LIVESPACE_ID}}
20+
app.location.unitRuleId=${APPLICATION_LOCATION_UNIT_RULE_ID}
21+
app.location.unit=${APPLICATION_LOCATION_UNIT}
22+
app.location.cell=${APPLICATION_LOCATION_CELL}
23+
app.location.laneSpaceId=${APPLICATION_LOCATION_LANESPACE_ID}
24+
app.location.lane=${APPLICATION_LOCATION_LANE}
25+
agent.enhance.shutdownOnError=${CONFIG_ENHANCE_SHUTDOWN_ON_ERROR:true}
26+
classloader.contextLoaderEnabled=${CLASSLOADER_CONTEXT_LOADER_ENABLED:true}
27+
classloader.core.configExtensions=yaml,yml,xml,json,properties
28+
#classloader.core.parentResources=
29+
classloader.core.parentPrefixes=com.jd.live.agent.bootstrap,java.,javax.,sun.
30+
#classloader.core.isolationResources=
31+
classloader.core.isolationPrefixes=META-INF/services/com.jd.live.agent
32+
#classloader.coreImpl.parentResources=
33+
classloader.coreImpl.parentPrefixes=com.jd.live.agent.bootstrap.,com.jd.live.agent.core.,com.jd.live.agent.governance.,java.,javax.,sun.
34+
classloader.coreImpl.isolationResources=
35+
classloader.coreImpl.isolationPrefixes=
36+
#classloader.plugin.parentResources=
37+
classloader.plugin.parentPrefixes=com.jd.live.agent.bootstrap.,com.jd.live.agent.core.,com.jd.live.agent.governance.,java.,javax.,sun.
38+
#classloader.plugin.isolationResources=
39+
#classloader.plugin.isolationPrefixes=
40+
config.yaml: |
41+
agent:
42+
enhance:
43+
javaVersion: '[,1.8);[1.8.0_60,]'
44+
retransformEnabled: true
45+
loggerEnabled: true
46+
exporterEnabled: false
47+
excludePrefixes: null
48+
excludeTypes: null
49+
excludeInterfaces: null
50+
excludeClassLoaders:
51+
- com.jd.jr.sgm.agent.loader.ClientLibClassLoader
52+
- com.jd.pfinder.profiler.load.InterceptorClassLoader
53+
- com.jd.pfinder.profiler.utils.ModuleClassLoader
54+
- com.jd.pfinder.profiler.load.ModuleInterceptorClassLoader
55+
- io.opentelemetry.javaagent.bootstrap.AgentClassLoader
56+
- org.apache.skywalking.apm.agent.core.plugin.loader.AgentClassLoader
57+
- org.apache.skywalking.apm.agent.core.plugin.loader.PluginClassLoader
58+
- com.navercorp.pinpoint.bootstrap.classloader.AgentClassLoader
59+
- com.navercorp.pinpoint.bootstrap.classloader.PluginClassLoader
60+
- com.huaweicloud.sermant.core.classloader.FrameworkClassLoader
61+
- com.huaweicloud.sermant.core.plugin.classloader.PluginClassLoader
62+
- com.huaweicloud.sermant.core.plugin.classloader.ServiceClassLoader
63+
- com.alipay.sofa.ark.container.service.classloader.PluginClassLoader
64+
publisher:
65+
configs:
66+
traffic:
67+
capacity: 20000
68+
plugin:
69+
systems:
70+
- system
71+
statics:
72+
- dubbo
73+
- grpc
74+
- httpclient
75+
- jdk
76+
- jmq
77+
- jsf
78+
- kafka
79+
- okhttp
80+
- netty
81+
- phevos
82+
- rocketmq
83+
- shenyu
84+
- sofarpc
85+
- spring
86+
- mariadb
87+
- mongodb
88+
- opengauss
89+
- postgresql
90+
- redis
91+
disables: null
92+
dynamics: null
93+
passives: null
94+
profiles:
95+
test: null
96+
production: null
97+
profile: null
98+
sync:
99+
liveSpace:
100+
type: multilive # [file,multilive]
101+
url: ${CONFIG_LIVE_SPACE_API_URL:http://11.159.56.136:30305/v1}
102+
#spacesUrl: ${CONFIG_LIVE_SPACE_API_URL}/workspaces
103+
#spaceUrl: ${CONFIG_LIVE_SPACE_API_URL}/workspaces/${space_id}/version/${space_version}
104+
#serviceUrl: ${CONFIG_LIVE_SPACE_API_URL}/services/${service_name}/version/${service_version}
105+
service: true
106+
interval: 5000
107+
timeout: 3000
108+
initialTimeout: 20000
109+
delay: 0
110+
fault: 5000
111+
headers: ${CONFIG_LIVE_SPACE_API_HEADERS}
112+
laneSpace:
113+
type: file
114+
microservice:
115+
enabled: true
116+
type: file
117+
url: ${CONFIG_SERVICE_API_URL:http://api.jmsf.local:8080/v1}
118+
headers: ${CONFIG_SERVICE_API_HEADERS}
119+
watchdog:
120+
enabled: true
121+
delay: 5000
122+
interval: 100
123+
timeout: 5000
124+
switch:
125+
live:
126+
enabled: ${CONFIG_LIVE_ENABLED:true}
127+
dubbo: true
128+
sofarpc: true
129+
jsf: true
130+
spring: true
131+
phevos: true
132+
lane:
133+
enabled: ${CONFIG_LANE_ENABLED:true}
134+
transmission:
135+
enabled: ${CONFIG_TRANSMISSION_ENABLED:true}
136+
threadpool: ${CONFIG_TRANSMISSION_THREADPOOL_ENABLED:true}
137+
registry:
138+
enabled: ${CONFIG_REGISTRY_ENABLED:true}
139+
flowcontrol:
140+
enabled: ${CONFIG_FLOW_CONTROL_ENABLED:true}
141+
loadbalance: ${CONFIG_LOADBALANCE_ENABLED:true}
142+
sticky: ${CONFIG_STICKY_ENABLED:false}
143+
limit: ${CONFIG_LIMIT_ENABLED:true}
144+
localhost: ${CONFIG_LOCALHOST_ENABLED:false}
145+
virtual: ${CONFIG_VIRTUAL_ENABLED:false}
146+
protect:
147+
enabled: ${CONFIG_PROTECT_ENABLED:false}
148+
mariadb: true
149+
postgresql: true
150+
opengauss: true
151+
mongodb: true
152+
redis: false
153+
classloader:
154+
enabled: ${CONFIG_CLASSLOADER_ENABLED:true}
155+
springboot: true
156+
counter:
157+
enabled: true
158+
governance:
159+
service:
160+
warmups: ${CONFIG_WARMUP_SERVICES:}
161+
excludes:
162+
- org.apache.dubbo.metadata.MetadataService
163+
initializeTimeout: ${CONFIG_POLICY_INITIALIZE_TIMEOUT:10000}
164+
router:
165+
virtual: ${CONFIG_VIRTUAL_SIZE:500}
166+
phevos:
167+
groupExpression: ${unit}-${cell}-${group}
168+
transmission:
169+
thread:
170+
excludeExecutors:
171+
- org.apache.dubbo.common.threadpool.ThreadlessExecutor
172+
- org.apache.tomcat.util.threads.ThreadPoolExecutor
173+
- org.apache.tomcat.util.threads.ScheduledThreadPoolExecutor
174+
- org.apache.tomcat.util.threads.InlineExecutorService
175+
- javax.management.NotificationBroadcasterSupport$1
176+
- io.grpc.stub.ClientCalls.ThreadlessExecutor
177+
- io.grpc.SynchronizationContext
178+
- io.netty.channel.MultithreadEventLoopGroup
179+
- io.netty.channel.nio.NioEventLoop
180+
- io.netty.channel.SingleThreadEventLoop
181+
- io.netty.channel.kqueue.KQueueEventLoopGroup
182+
- io.netty.channel.kqueue.KQueueEventLoop
183+
- io.netty.util.concurrent.MultithreadEventExecutorGroup
184+
- io.netty.util.concurrent.AbstractEventExecutorGroup
185+
- io.netty.util.concurrent.ThreadPerTaskExecutor
186+
- io.netty.util.concurrent.GlobalEventExecutor
187+
- io.netty.util.concurrent.AbstractScheduledEventExecutor
188+
- io.netty.util.concurrent.AbstractEventExecutor
189+
- io.netty.util.concurrent.DefaultEventExecutor
190+
- io.netty.util.concurrent.SingleThreadEventExecutor
191+
- io.netty.util.internal.ThreadExecutorMap$1
192+
- reactor.core.scheduler.BoundedElasticScheduler$BoundedScheduledExecutorService
193+
- reactor.netty.resources.ColocatedEventLoopGroup
194+
- com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.channel.nio.NioEventLoopGroup
195+
- com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.channel.MultithreadEventLoopGroup
196+
- com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.util.concurrent.MultithreadEventExecutorGroup
197+
- com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.util.concurrent.AbstractEventExecutorGroup
198+
- com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.util.concurrent.ThreadPerTaskExecutor
199+
- com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.util.concurrent.GlobalEventExecutor
200+
- com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.util.concurrent.AbstractScheduledEventExecutor
201+
- com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.util.concurrent.AbstractEventExecutor
202+
- com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.channel.nio.NioEventLoop
203+
- com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.channel.SingleThreadEventLoop
204+
- com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.util.concurrent.SingleThreadEventExecutor
205+
- com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.util.internal.ThreadExecutorMap$1
206+
- com.alibaba.nacos.shaded.io.grpc.internal.ManagedChannelImpl$ExecutorHolder
207+
- com.alibaba.nacos.shaded.io.grpc.internal.ManagedChannelImpl$RestrictedScheduledExecutor
208+
- com.alibaba.nacos.shaded.io.grpc.internal.ManagedChannelImpl$2
209+
- com.alibaba.nacos.shaded.io.grpc.internal.SerializingExecutor
210+
- com.alibaba.nacos.shaded.io.grpc.stub.ClientCalls.ThreadlessExecutor
211+
- com.alibaba.nacos.shaded.io.grpc.SynchronizationContext
212+
- com.alibaba.nacos.shaded.com.google.common.util.concurrent.DirectExecutor
213+
excludeTasks:
214+
- com.alibaba.nacos.shaded.io.grpc.internal.DnsNameResolver.Resolve
215+
- com.alibaba.nacos.client.naming.backups.FailoverReactor$DiskFileWriter
216+
- com.alibaba.nacos.client.naming.backups.FailoverReactor.SwitchRefresher
217+
- com.alibaba.nacos.client.naming.remote.gprc.redo.RedoScheduledTask
218+
- com.alibaba.nacos.shaded.io.grpc.internal.DnsNameResolver$Resolve
219+
- com.alibaba.nacos.shaded.io.grpc.internal.DelayedClientTransport$5
220+
- com.alibaba.nacos.shaded.io.grpc.internal.SerializingExecutor
221+
- com.alibaba.nacos.shaded.io.grpc.internal.LogExceptionRunnable
222+
- com.jd.live.agent.core.thread.NamedThreadFactory
223+
excludeTaskPrefixes:
224+
- reactor.core.scheduler.BoundedElasticScheduler$$Lambda
225+
- org.springframework.cloud.commons.util.InetUtils$$Lambda$
226+
- com.alibaba.nacos.client.auth.ram.identify.CredentialWatcher$
227+
- com.alibaba.nacos.client.naming.backups.FailoverReactor$$Lambda$
228+
- com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate$$Lambda$
229+
- com.alibaba.nacos.common.remote.client.RpcClient$$Lambda$
230+
- com.alibaba.nacos.common.utils.ThreadFactoryBuilder$$Lambda$
231+
- sun.rmi.transport.tcp.TCPTransport$
232+
- sun.rmi.transport.DGCImpl$
233+
- sun.rmi.transport.DGCAckHandler$
234+
counter:
235+
gateway: true
236+
service: true
237+
readerInterval: 1000
238+
exporter:
239+
type: ${CONFIG_COUNTER_EXPORTER_TYPE:logging}
240+
endpoint: ${CONFIG_COUNTER_EXPORTER_ENDPOINT:}
241+
timeout: 5000
242+
243+
logback.xml: |
244+
<?xml version="1.0" encoding="UTF-8"?>
245+
<configuration scan="true" debug="false">
246+
<statusListener class="com.jd.live.agent.shaded.ch.qos.logback.core.status.NopStatusListener"/>
247+
248+
<conversionRule conversionWord="clr"
249+
converterClass="com.jd.live.agent.implement.logger.slf4j.logback.ColorConverter"/>
250+
<conversionRule conversionWord="wex"
251+
converterClass="com.jd.live.agent.implement.logger.slf4j.logback.WhitespaceThrowableProxyConverter"/>
252+
<conversionRule conversionWord="wEx"
253+
converterClass="com.jd.live.agent.implement.logger.slf4j.logback.ExtendedWhitespaceThrowableProxyConverter"/>
254+
255+
<property name="LIVE_LOG_CONSOLE_PATTERN"
256+
value="${LIVE_LOG_CONSOLE_PATTERN:-%clr(%d{${LIVE_LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LIVE_LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){red} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LIVE_LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
257+
<property name="LIVE_LOG_CONSOLE_CHARSET" value="${LIVE_LOG_CONSOLE_CHARSET:-${file.encoding:-UTF-8}}"/>
258+
<property name="LIVE_LOG_FILE_PATTERN"
259+
value="${LIVE_LOG_FILE_PATTERN:-%d{${LIVE_LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LIVE_LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LIVE_LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
260+
<property name="LIVE_LOG_FILE_CHARSET" value="${LIVE_LOG_FILE_CHARSET:-${file.encoding:-UTF-8}}"/>
261+
262+
<property scope="context" name="logger.dir" value="${LIVE_LOG_DIR:-./logs/live-agent/}"/>
263+
<property scope="context" name="logger.application" value="${LIVE_APP_NAME:-live-agent}"/>
264+
<property scope="context" name="logger.level" value="${LIVE_LOG_LEVEL:-info}"/>
265+
<property scope="context" name="logger.totalSize" value="${LIVE_LOG_TOTAL_SIZE:-20GB}"/>
266+
<property scope="context" name="logger.maxHistory" value="${LIVE_LOG_MAX_HISTORY:-10}"/>
267+
<property scope="context" name="logger.maxFileSize" value="${LIVE_LOG_MAX_SIZE:-10MB}"/>
268+
<property scope="context" name="logger.cleanHistoryOnStart" value="${LIVE_LOG_CLEAN_HISTORY_ONSTART:-true}"/>
269+
270+
<appender name="CONSOLE_APPENDER" class="com.jd.live.agent.shaded.ch.qos.logback.core.ConsoleAppender">
271+
<encoder>
272+
<pattern>
273+
${LIVE_LOG_CONSOLE_PATTERN}
274+
</pattern>
275+
</encoder>
276+
</appender>
277+
278+
<appender name="ROLLING_APPENDER" class="com.jd.live.agent.shaded.ch.qos.logback.core.rolling.RollingFileAppender">
279+
<rollingPolicy class="com.jd.live.agent.shaded.ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
280+
<fileNamePattern>${logger.dir}/%d{yyyy-MM-dd}/${logger.application}-%i.log</fileNamePattern>
281+
<maxHistory>${logger.maxHistory}</maxHistory>
282+
<maxFileSize>${logger.maxFileSize}</maxFileSize>
283+
<totalSizeCap>${logger.totalSize}</totalSizeCap>
284+
<cleanHistoryOnStart>${logger.cleanHistoryOnStart}</cleanHistoryOnStart>
285+
</rollingPolicy>
286+
<filter class="com.jd.live.agent.shaded.ch.qos.logback.classic.filter.ThresholdFilter">
287+
<level>INFO</level>
288+
</filter>
289+
<encoder>
290+
<pattern>
291+
${LIVE_LOG_FILE_PATTERN}
292+
</pattern>
293+
</encoder>
294+
</appender>
295+
296+
<root>
297+
<level value="${logger.level}"/>
298+
<appender-ref ref="CONSOLE_APPENDER"/>
299+
<appender-ref ref="ROLLING_APPENDER"/>
300+
</root>
301+
302+
</configuration>

0 commit comments

Comments
 (0)