From fa5e57c6e15a87e2a6f14b6613bd99ce85d25967 Mon Sep 17 00:00:00 2001 From: maslow Date: Wed, 2 Feb 2022 00:04:42 +0800 Subject: [PATCH] feat(k8s): add startupProbe & readinessProbe support to services; --- .vscode/settings.json | 1 + deploy/kubernetes/fs.yml | 13 +++++++++ deploy/kubernetes/sys.yml | 21 ++++++++++++--- packages/system-server/src/index.ts | 12 ++++++--- .../src/lib/service-driver/kubernetes.ts | 27 +++++++++++++++++-- 5 files changed, 64 insertions(+), 10 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index e235b5c8ca..e107a5aa6d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -79,6 +79,7 @@ "lafyun", "millicores", "objs", + "Referer", "signin", "uids", "upsert", diff --git a/deploy/kubernetes/fs.yml b/deploy/kubernetes/fs.yml index 0a0e79cd8a..872d2357c4 100644 --- a/deploy/kubernetes/fs.yml +++ b/deploy/kubernetes/fs.yml @@ -44,6 +44,19 @@ spec: - image: docker.io/lafyun/storage-service:0.7.3 imagePullPolicy: IfNotPresent name: storage-service + startupProbe: + httpGet: + path: /health-check + port: http + periodSeconds: 3 + timeoutSeconds: 3 + failureThreshold: 20 + readinessProbe: + httpGet: + path: /health-check + port: http + periodSeconds: 10 + timeoutSeconds: 3 resources: requests: memory: "256Mi" diff --git a/deploy/kubernetes/sys.yml b/deploy/kubernetes/sys.yml index 8ee17ed97d..4d7e0182c3 100644 --- a/deploy/kubernetes/sys.yml +++ b/deploy/kubernetes/sys.yml @@ -51,11 +51,23 @@ spec: limits: memory: "1024Mi" cpu: "1000m" - livenessProbe: + startupProbe: httpGet: path: /health-check - port: 9000 - initialDelaySeconds: 20 + port: http + httpHeaders: + - name: Referer + value: startupProbe + periodSeconds: 3 + timeoutSeconds: 3 + failureThreshold: 30 + readinessProbe: + httpGet: + path: /health-check + port: http + httpHeaders: + - name: Referer + value: readinessProbe periodSeconds: 10 timeoutSeconds: 3 command: ["sh", "/app/start.sh"] @@ -147,4 +159,5 @@ spec: - name: LOG_LEVEL value: debug ports: - - containerPort: 9000 + - name: http + containerPort: 9000 diff --git a/packages/system-server/src/index.ts b/packages/system-server/src/index.ts index 298cf74011..fc5bcf2659 100644 --- a/packages/system-server/src/index.ts +++ b/packages/system-server/src/index.ts @@ -1,7 +1,7 @@ /* * @Author: Maslow * @Date: 2021-07-30 10:30:29 - * @LastEditTime: 2022-01-23 19:46:34 + * @LastEditTime: 2022-02-01 22:55:54 * @Description: */ @@ -58,9 +58,13 @@ process.on('SIGTERM', gracefullyExit) process.on('SIGINT', gracefullyExit) async function gracefullyExit() { - logger.info('exiting: removing system extension service') - await ServiceDriver.create().removeService({ appid: Constants.SYSTEM_EXTENSION_APPID } as any) - logger.info('exiting: system extension service has been removed') + + // NOT remove system extension app service if service driver is 'kubernetes', + if (Config.SERVICE_DRIVER === 'docker') { + logger.info('exiting: removing system extension service') + await ServiceDriver.create().removeService({ appid: Constants.SYSTEM_EXTENSION_APPID } as any) + logger.info('exiting: system extension service has been removed') + } logger.info('exiting: closing db connection') await DatabaseAgent.sys_accessor.close() diff --git a/packages/system-server/src/lib/service-driver/kubernetes.ts b/packages/system-server/src/lib/service-driver/kubernetes.ts index 8e81528b9d..fe3146cd72 100644 --- a/packages/system-server/src/lib/service-driver/kubernetes.ts +++ b/packages/system-server/src/lib/service-driver/kubernetes.ts @@ -120,6 +120,7 @@ export class KubernetesServiceDriver implements ServiceDriverInterface { labels: labels }, spec: { + terminationGracePeriodSeconds: 15, automountServiceAccountToken: app.appid === Constants.SYSTEM_EXTENSION_APPID, containers: [ { @@ -136,7 +137,7 @@ export class KubernetesServiceDriver implements ServiceDriverInterface { { name: 'RUNTIME_IMAGE', value: app.runtime?.image }, { name: 'FLAGS', value: `--max_old_space_size=${max_old_space_size}` } ], - ports: [{ containerPort: 8000 }], + ports: [{ containerPort: 8000, name: 'http' }], resources: { requests: { memory: `${req_memory}Mi`, @@ -146,7 +147,29 @@ export class KubernetesServiceDriver implements ServiceDriverInterface { memory: `${limit_memory}Mi`, cpu: `${limit_cpu}m` } - } + }, + startupProbe: { + httpGet: { + path: '/health-check', + port: 'http', + httpHeaders: [{ name: 'Referer', value: 'startupProbe' }] + }, + initialDelaySeconds: 0, + periodSeconds: 3, + timeoutSeconds: 3, + failureThreshold: 40 + }, + readinessProbe: { + httpGet: { + path: '/health-check', + port: 'http', + httpHeaders: [{ name: 'Referer', value: 'readinessProbe' }] + }, + initialDelaySeconds: 0, + periodSeconds: 60, + timeoutSeconds: 5, + failureThreshold: 3 + }, } ], }