[BAEL-4968] Article code (#10849)

* [BAEL-4849] Article code

* [BAEL-4968] Article code
This commit is contained in:
psevestre 2021-06-01 00:20:02 -03:00 committed by GitHub
parent 5a555f7cf4
commit 1a590ce245
3 changed files with 163 additions and 0 deletions

View File

@ -17,6 +17,7 @@
<artifactId>client-java</artifactId>
<version>11.0.0</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>

View File

@ -0,0 +1,152 @@
/**
*
*/
package com.baeldung.kubernetes.intro;
import java.util.Collections;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.kubernetes.client.custom.V1Patch;
import io.kubernetes.client.custom.V1Patch.V1PatchAdapter;
import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.apis.BatchV1Api;
import io.kubernetes.client.openapi.apis.CoreV1Api;
import io.kubernetes.client.openapi.models.V1DeleteOptions;
import io.kubernetes.client.openapi.models.V1DeleteOptionsBuilder;
import io.kubernetes.client.openapi.models.V1Job;
import io.kubernetes.client.openapi.models.V1JobBuilder;
import io.kubernetes.client.openapi.models.V1JobSpec;
import io.kubernetes.client.openapi.models.V1JobSpecBuilder;
import io.kubernetes.client.openapi.models.V1ObjectMeta;
import io.kubernetes.client.openapi.models.V1ObjectMetaBuilder;
import io.kubernetes.client.openapi.models.V1Status;
import io.kubernetes.client.util.Config;
import io.kubernetes.client.util.PatchUtils;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
/**
* @author Philippe
*
*/
public class RunJob {
private static Logger log = LoggerFactory.getLogger(RunJob.class);
public static void main(String[] args) throws Exception {
// Create client with logginginterceptor
ApiClient client = Config.defaultClient();
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(message -> log.info(message));
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient newClient = client.getHttpClient()
.newBuilder()
.addInterceptor(interceptor)
.readTimeout(0, TimeUnit.SECONDS)
.build();
client.setHttpClient(newClient);
// Create Job Spec
BatchV1Api api = new BatchV1Api(client);
String ns = "report-jobs";
V1Job body = new V1JobBuilder()
.withNewMetadata()
.withNamespace(ns)
.withName("payroll-report-job")
.endMetadata()
.withNewSpec()
.withCompletions(2)
.withParallelism(1)
.withNewTemplate()
.withNewMetadata()
.addToLabels("name", "payroll-report")
.endMetadata()
.editOrNewSpec()
.addNewContainer()
.withName("main")
.withImage("alpine")
.addNewCommand("/bin/sh")
.addNewArg("-c")
.addNewArg("sleep 10")
.endContainer()
.withRestartPolicy("Never")
.endSpec()
.endTemplate()
.endSpec()
.build();
// Send to K8S
V1Job createdJob = api.createNamespacedJob(ns, body, null, null, null);
log.info("job: uid={}", createdJob.getMetadata().getUid());
// Let's change its parallelism value
V1Job patchedJob = new V1JobBuilder(createdJob)
.withNewMetadata()
.withName(createdJob.getMetadata().getName())
.withNamespace(createdJob.getMetadata().getNamespace())
.endMetadata()
.editSpec()
.withParallelism(2)
.endSpec()
.build();
String patchedJobJSON = client.getJSON().serialize(patchedJob);
V1Patch patch = new V1Patch(patchedJobJSON);
PatchUtils.patch(
V1Job.class,
() -> api.patchNamespacedJobCall(
createdJob.getMetadata().getName(),
createdJob.getMetadata().getNamespace(),
patch,
null,
null,
"acme",
true,
null),
V1Patch.PATCH_FORMAT_APPLY_YAML,
api.getApiClient());
while(!jobCompleted(api,createdJob)) {
log.info("[I75] still running...");
Thread.sleep(1000);
}
V1Status response = api.deleteNamespacedJob(
createdJob.getMetadata().getName(),
createdJob.getMetadata().getNamespace(),
null,
null,
null,
null,
null,
null ) ;
log.info("[I122] response={}", response);
}
private static boolean jobCompleted(BatchV1Api api, V1Job createdJob) throws Exception {
V1Job job = api.readNamespacedJob(
createdJob.getMetadata().getName(),
createdJob.getMetadata().getNamespace(),
null,null,null);
if ( job.getStatus() == null ) {
return false;
}
log.info("[I88] Status: active={}, succeeded={}, failed={}",
job.getStatus().getActive(),
job.getStatus().getSucceeded(),
job.getStatus().getFailed()
);
Integer active = job.getStatus().getActive();
return active == null || active == 0 ;
}
}

View File

@ -0,0 +1,10 @@
package com.baeldung.kubernetes.intro;
import org.junit.jupiter.api.Test;
class RunJobLiveTest {
@Test
void whenWatchPods_thenSuccess() throws Exception {
RunJob.main(new String[] {});
}
}