1. 准备测试的SpringBoot工程, 须要Java 8 JDK or greater and Maven 3.3.x or greater.php
git clone https://github.com/megadotnet/Openshift-healthcheck-demo.githtml
假设您已经掌握基本JAVA应用程序开发,Openshift容器平台已经部署成功。咱们的测试工程依赖库Spring Boot Actuator2, 有如新特性java
Actuator提供了13个接口,以下:node
在Spring Boot 2.x中为了安全起见,Actuator只开放了两个端点/actuator/health和/actuator/info,能够在配置文件中设置开关。git
部署编译jar文件到Openshift容器平台github
Openshift的部署过程简述以下(这里采用是二进制部署方式):web
--> Found image dc046fe (16 months old) in image stream "openshift/s2i-java" under tag "latest" for "s2i-java:latest"spring
Java S2I builder 1.0docker
--------------------数据库
Platform for building Java (fatjar) applications with maven or gradle
Tags: builder, maven-3, gradle-2.6, java, microservices, fatjar
* A source build using binary input will be created
* The resulting image will be pushed to image stream "health-demo:latest"
* A binary build was created, use 'start-build --from-dir' to trigger a new build
--> Creating resources with label app=health-demo ...
imagestream "health-demo" created
buildconfig "health-demo" created
--> Success
Uploading directory "oc-build" as binary input for the build ...
build "health-demo-1" started
--> Found image fb46616 (5 minutes old) in image stream "hshreport-stage/health-demo" under tag "latest" for "health-demo:latest"
Java S2I builder 1.0
--------------------
Platform for building Java (fatjar) applications with maven or gradle
Tags: builder, maven-3, gradle-2.6, java, microservices, fatjar
* This image will be deployed in deployment config "health-demo"
* Ports 7575/tcp, 8080/tcp will be load balanced by service "health-demo"
* Other containers can access this service through the hostname "health-demo"
--> Creating resources with label app=health-demo ...
deploymentconfig "health-demo" created
service "health-demo" created
--> Success
Run 'oc status' to view your app.
route "health-demo" exposed
以上过程最近暴露Router, 方便咱们演示
修改刚部署的deploymentConfig的yaml,增长readiness配置,以下:
---
readinessProbe:
failureThreshold: 3
httpGet:
path: /actuator/health
port: 8080
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
对于以几个参数,咱们说明下,你们须要理解
或是采用openshift cli命令行来配置readiness:
oc set probe dc/app-cli \
--readiness \
--get-url=http://:8080/notreal \
--initial-delay-seconds=5
$ oc get pod -w
#刚才修改 deploymentConfig,pod从新部署了
NAME READY STATUS RESTARTS AGE
health-demo-1-build 0/1 Completed 0 16m
health-demo-2-sqh4z 1/1 Running 0 11m
执行HTTP API 来STOP中止Tomcat,curl http://${value-name-app}-MY_PROJECT_NAME.LOCAL_OPENSHIFT_HOSTNAME/api/stop, 注意此处URL相部署的DNS环境有关系
程序中日志以下:
Stopping Tomcat context.
2020-01-11 22:17:21.004 INFO 1 --- [nio-8080-exec-9] o.apache.catalina.core.StandardWrapper : Waiting for [1] instance(s) to be deallocated for Servlet [dispatcherServlet]
2020-01-11 22:17:22.008 INFO 1 --- [nio-8080-exec-9] o.apache.catalina.core.StandardWrapper : Waiting for [1] instance(s) to be deallocated for Servlet [dispatcherServlet]
2020-01-11 22:17:23.012 INFO 1 --- [nio-8080-exec-9] o.apache.catalina.core.StandardWrapper : Waiting for [1] instance(s) to be deallocated for Servlet [dispatcherServlet]
2020-01-11 22:17:23.114 INFO 1 --- [nio-8080-exec-9] o.a.c.c.C.[Tomcat].[localhost].[/] : Destroying Spring FrameworkServlet 'dispatcherServlet'
#跟踪pod的动态
$ oc get pod –w
NAME READY STATUS RESTARTS AGE
health-demo-1-build 0/1 Completed 0 16m
health-demo-2-sqh4z 1/1 Running 0 11m
health-demo-2-sqh4z 0/1 Running 0 13m
#咱们查阅pod的详细描述
$ oc describe pod/health-demo-2-sqh4z
Name: health-demo-2-sqh4z
Namespace: hshreport-stage
Security Policy: restricted
Node: openshift-lb-02.hsh.io/10.108.78.145
Start Time: Sat, 11 Jan 2020 22:08:59 +0800
Labels: app=health-demo
deployment=health-demo-2
deploymentconfig=health-demo
Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicationController","namespace":"hshreport-stage","name":"health-demo-2","uid":"e6436263-347b-11ea-856c...
openshift.io/deployment-config.latest-version=2
openshift.io/deployment-config.name=health-demo
openshift.io/deployment.name=health-demo-2
openshift.io/generated-by=OpenShiftNewApp
openshift.io/scc=restricted
Status: Running
IP: 10.131.5.124
Controllers: ReplicationController/health-demo-2
Containers:
health-demo:
Container ID: docker://25cdf63f55d839610287b4e2a3cc67182377bfe5010990357f83329286c7e64f
Image: docker-registry.default.svc:5000/hshreport-stage/health-demo@sha256:292f09b7d9ca9bc12560febe3f4ba73e50b3c1a5701cbd55689186e844157fb6
Image ID: docker-pullable://docker-registry.default.svc:5000/hshreport-stage/health-demo@sha256:292f09b7d9ca9bc12560febe3f4ba73e50b3c1a5701cbd55689186e844157fb6
Ports: 7575/TCP, 8080/TCP
State: Running
Started: Sat, 11 Jan 2020 22:09:09 +0800
Ready: False
Restart Count: 0
Readiness: http-get http://:8080/actuator/health delay=10s timeout=1s period=10s #success=1 #failure=3
Environment:
APP_OPTIONS: -Xmx512m -Xss512k -Djava.net.preferIPv4Stack=true -Dfile.encoding=utf-8
DEPLOYER: liu.xxxxx (Administrator) (cicd-1.1.24)
REVISION:
SPRING_PROFILES_ACTIVE: stage
TZ: Asia/Shanghai
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-n4klp (ro)
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
Volumes:
default-token-n4klp:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-n4klp
Optional: false
QoS Class: BestEffort
Node-Selectors: region=primary
Tolerations: <none>
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
16m 16m 1 default-scheduler Normal Scheduled Successfully assigned health-demo-2-sqh4z to openshift-lb-02.hsh.io
16m 16m 1 kubelet, openshift-lb-02.hsh.io spec.containers{health-demo} Normal Pulling pulling image "docker-registry.default.svc:5000/hshreport-stage/health-demo@sha256:292f09b7d9ca9bc12560febe3f4ba73e50b3c1a5701cbd55689186e844157fb6"
16m 16m 1 kubelet, openshift-lb-02.hsh.io spec.containers{health-demo} Normal Pulled Successfully pulled image "docker-registry.default.svc:5000/hshreport-stage/health-demo@sha256:292f09b7d9ca9bc12560febe3f4ba73e50b3c1a5701cbd55689186e844157fb6"
15m 15m 1 kubelet, openshift-lb-02.hsh.io spec.containers{health-demo} Normal Created Created container
15m 15m 1 kubelet, openshift-lb-02.hsh.io spec.containers{health-demo} Normal Started Started container
15m 15m 1 kubelet, openshift-lb-02.hsh.io spec.containers{health-demo} Warning Unhealthy Readiness probe failed: Get http://10.131.5.124:8080/actuator/health: dial tcp 10.131.5.124:8080: getsockopt: connection refused
7m 5m 16 kubelet, openshift-lb-02.hsh.io spec.containers{health-demo} Warning Unhealthy Readiness probe failed: HTTP probe failed with statuscode: 404
注意上面的WARN事件,咱们发现POD没有被重启,由于咱们只配置了readiness
对以前部署后应用,增长health check, /actuator/health 是SpringBoot2.0的示例工程默认的健康检查的端点
修改deploymentConfig,增长readiness与liveness
---
livenessProbe:
failureThreshold: 3
httpGet:
path: /actuator/health
port: 8080
scheme: HTTP
initialDelaySeconds: 60
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
name: health-demo
ports:
-
containerPort: 7575
protocol: TCP
-
containerPort: 8080
protocol: TCP
readinessProbe:
failureThreshold: 3
httpGet:
path: /actuator/health
port: 8080
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
也能够经过Web 控制台来修改,示例截图以下:
咱们看到 WEB UI的配置与yaml中参数是同样的。
oc cli命令行方法 #Configure Liveness/Readiness probes on DCs
oc set probe dc cotd1 --liveness -- echo ok
oc set probe dc/cotd1 --readiness --get-url=http://:8080/index.php --initial-delay-seconds=2
TCP的示例
oc set probe dc/blog --readiness --liveness --open-tcp 8080
移动 probe
$ oc set probe dc/blog --readiness --liveness –remove
执行stop后,此时请求ROUTER已显示,POD还在运行,浏览器返回
Application is not available
经过URL执行后,STOP tomcat,pod中程序部分日志以下:
Stopping Tomcat context.
2020-01-11 22:17:21.004 INFO 1 --- [nio-8080-exec-9] o.apache.catalina.core.StandardWrapper : Waiting for [1] instance(s) to be deallocated for Servlet [dispatcherServlet]
2020-01-11 22:17:22.008 INFO 1 --- [nio-8080-exec-9] o.apache.catalina.core.StandardWrapper : Waiting for [1] instance(s) to be deallocated for Servlet [dispatcherServlet]
2020-01-11 22:17:23.012 INFO 1 --- [nio-8080-exec-9] o.apache.catalina.core.StandardWrapper : Waiting for [1] instance(s) to be deallocated for Servlet [dispatcherServlet]
2020-01-11 22:17:23.114 INFO 1 --- [nio-8080-exec-9] o.a.c.c.C.[Tomcat].[localhost].[/] : Destroying Spring FrameworkServlet 'dispatcherServlet'
过一下子,咱们监控pod动态
$ oc get pod -w
NAME READY STATUS RESTARTS AGE
health-demo-1-build 0/1 Completed 0 33m
health-demo-3-02v11 1/1 Running 0 5m
health-demo-3-02v11 0/1 Running 0 7m
health-demo-3-02v11 0/1 Running 1 7m
$ oc get pod
NAME READY STATUS RESTARTS AGE
health-demo-1-build 0/1 Completed 0 36m
health-demo-3-02v11 1/1 Running 1 8m
请求 curl http://${value-name-app}-MY_PROJECT_NAME.LOCAL_OPENSHIFT_HOSTNAME/api/greeting?name=s2i
后浏览器显示:
{"content":"Hello, s2i!"} (the recovery took 41.783 seconds)
此时POD已经被重启,应用程序的日志以下:
2020-01-11 22:35:13.597 INFO 1 --- [ main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto protected java.util.Map<java.lang.String, java.util.Map<java.lang.String, org.springframework.boot.actuate.endpoint.web.Link>> org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping.links(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2020-01-11 22:35:13.750 INFO 1 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2020-01-11 22:35:13.873 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2020-01-11 22:35:13.882 INFO 1 --- [ main] dev.snowdrop.example.ExampleApplication : Started ExampleApplication in 8.061 seconds (JVM running for 9.682)
2020-01-11 22:35:22.445 INFO 1 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet'
2020-01-11 22:35:22.445 INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started
2020-01-11 22:35:22.485 INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 39 ms
$ oc describe pod/health-demo-3-02v11
Name: health-demo-3-02v11
Namespace: hshreport-stage
Security Policy: restricted
Node: openshift-node-04.hsh.io/10.108.78.139
Start Time: Sat, 11 Jan 2020 22:32:12 +0800
Labels: app=health-demo
deployment=health-demo-3
deploymentconfig=health-demo
Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicationController","namespace":"hshreport-stage","name":"health-demo-3","uid":"23ad2f21-347f-11ea-856c...
openshift.io/deployment-config.latest-version=3
openshift.io/deployment-config.name=health-demo
openshift.io/deployment.name=health-demo-3
openshift.io/generated-by=OpenShiftNewApp
openshift.io/scc=restricted
Status: Running
IP: 10.129.5.178
Controllers: ReplicationController/health-demo-3
Containers:
health-demo:
Container ID: docker://3e5a6b081022c914d8e118dce829294570e54f441b84394a2b13f6eebb4f5c74
Image: docker-registry.default.svc:5000/hshreport-stage/health-demo@sha256:292f09b7d9ca9bc12560febe3f4ba73e50b3c1a5701cbd55689186e844157fb6
Image ID: docker-pullable://docker-registry.default.svc:5000/hshreport-stage/health-demo@sha256:292f09b7d9ca9bc12560febe3f4ba73e50b3c1a5701cbd55689186e844157fb6
Ports: 7575/TCP, 8080/TCP
State: Running
Started: Sat, 11 Jan 2020 22:35:04 +0800
Last State: Terminated
Reason: Error
Exit Code: 143
Started: Sat, 11 Jan 2020 22:32:15 +0800
Finished: Sat, 11 Jan 2020 22:35:03 +0800
Ready: True
Restart Count: 1
Liveness: http-get http://:8080/actuator/health delay=60s timeout=1s period=10s #success=1 #failure=3
Readiness: http-get http://:8080/actuator/health delay=10s timeout=1s period=10s #success=1 #failure=3
Environment:
APP_OPTIONS: -Xmx512m -Xss512k -Djava.net.preferIPv4Stack=true -Dfile.encoding=utf-8
DEPLOYER: liu.xxxxxx(Administrator) (cicd-1.1.24)
REVISION:
SPRING_PROFILES_ACTIVE: stage
TZ: Asia/Shanghai
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-n4klp (ro)
Conditions:
Type Status
Initialized True
Ready True
PodScheduled True
Volumes:
default-token-n4klp:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-n4klp
Optional: false
QoS Class: BestEffort
Node-Selectors: region=primary
Tolerations: <none>
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
17m 17m 1 default-scheduler Normal Scheduled Successfully assigned health-demo-3-02v11 to openshift-node-04.hsh.io
15m 14m 3 kubelet, openshift-node-04.hsh.io spec.containers{health-demo} Warning Unhealthy Liveness probe failed: HTTP probe failed with statuscode: 404
15m 14m 3 kubelet, openshift-node-04.hsh.io spec.containers{health-demo} Warning Unhealthy Readiness probe failed: HTTP probe failed with statuscode: 404
17m 14m 2 kubelet, openshift-node-04.hsh.io spec.containers{health-demo} Normal Pulling pulling image "docker-registry.default.svc:5000/hshreport-stage/health-demo@sha256:292f09b7d9ca9bc12560febe3f4ba73e50b3c1a5701cbd55689186e844157fb6"
17m 14m 2 kubelet, openshift-node-04.hsh.io spec.containers{health-demo} Normal Pulled Successfully pulled image "docker-registry.default.svc:5000/hshreport-stage/health-demo@sha256:292f09b7d9ca9bc12560febe3f4ba73e50b3c1a5701cbd55689186e844157fb6"
17m 14m 2 kubelet, openshift-node-04.hsh.io spec.containers{health-demo} Normal Created Created container
14m 14m 1 kubelet, openshift-node-04.hsh.io spec.containers{health-demo} Normal Killing Killing container with id docker://health-demo:pod "health-demo-3-02v11_hshreport-stage(27e5a1da-347f-11ea-856c-0050568d3d78)" container "health-demo" is unhealthy, it will be killed and re-created.
17m 14m 2 kubelet, openshift-node-04.hsh.io spec.containers{health-demo} Normal Started Started container
第二次咱们执行 STOP的HTTP API
$ oc get pod –w
NAME READY STATUS RESTARTS AGE
health-demo-1-build 0/1 Completed 0 47m
health-demo-3-02v11 1/1 Running 1 19m
health-demo-3-02v11 0/1 Running 1 19m
health-demo-3-02v11 0/1 Running 2 20m
health-demo-3-02v11 1/1 Running 2 20m
$ oc get pod
NAME READY STATUS RESTARTS AGE
health-demo-1-build 0/1 Completed 0 49m
health-demo-3-02v11 1/1 Running 2 21
HTTP 请求返回结果:
{"content":"Hello, s2i!"} (the recovery took 51.984 seconds)
$ oc describe pod/health-demo-3-02v11
Name: health-demo-3-02v11
Namespace: hshreport-stage
Security Policy: restricted
Node: openshift-node-04.hsh.io/10.108.78.139
Start Time: Sat, 11 Jan 2020 22:32:12 +0800
Labels: app=health-demo
deployment=health-demo-3
deploymentconfig=health-demo
Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicationController","namespace":"hshreport-stage","name":"health-demo-3","uid":"23ad2f21-347f-11ea-856c...
openshift.io/deployment-config.latest-version=3
openshift.io/deployment-config.name=health-demo
openshift.io/deployment.name=health-demo-3
openshift.io/generated-by=OpenShiftNewApp
openshift.io/scc=restricted
Status: Running
IP: 10.129.5.178
Controllers: ReplicationController/health-demo-3
Containers:
health-demo:
Container ID: docker://e12d1975aa26b07643ae1666ae6bce7ceab4f25fb4c6c947427ba526ad6fdf7b
Image: docker-registry.default.svc:5000/hshreport-stage/health-demo@sha256:292f09b7d9ca9bc12560febe3f4ba73e50b3c1a5701cbd55689186e844157fb6
Image ID: docker-pullable://docker-registry.default.svc:5000/hshreport-stage/health-demo@sha256:292f09b7d9ca9bc12560febe3f4ba73e50b3c1a5701cbd55689186e844157fb6
Ports: 7575/TCP, 8080/TCP
State: Running
Started: Sat, 11 Jan 2020 22:47:14 +0800
Last State: Terminated
Reason: Error
Exit Code: 143
Started: Sat, 11 Jan 2020 22:35:04 +0800
Finished: Sat, 11 Jan 2020 22:47:02 +0800
Ready: True
Restart Count: 2
Liveness: http-get http://:8080/actuator/health delay=60s timeout=1s period=10s #success=1 #failure=3
Readiness: http-get http://:8080/actuator/health delay=10s timeout=1s period=10s #success=1 #failure=3
Environment:
APP_OPTIONS: -Xmx512m -Xss512k -Djava.net.preferIPv4Stack=true -Dfile.encoding=utf-8
DEPLOYER: liu.xxxxx (Administrator) (cicd-1.1.24)
REVISION:
SPRING_PROFILES_ACTIVE: stage
TZ: Asia/Shanghai
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-n4klp (ro)
Conditions:
Type Status
Initialized True
Ready True
PodScheduled True
Volumes:
default-token-n4klp:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-n4klp
Optional: false
QoS Class: BestEffort
Node-Selectors: region=primary
Tolerations: <none>
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
21m 21m 1 default-scheduler Normal Scheduled Successfully assigned health-demo-3-02v11 to openshift-node-04.hsh.io
21m 6m 3 kubelet, openshift-node-04.hsh.io spec.containers{health-demo} Normal Pulling pulling image "docker-registry.default.svc:5000/hshreport-stage/health-demo@sha256:292f09b7d9ca9bc12560febe3f4ba73e50b3c1a5701cbd55689186e844157fb6"
19m 6m 6 kubelet, openshift-node-04.hsh.io spec.containers{health-demo} Warning Unhealthy Liveness probe failed: HTTP probe failed with statuscode: 404
19m 6m 6 kubelet, openshift-node-04.hsh.io spec.containers{health-demo} Warning Unhealthy Readiness probe failed: HTTP probe failed with statuscode: 404
18m 6m 2 kubelet, openshift-node-04.hsh.io spec.containers{health-demo} Normal Killing Killing container with id docker://health-demo:pod "health-demo-3-02v11_hshreport-stage(27e5a1da-347f-11ea-856c-0050568d3d78)" container "health-demo" is unhealthy, it will be killed and re-created.
21m 6m 3 kubelet, openshift-node-04.hsh.io spec.containers{health-demo} Normal Pulled Successfully pulled image "docker-registry.default.svc:5000/hshreport-stage/health-demo@sha256:292f09b7d9ca9bc12560febe3f4ba73e50b3c1a5701cbd55689186e844157fb6"
21m 6m 3 kubelet, openshift-node-04.hsh.io spec.containers{health-demo} Normal Created Created container
21m 6m 3 kubelet, openshift-node-04.hsh.io spec.containers{health-demo} Normal Started Started container
#看下事件
$ oc get ev
LASTSEEN FIRSTSEEN COUNT NAME KIND SUBOBJECT TYPE REASON SOURCE MESSAGE
29m 41m 6 health-demo-3-02v11 Pod spec.containers{health-demo} Warning Unhealthy kubelet, openshift-node-04.hsh.io Liveness probe failed: HTTP probe failed with statuscode: 404
29m 41m 6 health-demo-3-02v11 Pod spec.containers{health-demo} Warning Unhealthy kubelet, openshift-node-04.hsh.io Readiness probe failed: HTTP probe failed with statuscode: 404
29m 41m 2 health-demo-3-02v11 Pod spec.containers{health-demo} Normal Killing kubelet, openshift-node-04.hsh.io Killing container with id docker://health-demo:pod "health-demo-3-02v11_hshreport-stage(27e5a1da-347f-11ea-856c-0050568d3d78)" container "health-demo" is unhealthy, it will be killed and re-created.
19m 19m 1 health-demo-3-02v11 Pod spec.containers{health-demo} Normal Killing kubelet, openshift-node-04.hsh.io Killing container with id docker://health-demo:Need to kill Pod
44m 44m 1 health-demo-3-deploy Pod Normal Scheduled default-scheduler Successfully assigned health-demo-3-deploy to openshift-lb-02.hsh.io
44m 44m 1 health-demo-3-deploy Pod spec.containers{deployment} Normal Pulled kubelet, openshift-lb-02.hsh.io Container image "openshift/origin-deployer:v3.6.1" already present on machine
44m 44m 1 health-demo-3-deploy Pod spec.containers{deployment} Normal Created kubelet, openshift-lb-02.hsh.io Created container
44m 44m 1 health-demo-3-deploy Pod spec.containers{deployment} Normal Started kubelet, openshift-lb-02.hsh.io Started container
44m 44m 1 health-demo-3 ReplicationController Normal SuccessfulCreate replication-controller Created pod: health-demo-3-02v11
19m 19m 1 health-demo-3 ReplicationController Normal SuccessfulDelete
发现,POD的名称health-demo-3-02v11没有变,演示到这儿结束
Liveness probes可作三种检查
HTTP(S) checks—Checks a given URL endpoint served by the container, and evaluates the HTTP response code.
Container execution check—A command, typically a script, that’s run at intervals to verify that the container is behaving as expected. A non-zero exit code from the command results in a liveness check failure.
TCP socket checks—Checks that a TCP connection can be established on a specific TCP port in the application pod.
Readiness和liveness的区别
readiness 就是意思是否能够访问,liveness就是是否存活。若是一个readiness 为fail 的后果是把这个pod 的全部service 的endpoint里面的改pod ip 删掉,意思就这个pod对应的全部service都不会把请求转到这pod来了。可是若是liveness 检查结果是fail就会直接kill container,固然若是你的restart policy 是always 会重启pod。
Readiness探针和Liveness探针都是用来检测容器进程状态的。区别在于前者关注的是是否把进程的服务地址加入Service的负载均衡列表;然后者则决定是否去重启这个进程来排除故障。它们在进程的整个生命周期中都存在并且同时工做,职责分离。
Kubelet 能够选择是否执行在容器上运行的两种探针执行和作出反应:
最佳实践
通常来说,Readiness的执行间隔要比Liveness设置的较长一点比较好。由于当后端进程负载高的时候,咱们能够暂时从转发列表里面摘除,可是Liveness决定的是进程是否重启,其实这个时候进程不必定须要重启。因此Liveness的检测周期能够稍微长一点,另外失败的容忍数量也能够多一点。具体根据实际状况判断吧。
若有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注个人微信订阅号:
做者:Petter Liu
出处:http://www.cnblogs.com/wintersun/ 本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。 该文章也同时发布在个人独立博客中-Petter Liu Blog。