Skip to content

Commit cdc42d1

Browse files
liguifa李贵发
andauthored
[feature][dinky-gateway] Add an option in Flink on Kubernetes to cont… (#4458)
Co-authored-by: 李贵发 <guifa.li@baishan.com>
1 parent 8cd99aa commit cdc42d1

6 files changed

Lines changed: 41 additions & 16 deletions

File tree

dinky-common/src/main/java/org/dinky/data/enums/Status.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,10 @@ public enum Status {
363363

364364
SYS_ENV_SETTINGS_DIFF_MINUTE_MAX_SEND_COUNT(120, "sys.env.settings.diffMinuteMaxSendCount"),
365365
SYS_ENV_SETTINGS_DIFF_MINUTE_MAX_SEND_COUNT_NOTE(121, "sys.env.settings.diffMinuteMaxSendCount.note"),
366+
367+
SYS_ENV_SETTINGS_IS_OWNER_REFERENCE(122, "sys.env.settings.isOwnerReference"),
368+
SYS_ENV_SETTINGS_IS_OWNER_REFERENCE_NOTE(123, "sys.env.settings.isOwnerReference.note"),
369+
366370
SYS_ENV_SETTINGS_MAX_RETAIN_DAYS(1171, "sys.env.settings.maxRetainDays"),
367371
SYS_ENV_SETTINGS_MAX_RETAIN_DAYS_NOTE(1172, "sys.env.settings.maxRetainDays.note"),
368372
SYS_ENV_SETTINGS_MAX_RETAIN_COUNT(1173, "sys.env.settings.maxRetainCount"),

dinky-common/src/main/java/org/dinky/data/model/SystemConfiguration.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,10 @@ public static Configuration.OptionBuilder key(Status status) {
341341
.stringType()
342342
.defaultValue("SuperAdmin")
343343
.note(Status.SYS_APPROVAL_SETTINGS_TASK_REVIEWER_ROLES_NOTE);
344+
private final Configuration<Boolean> isOwnerReference = key(Status.SYS_ENV_SETTINGS_IS_OWNER_REFERENCE)
345+
.booleanType()
346+
.defaultValue(true)
347+
.note(Status.SYS_ENV_SETTINGS_IS_OWNER_REFERENCE_NOTE);
344348

345349
/**
346350
* Initialize after spring bean startup
@@ -483,4 +487,8 @@ public Set<String> getReviewerRoles() {
483487
.map(String::trim)
484488
.collect(Collectors.toSet());
485489
}
490+
491+
public Boolean isOwnerReference() {
492+
return isOwnerReference.getValue();
493+
}
486494
}

dinky-common/src/main/resources/i18n/messages_en_US.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,8 @@ sys.env.settings.jobResendDiffSecond=Alert anti-resend interval
196196
sys.env.settings.jobResendDiffSecond.note=During this interval, when the Alert information sent reaches the configured value of [Maximum number of alarm resend prevention], after reaching the threshold, the Alert information will no longer be sent; unit: seconds
197197
sys.env.settings.diffMinuteMaxSendCount=Maximum number of alarms to prevent resending
198198
sys.env.settings.diffMinuteMaxSendCount.note=This configuration is used to send alarm information N times within the specified interval configured in [Alert Anti-Resend Interval]. After reaching the maximum number set by this configuration, alarm information will no longer be sent. Note: This configuration starts with [Task Instance + Alert Rules] is a dimension, that is: each [task instance + Alert Rules] combination will be calculated separately
199+
sys.env.settings.isOwnerReference=cascade deletion for Kubernetes tasks
200+
sys.env.settings.isOwnerReference.note=When enabled, deleting a parent resource also removes its sub-resources. Deleting a sub-resource is blocked if the parent resource exists.
199201
sys.env.settings.maxRetainDays=Job history max retained days
200202
sys.env.settings.maxRetainDays.note=The maximum number of days for the history of submitted jobs and auto-registered cluster records to be retained will be automatically deleted when they expire
201203
sys.env.settings.maxRetainCount=Job history max retained counts

dinky-common/src/main/resources/i18n/messages_zh_CN.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,8 @@ sys.env.settings.jobResendDiffSecond=告警防重发间隔
196196
sys.env.settings.jobResendDiffSecond.note=在此间隔内,发送告警信息达到 [告警防重发最大条数] 配置的值时,达到阈值后,不再发送告警信息; 单位:秒
197197
sys.env.settings.diffMinuteMaxSendCount=告警防重发最大条数
198198
sys.env.settings.diffMinuteMaxSendCount.note=此配置用于在 [告警防重发间隔] 配置的指定间隔内,发送了 N 次告警信息,达到此配置设置的最大条数后,不再发送告警信息,注意: 此配置以[任务实例+告警策略]为维度,即: 每个[任务实例+告警策略]组合都会单独计算
199+
sys.env.settings.isOwnerReference=k8s任务级联删除
200+
sys.env.settings.isOwnerReference.note=如果此配置设置为 true,删除父资源时会同时删除其关联的子资源;反之,当父资源存在时,删除子资源将被阻止
199201
sys.env.settings.maxRetainDays=作业历史最大保留天数
200202
sys.env.settings.maxRetainDays.note=提交的作业历史与自动注册的集群记录最大保留天数,过期会被自动删除
201203
sys.env.settings.maxRetainCount=作业历史最大保留数量

dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/ingress/DinkyKubernetesIngress.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import static org.dinky.assertion.Asserts.checkNotNull;
2323

24+
import org.dinky.data.model.SystemConfiguration;
2425
import org.dinky.gateway.kubernetes.utils.K8sClientHelper;
2526

2627
import java.util.Map;
@@ -47,13 +48,11 @@ public DinkyKubernetesIngress(K8sClientHelper k8sClientHelper) {
4748

4849
public void configureIngress(String clusterId, String domain, String namespace) {
4950
log.info("Dinky ingress configure ingress for cluster {} in namespace {}", clusterId, namespace);
50-
OwnerReference ownerReference = getOwnerReference(namespace, clusterId);
51-
Ingress ingress = new IngressBuilder()
51+
IngressBuilder ingressBuilder = new IngressBuilder()
5252
.withNewMetadata()
5353
.withName(clusterId)
5454
.addToAnnotations(buildIngressAnnotations(clusterId, namespace))
5555
.addToLabels(buildIngressLabels(clusterId))
56-
.addToOwnerReferences(ownerReference) // Add OwnerReference
5756
.endMetadata()
5857
.withNewSpec()
5958
.addNewRule()
@@ -85,8 +84,15 @@ public void configureIngress(String clusterId, String domain, String namespace)
8584
.endPath()
8685
.endHttp()
8786
.endRule()
88-
.endSpec()
89-
.build();
87+
.endSpec();
88+
if (SystemConfiguration.getInstances().isOwnerReference()) {
89+
OwnerReference ownerReference = getOwnerReference(namespace, clusterId);
90+
ingressBuilder = ingressBuilder
91+
.editOrNewMetadata()
92+
.addToOwnerReferences(ownerReference) // Add OwnerReference
93+
.endMetadata();
94+
}
95+
Ingress ingress = ingressBuilder.build();
9096
try (KubernetesClient kubernetesClient = k8sClientHelper.getKubernetesClient()) {
9197
kubernetesClient.network().v1().ingresses().inNamespace(namespace).create(ingress);
9298
}

dinky-gateway/src/main/java/org/dinky/gateway/kubernetes/utils/K8sClientHelper.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
package org.dinky.gateway.kubernetes.utils;
2121

22+
import org.dinky.data.model.SystemConfiguration;
2223
import org.dinky.gateway.kubernetes.decorate.DinkySqlConfigMapDecorate;
2324
import org.dinky.gateway.kubernetes.watcher.DeploymentStatusWatcher;
2425
import org.dinky.utils.TextUtil;
@@ -125,17 +126,19 @@ public Deployment createDinkyResource() {
125126
Deployment deployment = deploymentRollableScalableResource.get();
126127
List<HasMetadata> resources = getSqlFileDecorate().buildResources();
127128
// set owner reference
128-
OwnerReference deploymentOwnerReference = new OwnerReferenceBuilder()
129-
.withName(deployment.getMetadata().getName())
130-
.withApiVersion(deployment.getApiVersion())
131-
.withUid(deployment.getMetadata().getUid())
132-
.withKind(deployment.getKind())
133-
.withController(true)
134-
.withBlockOwnerDeletion(true)
135-
.build();
136-
137-
resources.forEach(resource ->
138-
resource.getMetadata().setOwnerReferences(Collections.singletonList(deploymentOwnerReference)));
129+
if (SystemConfiguration.getInstances().isOwnerReference()) {
130+
OwnerReference deploymentOwnerReference = new OwnerReferenceBuilder()
131+
.withName(deployment.getMetadata().getName())
132+
.withApiVersion(deployment.getApiVersion())
133+
.withUid(deployment.getMetadata().getUid())
134+
.withKind(deployment.getKind())
135+
.withController(true)
136+
.withBlockOwnerDeletion(true)
137+
.build();
138+
139+
resources.forEach(resource ->
140+
resource.getMetadata().setOwnerReferences(Collections.singletonList(deploymentOwnerReference)));
141+
}
139142
// create resources
140143
resources.forEach(resource -> log.info(Serialization.asYaml(resource)));
141144
deploymentRollableScalableResource.watch(deploymentStatusWatch);

0 commit comments

Comments
 (0)