diff --git a/spring-cloud/spring-cloud-kubernetes/liveness-example/Dockerfile b/spring-cloud/spring-cloud-kubernetes/liveness-example/Dockerfile
new file mode 100644
index 0000000000..0fc0a9bd64
--- /dev/null
+++ b/spring-cloud/spring-cloud-kubernetes/liveness-example/Dockerfile
@@ -0,0 +1,11 @@
+FROM openjdk:8-jdk-alpine
+
+# Create app directory
+RUN mkdir -p /usr/opt/service
+
+# Copy app
+COPY target/*.jar /usr/opt/service/service.jar
+
+EXPOSE 8080
+
+ENTRYPOINT exec java -jar /usr/opt/service/service.jar
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-kubernetes/liveness-example/pom.xml b/spring-cloud/spring-cloud-kubernetes/liveness-example/pom.xml
new file mode 100644
index 0000000000..e963dafe67
--- /dev/null
+++ b/spring-cloud/spring-cloud-kubernetes/liveness-example/pom.xml
@@ -0,0 +1,51 @@
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.5.17.RELEASE
+
+
+
+ 4.0.0
+
+ liveness-example
+ 1.0-SNAPSHOT
+
+
+ UTF-8
+ UTF-8
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-kubernetes/liveness-example/src/main/java/com/baeldung/liveness/Application.java b/spring-cloud/spring-cloud-kubernetes/liveness-example/src/main/java/com/baeldung/liveness/Application.java
new file mode 100644
index 0000000000..2cfa242965
--- /dev/null
+++ b/spring-cloud/spring-cloud-kubernetes/liveness-example/src/main/java/com/baeldung/liveness/Application.java
@@ -0,0 +1,12 @@
+package com.baeldung.liveness;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+}
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-kubernetes/liveness-example/src/main/java/com/baeldung/liveness/health/CustomHealthIndicator.java b/spring-cloud/spring-cloud-kubernetes/liveness-example/src/main/java/com/baeldung/liveness/health/CustomHealthIndicator.java
new file mode 100644
index 0000000000..715c4cb178
--- /dev/null
+++ b/spring-cloud/spring-cloud-kubernetes/liveness-example/src/main/java/com/baeldung/liveness/health/CustomHealthIndicator.java
@@ -0,0 +1,27 @@
+package com.baeldung.liveness.health;
+
+import org.springframework.boot.actuate.health.Health;
+import org.springframework.boot.actuate.health.HealthIndicator;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+@Component
+public class CustomHealthIndicator implements HealthIndicator {
+
+ private boolean isHealthy = true;
+
+ public CustomHealthIndicator() {
+ ScheduledExecutorService scheduled = Executors.newSingleThreadScheduledExecutor();
+ scheduled.schedule(() -> {
+ isHealthy = false;
+ }, 30, TimeUnit.SECONDS);
+ }
+
+ @Override
+ public Health health() {
+ return isHealthy ? Health.up().build() : Health.down().build();
+ }
+}
diff --git a/spring-cloud/spring-cloud-kubernetes/liveness-example/src/main/resources/resources/application.properties b/spring-cloud/spring-cloud-kubernetes/liveness-example/src/main/resources/resources/application.properties
new file mode 100644
index 0000000000..a3ac65cee5
--- /dev/null
+++ b/spring-cloud/spring-cloud-kubernetes/liveness-example/src/main/resources/resources/application.properties
@@ -0,0 +1 @@
+server.port=8080
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-kubernetes/liveness-example/src/main/resources/resources/logback.xml b/spring-cloud/spring-cloud-kubernetes/liveness-example/src/main/resources/resources/logback.xml
new file mode 100644
index 0000000000..7d900d8ea8
--- /dev/null
+++ b/spring-cloud/spring-cloud-kubernetes/liveness-example/src/main/resources/resources/logback.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-kubernetes/liveness-example/src/test/java/com/baeldung/SpringContextIntegrationTest.java b/spring-cloud/spring-cloud-kubernetes/liveness-example/src/test/java/com/baeldung/SpringContextIntegrationTest.java
new file mode 100644
index 0000000000..60b4a28aa6
--- /dev/null
+++ b/spring-cloud/spring-cloud-kubernetes/liveness-example/src/test/java/com/baeldung/SpringContextIntegrationTest.java
@@ -0,0 +1,17 @@
+package com.baeldung;
+
+import com.baeldung.liveness.Application;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = Application.class)
+public class SpringContextIntegrationTest {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
diff --git a/spring-cloud/spring-cloud-kubernetes/object-configurations/liveness-example-k8s-template.yaml b/spring-cloud/spring-cloud-kubernetes/object-configurations/liveness-example-k8s-template.yaml
new file mode 100644
index 0000000000..9fd3fd5674
--- /dev/null
+++ b/spring-cloud/spring-cloud-kubernetes/object-configurations/liveness-example-k8s-template.yaml
@@ -0,0 +1,54 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: liveness-example
+spec:
+ selector:
+ app: liveness-example
+ ports:
+ - port: 8080
+
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: liveness-example
+spec:
+ selector:
+ matchLabels:
+ app: liveness-example
+ replicas: 1
+ strategy:
+ rollingUpdate:
+ maxUnavailable: 0
+ template:
+ metadata:
+ labels:
+ app: liveness-example
+ spec:
+ containers:
+ - name: liveness-example
+ image: dbdock/liveness-example:1.0.0
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ memory: 400Mi
+ cpu: 400m
+ ports:
+ - containerPort: 8080
+ readinessProbe:
+ httpGet:
+ path: /health
+ port: 8080
+ initialDelaySeconds: 10
+ timeoutSeconds: 2
+ periodSeconds: 3
+ failureThreshold: 1
+ livenessProbe:
+ httpGet:
+ path: /health
+ port: 8080
+ initialDelaySeconds: 20
+ timeoutSeconds: 2
+ periodSeconds: 8
+ failureThreshold: 1
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-kubernetes/object-configurations/readiness-example-k8s-template.yaml b/spring-cloud/spring-cloud-kubernetes/object-configurations/readiness-example-k8s-template.yaml
new file mode 100644
index 0000000000..010c468107
--- /dev/null
+++ b/spring-cloud/spring-cloud-kubernetes/object-configurations/readiness-example-k8s-template.yaml
@@ -0,0 +1,54 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: readiness-example
+spec:
+ selector:
+ app: readiness-example
+ ports:
+ - port: 8080
+
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: readiness-example
+spec:
+ selector:
+ matchLabels:
+ app: readiness-example
+ replicas: 1
+ strategy:
+ rollingUpdate:
+ maxUnavailable: 0
+ template:
+ metadata:
+ labels:
+ app: readiness-example
+ spec:
+ containers:
+ - name: readiness-example
+ image: dbdock/readiness-example:1.0.0
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ memory: 400Mi
+ cpu: 400m
+ ports:
+ - containerPort: 8080
+ readinessProbe:
+ httpGet:
+ path: /health
+ port: 8080
+ initialDelaySeconds: 40
+ timeoutSeconds: 2
+ periodSeconds: 3
+ failureThreshold: 5
+ livenessProbe:
+ httpGet:
+ path: /health
+ port: 8080
+ initialDelaySeconds: 100
+ timeoutSeconds: 2
+ periodSeconds: 8
+ failureThreshold: 1
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-kubernetes/pom.xml b/spring-cloud/spring-cloud-kubernetes/pom.xml
index 984b3811dd..de0718633e 100644
--- a/spring-cloud/spring-cloud-kubernetes/pom.xml
+++ b/spring-cloud/spring-cloud-kubernetes/pom.xml
@@ -11,6 +11,8 @@
demo-frontend
demo-backend
+ liveness-example
+ readiness-example
diff --git a/spring-cloud/spring-cloud-kubernetes/readiness-example/Dockerfile b/spring-cloud/spring-cloud-kubernetes/readiness-example/Dockerfile
new file mode 100644
index 0000000000..0fc0a9bd64
--- /dev/null
+++ b/spring-cloud/spring-cloud-kubernetes/readiness-example/Dockerfile
@@ -0,0 +1,11 @@
+FROM openjdk:8-jdk-alpine
+
+# Create app directory
+RUN mkdir -p /usr/opt/service
+
+# Copy app
+COPY target/*.jar /usr/opt/service/service.jar
+
+EXPOSE 8080
+
+ENTRYPOINT exec java -jar /usr/opt/service/service.jar
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-kubernetes/readiness-example/pom.xml b/spring-cloud/spring-cloud-kubernetes/readiness-example/pom.xml
new file mode 100644
index 0000000000..fa85120d21
--- /dev/null
+++ b/spring-cloud/spring-cloud-kubernetes/readiness-example/pom.xml
@@ -0,0 +1,49 @@
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.5.17.RELEASE
+
+
+ 4.0.0
+
+ readiness-example
+ 1.0-SNAPSHOT
+
+
+ UTF-8
+ UTF-8
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-kubernetes/readiness-example/src/main/java/com/baeldung/readiness/Application.java b/spring-cloud/spring-cloud-kubernetes/readiness-example/src/main/java/com/baeldung/readiness/Application.java
new file mode 100644
index 0000000000..11ffe577c3
--- /dev/null
+++ b/spring-cloud/spring-cloud-kubernetes/readiness-example/src/main/java/com/baeldung/readiness/Application.java
@@ -0,0 +1,12 @@
+package com.baeldung.readiness;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+}
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-kubernetes/readiness-example/src/main/java/com/baeldung/readiness/health/CustomHealthIndicator.java b/spring-cloud/spring-cloud-kubernetes/readiness-example/src/main/java/com/baeldung/readiness/health/CustomHealthIndicator.java
new file mode 100644
index 0000000000..d37a1905f6
--- /dev/null
+++ b/spring-cloud/spring-cloud-kubernetes/readiness-example/src/main/java/com/baeldung/readiness/health/CustomHealthIndicator.java
@@ -0,0 +1,27 @@
+package com.baeldung.readiness.health;
+
+import org.springframework.boot.actuate.health.Health;
+import org.springframework.boot.actuate.health.HealthIndicator;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+@Component
+public class CustomHealthIndicator implements HealthIndicator {
+
+ private boolean isHealthy = false;
+
+ public CustomHealthIndicator() {
+ ScheduledExecutorService scheduled = Executors.newSingleThreadScheduledExecutor();
+ scheduled.schedule(() -> {
+ isHealthy = true;
+ }, 40, TimeUnit.SECONDS);
+ }
+
+ @Override
+ public Health health() {
+ return isHealthy ? Health.up().build() : Health.down().build();
+ }
+}
diff --git a/spring-cloud/spring-cloud-kubernetes/readiness-example/src/main/resources/resources/application.properties b/spring-cloud/spring-cloud-kubernetes/readiness-example/src/main/resources/resources/application.properties
new file mode 100644
index 0000000000..a3ac65cee5
--- /dev/null
+++ b/spring-cloud/spring-cloud-kubernetes/readiness-example/src/main/resources/resources/application.properties
@@ -0,0 +1 @@
+server.port=8080
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-kubernetes/readiness-example/src/main/resources/resources/logback.xml b/spring-cloud/spring-cloud-kubernetes/readiness-example/src/main/resources/resources/logback.xml
new file mode 100644
index 0000000000..7d900d8ea8
--- /dev/null
+++ b/spring-cloud/spring-cloud-kubernetes/readiness-example/src/main/resources/resources/logback.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-kubernetes/readiness-example/src/test/java/com/baeldung/SpringContextIntegrationTest.java b/spring-cloud/spring-cloud-kubernetes/readiness-example/src/test/java/com/baeldung/SpringContextIntegrationTest.java
new file mode 100644
index 0000000000..18458182c7
--- /dev/null
+++ b/spring-cloud/spring-cloud-kubernetes/readiness-example/src/test/java/com/baeldung/SpringContextIntegrationTest.java
@@ -0,0 +1,17 @@
+package com.baeldung;
+
+import com.baeldung.readiness.Application;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = Application.class)
+public class SpringContextIntegrationTest {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}