To run Application Live View for Spring Boot apps, Spring Boot conventions recognizes PodIntents and automatically adds the following metadata labels:
tanzu.app.live.view: "true"
: Enables the connector to observe application podtanzu.app.live.view.application.name: APPLICATION-NAME
: Identifies the app name to be used internally by Application Live Viewtanzu.app.live.view.application.actuator.port: ACTUATOR-PORT
: Identifies the port on the pod at which the actuators are available for Application Live Viewtanzu.app.live.view.application.flavours: spring-boot
: Exposes the framework flavor of the appTo run Application Live View for Spring Cloud Gateway apps, Spring Boot conventions recognizes PodIntents and adds the following metadata labels:
tanzu.app.live.view: "true"
: Enables the connector to observe application podtanzu.app.live.view.application.name: APPLICATION-NAME
: Identifies the app name to be used internally by Application Live Viewtanzu.app.live.view.application.actuator.port: ACTUATOR-PORT
: Identifies the port on the pod at which the actuators are available for Application Live Viewtanzu.app.live.view.application.flavours: spring-boot,spring-cloud-gateway
: Exposes the framework flavors of the appThese metadata labels allow Application Live View to identify pods that are enabled for Application Live View. The metadata labels also tell the Application Live View connector what kind of app it is and on which port the actuators are accessible for Application Live View. For more information, see Configuring and accessing Spring Boot actuators in Tanzu Application Platform.
To verify the applied labels and annotations, run:
kubectl get podintents.conventions.carto.run WORKLOAD-NAME -o yaml
Where WORKLOAD-NAME
is the name of the deployed workload. For example: tanzu-java-web-app
.
Expected output of Spring Boot workload:
apiVersion: conventions.carto.run/v1alpha1
kind: PodIntent
metadata:
creationTimestamp: "2022-11-14T10:07:55Z"
generation: 1
labels:
app.kubernetes.io/component: intent
app.kubernetes.io/part-of: tanzu-java-web-app
apps.tanzu.vmware.com/auto-configure-actuators: "true"
apps.tanzu.vmware.com/workload-type: web
carto.run/cluster-template-name: convention-template
carto.run/resource-name: config-provider
carto.run/supply-chain-name: source-to-url
carto.run/template-kind: ClusterConfigTemplate
carto.run/workload-name: tanzu-java-web-app
carto.run/workload-namespace: default
name: tanzu-java-web-app
namespace: default
ownerReferences:
- apiVersion: carto.run/v1alpha1
blockOwnerDeletion: true
controller: true
kind: Workload
name: tanzu-java-web-app
uid: dfd3c0c2-9d1f-4231-9390-3e16f23bb62d
resourceVersion: "444497"
uid: 224de2aa-307a-48e3-a826-2c474c435bb2
spec:
serviceAccountName: default
template:
metadata:
annotations:
autoscaling.knative.dev/min-scale: "1"
developer.conventions/target-containers: workload
labels:
app.kubernetes.io/component: run
app.kubernetes.io/part-of: tanzu-java-web-app
apps.tanzu.vmware.com/auto-configure-actuators: "true"
apps.tanzu.vmware.com/workload-type: web
carto.run/workload-name: tanzu-java-web-app
spec:
containers:
- image: registry.example.com/app-live-view/test/tanzu-java-web-app-default@sha256:444686bb8bfbaba5552676140619b00f43c8f85b6823b87676c0ccdcdead65ac
name: workload
resources: {}
securityContext:
runAsUser: 1000
serviceAccountName: default
status:
conditions:
- lastTransitionTime: "2022-11-14T10:07:59Z"
message: ""
reason: Applied
status: "True"
type: ConventionsApplied
- lastTransitionTime: "2022-11-14T10:07:59Z"
message: ""
reason: ConventionsApplied
status: "True"
type: Ready
observedGeneration: 1
template:
metadata:
annotations:
autoscaling.knative.dev/min-scale: "1"
boot.spring.io/actuator: http://:8081/actuator
boot.spring.io/version: 2.7.3
conventions.carto.run/applied-conventions: |-
spring-boot-convention/auto-configure-actuators-check
spring-boot-convention/spring-boot
spring-boot-convention/spring-boot-graceful-shutdown
spring-boot-convention/spring-boot-web
spring-boot-convention/spring-boot-actuator
spring-boot-convention/spring-boot-actuator-probes
spring-boot-convention/app-live-view-appflavour-check
spring-boot-convention/app-live-view-connector-boot
spring-boot-convention/app-live-view-appflavours-boot
appliveview-sample/app-live-view-appflavour-check
developer.conventions/target-containers: workload
labels:
app.kubernetes.io/component: run
app.kubernetes.io/part-of: tanzu-java-web-app
apps.tanzu.vmware.com/auto-configure-actuators: "true"
apps.tanzu.vmware.com/workload-type: web
carto.run/workload-name: tanzu-java-web-app
conventions.carto.run/framework: spring-boot
tanzu.app.live.view: "true"
tanzu.app.live.view.application.actuator.path: actuator
tanzu.app.live.view.application.actuator.port: "8081"
tanzu.app.live.view.application.flavours: spring-boot
tanzu.app.live.view.application.name: tanzu-java-web-app
spec:
containers:
- env:
- name: JAVA_TOOL_OPTIONS
value: -Dmanagement.endpoint.health.probes.add-additional-paths="true" -Dmanagement.endpoint.health.show-details="always"
-Dmanagement.endpoints.web.base-path="/actuator" -Dmanagement.endpoints.web.exposure.include="*"
-Dmanagement.health.probes.enabled="true" -Dmanagement.server.port="8081"
-Dserver.port="8080" -Dserver.shutdown.grace-period="24s"
image: registry.example.com/app-live-view/test/tanzu-java-web-app-default@sha256:444686bb8bfbaba5552676140619b00f43c8f85b6823b87676c0ccdcdead65ac
livenessProbe:
httpGet:
path: /livez
port: 8080
scheme: HTTP
name: workload
ports:
- containerPort: 8080
protocol: TCP
readinessProbe:
httpGet:
path: /readyz
port: 8080
scheme: HTTP
resources: {}
securityContext:
runAsUser: 1000
serviceAccountName: default
Expected output of Spring Cloud Gateway workload:
apiVersion: conventions.carto.run/v1alpha1
kind: PodIntent
metadata:
creationTimestamp: "2022-11-14T10:29:51Z"
generation: 1
labels:
app.kubernetes.io/component: intent
app.kubernetes.io/part-of: tanzu-scg-web-app
apps.tanzu.vmware.com/auto-configure-actuators: "true"
apps.tanzu.vmware.com/workload-type: web
carto.run/cluster-template-name: convention-template
carto.run/resource-name: config-provider
carto.run/supply-chain-name: source-to-url
carto.run/template-kind: ClusterConfigTemplate
carto.run/workload-name: tanzu-scg-web-app
carto.run/workload-namespace: default
name: tanzu-scg-web-app
namespace: default
ownerReferences:
- apiVersion: carto.run/v1alpha1
blockOwnerDeletion: true
controller: true
kind: Workload
name: tanzu-scg-web-app
uid: 5d8cdc5b-0236-471d-8c1e-335e659f1ae6
resourceVersion: "475756"
uid: d086f02c-6ff0-47f8-8dee-4da8748d8adc
spec:
serviceAccountName: default
template:
metadata:
annotations:
autoscaling.knative.dev/min-scale: "1"
developer.conventions/target-containers: workload
labels:
app.kubernetes.io/component: run
app.kubernetes.io/part-of: tanzu-scg-web-app
apps.tanzu.vmware.com/auto-configure-actuators: "true"
apps.tanzu.vmware.com/workload-type: web
carto.run/workload-name: tanzu-scg-web-app
spec:
containers:
- image: registry.example.com/app-live-view/test/tanzu-scg-web-app-default@sha256:7656f4ca56b7d0d6376b374643d6ac09c8cdcdbcc13d065f9224651b12724d0b
name: workload
resources: {}
securityContext:
runAsUser: 1000
serviceAccountName: default
status:
conditions:
- lastTransitionTime: "2022-11-14T10:29:58Z"
message: ""
reason: Applied
status: "True"
type: ConventionsApplied
- lastTransitionTime: "2022-11-14T10:29:58Z"
message: ""
reason: ConventionsApplied
status: "True"
type: Ready
observedGeneration: 1
template:
metadata:
annotations:
autoscaling.knative.dev/min-scale: "1"
boot.spring.io/actuator: http://:8081/actuator
boot.spring.io/version: 2.6.3
conventions.carto.run/applied-conventions: |-
spring-boot-convention/auto-configure-actuators-check
spring-boot-convention/spring-boot
spring-boot-convention/spring-boot-web
spring-boot-convention/spring-boot-actuator
spring-boot-convention/spring-boot-actuator-probes
spring-boot-convention/app-live-view-appflavour-check
spring-boot-convention/app-live-view-connector-boot
spring-boot-convention/app-live-view-appflavours-boot
spring-boot-convention/app-live-view-connector-scg
spring-boot-convention/app-live-view-appflavours-scg
appliveview-sample/app-live-view-appflavour-check
developer.conventions/target-containers: workload
labels:
app.kubernetes.io/component: run
app.kubernetes.io/part-of: tanzu-scg-web-app
apps.tanzu.vmware.com/auto-configure-actuators: "true"
apps.tanzu.vmware.com/workload-type: web
carto.run/workload-name: tanzu-scg-web-app
conventions.carto.run/framework: spring-boot
tanzu.app.live.view: "true"
tanzu.app.live.view.application.actuator.path: actuator
tanzu.app.live.view.application.actuator.port: "8081"
tanzu.app.live.view.application.flavours: spring-boot_spring-cloud-gateway
tanzu.app.live.view.application.name: tanzu-scg-web-app
spec:
containers:
- env:
- name: JAVA_TOOL_OPTIONS
value: -Dmanagement.endpoint.health.probes.add-additional-paths="true" -Dmanagement.endpoint.health.show-details="always"
-Dmanagement.endpoints.web.base-path="/actuator" -Dmanagement.endpoints.web.exposure.include="*"
-Dmanagement.health.probes.enabled="true" -Dmanagement.server.port="8081"
-Dserver.port="8080"
image: registry.example.com/app-live-view/test/tanzu-scg-web-app-default@sha256:7656f4ca56b7d0d6376b374643d6ac09c8cdcdbcc13d065f9224651b12724d0b
livenessProbe:
httpGet:
path: /livez
port: 8080
scheme: HTTP
name: workload
ports:
- containerPort: 8080
protocol: TCP
readinessProbe:
httpGet:
path: /readyz
port: 8080
scheme: HTTP
resources: {}
securityContext:
runAsUser: 1000
serviceAccountName: default