From 6565f937748be7c0c8d18e1dc12c44b474f68821 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E5=9B=BD=E5=8D=8E?= Date: Fri, 30 May 2025 17:02:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B1=B1=E8=A5=BF=E4=BF=A1=E6=81=AF=E9=99=A2?= =?UTF-8?q?=E4=BA=91=E6=97=B6=E4=BB=A3apaas=E7=BB=9F=E4=B8=80=E7=94=A8?= =?UTF-8?q?=E6=88=B7charts(arm)=20init?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .beagle.yml | 46 +++++ Chart.yaml | 32 ++-- README.md | 41 +++++ charts/file-upload/Chart.yaml | 11 -- charts/file-upload/templates/_helpers.tpl | 20 --- charts/file-upload/templates/file-upload.yaml | 71 -------- charts/postgresql/Chart.yaml | 6 + charts/postgresql/templates/configmap.yaml | 9 + charts/postgresql/templates/service.yaml | 13 ++ charts/postgresql/templates/statefulset.yaml | 87 ++++++++++ charts/redis/Chart.yaml | 6 + charts/redis/templates/configmap.yaml | 18 ++ charts/redis/templates/service.yaml | 13 ++ charts/redis/templates/statefulset.yaml | 72 ++++++++ charts/sms-verify-api/Chart.yaml | 11 -- charts/sms-verify-api/templates/_helpers.tpl | 20 --- .../templates/sms-verify-api.yaml | 52 ------ charts/usma-api/Chart.yaml | 11 -- charts/usma-api/templates/_helpers.tpl | 20 --- charts/usma-api/templates/usma-api.yaml | 70 -------- charts/usma-login-api/Chart.yaml | 11 -- charts/usma-login-api/templates/_helpers.tpl | 20 --- .../templates/usma-login-api.yaml | 48 ------ charts/usma-login/Chart.yaml | 11 -- charts/usma-login/templates/_helpers.tpl | 20 --- charts/usma-login/templates/usma-login.yaml | 43 ----- charts/usma-postgresql/Chart.yaml | 11 -- charts/usma-postgresql/templates/_helpers.tpl | 20 --- .../usma-postgresql/templates/configmap.yaml | 12 -- charts/usma-postgresql/templates/service.yaml | 15 -- .../templates/usma-postgres.yaml | 67 -------- charts/usma-redis/Chart.yaml | 11 -- charts/usma-redis/templates/_helpers.tpl | 20 --- charts/usma-redis/templates/configmap.yaml | 12 -- charts/usma-redis/templates/service.yaml | 15 -- charts/usma-redis/templates/usma-redis.yaml | 47 ----- charts/usma-ui/Chart.yaml | 11 -- charts/usma-ui/templates/_helpers.tpl | 20 --- charts/usma-ui/templates/service.yaml | 15 -- charts/usma-ui/templates/usma-ui.yaml | 48 ------ deploy.md | 14 ++ logo.png | Bin 0 -> 91160 bytes requirements.yaml | 30 +--- step.yaml | 5 + templates/_helpers.tpl | 116 +++++++------ templates/comfigmap-usma.yaml | 19 --- templates/configmap-sms.yaml | 32 ---- templates/configmap.yaml | 13 ++ templates/file-upload/deployment.yaml | 42 +++++ templates/file-upload/ingressroute.yaml | 17 ++ templates/file-upload/pvc.yaml | 12 ++ .../file-upload}/service.yaml | 14 +- templates/ingresshost.yaml | 8 + templates/ingressroute.yaml | 67 -------- templates/sms/configmap.yaml | 20 +++ templates/sms/deployment.yaml | 44 +++++ templates/sms/ingressroute.yaml | 17 ++ .../templates => templates/sms}/service.yaml | 16 +- templates/usma-api/deployment.yaml | 49 ++++++ templates/usma-api/ingressroute.yaml | 17 ++ templates/usma-api/pvc.yaml | 12 ++ .../usma-api}/service.yaml | 15 +- templates/usma-api/usma-db-init.yaml | 22 +++ templates/usma-login/api/deployment.yaml | 47 +++++ templates/usma-login/api/ingressroute.yaml | 17 ++ .../usma-login/api}/service.yaml | 12 +- templates/usma-login/ui/deployment.yaml | 50 ++++++ templates/usma-login/ui/ingressroute.yaml | 17 ++ .../usma-login/ui}/service.yaml | 14 +- templates/usma-ui.yaml | 12 ++ templates/usma-ui/deployment.yaml | 62 +++++++ templates/usma-ui/ingressroute.yaml | 17 ++ templates/usma-ui/service.yaml | 17 ++ values-overrides.yaml | 95 ----------- values.yaml | 160 +++++++++--------- 75 files changed, 1044 insertions(+), 1183 deletions(-) create mode 100644 .beagle.yml create mode 100644 README.md delete mode 100644 charts/file-upload/Chart.yaml delete mode 100644 charts/file-upload/templates/_helpers.tpl delete mode 100644 charts/file-upload/templates/file-upload.yaml create mode 100644 charts/postgresql/Chart.yaml create mode 100644 charts/postgresql/templates/configmap.yaml create mode 100644 charts/postgresql/templates/service.yaml create mode 100644 charts/postgresql/templates/statefulset.yaml create mode 100644 charts/redis/Chart.yaml create mode 100644 charts/redis/templates/configmap.yaml create mode 100644 charts/redis/templates/service.yaml create mode 100644 charts/redis/templates/statefulset.yaml delete mode 100644 charts/sms-verify-api/Chart.yaml delete mode 100644 charts/sms-verify-api/templates/_helpers.tpl delete mode 100644 charts/sms-verify-api/templates/sms-verify-api.yaml delete mode 100644 charts/usma-api/Chart.yaml delete mode 100644 charts/usma-api/templates/_helpers.tpl delete mode 100644 charts/usma-api/templates/usma-api.yaml delete mode 100644 charts/usma-login-api/Chart.yaml delete mode 100644 charts/usma-login-api/templates/_helpers.tpl delete mode 100644 charts/usma-login-api/templates/usma-login-api.yaml delete mode 100644 charts/usma-login/Chart.yaml delete mode 100644 charts/usma-login/templates/_helpers.tpl delete mode 100644 charts/usma-login/templates/usma-login.yaml delete mode 100644 charts/usma-postgresql/Chart.yaml delete mode 100644 charts/usma-postgresql/templates/_helpers.tpl delete mode 100644 charts/usma-postgresql/templates/configmap.yaml delete mode 100644 charts/usma-postgresql/templates/service.yaml delete mode 100644 charts/usma-postgresql/templates/usma-postgres.yaml delete mode 100644 charts/usma-redis/Chart.yaml delete mode 100644 charts/usma-redis/templates/_helpers.tpl delete mode 100644 charts/usma-redis/templates/configmap.yaml delete mode 100644 charts/usma-redis/templates/service.yaml delete mode 100644 charts/usma-redis/templates/usma-redis.yaml delete mode 100644 charts/usma-ui/Chart.yaml delete mode 100644 charts/usma-ui/templates/_helpers.tpl delete mode 100644 charts/usma-ui/templates/service.yaml delete mode 100644 charts/usma-ui/templates/usma-ui.yaml create mode 100644 deploy.md create mode 100644 logo.png create mode 100644 step.yaml delete mode 100644 templates/comfigmap-usma.yaml delete mode 100644 templates/configmap-sms.yaml create mode 100644 templates/configmap.yaml create mode 100644 templates/file-upload/deployment.yaml create mode 100644 templates/file-upload/ingressroute.yaml create mode 100644 templates/file-upload/pvc.yaml rename {charts/file-upload/templates => templates/file-upload}/service.yaml (61%) create mode 100644 templates/ingresshost.yaml delete mode 100644 templates/ingressroute.yaml create mode 100644 templates/sms/configmap.yaml create mode 100644 templates/sms/deployment.yaml create mode 100644 templates/sms/ingressroute.yaml rename {charts/sms-verify-api/templates => templates/sms}/service.yaml (56%) create mode 100644 templates/usma-api/deployment.yaml create mode 100644 templates/usma-api/ingressroute.yaml create mode 100644 templates/usma-api/pvc.yaml rename {charts/usma-api/templates => templates/usma-api}/service.yaml (54%) create mode 100644 templates/usma-api/usma-db-init.yaml create mode 100644 templates/usma-login/api/deployment.yaml create mode 100644 templates/usma-login/api/ingressroute.yaml rename {charts/usma-login-api/templates => templates/usma-login/api}/service.yaml (63%) create mode 100644 templates/usma-login/ui/deployment.yaml create mode 100644 templates/usma-login/ui/ingressroute.yaml rename {charts/usma-login/templates => templates/usma-login/ui}/service.yaml (56%) create mode 100644 templates/usma-ui.yaml create mode 100644 templates/usma-ui/deployment.yaml create mode 100644 templates/usma-ui/ingressroute.yaml create mode 100644 templates/usma-ui/service.yaml delete mode 100644 values-overrides.yaml diff --git a/.beagle.yml b/.beagle.yml new file mode 100644 index 0000000..4a0a6f3 --- /dev/null +++ b/.beagle.yml @@ -0,0 +1,46 @@ +kind: pipeline +name: docker + +trigger: + branch: + - v2.4.0 + +clone: + disable: true + +steps: + - name: fetch + image: registry.cn-qingdao.aliyuncs.com/wod/devops-git:1.0 + + - name: charts + image: registry.cn-qingdao.aliyuncs.com/wod/helm:v3 + commands: + - helm package . + + - name: minio + image: registry.cn-qingdao.aliyuncs.com/wod/devops-minio:1.0 + environment: + S3_ACCESS_KEY: + from_secret: ACCESS_KEY_MINIO + S3_SECRET_KEY: + from_secret: SECRET_KEY_MINIO + commands: + - mc alias set cache --api=S3v4 https://cache.wodcloud.com $S3_ACCESS_KEY $S3_SECRET_KEY + - mc cp ./usma-v2.4.0.tgz cache/kubernetes/market/charts/usma/v2.4.0/usma-v2.4.0.tgz + - mc cp ./values.yaml cache/kubernetes/market/charts/usma/v2.4.0/values.yaml + - mc cp ./README.md cache/kubernetes/market/charts/usma/v2.4.0/README.md + +--- +kind: secret +name: ACCESS_KEY_MINIO +get: + name: ACCESS_KEY_MINIO + path: devops-secrets + +--- +kind: secret +name: SECRET_KEY_MINIO +get: + name: SECRET_KEY_MINIO + path: devops-secrets + diff --git a/Chart.yaml b/Chart.yaml index 157d834..98924e8 100644 --- a/Chart.yaml +++ b/Chart.yaml @@ -1,23 +1,15 @@ apiVersion: v2 -name: usma +appVersion: v2.0 +dependencies: +- condition: redis.enabled + name: redis + repository: "" + version: 6.2.6 +- condition: postgresql.enabled + name: postgresql + repository: "" + version: "13.5" description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. +name: usma type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 1.0.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 1.16.0 +version: v2.4.0 diff --git a/README.md b/README.md new file mode 100644 index 0000000..6d678d8 --- /dev/null +++ b/README.md @@ -0,0 +1,41 @@ +### 概要说明 + +``` +统一用户v2.4.0版本 +``` + +### 镜像 + +usma-api [黄智] + +- registry.cn-qingdao.aliyuncs.com/wod/usma-api:v2.4.0-amd64 +- registry.cn-qingdao.aliyuncs.com/wod/usma-api:v2.4.0-arm64 + +usma-login-api [黄智] + +- registry.cn-qingdao.aliyuncs.com/wod/usma-login-api:2.4.0-amd64 +- registry.cn-qingdao.aliyuncs.com/wod/usma-login-api:2.4.0-arm64 + +sms-verify-api [黄智] + +- registry.cn-qingdao.aliyuncs.com/wod/sms-verify-api:v2.4.0-amd64 +- registry.cn-qingdao.aliyuncs.com/wod/sms-verify-api:v2.4.0-arm64 + +fileupload [黄智] + +- hub.wodcloud.com/devops/fileupload:v2.0 + +usma-ui [赵伟庚] + +- hub.wodcloud.com/usma/usma-ui:v2.2.3-alpha + +usma-login [赵伟庚] + +- hub.wodcloud.com/usma/usma-login:v2.2.1-alpha + +## 迁移对应数据库 + +1. postgresql (数据库) 内置数据库,包含自动导入sql job +2. redis (中间件) 内置redis + + diff --git a/charts/file-upload/Chart.yaml b/charts/file-upload/Chart.yaml deleted file mode 100644 index fe66240..0000000 --- a/charts/file-upload/Chart.yaml +++ /dev/null @@ -1,11 +0,0 @@ -name: file-upload -version: v2.0.0 -description: file-upload -appVersion: v2.0.0 -apiVersion: v1 -keywords: -- file-upload -- usma -maintainers: -- name: xuzeyi - email: xuzeyi@wodcloud.com \ No newline at end of file diff --git a/charts/file-upload/templates/_helpers.tpl b/charts/file-upload/templates/_helpers.tpl deleted file mode 100644 index 91df64c..0000000 --- a/charts/file-upload/templates/_helpers.tpl +++ /dev/null @@ -1,20 +0,0 @@ -{{/* vim: set filetype=mustache: */}} -{{/* -Expand the name of the chart. -*/}} -{{- define "file-upload.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* Helm required labels */}} -{{- define "file-upload.labels" -}} -heritage: {{ .Release.Service }} -release: {{ .Release.Name }} -chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} -{{- end -}} - -{{/* matchLabels */}} -{{- define "file-upload.matchLabels" -}} -release: {{ .Release.Name }} -app: "{{ template "file-upload.name" . }}" -{{- end -}} diff --git a/charts/file-upload/templates/file-upload.yaml b/charts/file-upload/templates/file-upload.yaml deleted file mode 100644 index d22ab2a..0000000 --- a/charts/file-upload/templates/file-upload.yaml +++ /dev/null @@ -1,71 +0,0 @@ ---- -kind: Deployment -apiVersion: apps/v1 -metadata: - name: file-upload - namespace: {{ .Release.Namespace }} - labels: -{{ include "file-upload.labels" . | indent 4 }} - app: file-upload - versoin: {{ .Values.tag }} -spec: - replicas: 1 - selector: - matchLabels: -{{ include "file-upload.matchLabels" . | indent 6 }} - app: file-upload - version: {{ .Values.tag }} - template: - metadata: - labels: -{{ include "file-upload.labels" . | indent 8 }} - app: file-upload - version: {{ .Values.tag }} - spec: - nodeSelector: -{{ toYaml $.Values.nodeSelector | indent 8 }} - containers: - - name: file-upload - image: {{ .Values.global.hub }}/{{ .Values.image }}:{{ .Values.tag }} - imagePullPolicy: Always - resources: - {{- toYaml .Values.resources | nindent 12 }} - ports: - - name: http - containerPort: 80 - protocol: TCP - livenessProbe: - tcpSocket: - port: 80 - initialDelaySeconds: 50 - periodSeconds: 10 - timeoutSeconds: 1 - successThreshold: 1 - resources: - {{- toYaml .Values.resources | nindent 12 }} - volumeMounts: - - name: "localtime" - mountPath: "/etc/localtime" - - name: data - mountPath: "/app/static" - volumes: - - name: "localtime" - hostPath: - path: "/etc/localtime" - {{- if .Values.storageSpec.hostPath }} - - name: data - hostPath: - path: /data/{{ .Release.Namespace }}/file-upload - {{- else if .Values.storageSpec.emptyDir }} - - name: data - emptyDir: {} -{{- else if .Values.storageSpec.volumeClaimTemplate }} - volumeClaimTemplates: - - metadata: - name: "data" - labels: -{{ include "app.labels" . | indent 8 }} - app: file-upload - spec: -{{ toYaml $.Values.storageSpec.volumeClaimTemplate.spec | indent 6 }} - {{- end }} \ No newline at end of file diff --git a/charts/postgresql/Chart.yaml b/charts/postgresql/Chart.yaml new file mode 100644 index 0000000..890a57c --- /dev/null +++ b/charts/postgresql/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +appVersion: "13.5" +description: postgresql +name: postgresql +type: application +version: v1.0 diff --git a/charts/postgresql/templates/configmap.yaml b/charts/postgresql/templates/configmap.yaml new file mode 100644 index 0000000..4e4117c --- /dev/null +++ b/charts/postgresql/templates/configmap.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: postgresql-config + namespace: {{ .Release.Namespace }} +data: + POSTGRES_DB: postgres + POSTGRES_PASSWORD: {{ .Values.POSTGRES_PASSWORD }} + POSTGRES_USER: postgres diff --git a/charts/postgresql/templates/service.yaml b/charts/postgresql/templates/service.yaml new file mode 100644 index 0000000..cd9ee6f --- /dev/null +++ b/charts/postgresql/templates/service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: postgresql + namespace: {{ .Release.Namespace }} +spec: + ports: + - port: 5432 + protocol: TCP + targetPort: 5432 + selector: + app: postgresql + sessionAffinity: None diff --git a/charts/postgresql/templates/statefulset.yaml b/charts/postgresql/templates/statefulset.yaml new file mode 100644 index 0000000..5c34232 --- /dev/null +++ b/charts/postgresql/templates/statefulset.yaml @@ -0,0 +1,87 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: postgresql + namespace: {{ .Release.Namespace }} +spec: + replicas: 1 + selector: + matchLabels: + app: postgresql + serviceName: "" + template: + metadata: + labels: + app: postgresql + spec: + initContainers: + - name: lost-found + {{- if contains "/" .Values.image.repository }} + image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}" + {{- else }} + image: "{{ .Values.global.hub }}/{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}{{ template "beagle.imageArch" . }}" + {{- end }} + command: + - rm + - '-Rf' + - /var/lib/postgresql/data/lost+found + resources: {} + volumeMounts: + - name: data + mountPath: /var/lib/postgresql/data + - name: init-data + {{- if contains "/" .Values.image.repository }} + image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}" + {{- else }} + image: "{{ .Values.global.hub }}/{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}{{ template "beagle.imageArch" . }}" + {{- end }} + command: + - chown + - '-R' + - '999:999' + - /var/lib/postgresql/data + resources: {} + volumeMounts: + - name: data + mountPath: /var/lib/postgresql/data + containers: + - envFrom: + - configMapRef: + name: postgresql-config + {{- if contains "/" .Values.image.repository }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + {{- else }} + image: "{{ .Values.global.hub }}/{{ .Values.image.repository }}:{{ .Values.image.tag }}{{ template "beagle.imageArch" . }}" + {{- end }} + imagePullPolicy: "{{ .Values.global.imagePullPolicy }}" + name: data + ports: + - containerPort: 5432 + protocol: TCP + volumeMounts: + - mountPath: /var/lib/postgresql/data + name: data + - mountPath: /etc/localtime + name: localtime + restartPolicy: Always + volumes: + - hostPath: + path: /etc/localtime + type: "" + name: localtime + volumeClaimTemplates: + - apiVersion: v1 + kind: PersistentVolumeClaim + metadata: + labels: + app: postgresql + name: data + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi + storageClassName: {{ .Values.storageClassName }} + volumeMode: Filesystem + diff --git a/charts/redis/Chart.yaml b/charts/redis/Chart.yaml new file mode 100644 index 0000000..b2175fd --- /dev/null +++ b/charts/redis/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +appVersion: 6.2.6 +description: redis +name: redis +type: application +version: v1.0 diff --git a/charts/redis/templates/configmap.yaml b/charts/redis/templates/configmap.yaml new file mode 100644 index 0000000..0d983c2 --- /dev/null +++ b/charts/redis/templates/configmap.yaml @@ -0,0 +1,18 @@ +{{- $redisConf := .Values.conf }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: redis + namespace: {{ .Release.Namespace }} +data: + redis.conf: | + daemonize no + pidfile /var/run/redis.pid + timeout 0 + loglevel verbose + logfile stdout + {{ .Values.conf.port }} + {{ .Values.conf.db }} + {{ .Values.conf.maxmem }} + {{ .Values.conf.apl }} + {{ .Values.conf.passwd }} diff --git a/charts/redis/templates/service.yaml b/charts/redis/templates/service.yaml new file mode 100644 index 0000000..ee6b064 --- /dev/null +++ b/charts/redis/templates/service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: redis + namespace: {{ .Release.Namespace }} +spec: + ports: + - port: 6379 + protocol: TCP + targetPort: 6379 + selector: + app: redis + sessionAffinity: None diff --git a/charts/redis/templates/statefulset.yaml b/charts/redis/templates/statefulset.yaml new file mode 100644 index 0000000..01c214a --- /dev/null +++ b/charts/redis/templates/statefulset.yaml @@ -0,0 +1,72 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: redis + namespace: {{ .Release.Namespace }} +spec: + podManagementPolicy: OrderedReady + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + app: redis + serviceName: "" + template: + metadata: + labels: + app: redis + spec: + containers: + - args: + - /usr/local/etc/redis/redis.conf + {{- if contains "/" .Values.image.repository }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + {{- else }} + image: "{{ .Values.global.hub }}/{{ .Values.image.repository }}:{{ .Values.image.tag }}{{ template "beagle.imageArch" . }}" + {{- end }} + imagePullPolicy: "{{ .Values.global.imagePullPolicy }}" + name: redis + ports: + - containerPort: 6379 + resources: {} + livenessProbe: + failureThreshold: 3 + initialDelaySeconds: 300 + periodSeconds: 10 + successThreshold: 1 + tcpSocket: + port: 6379 + timeoutSeconds: 1 + volumeMounts: + - mountPath: /etc/localtime + name: localtime + - mountPath: /usr/local/etc/redis + name: conf + - mountPath: /data + name: data + restartPolicy: Always + volumes: + - hostPath: + path: /etc/localtime + type: "" + name: localtime + - configMap: + defaultMode: 420 + name: redis + name: conf + volumeClaimTemplates: + - apiVersion: v1 + kind: PersistentVolumeClaim + metadata: + labels: + app: redis + name: data + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi + storageClassName: {{ .Values.storageClassName }} + volumeMode: Filesystem + diff --git a/charts/sms-verify-api/Chart.yaml b/charts/sms-verify-api/Chart.yaml deleted file mode 100644 index 92f872a..0000000 --- a/charts/sms-verify-api/Chart.yaml +++ /dev/null @@ -1,11 +0,0 @@ -name: sms-verify-api -version: v2.0.0 -description: sms-verify-api -appVersion: v2.0.0 -apiVersion: v1 -keywords: -- sms-verify-api -- usma -maintainers: -- name: xuzeyi - email: xuzeyi@wodcloud.com \ No newline at end of file diff --git a/charts/sms-verify-api/templates/_helpers.tpl b/charts/sms-verify-api/templates/_helpers.tpl deleted file mode 100644 index b7f0d52..0000000 --- a/charts/sms-verify-api/templates/_helpers.tpl +++ /dev/null @@ -1,20 +0,0 @@ -{{/* vim: set filetype=mustache: */}} -{{/* -Expand the name of the chart. -*/}} -{{- define "sms-verify-api.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* Helm required labels */}} -{{- define "sms-verify-api.labels" -}} -heritage: {{ .Release.Service }} -release: {{ .Release.Name }} -chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} -{{- end -}} - -{{/* matchLabels */}} -{{- define "sms-verify-api.matchLabels" -}} -release: {{ .Release.Name }} -app: "{{ template "sms-verify-api.name" . }}" -{{- end -}} diff --git a/charts/sms-verify-api/templates/sms-verify-api.yaml b/charts/sms-verify-api/templates/sms-verify-api.yaml deleted file mode 100644 index 76c163a..0000000 --- a/charts/sms-verify-api/templates/sms-verify-api.yaml +++ /dev/null @@ -1,52 +0,0 @@ ---- -kind: Deployment -apiVersion: apps/v1 -metadata: - name: sms-verify-api - namespace: {{ .Release.Namespace }} - labels: -{{ include "sms-verify-api.labels" . | indent 4 }} - app: sms-verify-api - versoin: {{ .Values.tag }} -spec: - replicas: 1 - selector: - matchLabels: -{{ include "sms-verify-api.matchLabels" . | indent 6 }} - app: sms-verify-api - template: - metadata: - labels: -{{ include "sms-verify-api.labels" . | indent 8 }} - app: sms-verify-api - version: {{ .Values.tag }} - spec: - volumes: - - name: localtime - hostPath: - path: /etc/localtime - containers: - - name: sms-verify-api - image: {{ .Values.global.hub }}/{{ .Values.image }}:{{ .Values.tag }} - ports: - - name: http - containerPort: 8080 - protocol: TCP - livenessProbe: - tcpSocket: - port: 8080 - initialDelaySeconds: 50 - periodSeconds: 10 - timeoutSeconds: 1 - successThreshold: 1 - resources: - {{- toYaml .Values.resources | nindent 12 }} - envFrom: - - configMapRef: - name: "sms" - volumeMounts: - - name: localtime - mountPath: /etc/localtime - imagePullPolicy: "Always" - restartPolicy: "Always" - diff --git a/charts/usma-api/Chart.yaml b/charts/usma-api/Chart.yaml deleted file mode 100644 index 4789f81..0000000 --- a/charts/usma-api/Chart.yaml +++ /dev/null @@ -1,11 +0,0 @@ -name: usma-api -version: v1.0.0 -description: usma-api -appVersion: v1.0.0 -apiVersion: v1 -keywords: -- usma-api -- usma -maintainers: -- name: xuzeyi - email: xuzeyi@wodcloud.com \ No newline at end of file diff --git a/charts/usma-api/templates/_helpers.tpl b/charts/usma-api/templates/_helpers.tpl deleted file mode 100644 index e098969..0000000 --- a/charts/usma-api/templates/_helpers.tpl +++ /dev/null @@ -1,20 +0,0 @@ -{{/* vim: set filetype=mustache: */}} -{{/* -Expand the name of the chart. -*/}} -{{- define "usma-api.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* Helm required labels */}} -{{- define "usma-api.labels" -}} -heritage: {{ .Release.Service }} -release: {{ .Release.Name }} -chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} -{{- end -}} - -{{/* matchLabels */}} -{{- define "usma-api.matchLabels" -}} -release: {{ .Release.Name }} -app: "{{ template "usma-api.name" . }}" -{{- end -}} diff --git a/charts/usma-api/templates/usma-api.yaml b/charts/usma-api/templates/usma-api.yaml deleted file mode 100644 index d39ddc2..0000000 --- a/charts/usma-api/templates/usma-api.yaml +++ /dev/null @@ -1,70 +0,0 @@ ---- -kind: Deployment -apiVersion: apps/v1 -metadata: - name: usma-api - namespace: {{ .Release.Namespace }} - labels: -{{ include "usma-api.labels" . | indent 4 }} - app: usma-api - versoin: {{ .Values.tag }} -spec: - replicas: 1 - selector: - matchLabels: -{{ include "usma-api.matchLabels" . | indent 6 }} - app: usma-api - template: - metadata: - labels: -{{ include "usma-api.labels" . | indent 8 }} - app: usma-api - version: {{ .Values.tag }} - spec: - nodeSelector: -{{ toYaml $.Values.nodeSelector | indent 8 }} - containers: - - name: usma-api - image: {{ .Values.global.hub }}/{{ .Values.image }}:{{ .Values.tag }} - ports: - - name: http - containerPort: 8080 - protocol: TCP - livenessProbe: - tcpSocket: - port: 8080 - initialDelaySeconds: 50 - periodSeconds: 10 - timeoutSeconds: 1 - successThreshold: 1 - envFrom: - - configMapRef: - name: usma - volumeMounts: - - name: localtime - mountPath: /etc/localtime - - name: log - mountPath: "/app/log" - resources: - {{- toYaml .Values.resources | nindent 12 }} - volumes: - - name: localtime - hostPath: - path: /etc/localtime - {{- if .Values.storageSpec.hostPath }} - - name: log - hostPath: - path: /data/{{ .Release.Namespace }}/usma-api/log - {{- else if .Values.storageSpec.emptyDir }} - - name: log - emptyDir: {} -{{- else if .Values.storageSpec.volumeClaimTemplate }} - volumeClaimTemplates: - - metadata: - name: "log" - labels: -{{ include "app.labels" . | indent 8 }} - app: usma-api - spec: -{{ toYaml $.Values.storageSpec.volumeClaimTemplate.spec | indent 6 }} - {{- end }} diff --git a/charts/usma-login-api/Chart.yaml b/charts/usma-login-api/Chart.yaml deleted file mode 100644 index 47556f5..0000000 --- a/charts/usma-login-api/Chart.yaml +++ /dev/null @@ -1,11 +0,0 @@ -name: usma-login-api -version: v1.0.0 -description: usma-login-api -appVersion: v1.0.0 -apiVersion: v1 -keywords: -- usma-login-api -- usma -maintainers: -- name: xuzeyi - email: xuzeyi@wodcloud.com \ No newline at end of file diff --git a/charts/usma-login-api/templates/_helpers.tpl b/charts/usma-login-api/templates/_helpers.tpl deleted file mode 100644 index 9bf4672..0000000 --- a/charts/usma-login-api/templates/_helpers.tpl +++ /dev/null @@ -1,20 +0,0 @@ -{{/* vim: set filetype=mustache: */}} -{{/* -Expand the name of the chart. -*/}} -{{- define "usma-login-api.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* Helm required labels */}} -{{- define "usma-login-api.labels" -}} -heritage: {{ .Release.Service }} -release: {{ .Release.Name }} -chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} -{{- end -}} - -{{/* matchLabels */}} -{{- define "usma-login-api.matchLabels" -}} -release: {{ .Release.Name }} -app: "{{ template "usma-login-api.name" . }}" -{{- end -}} diff --git a/charts/usma-login-api/templates/usma-login-api.yaml b/charts/usma-login-api/templates/usma-login-api.yaml deleted file mode 100644 index f0f6ddc..0000000 --- a/charts/usma-login-api/templates/usma-login-api.yaml +++ /dev/null @@ -1,48 +0,0 @@ ---- -kind: Deployment -apiVersion: apps/v1 -metadata: - name: usma-login-api - namespace: {{ .Release.Namespace }} - labels: -{{ include "usma-login-api.labels" . | indent 4 }} - app: usma-login-api - versoin: {{ .Values.tag }} -spec: - replicas: 1 - selector: - matchLabels: -{{ include "usma-login-api.matchLabels" . | indent 6 }} - app: usma-login-api - template: - metadata: - labels: -{{ include "usma-login-api.labels" . | indent 8 }} - app: usma-login-api - spec: - volumes: - - name: "localtime" - hostPath: - path: "/etc/localtime" - containers: - - name: "usma-login-api" - image: {{ .Values.global.hub }}/{{ .Values.image }}:{{ .Values.tag }} - ports: - - name: "usma-login-api" - containerPort: 80 - protocol: "TCP" - livenessProbe: - tcpSocket: - port: 80 - initialDelaySeconds: 50 - periodSeconds: 10 - timeoutSeconds: 1 - successThreshold: 1 - resources: - {{- toYaml .Values.resources | nindent 12 }} - envFrom: - - configMapRef: - name: "usma" - volumeMounts: - - name: "localtime" - mountPath: "/etc/localtime" diff --git a/charts/usma-login/Chart.yaml b/charts/usma-login/Chart.yaml deleted file mode 100644 index 84c6497..0000000 --- a/charts/usma-login/Chart.yaml +++ /dev/null @@ -1,11 +0,0 @@ -name: usma-login -version: v2.0.0 -description: usma-login -appVersion: v2.0.0 -apiVersion: v1 -keywords: -- usma-login -- usma -maintainers: -- name: xuzeyi - email: xuzeyi@wodcloud.com \ No newline at end of file diff --git a/charts/usma-login/templates/_helpers.tpl b/charts/usma-login/templates/_helpers.tpl deleted file mode 100644 index 408174d..0000000 --- a/charts/usma-login/templates/_helpers.tpl +++ /dev/null @@ -1,20 +0,0 @@ -{{/* vim: set filetype=mustache: */}} -{{/* -Expand the name of the chart. -*/}} -{{- define "usma-login.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* Helm required labels */}} -{{- define "usma-login.labels" -}} -heritage: {{ .Release.Service }} -release: {{ .Release.Name }} -chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} -{{- end -}} - -{{/* matchLabels */}} -{{- define "usma-login.matchLabels" -}} -release: {{ .Release.Name }} -app: "{{ template "usma-login.name" . }}" -{{- end -}} diff --git a/charts/usma-login/templates/usma-login.yaml b/charts/usma-login/templates/usma-login.yaml deleted file mode 100644 index 79e91a7..0000000 --- a/charts/usma-login/templates/usma-login.yaml +++ /dev/null @@ -1,43 +0,0 @@ ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: usma-login - namespace: {{ .Release.Namespace }} - labels: -{{ include "usma-login.labels" . | indent 4 }} - app: usma-login - versoin: {{ .Values.tag }} -spec: - replicas: 1 - selector: - matchLabels: -{{ include "usma-login.matchLabels" . | indent 6 }} - app: usma-login - template: - metadata: - labels: -{{ include "usma-login.labels" . | indent 8 }} - app: usma-login - spec: - volumes: - - name: localtime - hostPath: - path: /etc/localtime - containers: - - name: usma-login - image: {{ .Values.global.hub }}/{{ .Values.image }}:{{ .Values.tag }} - imagePullPolicy: Always - resources: - {{- toYaml .Values.resources | nindent 12 }} - ports: - - name: http - containerPort: 80 - livenessProbe: - httpGet: - path: /usma/login - port: 80 - scheme: HTTP - volumeMounts: - - name: localtime - mountPath: "/etc/localtime" \ No newline at end of file diff --git a/charts/usma-postgresql/Chart.yaml b/charts/usma-postgresql/Chart.yaml deleted file mode 100644 index 9e36981..0000000 --- a/charts/usma-postgresql/Chart.yaml +++ /dev/null @@ -1,11 +0,0 @@ -name: usma-postgresql -version: 1.0.0 -description: usma-postgresql -appVersion: 1.0.0 -apiVersion: v1 -keywords: -- usma-postgresql -- usma -maintainers: -- name: xuzeyi - email: xuzeyi@wodcloud.com \ No newline at end of file diff --git a/charts/usma-postgresql/templates/_helpers.tpl b/charts/usma-postgresql/templates/_helpers.tpl deleted file mode 100644 index 0eb4de3..0000000 --- a/charts/usma-postgresql/templates/_helpers.tpl +++ /dev/null @@ -1,20 +0,0 @@ -{{/* vim: set filetype=mustache: */}} -{{/* -Expand the name of the chart. -*/}} -{{- define "usma-postgresql.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* Helm required labels */}} -{{- define "usma-postgresql.labels" -}} -heritage: {{ .Release.Service }} -release: {{ .Release.Name }} -chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} -{{- end -}} - -{{/* matchLabels */}} -{{- define "usma-postgresql.matchLabels" -}} -release: {{ .Release.Name }} -app: "{{ template "usma-postgresql.name" . }}" -{{- end -}} diff --git a/charts/usma-postgresql/templates/configmap.yaml b/charts/usma-postgresql/templates/configmap.yaml deleted file mode 100644 index f9e37f1..0000000 --- a/charts/usma-postgresql/templates/configmap.yaml +++ /dev/null @@ -1,12 +0,0 @@ ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: usma-postgresql-config - labels: -{{ include "usma-postgresql.labels" . | indent 4 }} - app: usma-postgresql -data: - POSTGRES_DB: postgres - POSTGRES_USER: postgres - POSTGRES_PASSWORD: passwd123 \ No newline at end of file diff --git a/charts/usma-postgresql/templates/service.yaml b/charts/usma-postgresql/templates/service.yaml deleted file mode 100644 index 96d43b9..0000000 --- a/charts/usma-postgresql/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: usma-postgresql - labels: -{{ include "usma-postgresql.labels" . | indent 4 }} - app: usma-postgresql -spec: - selector: - app: usma-postgresql - ports: - - name: usma-postgresql - port: 5432 - targetPort: 5432 - protocol: TCP \ No newline at end of file diff --git a/charts/usma-postgresql/templates/usma-postgres.yaml b/charts/usma-postgresql/templates/usma-postgres.yaml deleted file mode 100644 index 6269a74..0000000 --- a/charts/usma-postgresql/templates/usma-postgres.yaml +++ /dev/null @@ -1,67 +0,0 @@ ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: usma-postgresql - namespace: {{ .Release.Namespace }} - labels: -{{ include "usma-postgresql.labels" . | indent 4 }} - app: usma-postgresql -spec: - replicas: 1 - selector: - matchLabels: -{{ include "usma-postgresql.matchLabels" . | indent 6 }} - app: usma-postgresql - template: - metadata: - labels: -{{ include "usma-postgresql.labels" . | indent 8 }} - app: usma-postgresql - spec: - nodeSelector: -{{ toYaml $.Values.nodeSelector | indent 8 }} - containers: - - name: usma-postgresql - image: {{ .Values.global.hub }}/{{ .Values.image }}:{{ .Values.tag }} - imagePullPolicy: Always - ports: - - containerPort: 5432 - livenessProbe: - tcpSocket: - port: 5432 - initialDelaySeconds: 50 - periodSeconds: 10 - timeoutSeconds: 1 - successThreshold: 1 - envFrom: - - configMapRef: - name: usma-postgresql-config - resources: - {{- toYaml .Values.resources | nindent 12 }} - volumeMounts: - - mountPath: /var/lib/postgresql/data - name: data - - mountPath: /etc/localtime - name: localtime - volumes: - - name: localtime - hostPath: - path: /etc/localtime - {{- if .Values.storageSpec.hostPath }} - - name: data - hostPath: - path: /data/{{ .Release.Namespace }}/usma-postgresql - {{- else if .Values.storageSpec.emptyDir }} - - name: data - emptyDir: {} -{{- else if .Values.storageSpec.volumeClaimTemplate }} - volumeClaimTemplates: - - metadata: - name: data - labels: -{{ include "app.labels" . | indent 8 }} - app: usma-postgresql - spec: -{{ toYaml $.Values.storageSpec.volumeClaimTemplate.spec | indent 6 }} - {{- end }} \ No newline at end of file diff --git a/charts/usma-redis/Chart.yaml b/charts/usma-redis/Chart.yaml deleted file mode 100644 index 060396d..0000000 --- a/charts/usma-redis/Chart.yaml +++ /dev/null @@ -1,11 +0,0 @@ -name: usma-redis -version: 5.0.3 -description: usma-redis -appVersion: 5.0.3 -apiVersion: v1 -keywords: -- usma-redis -- usma -maintainers: -- name: xuzeyi - email: xuzeyi@wodcloud.com \ No newline at end of file diff --git a/charts/usma-redis/templates/_helpers.tpl b/charts/usma-redis/templates/_helpers.tpl deleted file mode 100644 index ea32b5d..0000000 --- a/charts/usma-redis/templates/_helpers.tpl +++ /dev/null @@ -1,20 +0,0 @@ -{{/* vim: set filetype=mustache: */}} -{{/* -Expand the name of the chart. -*/}} -{{- define "usma-redis.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* Helm required labels */}} -{{- define "usma-redis.labels" -}} -heritage: {{ .Release.Service }} -release: {{ .Release.Name }} -chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} -{{- end -}} - -{{/* matchLabels */}} -{{- define "usma-redis.matchLabels" -}} -release: {{ .Release.Name }} -app: "{{ template "usma-redis.name" . }}" -{{- end -}} diff --git a/charts/usma-redis/templates/configmap.yaml b/charts/usma-redis/templates/configmap.yaml deleted file mode 100644 index 93bf186..0000000 --- a/charts/usma-redis/templates/configmap.yaml +++ /dev/null @@ -1,12 +0,0 @@ ---- -kind: ConfigMap -apiVersion: v1 -metadata: - name: usma-redis - namespace: {{ .Release.Namespace }} - labels: -{{ include "usma-redis.labels" . | indent 4 }} - app: usma-redis - versoin: {{ .Values.tag }} -data: - redis.conf: "daemonize no\npidfile /var/run/redis.pid\nport 6379\ntimeout 0\nrequirepass passwd123\nloglevel verbose\nlogfile stdout\ndatabases 16\nmaxmemory 64mb\nappendonly no\n" diff --git a/charts/usma-redis/templates/service.yaml b/charts/usma-redis/templates/service.yaml deleted file mode 100644 index 220abff..0000000 --- a/charts/usma-redis/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: usma-redis - labels: -{{ include "usma-redis.labels" . | indent 4 }} - app: usma-redis -spec: - selector: - app: usma-redis - ports: - - name: usma-redis - port: 6379 - targetPort: 6379 - protocol: TCP \ No newline at end of file diff --git a/charts/usma-redis/templates/usma-redis.yaml b/charts/usma-redis/templates/usma-redis.yaml deleted file mode 100644 index 9001ef7..0000000 --- a/charts/usma-redis/templates/usma-redis.yaml +++ /dev/null @@ -1,47 +0,0 @@ ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: usma-redis - namespace: {{ .Release.Namespace }} - labels: -{{ include "usma-redis.labels" . | indent 4 }} - app: usma-redis - versoin: {{ .Values.tag }} -spec: - replicas: 1 - selector: - matchLabels: -{{ include "usma-redis.matchLabels" . | indent 6 }} - app: usma-redis - template: - metadata: - labels: -{{ include "usma-redis.labels" . | indent 8 }} - app: usma-redis - spec: - containers: - - args: - - /usr/local/etc/redis/redis.conf - - --appendonly no - image: {{ .Values.global.hub }}/{{ .Values.image }}:{{ .Values.tag }} - imagePullPolicy: IfNotPresent - name: redis - ports: - - containerPort: 6379 - protocol: TCP - livenessProbe: - tcpSocket: - port: 6379 - initialDelaySeconds: 50 - periodSeconds: 10 - timeoutSeconds: 1 - successThreshold: 1 - volumeMounts: - - mountPath: /usr/local/etc/redis - name: conf - volumes: - - configMap: - defaultMode: 420 - name: usma-redis - name: conf \ No newline at end of file diff --git a/charts/usma-ui/Chart.yaml b/charts/usma-ui/Chart.yaml deleted file mode 100644 index 4cf7d15..0000000 --- a/charts/usma-ui/Chart.yaml +++ /dev/null @@ -1,11 +0,0 @@ -name: usma-ui -version: v2.2.0 -description: usma-ui -appVersion: v2.2.0 -apiVersion: v1 -keywords: -- usma-ui -- usma -maintainers: -- name: xuzeyi - email: xuzeyi@wodcloud.com \ No newline at end of file diff --git a/charts/usma-ui/templates/_helpers.tpl b/charts/usma-ui/templates/_helpers.tpl deleted file mode 100644 index cf50e60..0000000 --- a/charts/usma-ui/templates/_helpers.tpl +++ /dev/null @@ -1,20 +0,0 @@ -{{/* vim: set filetype=mustache: */}} -{{/* -Expand the name of the chart. -*/}} -{{- define "usma-ui.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* Helm required labels */}} -{{- define "usma-ui.labels" -}} -heritage: {{ .Release.Service }} -release: {{ .Release.Name }} -chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} -{{- end -}} - -{{/* matchLabels */}} -{{- define "usma-ui.matchLabels" -}} -release: {{ .Release.Name }} -app: "{{ template "usma-ui.name" . }}" -{{- end -}} diff --git a/charts/usma-ui/templates/service.yaml b/charts/usma-ui/templates/service.yaml deleted file mode 100644 index eb2c0a4..0000000 --- a/charts/usma-ui/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: usma-ui - labels: -{{ include "usma-ui.labels" . | indent 4 }} - app: usma-ui -spec: - selector: - app: usma-ui - ports: - - name: http - port: 80 - targetPort: 80 - protocol: TCP \ No newline at end of file diff --git a/charts/usma-ui/templates/usma-ui.yaml b/charts/usma-ui/templates/usma-ui.yaml deleted file mode 100644 index ffc4068..0000000 --- a/charts/usma-ui/templates/usma-ui.yaml +++ /dev/null @@ -1,48 +0,0 @@ ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: usma-ui - namespace: {{ .Release.Namespace }} - labels: -{{ include "usma-ui.labels" . | indent 4 }} - app: usma-ui - versoin: {{ .Values.tag }} -spec: - replicas: 1 - selector: - matchLabels: -{{ include "usma-ui.matchLabels" . | indent 6 }} - app: usma-ui - version: {{ .Values.tag }} - template: - metadata: - labels: -{{ include "usma-ui.labels" . | indent 8 }} - app: usma-ui - version: {{ .Values.tag }} - spec: - volumes: - - name: localtime - hostPath: - path: /etc/localtime - containers: - - name: usma-ui - image: {{ .Values.global.hub }}/{{ .Values.image }}:{{ .Values.tag }} - envFrom: - - configMapRef: - name: "usma" - resources: - {{- toYaml .Values.resources | nindent 12 }} - imagePullPolicy: Always - ports: - - name: http - containerPort: 80 - livenessProbe: - httpGet: - path: /usma/ui - port: 80 - scheme: HTTP - volumeMounts: - - name: localtime - mountPath: "/etc/localtime" \ No newline at end of file diff --git a/deploy.md b/deploy.md new file mode 100644 index 0000000..4198a5f --- /dev/null +++ b/deploy.md @@ -0,0 +1,14 @@ +### 安装命令 +helm install usma . -f values.yaml -n usma + +### 安装方式 + +``` shell +helm install usma . -f values.yaml -n namespace +``` + +### 卸载方式 + +``` shell +helm uninstall usma -n namespace +``` \ No newline at end of file diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1882561bed5246616f59717d696a74943d595b46 GIT binary patch literal 91160 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 literal 0 HcmV?d00001 diff --git a/requirements.yaml b/requirements.yaml index c6a9727..84eeb18 100644 --- a/requirements.yaml +++ b/requirements.yaml @@ -1,25 +1,7 @@ dependencies: - - name: file-upload - version: v2.0 - condition: file-upload.enabled - - name: sms-verify-api - version: v2.0.0 - condition: sms-verify-api.enabled - - name: usma-api - version: v2.2.2 - condition: usma-api.enabled - - name: usma-login - version: v2.2.2 - condition: usma-login.enabled - - name: usma-login-api - version: v2.2.2 - condition: usma-login-api.enabled - - name: usma-postgresql - version: 10.6 - condition: usma-postgresql.enabled - - name: usma-redis - version: 5.0.3 - condition: usma-redis.enabled - - name: usma-ui - version: hbyjt-2.2.2 - condition: usma-ui.enabled \ No newline at end of file + - name: postgresql + version: 13.5 + condition: postgresql.enabled + - name: redis + version: 6.2.6 + condition: redis.enabled \ No newline at end of file diff --git a/step.yaml b/step.yaml new file mode 100644 index 0000000..92bd673 --- /dev/null +++ b/step.yaml @@ -0,0 +1,5 @@ +configInfo: + - name: global.host + text: 地址 + type: text + value: "bg-usma.ysdpaas.local" diff --git a/templates/_helpers.tpl b/templates/_helpers.tpl index 3c5e498..87ccbff 100644 --- a/templates/_helpers.tpl +++ b/templates/_helpers.tpl @@ -1,63 +1,73 @@ -{{/* vim: set filetype=mustache: */}} {{/* -Expand the name of the chart. +Create chart imageArch suffix. */}} -{{- define "usma.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- define "beagle.imageArch" -}} +{{- if not (eq "amd64" .Values.global.imageArch) -}} +{{- print "-" .Values.global.imageArch -}} +{{- else -}} +{{- print "-" "amd64" -}} +{{- end -}} {{- end }} +{{/* vim: set filetype=mustache: */}} {{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. +Expand the name of the chart. */}} -{{- define "usma.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} +{{- define "usma.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "usma.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} +{{/* Helm required labels */}} +{{- define "usma-ui.labels" -}} +heritage: {{ .Release.Service }} +release: {{ .Release.Name }} +chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +{{- end -}} -{{/* -Common labels -*/}} -{{- define "usma.labels" -}} -helm.sh/chart: {{ include "usma.chart" . }} -{{ include "usma.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} +{{/* Helm required labels */}} +{{- define "usma-login.labels" -}} +heritage: {{ .Release.Service }} +release: {{ .Release.Name }} +chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +{{- end -}} -{{/* -Selector labels -*/}} -{{- define "usma.selectorLabels" -}} -app.kubernetes.io/name: {{ include "usma.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} +{{/* Helm required labels */}} +{{- define "usma-api.labels" -}} +heritage: {{ .Release.Service }} +release: {{ .Release.Name }} +chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +{{- end -}} + +{{/* Helm required labels */}} +{{- define "sms-verify-api.labels" -}} +heritage: {{ .Release.Service }} +release: {{ .Release.Name }} +chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +{{- end -}} + +{{/* Helm required labels */}} +{{- define "file-upload.labels" -}} +heritage: {{ .Release.Service }} +release: {{ .Release.Name }} +chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +{{- end -}} + +{{/* Helm required labels */}} +{{- define "portal-ui.labels" -}} +heritage: {{ .Release.Service }} +release: {{ .Release.Name }} +chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +{{- end -}} + +{{/* Helm required labels */}} +{{- define "usma-login-api.labels" -}} +heritage: {{ .Release.Service }} +release: {{ .Release.Name }} +chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +{{- end -}} + +{{/* matchLabels */}} +{{- define "usma.matchLabels" -}} +release: {{ .Release.Name }} +{{- end -}} -{{/* -Create the name of the service account to use -*/}} -{{- define "usma.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "usma.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/templates/comfigmap-usma.yaml b/templates/comfigmap-usma.yaml deleted file mode 100644 index 48dbd23..0000000 --- a/templates/comfigmap-usma.yaml +++ /dev/null @@ -1,19 +0,0 @@ ---- -kind: ConfigMap -apiVersion: v1 -metadata: - name: usma - labels: -{{ include "usma.labels" . | indent 4 }} - app: usma -data: - GIN_MODE: "debug" - # GIN_MODE: "release" - DB_URL: "host=usma-postgresql.{{ .Release.Namespace }} port=5432 user=postgres password=passwd123 dbname=usma sslmode=disable" - REDIS_URL: "redis://usma-redis.{{ .Release.Namespace }}:6379" - REDIS_PASSWORD: "passwd123" - LOG_DIR_PREFIX: "/app/log" - LOCATION_KEY: "QKFBZ-PGGWJ-VZQFF-FHPA7-QWT5H-YHF4T" - LOCATION_URL: "https://apis.map.qq.com/ws/location/v1/ip" - SMS_SERVICE: "http://sms-verify-api.{{ .Release.Namespace }}:80/sms/api" - USMA_HOST: "https://{{ .Values.global.host }}" \ No newline at end of file diff --git a/templates/configmap-sms.yaml b/templates/configmap-sms.yaml deleted file mode 100644 index fd38851..0000000 --- a/templates/configmap-sms.yaml +++ /dev/null @@ -1,32 +0,0 @@ ---- -kind: ConfigMap -apiVersion: v1 -metadata: - name: sms - labels: -{{ include "usma.labels" . | indent 4 }} - release: sms - app: sms -data: - GIN_MODE: "debug" -# GIN_MODE: "release" - REDIS_URL: "redis://usma-redis.{{ .Release.Namespace }}:6379" - REDIS_PASSWORD: "passwd123" - ACCESS_KEY_ID: "LTAI4GBcVubRjzX7ABPcHnhB" - ACCESS_SECRET: "dYE2dtABFOqYtK1ijcrits0yedHkw7" - TPL_CODE_LOGIN: "SMS_212925130" - TPL_CODE_PWD: "SMS_212925127" - TPL_CODE_REGISTRY: "SMS_212925128" - TPL_CODE_LOGIN_ABNORMAL: "SMS_212925129" - TPL_CODE_ID_CARD: "SMS_212925131" - TPL_CODE_MOBILE: "SMS_212925126" - TPL_CODE_SYSTEM: "SMS_229477217" - SIGN_NAME: "比格数据" - SMS_MODE: "aliYun" - #SMS_MODE: "mas" - #EC_NAME: "山西省科学技术厅" - #APP_ID: "kjptdx" - #SECRET_KEY: "kjptzdh0930" - #SIGN: "OIAhvyPXt" - #MAS_URL: "http://112.35.1.155:1992/sms/norsubmit" - diff --git a/templates/configmap.yaml b/templates/configmap.yaml new file mode 100644 index 0000000..cc68a35 --- /dev/null +++ b/templates/configmap.yaml @@ -0,0 +1,13 @@ +kind: ConfigMap +apiVersion: v1 +metadata: + name: usma + namespace: {{ .Release.Namespace }} +data: + GIN_MODE: "debug" + DB_SCHEMA: public + TOKEN_KEY: usmaToken + # GIN_MODE: "release" + LOG_DIR_PREFIX: "/app/log" + USMA_HOST: "https://{{ .Values.global.host }}" +{{ toYaml .Values.usma.conf | indent 2 }} diff --git a/templates/file-upload/deployment.yaml b/templates/file-upload/deployment.yaml new file mode 100644 index 0000000..ca08173 --- /dev/null +++ b/templates/file-upload/deployment.yaml @@ -0,0 +1,42 @@ +kind: Deployment +apiVersion: apps/v1 +metadata: + name: file-upload + namespace: {{ .Release.Namespace }} + labels: +{{ include "file-upload.labels" . | indent 4 }} + app: file-upload + versoin: {{ .Values.fileUpload.image.tag }} +spec: + replicas: 1 + selector: + matchLabels: + app: file-upload + template: + metadata: + labels: +{{ include "file-upload.labels" . | indent 8 }} + app: file-upload + version: {{ .Values.fileUpload.image.tag }} + spec: + volumes: + - name: localtime + hostPath: + path: /etc/localtime + type: '' + - name: data-file-upload + persistentVolumeClaim: + claimName: data-file-upload + containers: + - name: file-upload + {{- if contains "/" .Values.fileUpload.image.repository }} + image: "{{ .Values.fileUpload.image.repository }}:{{ .Values.fileUpload.image.tag }}{{ template "beagle.imageArch" . }}" + {{- else }} + image: "{{ .Values.global.hub }}/{{ .Values.fileUpload.image.repository }}:{{ .Values.fileUpload.image.tag }}{{ template "beagle.imageArch" . }}" + {{- end }} + imagePullPolicy: "{{ .Values.global.imagePullPolicy }}" + volumeMounts: + - name: localtime + mountPath: /etc/localtime + - name: data-file-upload + mountPath: /app/static diff --git a/templates/file-upload/ingressroute.yaml b/templates/file-upload/ingressroute.yaml new file mode 100644 index 0000000..b4e1783 --- /dev/null +++ b/templates/file-upload/ingressroute.yaml @@ -0,0 +1,17 @@ +apiVersion: bcc.bd-apaas.com/v1alpha1 +kind: IngressRoute +metadata: + name: file-upload + namespace: {{ .Release.Namespace }} +spec: + entryPoints: + - websecure + routes: + - kind: Rule + match: Host(`{{ .Values.global.host }}`) && PathPrefix(`/bgfile`) + services: + - kind: Service + name: file-upload + port: 80 + tls: + certResolver: default diff --git a/templates/file-upload/pvc.yaml b/templates/file-upload/pvc.yaml new file mode 100644 index 0000000..5e65963 --- /dev/null +++ b/templates/file-upload/pvc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: data-file-upload + namespace: {{ .Release.Namespace }} +spec: + accessModes: + - ReadWriteOnce + storageClassName: {{ .Values.fileUpload.storageClassName }} + resources: + requests: + storage: 10Gi diff --git a/charts/file-upload/templates/service.yaml b/templates/file-upload/service.yaml similarity index 61% rename from charts/file-upload/templates/service.yaml rename to templates/file-upload/service.yaml index 32b2411..f0a9479 100644 --- a/charts/file-upload/templates/service.yaml +++ b/templates/file-upload/service.yaml @@ -1,15 +1,19 @@ -apiVersion: v1 kind: Service +apiVersion: v1 metadata: name: file-upload + namespace: {{ .Release.Namespace }} labels: {{ include "file-upload.labels" . | indent 4 }} - app: file-upload -spec: - selector: app: file-upload + versoin: {{ .Values.fileUpload.image.tag }} +spec: ports: - name: http port: 80 - targetPort: 80 protocol: TCP + targetPort: 80 + selector: + app: file-upload + type: ClusterIP + sessionAffinity: None diff --git a/templates/ingresshost.yaml b/templates/ingresshost.yaml new file mode 100644 index 0000000..db910cd --- /dev/null +++ b/templates/ingresshost.yaml @@ -0,0 +1,8 @@ +apiVersion: bcc.bd-apaas.com/v1alpha1 +kind: IngressHost +metadata: + name: usma + namespace: {{ .Release.Namespace }} +spec: + host: {{ .Values.global.host }} + diff --git a/templates/ingressroute.yaml b/templates/ingressroute.yaml deleted file mode 100644 index 8a2c3b0..0000000 --- a/templates/ingressroute.yaml +++ /dev/null @@ -1,67 +0,0 @@ -apiVersion: bcc.bd-apaas.com/v1alpha1 -kind: IngressRoute -metadata: - name: {{.Release.Name}} - namespace: {{ .Release.Namespace }} -spec: - entryPoints: - - websecure - routes: - - kind: Rule - match: Host(`{{ .Values.global.host }}`) && PathPrefix(`/sms/api`) - middlewares: [] - priority: 0 - services: - - kind: Service - name: sms-verify-api - port: 80 - - kind: Rule - match: Host(`{{ .Values.global.host }}`) && PathPrefix(`/usma/ui`) - middlewares: [] - priority: 0 - services: - - kind: Service - name: usma-ui - port: 80 - - kind: Rule - match: Host(`{{ .Values.global.host }}`) && PathPrefix(`/bgfile`) - middlewares: [] - priority: 0 - services: - - kind: Service - name: file-upload - port: 80 - - kind: Rule - match: Host(`{{ .Values.global.host }}`) && PathPrefix(`/usma/api`) - middlewares: [] - priority: 0 - services: - - kind: Service - name: usma-api - port: 80 - - kind: Rule - match: Host(`{{ .Values.global.host }}`) && PathPrefix(`/iam/api`) - middlewares: [] - priority: 0 - services: - - kind: Service - name: usma-login-api - port: 80 - - kind: Rule - match: Host(`{{ .Values.global.host }}`) && PathPrefix(`/usma/login`) - middlewares: [] - priority: 0 - services: - - kind: Service - name: usma-login - port: 80 - tls: - certResolver: "default" ---- -apiVersion: bcc.bd-apaas.com/v1alpha1 -kind: IngressHost -metadata: - name: {{.Release.Name}} - namespace: {{ .Release.Namespace }} -spec: - host: {{ .Values.global.host }} diff --git a/templates/sms/configmap.yaml b/templates/sms/configmap.yaml new file mode 100644 index 0000000..2733fe0 --- /dev/null +++ b/templates/sms/configmap.yaml @@ -0,0 +1,20 @@ +kind: ConfigMap +apiVersion: v1 +metadata: + name: sms-verify-api + namespace: {{ .Release.Namespace }} +data: + GIN_MODE: "debug" + REDIS_URL: {{ .Values.usma.conf.REDIS_URL }} + REDIS_PASSWORD: {{ .Values.usma.conf.REDIS_PASSWORD }} + ACCESS_KEY_ID: "LTAI4GBcVubRjzX7ABPcHnhB" + ACCESS_SECRET: "dYE2dtABFOqYtK1ijcrits0yedHkw7" + TPL_CODE_LOGIN: "SMS_212925130" + TPL_CODE_PWD: "SMS_212925127" + TPL_CODE_REGISTRY: "SMS_212925128" + TPL_CODE_LOGIN_ABNORMAL: "SMS_212925129" + TPL_CODE_ID_CARD: "SMS_460741011" + TPL_CODE_MOBILE: "SMS_212925126" + TPL_CODE_SYSTEM: "SMS_229477217" + SIGN_NAME: "比格数据" + SMS_MODE: "aliYun" diff --git a/templates/sms/deployment.yaml b/templates/sms/deployment.yaml new file mode 100644 index 0000000..6ed8f21 --- /dev/null +++ b/templates/sms/deployment.yaml @@ -0,0 +1,44 @@ +kind: Deployment +apiVersion: apps/v1 +metadata: + name: sms-verify-api + namespace: {{ .Release.Namespace }} + labels: +{{ include "sms-verify-api.labels" . | indent 4 }} + app: sms-verify-api + versoin: {{ .Values.smsVerifyApi.image.tag }} +spec: + replicas: 1 + selector: + matchLabels: + app: sms-verify-api + template: + metadata: + labels: +{{ include "sms-verify-api.labels" . | indent 8 }} + app: sms-verify-api + version: {{ .Values.smsVerifyApi.image.tag }} + spec: + volumes: + - name: localtime + hostPath: + path: /etc/localtime + type: '' + containers: + - name: sms-verify-api + {{- if contains "/" .Values.smsVerifyApi.image.repository }} + image: "{{ .Values.smsVerifyApi.image.repository }}:{{ .Values.smsVerifyApi.image.tag }}{{ template "beagle.imageArch" . }}" + {{- else }} + image: "{{ .Values.global.hub }}/{{ .Values.smsVerifyApi.image.repository }}:{{ .Values.smsVerifyApi.image.tag }}{{ template "beagle.imageArch" . }}" + {{- end }} + imagePullPolicy: "{{ .Values.global.imagePullPolicy }}" + ports: + - containerPort: 8080 + protocol: TCP + envFrom: + - configMapRef: + name: sms-verify-api + volumeMounts: + - name: localtime + mountPath: /etc/localtime + restartPolicy: Always diff --git a/templates/sms/ingressroute.yaml b/templates/sms/ingressroute.yaml new file mode 100644 index 0000000..52bc058 --- /dev/null +++ b/templates/sms/ingressroute.yaml @@ -0,0 +1,17 @@ +apiVersion: bcc.bd-apaas.com/v1alpha1 +kind: IngressRoute +metadata: + name: sms-verify-api + namespace: {{ .Release.Namespace }} +spec: + entryPoints: + - websecure + routes: + - kind: Rule + match: Host(`{{ .Values.global.host }}`) && PathPrefix(`/sms/api`) + services: + - kind: Service + name: sms-verify-api + port: 80 + tls: + certResolver: default diff --git a/charts/sms-verify-api/templates/service.yaml b/templates/sms/service.yaml similarity index 56% rename from charts/sms-verify-api/templates/service.yaml rename to templates/sms/service.yaml index f2e7a0c..bd32e13 100644 --- a/charts/sms-verify-api/templates/service.yaml +++ b/templates/sms/service.yaml @@ -1,15 +1,19 @@ -apiVersion: v1 kind: Service +apiVersion: v1 metadata: name: sms-verify-api + namespace: {{ .Release.Namespace }} labels: {{ include "sms-verify-api.labels" . | indent 4 }} - app: sms-verify-api -spec: - selector: app: sms-verify-api + versoin: {{ .Values.smsVerifyApi.image.tag }} +spec: ports: - - name: http + - name: sms-verify-api + protocol: TCP port: 80 targetPort: 8080 - protocol: TCP + selector: + app: sms-verify-api + type: ClusterIP + sessionAffinity: None diff --git a/templates/usma-api/deployment.yaml b/templates/usma-api/deployment.yaml new file mode 100644 index 0000000..1985f2f --- /dev/null +++ b/templates/usma-api/deployment.yaml @@ -0,0 +1,49 @@ +kind: Deployment +apiVersion: apps/v1 +metadata: + name: usma-api + namespace: {{ .Release.Namespace }} + labels: +{{ include "usma-api.labels" . | indent 4 }} + app: usma-api + versoin: {{ .Values.usmaApi.image.tag }} +spec: + replicas: 1 + selector: + matchLabels: + app: usma-api + template: + metadata: + labels: +{{ include "usma-api.labels" . | indent 8 }} + app: usma-api + version: {{ .Values.usmaApi.image.tag }} + spec: + volumes: + - name: localtime + hostPath: + path: /etc/localtime + type: '' + - name: data-usma-log + persistentVolumeClaim: + claimName: data-usma-log + containers: + - name: usma-api + {{- if contains "/" .Values.usmaApi.image.repository }} + image: "{{ .Values.usmaApi.image.repository }}:{{ .Values.usmaApi.image.tag }}{{ template "beagle.imageArch" . }}" + {{- else }} + image: "{{ .Values.global.hub }}/{{ .Values.usmaApi.image.repository }}:{{ .Values.usmaApi.image.tag }}{{ template "beagle.imageArch" . }}" + {{- end }} + imagePullPolicy: "{{ .Values.global.imagePullPolicy }}" + ports: + - name: "usma-api" + containerPort: 8080 + protocol: "TCP" + envFrom: + - configMapRef: + name: "usma" + volumeMounts: + - name: localtime + mountPath: /etc/localtime + - name: data-usma-log + mountPath: "/app/log" diff --git a/templates/usma-api/ingressroute.yaml b/templates/usma-api/ingressroute.yaml new file mode 100644 index 0000000..cd1d158 --- /dev/null +++ b/templates/usma-api/ingressroute.yaml @@ -0,0 +1,17 @@ +apiVersion: bcc.bd-apaas.com/v1alpha1 +kind: IngressRoute +metadata: + name: usma-api + namespace: {{ .Release.Namespace }} +spec: + entryPoints: + - websecure + routes: + - kind: Rule + match: Host(`{{ .Values.global.host }}`) && PathPrefix(`/usma/api`) + services: + - kind: Service + name: usma-api + port: 80 + tls: + certResolver: default diff --git a/templates/usma-api/pvc.yaml b/templates/usma-api/pvc.yaml new file mode 100644 index 0000000..9545fbb --- /dev/null +++ b/templates/usma-api/pvc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: data-usma-log + namespace: {{ .Release.Namespace }} +spec: + accessModes: + - ReadWriteOnce + storageClassName: {{ .Values.usmaApi.storageClassName }} + resources: + requests: + storage: 10Gi diff --git a/charts/usma-api/templates/service.yaml b/templates/usma-api/service.yaml similarity index 54% rename from charts/usma-api/templates/service.yaml rename to templates/usma-api/service.yaml index 3116ba2..7a1ecb3 100644 --- a/charts/usma-api/templates/service.yaml +++ b/templates/usma-api/service.yaml @@ -1,15 +1,16 @@ -apiVersion: v1 kind: Service +apiVersion: v1 metadata: name: usma-api + namespace: {{ .Release.Namespace }} labels: {{ include "usma-api.labels" . | indent 4 }} - app: usma-api -spec: - selector: app: usma-api + versoin: {{ .Values.usmaApi.image.tag }} +spec: ports: - - name: http + - name: usma-api port: 80 - targetPort: 80 - protocol: TCP + targetPort: 8080 + selector: + app: usma-api \ No newline at end of file diff --git a/templates/usma-api/usma-db-init.yaml b/templates/usma-api/usma-db-init.yaml new file mode 100644 index 0000000..b9cf470 --- /dev/null +++ b/templates/usma-api/usma-db-init.yaml @@ -0,0 +1,22 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: usma-db-init + namespace: {{ .Release.Namespace }} +spec: + template: + spec: + restartPolicy: Never + containers: + - name: usma-db-init + {{- if contains "/" .Values.usmaDbInit.image.repository }} + image: "{{ .Values.usmaDbInit.image.repository }}:{{ .Values.usmaDbInit.image.tag }}{{ template "beagle.imageArch" . }}" + {{- else }} + image: "{{ .Values.global.hub }}/{{ .Values.usmaDbInit.image.repository }}:{{ .Values.usmaDbInit.image.tag }}{{ template "beagle.imageArch" . }}" + {{- end }} + imagePullPolicy: Always + envFrom: + - configMapRef: + name: "usma" + backoffLimit: 2 + diff --git a/templates/usma-login/api/deployment.yaml b/templates/usma-login/api/deployment.yaml new file mode 100644 index 0000000..51a830c --- /dev/null +++ b/templates/usma-login/api/deployment.yaml @@ -0,0 +1,47 @@ +kind: Deployment +apiVersion: apps/v1 +metadata: + name: usma-login-api + namespace: {{ .Release.Namespace }} + labels: +{{ include "usma-login-api.labels" . | indent 4 }} + app: usma-login-api + versoin: {{ .Values.usmaLoginApi.image.tag }} +spec: + replicas: 1 + selector: + matchLabels: + app: usma-login-api + template: + metadata: + labels: +{{ include "usma-login-api.labels" . | indent 8 }} + app: usma-login-api + version: {{ .Values.usmaLoginApi.image.tag }} + spec: + volumes: + - name: localtime + hostPath: + path: /etc/localtime + type: '' + containers: + - name: usma-login-api + {{- if contains "/" .Values.usmaLoginApi.image.repository }} + image: "{{ .Values.usmaLoginApi.image.repository }}:{{ .Values.usmaLoginApi.image.tag }}{{ template "beagle.imageArch" . }}" + {{- else }} + image: "{{ .Values.global.hub }}/{{ .Values.usmaLoginApi.image.repository }}:{{ .Values.usmaLoginApi.image.tag }}{{ template "beagle.imageArch" . }}" + {{- end }} + imagePullPolicy: "{{ .Values.global.imagePullPolicy }}" + ports: + - containerPort: 80 + protocol: TCP + envFrom: + - configMapRef: + name: usma + volumeMounts: + - name: localtime + mountPath: /etc/localtime + restartPolicy: Always + + + diff --git a/templates/usma-login/api/ingressroute.yaml b/templates/usma-login/api/ingressroute.yaml new file mode 100644 index 0000000..40e1b0b --- /dev/null +++ b/templates/usma-login/api/ingressroute.yaml @@ -0,0 +1,17 @@ +apiVersion: bcc.bd-apaas.com/v1alpha1 +kind: IngressRoute +metadata: + name: usma-login-api + namespace: {{ .Release.Namespace }} +spec: + entryPoints: + - websecure + routes: + - kind: Rule + match: Host(`{{ .Values.global.host }}`) && PathPrefix(`/iam/api`) + services: + - kind: Service + name: usma-login-api + port: 80 + tls: + certResolver: default diff --git a/charts/usma-login-api/templates/service.yaml b/templates/usma-login/api/service.yaml similarity index 63% rename from charts/usma-login-api/templates/service.yaml rename to templates/usma-login/api/service.yaml index 64ccb0e..dddc89c 100644 --- a/charts/usma-login-api/templates/service.yaml +++ b/templates/usma-login/api/service.yaml @@ -1,15 +1,19 @@ -apiVersion: v1 kind: Service +apiVersion: v1 metadata: name: usma-login-api + namespace: {{ .Release.Namespace }} labels: {{ include "usma-login-api.labels" . | indent 4 }} app: usma-login-api + versoin: {{ .Values.usmaLoginApi.image.tag }} spec: - selector: - app: usma-login-api ports: - name: usma-login-api + protocol: TCP port: 80 targetPort: 80 - protocol: TCP \ No newline at end of file + selector: + app: usma-login-api + type: ClusterIP + sessionAffinity: None diff --git a/templates/usma-login/ui/deployment.yaml b/templates/usma-login/ui/deployment.yaml new file mode 100644 index 0000000..16ecabd --- /dev/null +++ b/templates/usma-login/ui/deployment.yaml @@ -0,0 +1,50 @@ +kind: Deployment +apiVersion: apps/v1 +metadata: + name: usma-login + namespace: {{ .Release.Namespace }} + labels: +{{ include "usma-login.labels" . | indent 4 }} + app: usma-login + versoin: {{ .Values.usmaLogin.image.tag }} +spec: + replicas: 1 + selector: + matchLabels: + app: usma-login + template: + metadata: + labels: +{{ include "usma-login.labels" . | indent 8 }} + app: usma-login + version: {{ .Values.usmaLogin.image.tag }} + spec: + volumes: + - name: localtime + hostPath: + path: /etc/localtime + type: '' + containers: + - name: usma-login + {{- if contains "/" .Values.usmaLogin.image.repository }} + image: "{{ .Values.usmaLogin.image.repository }}:{{ .Values.usmaLogin.image.tag }}{{ template "beagle.imageArch" . }}" + {{- else }} + image: "{{ .Values.global.hub }}/{{ .Values.usmaLogin.image.repository }}:{{ .Values.usmaLogin.image.tag }}{{ template "beagle.imageArch" . }}" + {{- end }} + imagePullPolicy: "{{ .Values.global.imagePullPolicy }}" + ports: + - containerPort: 80 + protocol: TCP + volumeMounts: + - name: localtime + mountPath: /etc/localtime + resources: + limits: + cpu: 0.5 + memory: 1Gi + requests: + cpu: 0.1 + memory: 256Mi + restartPolicy: Always + + diff --git a/templates/usma-login/ui/ingressroute.yaml b/templates/usma-login/ui/ingressroute.yaml new file mode 100644 index 0000000..6052688 --- /dev/null +++ b/templates/usma-login/ui/ingressroute.yaml @@ -0,0 +1,17 @@ +apiVersion: bcc.bd-apaas.com/v1alpha1 +kind: IngressRoute +metadata: + name: usma-login + namespace: {{ .Release.Namespace }} +spec: + entryPoints: + - websecure + routes: + - kind: Rule + match: Host(`{{ .Values.global.host }}`) && PathPrefix(`/usma/login`) + services: + - kind: Service + name: usma-login + port: 80 + tls: + certResolver: default diff --git a/charts/usma-login/templates/service.yaml b/templates/usma-login/ui/service.yaml similarity index 56% rename from charts/usma-login/templates/service.yaml rename to templates/usma-login/ui/service.yaml index 751849e..0a89e74 100644 --- a/charts/usma-login/templates/service.yaml +++ b/templates/usma-login/ui/service.yaml @@ -1,15 +1,19 @@ -apiVersion: v1 kind: Service +apiVersion: v1 metadata: name: usma-login + namespace: {{ .Release.Namespace }} labels: {{ include "usma-login.labels" . | indent 4 }} app: usma-login + versoin: {{ .Values.usmaLogin.image.tag }} spec: - selector: - app: usma-login ports: - - name: http + - name: usma-login + protocol: TCP port: 80 targetPort: 80 - protocol: TCP \ No newline at end of file + selector: + app: usma-login + type: ClusterIP + sessionAffinity: None diff --git a/templates/usma-ui.yaml b/templates/usma-ui.yaml new file mode 100644 index 0000000..059084e --- /dev/null +++ b/templates/usma-ui.yaml @@ -0,0 +1,12 @@ +kind: ConfigMap +apiVersion: v1 +metadata: + name: usma-ui + namespace: {{ .Release.Namespace }} +data: + configmap: |- + window.defaultConfig = { + tokenName: "usmaToken", + gitLogoutUrl: "https://gitlab.ysdpaas.local/usma/rest/v5/git/sign_out", + usmaLoginUrl: "https://{{ .Values.global.host }}/usma/login/#/login" + }; diff --git a/templates/usma-ui/deployment.yaml b/templates/usma-ui/deployment.yaml new file mode 100644 index 0000000..2790306 --- /dev/null +++ b/templates/usma-ui/deployment.yaml @@ -0,0 +1,62 @@ +kind: Deployment +apiVersion: apps/v1 +metadata: + name: usma-ui + namespace: {{ .Release.Namespace }} + labels: +{{ include "usma-ui.labels" . | indent 4 }} + app: usma-ui + versoin: {{ .Values.usmaUi.image.tag }} +spec: + replicas: 1 + selector: + matchLabels: + app: usma-ui + template: + metadata: + labels: +{{ include "usma-ui.labels" . | indent 8 }} + app: usma-ui + version: {{ .Values.usmaUi.image.tag }} + spec: + volumes: + - name: localtime + hostPath: + path: /etc/localtime + type: '' + - name: configmap + configMap: + name: usma-ui + items: + - key: configmap + path: configmap.js + containers: + - name: usma-ui + {{- if contains "/" .Values.usmaUi.image.repository }} + image: "{{ .Values.usmaUi.image.repository }}:{{ .Values.usmaUi.image.tag }}{{ template "beagle.imageArch" . }}" + {{- else }} + image: "{{ .Values.global.hub }}/{{ .Values.usmaUi.image.repository }}:{{ .Values.usmaUi.image.tag }}{{ template "beagle.imageArch" . }}" + {{- end }} + imagePullPolicy: "{{ .Values.global.imagePullPolicy }}" + envFrom: + - configMapRef: + name: "usma" + ports: + - containerPort: 8080 + protocol: TCP + volumeMounts: + - name: localtime + mountPath: /etc/localtime + - name: configmap + mountPath: /www/usma/ui/static/config/configmap.js + subPath: configmap.js + resources: + limits: + cpu: 0.5 + memory: 1Gi + requests: + cpu: 0.1 + memory: 256Mi + restartPolicy: Always + + diff --git a/templates/usma-ui/ingressroute.yaml b/templates/usma-ui/ingressroute.yaml new file mode 100644 index 0000000..9c29aa5 --- /dev/null +++ b/templates/usma-ui/ingressroute.yaml @@ -0,0 +1,17 @@ +apiVersion: bcc.bd-apaas.com/v1alpha1 +kind: IngressRoute +metadata: + name: usma-ui + namespace: {{ .Release.Namespace }} +spec: + entryPoints: + - websecure + routes: + - kind: Rule + match: Host(`{{ .Values.global.host }}`) && PathPrefix(`/usma/ui`) + services: + - kind: Service + name: usma-ui + port: 8080 + tls: + certResolver: default diff --git a/templates/usma-ui/service.yaml b/templates/usma-ui/service.yaml new file mode 100644 index 0000000..9874b39 --- /dev/null +++ b/templates/usma-ui/service.yaml @@ -0,0 +1,17 @@ +kind: Service +apiVersion: v1 +metadata: + name: usma-ui + namespace: {{ .Release.Namespace }} + labels: +{{ include "usma-ui.labels" . | indent 4 }} + app: usma-ui + versoin: {{ .Values.usmaUi.image.tag }} +spec: + ports: + - name: usma-ui + protocol: TCP + port: 8080 + targetPort: 8080 + selector: + app: usma-ui diff --git a/values-overrides.yaml b/values-overrides.yaml deleted file mode 100644 index 5374a2a..0000000 --- a/values-overrides.yaml +++ /dev/null @@ -1,95 +0,0 @@ -# Default values for usma. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. -global: - hub: hub.wodcloud.com/usma - host: usma.test.wodcloud.com - - -resources: - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - limits: - cpu: 200m - memory: 500Mi - requests: - cpu: 200m - memory: 500Mi - -file-upload: - enabled: true - image: fileupload - tag: v2.0 - storageSpec: - hostPath: "/data/usma/file-upload" - # volumeClaimTemplate: - # spec: - # storageClassName: "nfs-client" - # accessModes: ["ReadWriteOnce"] - # resources: - # requests: - # storage: 1Gi - # selector: {} - nodeSelector: - kubernetes.io/hostname: 10.128.33.48 - -sms-verify-api: - enabled: true - image: sms-verify-api - tag: v1.0.0-alpha - -usma-api: - enabled: true - image: bg-usma-api - tag: v2.3.0-alpha - storageSpec: - hostPath: "/data/usma/usma-api/log" - # volumeClaimTemplate: - # spec: - # storageClassName: "nfs-client" - # accessModes: ["ReadWriteOnce"] - # resources: - # requests: - # storage: 1Gi - # selector: {} - nodeSelector: - kubernetes.io/hostname: 10.128.33.48 - -usma-login: - enabled: true - image: usma-login - tag: v2.2.1-alpha - -usma-login-api: - enabled: true - image: bg-login-base - tag: v2.2.2 - -usma-postgresql: - enabled: true - image: postgres - tag: 10.6 - storageSpec: - hostPath: "/data/usma/usma-postgresql" - # volumeClaimTemplate: - # spec: - # storageClassName: "nfs-client" - # accessModes: ["ReadWriteOnce"] - # resources: - # requests: - # storage: 1Gi - # selector: {} - nodeSelector: - kubernetes.io/hostname: 10.128.33.48 - -usma-redis: - enabled: true - image: redis - tag: 5.0.3 - -usma-ui: - enabled: true - image: usma-ui - tag: v2.2.2-alpha diff --git a/values.yaml b/values.yaml index a4545ba..acf643f 100644 --- a/values.yaml +++ b/values.yaml @@ -1,95 +1,89 @@ -# Default values for usma. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. global: - hub: hub.hbyjkffn.hb.cegn.cn:30443/wod - host: usma.hbyjkffn.hb.cegn.cn + # 镜像仓库地址 + hub: registry.cn-qingdao.aliyuncs.com/wod + # IngressHost + host: bg-usma.ysdpaas.local + # 镜像拉取策略 + imagePullPolicy: "IfNotPresent" + # 镜像架构(amd64,arm64,ppc64le,mips64le),只控制servicechoreography业务系统的镜像架构,依赖组件不受此参数控制 + imageArch: arm64 +usma: + conf: + DB_SCHEMA: "public" + DB_URL: "host=postgresql port=5432 user=postgres password=passwd123 dbname=postgres sslmode=disable search_path=public" + REDIS_URL: "redis://redis:6379" + REDIS_PASSWORD: "passwd123" + LOCATION_KEY: "QKFBZ-PGGWJ-VZQFF-FHPA7-QWT5H-YHF4T" + LOCATION_URL: "https://apis.map.qq.com/ws/location/v1/ip" + SMS_SERVICE: "http://sms-verify-api:80/sms/api" -resources: - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - limits: - cpu: 200m - memory: 500Mi - requests: - cpu: 200m - memory: 500Mi +fileUpload: + image: + repository: hub.wodcloud.com/devops/fileupload + tag: v2.0 + storageClassName: "hostpath" -file-upload: - enabled: true - image: fileupload - tag: v2.0 - storageSpec: - hostPath: "/data/usma/file-upload" - # volumeClaimTemplate: - # spec: - # storageClassName: "nfs-client" - # accessModes: ["ReadWriteOnce"] - # resources: - # requests: - # storage: 1Gi - # selector: {} - nodeSelector: - kubernetes.io/hostname: 10.11.92.36 +smsVerifyApi: + image: + repository: registry.cn-qingdao.aliyuncs.com/wod/sms-verify-api + tag: v2.4.0 -sms-verify-api: - enabled: true - image: sms-verify-api - tag: v2.0.0-hbyjt +usmaApi: + image: + repository: hub.wodcloud.com/apaas-sxxcy/usma-api + tag: v1.0.2 + storageClassName: "hostpath" -usma-api: - enabled: true - image: bg-usma-api - tag: v2.2.2 - storageSpec: - hostPath: "/data/usma/usma-api/log" - # volumeClaimTemplate: - # spec: - # storageClassName: "nfs-client" - # accessModes: ["ReadWriteOnce"] - # resources: - # requests: - # storage: 1Gi - # selector: {} - nodeSelector: - kubernetes.io/hostname: 10.11.92.36 +usmaLoginApi: + image: + repository: hub.wodcloud.com/apaas-sxxcy/usma-login-api + tag: v1.0.0 + storageClassName: "hostpath" -usma-login: - enabled: true - image: usma-login - tag: hbyjt-2.2.2 +usmaLogin: + image: + repository: hub.wodcloud.com/apaas-sxxcy/usma-login-ui + tag: v1.0.0 -usma-login-api: - enabled: true - image: bg-login-base - tag: v2.2.2 +usmaUi: + image: + repository: hub.wodcloud.com/apaas-sxxcy/usma-ui + tag: v1.0.1 -usma-postgresql: - enabled: true - image: postgres - tag: 10.6 - storageSpec: - hostPath: "/data/usma/usma-postgresql" - # volumeClaimTemplate: - # spec: - # storageClassName: "nfs-client" - # accessModes: ["ReadWriteOnce"] - # resources: - # requests: - # storage: 1Gi - # selector: {} - nodeSelector: - kubernetes.io/hostname: 10.11.92.36 +# 初始化数据库job +usmaDbInit: + image: + repository: hub.wodcloud.com/wod/usma-db-init + tag: v1.0.0 -usma-redis: - enabled: true - image: redis - tag: 5.0.3 +# redis中间件默认svc是 redis +redis: + enabled: true + image: + repository: redis + tag: 6.2.6 + #redis的config + conf: + port: 'port 6379' + db: 'databases 16' + maxmem: 'maxmemory 256mb' + apl: 'appendonly yes' + passwd: 'requirepass passwd123' + #持久化存储类 + storageClassName: "hostpath" -usma-ui: +# postgresql中间件默认svc是 postgresql +postgresql: enabled: true - image: usma-ui - tag: hbyjt-2.2.2 \ No newline at end of file + image: + repository: postgres + tag: 13.5 + initImage: + repository: busybox + tag: 1.33 + + #数据库密码 + POSTGRES_PASSWORD: "passwd123" + #持久化存储类 + storageClassName: "hostpath" -- 2.26.0