This is an automated email from the ASF dual-hosted git repository.
wangyang pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new f90eadd40f [feature-#14449] add secret in k8s Task (#14930)
f90eadd40f is described below
commit f90eadd40f4f660d251d7d3c722740d4951741dc
Author: fuchanghai <[email protected]>
AuthorDate: Thu Sep 28 11:06:35 2023 +0800
[feature-#14449] add secret in k8s Task (#14930)
* [feature-#14449] add secret
* [feature-#14449] upgrade UT and rename parameter ```secret```
* [feature-#14449] fix UT
* [feature-#14449] fix UT
* [feature-#14449] improvement
* [feature-#14449] format
---------
Co-authored-by: fuchanghai <‘[email protected]’>
---
.../plugin/task/api/k8s/K8sTaskMainParameters.java | 1 +
.../plugin/task/api/k8s/impl/K8sTaskExecutor.java | 15 ++++++++++-----
.../plugin/task/api/parameters/K8sTaskParameters.java | 1 +
.../plugin/task/api/k8s/K8sTaskExecutorTest.java | 3 ++-
.../apache/dolphinscheduler/plugin/task/k8s/K8sTask.java | 1 +
.../dolphinscheduler/plugin/task/k8s/K8sTaskTest.java | 7 +++++--
dolphinscheduler-ui/src/locales/en_US/project.ts | 2 ++
dolphinscheduler-ui/src/locales/zh_CN/project.ts | 2 ++
.../views/projects/task/components/node/fields/use-k8s.ts | 8 ++++++++
.../views/projects/task/components/node/format-data.ts | 1 +
.../src/views/projects/task/components/node/types.ts | 1 +
11 files changed, 34 insertions(+), 8 deletions(-)
diff --git
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/k8s/K8sTaskMainParameters.java
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/k8s/K8sTaskMainParameters.java
index d70cf11a22..a6c4703f10 100644
---
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/k8s/K8sTaskMainParameters.java
+++
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/k8s/K8sTaskMainParameters.java
@@ -32,6 +32,7 @@ public class K8sTaskMainParameters {
private String image;
private String command;
private String args;
+ private String pullSecret;
private String namespaceName;
private String clusterName;
private String imagePullPolicy;
diff --git
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/k8s/impl/K8sTaskExecutor.java
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/k8s/impl/K8sTaskExecutor.java
index ae78c66459..f973f5bd1b 100644
---
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/k8s/impl/K8sTaskExecutor.java
+++
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/k8s/impl/K8sTaskExecutor.java
@@ -17,6 +17,7 @@
package org.apache.dolphinscheduler.plugin.task.api.k8s.impl;
+import static java.util.Collections.singletonList;
import static
org.apache.dolphinscheduler.plugin.task.api.TaskConstants.API_VERSION;
import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.CPU;
import static
org.apache.dolphinscheduler.plugin.task.api.TaskConstants.EXIT_CODE_FAILURE;
@@ -67,6 +68,7 @@ import org.slf4j.Logger;
import io.fabric8.kubernetes.api.model.Affinity;
import io.fabric8.kubernetes.api.model.AffinityBuilder;
import io.fabric8.kubernetes.api.model.EnvVar;
+import io.fabric8.kubernetes.api.model.LocalObjectReference;
import io.fabric8.kubernetes.api.model.NodeSelectorTerm;
import io.fabric8.kubernetes.api.model.Quantity;
import io.fabric8.kubernetes.api.model.ResourceRequirements;
@@ -91,10 +93,11 @@ public class K8sTaskExecutor extends
AbstractK8sTaskExecutor {
super(logger, taskRequest);
}
- public Job buildK8sJob(K8sTaskMainParameters k8STaskMainParameters) {
+ public void buildK8sJob(K8sTaskMainParameters k8STaskMainParameters) {
String taskInstanceId =
String.valueOf(taskRequest.getTaskInstanceId());
String taskName = taskRequest.getTaskName().toLowerCase(Locale.ROOT);
String image = k8STaskMainParameters.getImage();
+ String pullSecret = k8STaskMainParameters.getPullSecret();
String namespaceName = k8STaskMainParameters.getNamespaceName();
String imagePullPolicy = k8STaskMainParameters.getImagePullPolicy();
Map<String, String> otherParams = k8STaskMainParameters.getParamsMap();
@@ -155,7 +158,7 @@ public class K8sTaskExecutor extends
AbstractK8sTaskExecutor {
.endRequiredDuringSchedulingIgnoredDuringExecution()
.endNodeAffinity().build();
- JobBuilder jobBuilder = new JobBuilder()
+ job = new JobBuilder()
.withApiVersion(API_VERSION)
.withNewMetadata()
.withName(k8sJobName)
@@ -178,14 +181,16 @@ public class K8sTaskExecutor extends
AbstractK8sTaskExecutor {
.withResources(new ResourceRequirements(limitRes, reqRes))
.withEnv(envVars)
.endContainer()
+ .withImagePullSecrets(
+ StringUtils.isEmpty(pullSecret) ? null :
singletonList(new LocalObjectReference(pullSecret)))
.withRestartPolicy(RESTART_POLICY)
.withAffinity(affinity)
.endSpec()
.endTemplate()
.withBackoffLimit(retryNum)
- .endSpec();
+ .endSpec()
+ .build();
- return jobBuilder.build();
}
public void registerBatchJobWatcher(Job job, String taskInstanceId,
TaskResponse taskResponse) {
@@ -322,7 +327,7 @@ public class K8sTaskExecutor extends
AbstractK8sTaskExecutor {
JSONUtils.parseObject(k8sParameterStr,
K8sTaskMainParameters.class);
try {
log.info("[K8sJobExecutor-{}-{}] start to submit job", taskName,
taskInstanceId);
- job = buildK8sJob(k8STaskMainParameters);
+ buildK8sJob(k8STaskMainParameters);
stopJobOnK8s(k8sParameterStr);
String namespaceName = k8STaskMainParameters.getNamespaceName();
k8sUtils.createJob(namespaceName, job);
diff --git
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/K8sTaskParameters.java
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/K8sTaskParameters.java
index fd738fe736..ba9f6498af 100644
---
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/K8sTaskParameters.java
+++
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/K8sTaskParameters.java
@@ -38,6 +38,7 @@ public class K8sTaskParameters extends AbstractParameters {
private String namespace;
private String command;
private String args;
+ private String pullSecret;
private String imagePullPolicy;
private double minCpuCores;
private double minMemorySpace;
diff --git
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/test/java/org/apache/dolphinscheduler/plugin/task/api/k8s/K8sTaskExecutorTest.java
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/test/java/org/apache/dolphinscheduler/plugin/task/api/k8s/K8sTaskExecutorTest.java
index 46b226268c..fac9a6292f 100644
---
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/test/java/org/apache/dolphinscheduler/plugin/task/api/k8s/K8sTaskExecutorTest.java
+++
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/test/java/org/apache/dolphinscheduler/plugin/task/api/k8s/K8sTaskExecutorTest.java
@@ -81,7 +81,8 @@ public class K8sTaskExecutorTest {
k8sTaskMainParameters.setCommand("[\"perl\" ,\"-Mbignum=bpi\",
\"-wle\", \"print bpi(2000)\"]");
k8sTaskMainParameters.setLabelMap(labelMap);
k8sTaskMainParameters.setNodeSelectorRequirements(Arrays.asList(requirement));
- job = k8sTaskExecutor.buildK8sJob(k8sTaskMainParameters);
+ k8sTaskExecutor.buildK8sJob(k8sTaskMainParameters);
+ job = k8sTaskExecutor.getJob();
}
@Test
public void testGetK8sJobStatusNormal() {
diff --git
a/dolphinscheduler-task-plugin/dolphinscheduler-task-k8s/src/main/java/org/apache/dolphinscheduler/plugin/task/k8s/K8sTask.java
b/dolphinscheduler-task-plugin/dolphinscheduler-task-k8s/src/main/java/org/apache/dolphinscheduler/plugin/task/k8s/K8sTask.java
index 9c5e249b06..39ce7343d8 100644
---
a/dolphinscheduler-task-plugin/dolphinscheduler-task-k8s/src/main/java/org/apache/dolphinscheduler/plugin/task/k8s/K8sTask.java
+++
b/dolphinscheduler-task-plugin/dolphinscheduler-task-k8s/src/main/java/org/apache/dolphinscheduler/plugin/task/k8s/K8sTask.java
@@ -87,6 +87,7 @@ public class K8sTask extends AbstractK8sTask {
String namespaceName = namespace.get(NAMESPACE_NAME);
String clusterName = namespace.get(CLUSTER);
k8sTaskMainParameters.setImage(k8sTaskParameters.getImage());
+ k8sTaskMainParameters.setPullSecret(k8sTaskParameters.getPullSecret());
k8sTaskMainParameters.setNamespaceName(namespaceName);
k8sTaskMainParameters.setClusterName(clusterName);
k8sTaskMainParameters.setMinCpuCores(k8sTaskParameters.getMinCpuCores());
diff --git
a/dolphinscheduler-task-plugin/dolphinscheduler-task-k8s/src/test/java/org/apache/dolphinscheduler/plugin/task/k8s/K8sTaskTest.java
b/dolphinscheduler-task-plugin/dolphinscheduler-task-k8s/src/test/java/org/apache/dolphinscheduler/plugin/task/k8s/K8sTaskTest.java
index 93b6f85e5a..3416d0288c 100644
---
a/dolphinscheduler-task-plugin/dolphinscheduler-task-k8s/src/test/java/org/apache/dolphinscheduler/plugin/task/k8s/K8sTaskTest.java
+++
b/dolphinscheduler-task-plugin/dolphinscheduler-task-k8s/src/test/java/org/apache/dolphinscheduler/plugin/task/k8s/K8sTaskTest.java
@@ -46,6 +46,8 @@ public class K8sTaskTest {
private final String image = "ds-dev";
private final String imagePullPolicy = "IfNotPresent";
+ private final String pullSecret = "ds-secret";
+
private final String namespace =
"{\"name\":\"default\",\"cluster\":\"lab\"}";
private final double minCpuCores = 2;
@@ -74,6 +76,7 @@ public class K8sTaskTest {
k8sTaskParameters.setArgs(args);
k8sTaskParameters.setCustomizedLabels(labels);
k8sTaskParameters.setNodeSelectors(nodeSelectorExpressions);
+ k8sTaskParameters.setPullSecret(pullSecret);
TaskExecutionContext taskRequest = new TaskExecutionContext();
taskRequest.setTaskInstanceId(taskInstanceId);
taskRequest.setTaskName(taskName);
@@ -99,7 +102,7 @@ public class K8sTaskTest {
@Test
public void testBuildCommandNormal() {
String expectedStr =
- "{\"image\":\"ds-dev\",\"command\":\"[\\\"/bin/bash\\\",
\\\"-c\\\"]\",\"args\":\"[\\\"echo hello
world\\\"]\",\"namespaceName\":\"default\",\"clusterName\":\"lab\",\"imagePullPolicy\":\"IfNotPresent\",\"minCpuCores\":2.0,\"minMemorySpace\":10.0,\"paramsMap\":{\"day\":\"20220507\"},\"labelMap\":{\"test\":\"1234\"},\"nodeSelectorRequirements\":[{\"key\":\"node-label\",\"operator\":\"In\",\"values\":[\"1234\",\"12345\"]}]}";
+ "{\"image\":\"ds-dev\",\"command\":\"[\\\"/bin/bash\\\",
\\\"-c\\\"]\",\"args\":\"[\\\"echo hello
world\\\"]\",\"pullSecret\":\"ds-secret\",\"namespaceName\":\"default\",\"clusterName\":\"lab\",\"imagePullPolicy\":\"IfNotPresent\",\"minCpuCores\":2.0,\"minMemorySpace\":10.0,\"paramsMap\":{\"day\":\"20220507\"},\"labelMap\":{\"test\":\"1234\"},\"nodeSelectorRequirements\":[{\"key\":\"node-label\",\"operator\":\"In\",\"values\":[\"1234\",\"12345\"]}]}";
String commandStr = k8sTask.buildCommand();
Assertions.assertEquals(expectedStr, commandStr);
}
@@ -107,7 +110,7 @@ public class K8sTaskTest {
@Test
public void testGetParametersNormal() {
String expectedStr =
- "K8sTaskParameters(image=ds-dev,
namespace={\"name\":\"default\",\"cluster\":\"lab\"}, command=[\"/bin/bash\",
\"-c\"], args=[\"echo hello world\"], imagePullPolicy=IfNotPresent,
minCpuCores=2.0, minMemorySpace=10.0, customizedLabels=[Label(label=test,
value=1234)], nodeSelectors=[NodeSelectorExpression(key=node-label,
operator=In, values=1234,12345)])";
+ "K8sTaskParameters(image=ds-dev,
namespace={\"name\":\"default\",\"cluster\":\"lab\"}, command=[\"/bin/bash\",
\"-c\"], args=[\"echo hello world\"], pullSecret=ds-secret,
imagePullPolicy=IfNotPresent, minCpuCores=2.0, minMemorySpace=10.0,
customizedLabels=[Label(label=test, value=1234)],
nodeSelectors=[NodeSelectorExpression(key=node-label, operator=In,
values=1234,12345)])";
String result = k8sTask.getParameters().toString();
Assertions.assertEquals(expectedStr, result);
}
diff --git a/dolphinscheduler-ui/src/locales/en_US/project.ts
b/dolphinscheduler-ui/src/locales/en_US/project.ts
index 1f146b6772..ee33434ad2 100644
--- a/dolphinscheduler-ui/src/locales/en_US/project.ts
+++ b/dolphinscheduler-ui/src/locales/en_US/project.ts
@@ -397,6 +397,8 @@ export default {
image_tips: 'Please enter image',
image_pull_policy: 'Image pull policy',
image_pull_policy_tips: 'Please select a image pull policy (required)',
+ pull_secret: 'Pull secret',
+ pull_secret_tips: 'Please enter pull secret',
command: 'Command',
command_tips:
'Please enter the container execution command, for example:
["printenv"]',
diff --git a/dolphinscheduler-ui/src/locales/zh_CN/project.ts
b/dolphinscheduler-ui/src/locales/zh_CN/project.ts
index 16f205accf..1470c6154e 100644
--- a/dolphinscheduler-ui/src/locales/zh_CN/project.ts
+++ b/dolphinscheduler-ui/src/locales/zh_CN/project.ts
@@ -394,6 +394,8 @@ export default {
image_tips: '请输入镜像',
image_pull_policy: '镜像拉取策略',
image_pull_policy_tips: '请选择镜像拉取策略(必选)',
+ pull_secret: '仓库密钥',
+ pull_secret_tips: '请输入仓库密钥',
command: '容器执行命令',
command_tips: '请输入容器执行命令,例如:["printenv"]',
args: '执行命令参数',
diff --git
a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-k8s.ts
b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-k8s.ts
index 2002dcb260..66be87dfeb 100644
---
a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-k8s.ts
+++
b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-k8s.ts
@@ -79,6 +79,14 @@ export function useK8s(model: { [field: string]: any }):
IJsonItem[] {
},
value: 'IfNotPresent'
},
+ {
+ type: 'input',
+ field: 'pullSecret',
+ name: t('project.node.pull_secret'),
+ props: {
+ placeholder: t('project.node.pull_secret_tips')
+ }
+ },
{
type: 'input',
field: 'command',
diff --git
a/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts
b/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts
index 2d03ea45d7..31398f98e6 100644
--- a/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts
+++ b/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts
@@ -359,6 +359,7 @@ export function formatParams(data: INodeData): {
taskParams.args = data.args
taskParams.customizedLabels = data.customizedLabels
taskParams.nodeSelectors = data.nodeSelectors
+ taskParams.pullSecret = data.pullSecret
}
if (data.taskType === 'JUPYTER') {
diff --git
a/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts
b/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts
index 3f12a9e245..86eec11682 100644
--- a/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts
+++ b/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts
@@ -378,6 +378,7 @@ interface ITaskParams {
minMemorySpace?: string
image?: string
imagePullPolicy?: string
+ pullSecret?: string
command?: string
args?: string
customizedLabels?: ILabel[]