Support tcp/http liveness/readiness probe (#1449)

This commit is contained in:
ichx
2021-11-03 23:30:38 +08:00
committed by GitHub
parent ce46a5ba01
commit d55071e9d6
14 changed files with 1529 additions and 221 deletions
@@ -0,0 +1,69 @@
version: "3.3"
services:
# test exec
redis:
image: redis
ports:
- "6379"
healthcheck:
test: echo "liveness"
interval: 10s
timeout: 1s
retries: 5
labels:
kompose.service.healthcheck.readiness.test: echo "liveness"
kompose.service.healthcheck.readiness.interval: 10s
kompose.service.healthcheck.readiness.timeout: 1s
kompose.service.healthcheck.readiness.retries: 5
# test http get
postgresql:
image: postgresql
ports:
- "5432"
healthcheck:
interval: 10s
timeout: 1s
retries: 5
labels:
kompose.service.healthcheck.liveness.http_get_path: /health
kompose.service.healthcheck.liveness.http_get_port: 8080
kompose.service.healthcheck.readiness.http_get_path: /ready
kompose.service.healthcheck.readiness.http_get_port: 8080
kompose.service.healthcheck.readiness.interval: 10s
kompose.service.healthcheck.readiness.timeout: 1s
kompose.service.healthcheck.readiness.retries: 5
# test tcp socket
mongo:
image: mongo
ports:
- "27017"
healthcheck:
interval: 10s
timeout: 1s
retries: 5
labels:
kompose.service.group: "my-group"
kompose.service.healthcheck.liveness.tcp_port: 8080
kompose.service.healthcheck.readiness.tcp_port: 9090
kompose.service.healthcheck.readiness.interval: 10s
kompose.service.healthcheck.readiness.timeout: 1s
kompose.service.healthcheck.readiness.retries: 5
# test multiple service merge
mysql:
image: mysql
ports:
- "3306"
healthcheck:
interval: 11s
timeout: 2s
retries: 6
labels:
kompose.service.group: "my-group"
kompose.service.healthcheck.liveness.tcp_port: 8081
kompose.service.healthcheck.readiness.tcp_port: 9091
kompose.service.healthcheck.readiness.interval: 11s
kompose.service.healthcheck.readiness.timeout: 2s
kompose.service.healthcheck.readiness.retries: 6
@@ -0,0 +1,401 @@
{
"kind": "List",
"apiVersion": "v1",
"metadata": {},
"items": [
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "mongo",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "my-group"
},
"annotations": {
"kompose.service.group": "my-group",
"kompose.service.healthcheck.liveness.tcp_port": "8080",
"kompose.service.healthcheck.readiness.interval": "10s",
"kompose.service.healthcheck.readiness.retries": "5",
"kompose.service.healthcheck.readiness.tcp_port": "9090",
"kompose.service.healthcheck.readiness.timeout": "1s"
}
},
"spec": {
"ports": [
{
"name": "27017",
"port": 27017,
"targetPort": 27017
}
],
"selector": {
"io.kompose.service": "my-group"
}
},
"status": {
"loadBalancer": {}
}
},
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "mysql",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "my-group"
},
"annotations": {
"kompose.service.group": "my-group",
"kompose.service.healthcheck.liveness.tcp_port": "8081",
"kompose.service.healthcheck.readiness.interval": "11s",
"kompose.service.healthcheck.readiness.retries": "6",
"kompose.service.healthcheck.readiness.tcp_port": "9091",
"kompose.service.healthcheck.readiness.timeout": "2s"
}
},
"spec": {
"ports": [
{
"name": "3306",
"port": 3306,
"targetPort": 3306
}
],
"selector": {
"io.kompose.service": "my-group"
}
},
"status": {
"loadBalancer": {}
}
},
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "postgresql",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "postgresql"
},
"annotations": {
"kompose.service.healthcheck.liveness.http_get_path": "/health",
"kompose.service.healthcheck.liveness.http_get_port": "8080",
"kompose.service.healthcheck.readiness.http_get_path": "/ready",
"kompose.service.healthcheck.readiness.http_get_port": "8080",
"kompose.service.healthcheck.readiness.interval": "10s",
"kompose.service.healthcheck.readiness.retries": "5",
"kompose.service.healthcheck.readiness.timeout": "1s"
}
},
"spec": {
"ports": [
{
"name": "5432",
"port": 5432,
"targetPort": 5432
}
],
"selector": {
"io.kompose.service": "postgresql"
}
},
"status": {
"loadBalancer": {}
}
},
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "redis",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "redis"
},
"annotations": {
"kompose.service.healthcheck.readiness.interval": "10s",
"kompose.service.healthcheck.readiness.retries": "5",
"kompose.service.healthcheck.readiness.test": "echo \"liveness\"",
"kompose.service.healthcheck.readiness.timeout": "1s"
}
},
"spec": {
"ports": [
{
"name": "6379",
"port": 6379,
"targetPort": 6379
}
],
"selector": {
"io.kompose.service": "redis"
}
},
"status": {
"loadBalancer": {}
}
},
{
"kind": "Deployment",
"apiVersion": "apps/v1",
"metadata": {
"name": "my-group",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "my-group"
},
"annotations": {
"kompose.service.group": "my-group",
"kompose.service.healthcheck.liveness.tcp_port": "8081",
"kompose.service.healthcheck.readiness.interval": "11s",
"kompose.service.healthcheck.readiness.retries": "6",
"kompose.service.healthcheck.readiness.tcp_port": "9091",
"kompose.service.healthcheck.readiness.timeout": "2s"
}
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"io.kompose.service": "my-group"
}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"io.kompose.service": "my-group"
},
"annotations": {
"kompose.service.group": "my-group",
"kompose.service.healthcheck.liveness.tcp_port": "8080",
"kompose.service.healthcheck.readiness.interval": "10s",
"kompose.service.healthcheck.readiness.retries": "5",
"kompose.service.healthcheck.readiness.tcp_port": "9090",
"kompose.service.healthcheck.readiness.timeout": "1s"
}
},
"spec": {
"containers": [
{
"name": "mongo",
"image": "mongo",
"ports": [
{
"containerPort": 27017
}
],
"resources": {},
"livenessProbe": {
"tcpSocket": {
"port": 8080
},
"timeoutSeconds": 1,
"periodSeconds": 10,
"failureThreshold": 5
},
"readinessProbe": {
"tcpSocket": {
"port": 9090
},
"timeoutSeconds": 1,
"periodSeconds": 10,
"failureThreshold": 5
}
},
{
"name": "mysql",
"image": "mysql",
"ports": [
{
"containerPort": 3306
}
],
"resources": {},
"livenessProbe": {
"tcpSocket": {
"port": 8081
},
"timeoutSeconds": 2,
"periodSeconds": 11,
"failureThreshold": 6
},
"readinessProbe": {
"tcpSocket": {
"port": 9091
},
"timeoutSeconds": 2,
"periodSeconds": 11,
"failureThreshold": 6
}
}
],
"restartPolicy": "Always"
}
},
"strategy": {}
},
"status": {}
},
{
"kind": "Deployment",
"apiVersion": "apps/v1",
"metadata": {
"name": "postgresql",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "postgresql"
},
"annotations": {
"kompose.service.healthcheck.liveness.http_get_path": "/health",
"kompose.service.healthcheck.liveness.http_get_port": "8080",
"kompose.service.healthcheck.readiness.http_get_path": "/ready",
"kompose.service.healthcheck.readiness.http_get_port": "8080",
"kompose.service.healthcheck.readiness.interval": "10s",
"kompose.service.healthcheck.readiness.retries": "5",
"kompose.service.healthcheck.readiness.timeout": "1s"
}
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"io.kompose.service": "postgresql"
}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"io.kompose.service": "postgresql"
},
"annotations": {
"kompose.service.healthcheck.liveness.http_get_path": "/health",
"kompose.service.healthcheck.liveness.http_get_port": "8080",
"kompose.service.healthcheck.readiness.http_get_path": "/ready",
"kompose.service.healthcheck.readiness.http_get_port": "8080",
"kompose.service.healthcheck.readiness.interval": "10s",
"kompose.service.healthcheck.readiness.retries": "5",
"kompose.service.healthcheck.readiness.timeout": "1s"
}
},
"spec": {
"containers": [
{
"name": "postgresql",
"image": "postgresql",
"ports": [
{
"containerPort": 5432
}
],
"resources": {},
"livenessProbe": {
"httpGet": {
"path": "/health",
"port": 8080
},
"timeoutSeconds": 1,
"periodSeconds": 10,
"failureThreshold": 5
},
"readinessProbe": {
"httpGet": {
"path": "/ready",
"port": 8080
},
"timeoutSeconds": 1,
"periodSeconds": 10,
"failureThreshold": 5
}
}
],
"restartPolicy": "Always"
}
},
"strategy": {}
},
"status": {}
},
{
"kind": "Deployment",
"apiVersion": "apps/v1",
"metadata": {
"name": "redis",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "redis"
},
"annotations": {
"kompose.service.healthcheck.readiness.interval": "10s",
"kompose.service.healthcheck.readiness.retries": "5",
"kompose.service.healthcheck.readiness.test": "echo \"liveness\"",
"kompose.service.healthcheck.readiness.timeout": "1s"
}
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"io.kompose.service": "redis"
}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"io.kompose.service": "redis"
},
"annotations": {
"kompose.service.healthcheck.readiness.interval": "10s",
"kompose.service.healthcheck.readiness.retries": "5",
"kompose.service.healthcheck.readiness.test": "echo \"liveness\"",
"kompose.service.healthcheck.readiness.timeout": "1s"
}
},
"spec": {
"containers": [
{
"name": "redis",
"image": "redis",
"ports": [
{
"containerPort": 6379
}
],
"resources": {},
"livenessProbe": {
"exec": {
"command": [
"echo \"liveness\""
]
},
"timeoutSeconds": 1,
"periodSeconds": 10,
"failureThreshold": 5
},
"readinessProbe": {
"exec": {
"command": [
"echo",
"liveness"
]
},
"timeoutSeconds": 1,
"periodSeconds": 10,
"failureThreshold": 5
}
}
],
"restartPolicy": "Always"
}
},
"strategy": {}
},
"status": {}
}
]
}
@@ -0,0 +1,660 @@
{
"kind": "List",
"apiVersion": "v1",
"metadata": {},
"items": [
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "mongo",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "mongo"
},
"annotations": {
"kompose.service.group": "my-group",
"kompose.service.healthcheck.liveness.tcp_port": "8080",
"kompose.service.healthcheck.readiness.interval": "10s",
"kompose.service.healthcheck.readiness.retries": "5",
"kompose.service.healthcheck.readiness.tcp_port": "9090",
"kompose.service.healthcheck.readiness.timeout": "1s"
}
},
"spec": {
"ports": [
{
"name": "27017",
"port": 27017,
"targetPort": 27017
}
],
"selector": {
"io.kompose.service": "mongo"
}
},
"status": {
"loadBalancer": {}
}
},
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "mysql",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "mysql"
},
"annotations": {
"kompose.service.group": "my-group",
"kompose.service.healthcheck.liveness.tcp_port": "8081",
"kompose.service.healthcheck.readiness.interval": "11s",
"kompose.service.healthcheck.readiness.retries": "6",
"kompose.service.healthcheck.readiness.tcp_port": "9091",
"kompose.service.healthcheck.readiness.timeout": "2s"
}
},
"spec": {
"ports": [
{
"name": "3306",
"port": 3306,
"targetPort": 3306
}
],
"selector": {
"io.kompose.service": "mysql"
}
},
"status": {
"loadBalancer": {}
}
},
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "postgresql",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "postgresql"
},
"annotations": {
"kompose.service.healthcheck.liveness.http_get_path": "/health",
"kompose.service.healthcheck.liveness.http_get_port": "8080",
"kompose.service.healthcheck.readiness.http_get_path": "/ready",
"kompose.service.healthcheck.readiness.http_get_port": "8080",
"kompose.service.healthcheck.readiness.interval": "10s",
"kompose.service.healthcheck.readiness.retries": "5",
"kompose.service.healthcheck.readiness.timeout": "1s"
}
},
"spec": {
"ports": [
{
"name": "5432",
"port": 5432,
"targetPort": 5432
}
],
"selector": {
"io.kompose.service": "postgresql"
}
},
"status": {
"loadBalancer": {}
}
},
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "redis",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "redis"
},
"annotations": {
"kompose.service.healthcheck.readiness.interval": "10s",
"kompose.service.healthcheck.readiness.retries": "5",
"kompose.service.healthcheck.readiness.test": "echo \"liveness\"",
"kompose.service.healthcheck.readiness.timeout": "1s"
}
},
"spec": {
"ports": [
{
"name": "6379",
"port": 6379,
"targetPort": 6379
}
],
"selector": {
"io.kompose.service": "redis"
}
},
"status": {
"loadBalancer": {}
}
},
{
"kind": "DeploymentConfig",
"apiVersion": "v1",
"metadata": {
"name": "mongo",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "mongo"
},
"annotations": {
"kompose.service.group": "my-group",
"kompose.service.healthcheck.liveness.tcp_port": "8080",
"kompose.service.healthcheck.readiness.interval": "10s",
"kompose.service.healthcheck.readiness.retries": "5",
"kompose.service.healthcheck.readiness.tcp_port": "9090",
"kompose.service.healthcheck.readiness.timeout": "1s"
}
},
"spec": {
"strategy": {
"resources": {}
},
"triggers": [
{
"type": "ConfigChange"
},
{
"type": "ImageChange",
"imageChangeParams": {
"automatic": true,
"containerNames": [
"mongo"
],
"from": {
"kind": "ImageStreamTag",
"name": "mongo:latest"
}
}
}
],
"replicas": 1,
"test": false,
"selector": {
"io.kompose.service": "mongo"
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"io.kompose.service": "mongo"
}
},
"spec": {
"containers": [
{
"name": "mongo",
"image": " ",
"ports": [
{
"containerPort": 27017
}
],
"resources": {},
"livenessProbe": {
"tcpSocket": {
"port": 8080
},
"timeoutSeconds": 1,
"periodSeconds": 10,
"failureThreshold": 5
},
"readinessProbe": {
"tcpSocket": {
"port": 9090
},
"timeoutSeconds": 1,
"periodSeconds": 10,
"failureThreshold": 5
}
}
],
"restartPolicy": "Always"
}
}
},
"status": {
"latestVersion": 0,
"observedGeneration": 0,
"replicas": 0,
"updatedReplicas": 0,
"availableReplicas": 0,
"unavailableReplicas": 0
}
},
{
"kind": "ImageStream",
"apiVersion": "v1",
"metadata": {
"name": "mongo",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "mongo"
}
},
"spec": {
"lookupPolicy": {
"local": false
},
"tags": [
{
"name": "",
"annotations": null,
"from": {
"kind": "DockerImage",
"name": "mongo"
},
"generation": null,
"importPolicy": {},
"referencePolicy": {
"type": ""
}
}
]
},
"status": {
"dockerImageRepository": ""
}
},
{
"kind": "DeploymentConfig",
"apiVersion": "v1",
"metadata": {
"name": "mysql",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "mysql"
},
"annotations": {
"kompose.service.group": "my-group",
"kompose.service.healthcheck.liveness.tcp_port": "8081",
"kompose.service.healthcheck.readiness.interval": "11s",
"kompose.service.healthcheck.readiness.retries": "6",
"kompose.service.healthcheck.readiness.tcp_port": "9091",
"kompose.service.healthcheck.readiness.timeout": "2s"
}
},
"spec": {
"strategy": {
"resources": {}
},
"triggers": [
{
"type": "ConfigChange"
},
{
"type": "ImageChange",
"imageChangeParams": {
"automatic": true,
"containerNames": [
"mysql"
],
"from": {
"kind": "ImageStreamTag",
"name": "mysql:latest"
}
}
}
],
"replicas": 1,
"test": false,
"selector": {
"io.kompose.service": "mysql"
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"io.kompose.service": "mysql"
}
},
"spec": {
"containers": [
{
"name": "mysql",
"image": " ",
"ports": [
{
"containerPort": 3306
}
],
"resources": {},
"livenessProbe": {
"tcpSocket": {
"port": 8081
},
"timeoutSeconds": 2,
"periodSeconds": 11,
"failureThreshold": 6
},
"readinessProbe": {
"tcpSocket": {
"port": 9091
},
"timeoutSeconds": 2,
"periodSeconds": 11,
"failureThreshold": 6
}
}
],
"restartPolicy": "Always"
}
}
},
"status": {
"latestVersion": 0,
"observedGeneration": 0,
"replicas": 0,
"updatedReplicas": 0,
"availableReplicas": 0,
"unavailableReplicas": 0
}
},
{
"kind": "ImageStream",
"apiVersion": "v1",
"metadata": {
"name": "mysql",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "mysql"
}
},
"spec": {
"lookupPolicy": {
"local": false
},
"tags": [
{
"name": "",
"annotations": null,
"from": {
"kind": "DockerImage",
"name": "mysql"
},
"generation": null,
"importPolicy": {},
"referencePolicy": {
"type": ""
}
}
]
},
"status": {
"dockerImageRepository": ""
}
},
{
"kind": "DeploymentConfig",
"apiVersion": "v1",
"metadata": {
"name": "postgresql",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "postgresql"
},
"annotations": {
"kompose.service.healthcheck.liveness.http_get_path": "/health",
"kompose.service.healthcheck.liveness.http_get_port": "8080",
"kompose.service.healthcheck.readiness.http_get_path": "/ready",
"kompose.service.healthcheck.readiness.http_get_port": "8080",
"kompose.service.healthcheck.readiness.interval": "10s",
"kompose.service.healthcheck.readiness.retries": "5",
"kompose.service.healthcheck.readiness.timeout": "1s"
}
},
"spec": {
"strategy": {
"resources": {}
},
"triggers": [
{
"type": "ConfigChange"
},
{
"type": "ImageChange",
"imageChangeParams": {
"automatic": true,
"containerNames": [
"postgresql"
],
"from": {
"kind": "ImageStreamTag",
"name": "postgresql:latest"
}
}
}
],
"replicas": 1,
"test": false,
"selector": {
"io.kompose.service": "postgresql"
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"io.kompose.service": "postgresql"
}
},
"spec": {
"containers": [
{
"name": "postgresql",
"image": " ",
"ports": [
{
"containerPort": 5432
}
],
"resources": {},
"livenessProbe": {
"httpGet": {
"path": "/health",
"port": 8080
},
"timeoutSeconds": 1,
"periodSeconds": 10,
"failureThreshold": 5
},
"readinessProbe": {
"httpGet": {
"path": "/ready",
"port": 8080
},
"timeoutSeconds": 1,
"periodSeconds": 10,
"failureThreshold": 5
}
}
],
"restartPolicy": "Always"
}
}
},
"status": {
"latestVersion": 0,
"observedGeneration": 0,
"replicas": 0,
"updatedReplicas": 0,
"availableReplicas": 0,
"unavailableReplicas": 0
}
},
{
"kind": "ImageStream",
"apiVersion": "v1",
"metadata": {
"name": "postgresql",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "postgresql"
}
},
"spec": {
"lookupPolicy": {
"local": false
},
"tags": [
{
"name": "",
"annotations": null,
"from": {
"kind": "DockerImage",
"name": "postgresql"
},
"generation": null,
"importPolicy": {},
"referencePolicy": {
"type": ""
}
}
]
},
"status": {
"dockerImageRepository": ""
}
},
{
"kind": "DeploymentConfig",
"apiVersion": "v1",
"metadata": {
"name": "redis",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "redis"
},
"annotations": {
"kompose.service.healthcheck.readiness.interval": "10s",
"kompose.service.healthcheck.readiness.retries": "5",
"kompose.service.healthcheck.readiness.test": "echo \"liveness\"",
"kompose.service.healthcheck.readiness.timeout": "1s"
}
},
"spec": {
"strategy": {
"resources": {}
},
"triggers": [
{
"type": "ConfigChange"
},
{
"type": "ImageChange",
"imageChangeParams": {
"automatic": true,
"containerNames": [
"redis"
],
"from": {
"kind": "ImageStreamTag",
"name": "redis:latest"
}
}
}
],
"replicas": 1,
"test": false,
"selector": {
"io.kompose.service": "redis"
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"io.kompose.service": "redis"
}
},
"spec": {
"containers": [
{
"name": "redis",
"image": " ",
"ports": [
{
"containerPort": 6379
}
],
"resources": {},
"livenessProbe": {
"exec": {
"command": [
"echo \"liveness\""
]
},
"timeoutSeconds": 1,
"periodSeconds": 10,
"failureThreshold": 5
},
"readinessProbe": {
"exec": {
"command": [
"echo",
"liveness"
]
},
"timeoutSeconds": 1,
"periodSeconds": 10,
"failureThreshold": 5
}
}
],
"restartPolicy": "Always"
}
}
},
"status": {
"latestVersion": 0,
"observedGeneration": 0,
"replicas": 0,
"updatedReplicas": 0,
"availableReplicas": 0,
"unavailableReplicas": 0
}
},
{
"kind": "ImageStream",
"apiVersion": "v1",
"metadata": {
"name": "redis",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "redis"
}
},
"spec": {
"lookupPolicy": {
"local": false
},
"tags": [
{
"name": "",
"annotations": null,
"from": {
"kind": "DockerImage",
"name": "redis"
},
"generation": null,
"importPolicy": {},
"referencePolicy": {
"type": ""
}
}
]
},
"status": {
"dockerImageRepository": ""
}
}
]
}