This is an automated email from the ASF dual-hosted git repository. kezhenxu94 pushed a commit to branch psql in repository https://gitbox.apache.org/repos/asf/skywalking-kubernetes.git
commit bbc649e3870fd14eade81c54d71c3f0e189e2e9a Author: kezhenxu94 <kezhenx...@apache.org> AuthorDate: Fri Nov 18 17:47:09 2022 +0800 Refactor oap init job, and support postgresql storage --- chart/skywalking/Chart.yaml | 4 ++ chart/skywalking/README.md | 6 +-- chart/skywalking/templates/_helpers.tpl | 59 ++++++++++++++++++++++++-- chart/skywalking/templates/oap-deployment.yaml | 23 +--------- chart/skywalking/templates/oap-init.job.yaml | 37 +++++----------- chart/skywalking/values.yaml | 20 ++++++++- 6 files changed, 94 insertions(+), 55 deletions(-) diff --git a/chart/skywalking/Chart.yaml b/chart/skywalking/Chart.yaml index 87072cf..78ee446 100644 --- a/chart/skywalking/Chart.yaml +++ b/chart/skywalking/Chart.yaml @@ -34,3 +34,7 @@ dependencies: version: ~7.5.1 repository: https://helm.elastic.co/ condition: elasticsearch.enabled + - name: postgresql + version: 12.1.2 + repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami + condition: postgresql.enabled diff --git a/chart/skywalking/README.md b/chart/skywalking/README.md index d629244..74b5acc 100644 --- a/chart/skywalking/README.md +++ b/chart/skywalking/README.md @@ -80,9 +80,9 @@ The following table lists the configurable parameters of the Skywalking chart an | `ui.service.loadBalancerIP` | Load Balancer IP address | `nil` | | `ui.service.annotations` | Kubernetes service annotations | `{}` | | `ui.service.loadBalancerSourceRanges` | Limit load balancer source IPs to list of CIDRs (where available)) | `[]` | -| `esInit.nodeAffinity` | ES init job node affinity policy | `{}` | -| `esInit.nodeSelector` | ES init job labels for master pod assignment | `{}` | -| `esInit.tolerations` | ES init job tolerations | `[]` | +| `oapInit.nodeAffinity` | OAP init job node affinity policy | `{}` | +| `oapInit.nodeSelector` | OAP init job labels for master pod assignment | `{}` | +| `oapInit.tolerations` | OAP init job tolerations | `[]` | | `elasticsearch.enabled` | Spin up a new elasticsearch cluster for SkyWalking | `true` | | `elasticsearch.clusterName` | This will be used as the Elasticsearch [cluster.name](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster.name.html) and should be unique per cluster in the namespace | `elasticsearch` | | `elasticsearch.nodeGroup` | This is the name that will be used for each group of nodes in the cluster. The name will be `clusterName-nodeGroup-X` | `master` | diff --git a/chart/skywalking/templates/_helpers.tpl b/chart/skywalking/templates/_helpers.tpl index f218240..a7b6ad9 100644 --- a/chart/skywalking/templates/_helpers.tpl +++ b/chart/skywalking/templates/_helpers.tpl @@ -85,13 +85,66 @@ Create the name of the service account to use for the satellite cluster {{ default (include "skywalking.satellite.fullname" .) .Values.serviceAccounts.satellite }} {{- end -}} -{{- define "skywalking.containers.wait-for-es" -}} +{{- define "skywalking.containers.wait-for-storage" -}} +{{- if eq .Values.oap.storageType "elasticsearch" }} - name: wait-for-elasticsearch image: {{ .Values.initContainer.image }}:{{ .Values.initContainer.tag }} imagePullPolicy: IfNotPresent -{{- if .Values.elasticsearch.enabled }} + {{- if .Values.elasticsearch.enabled }} command: ['sh', '-c', 'for i in $(seq 1 60); do nc -z -w3 {{ .Values.elasticsearch.clusterName }}-{{ .Values.elasticsearch.nodeGroup }} {{ .Values.elasticsearch.httpPort }} && exit 0 || sleep 5; done; exit 1'] -{{- else }} + {{- else }} command: ['sh', '-c', 'for i in $(seq 1 60); do nc -z -w3 {{ .Values.elasticsearch.config.host }} {{ .Values.elasticsearch.config.port.http }} && exit 0 || sleep 5; done; exit 1'] + {{- end }} +{{- else if eq .Values.oap.storageType "postgresql" -}} +- name: wait-for-postgresql + image: postgres:13 + imagePullPolicy: IfNotPresent + command: + - sh + - -c + - | + {{- if .Values.postgresql.enabled }} + until pg_isready -h '{{ template "skywalking.name" . }}-postgresql' -p '{{ .Values.postgresql.containerPorts.postgresql }}' -U '{{ .Values.postgresql.auth.username }}'; do + {{- else }} + until pg_isready -h '{{ .Values.postgresql.config.host }}' -p '{{ .Values.postgresql.containerPorts.postgresql }}' -U '{{ .Values.postgresql.auth.username }}'; do + {{- end }} + echo "Waiting for postgresql..." + sleep 3 + done +{{- end }} +{{- end -}} + +# Storage-related environment variables are defined here. +{{- define "skywalking.oap.envs.storage" -}} +- name: SW_STORAGE + value: {{ required "oap.storageType is required" .Values.oap.storageType }} +{{- if eq .Values.oap.storageType "elasticsearch" }} +- name: SW_STORAGE_ES_CLUSTER_NODES + {{- if .Values.elasticsearch.enabled }} + value: "{{ .Values.elasticsearch.clusterName }}-{{ .Values.elasticsearch.nodeGroup }}:{{ .Values.elasticsearch.httpPort }}" + {{- else }} + value: "{{ .Values.elasticsearch.config.host }}:{{ .Values.elasticsearch.config.port.http }}" + {{- end }} + {{- if not .Values.elasticsearch.enabled }} + {{- if .Values.elasticsearch.config.user }} +- name: SW_ES_USER + value: "{{ .Values.elasticsearch.config.user }}" + {{- end }} + {{- if .Values.elasticsearch.config.password }} +- name: SW_ES_PASSWORD + value: "{{ .Values.elasticsearch.config.password }}" + {{- end }} + {{- end }} +{{- else if eq .Values.oap.storageType "postgresql" }} +{{- $postgresqlHost := print (include "skywalking.name" .) "-postgresql" -}} +{{- if not .Values.postgresql.enabled -}} +{{- $postgresqlHost = .Values.postgresql.config.host -}} +{{- end }} +- name: SW_JDBC_URL + value: "jdbc:postgresql://{{ $postgresqlHost }}:{{ .Values.postgresql.containerPorts.postgresql }}/{{ .Values.postgresql.auth.database }}" +- name: SW_DATA_SOURCE_USER + value: "{{ .Values.postgresql.auth.username }}" +- name: SW_DATA_SOURCE_PASSWORD + value: "{{ .Values.postgresql.auth.password }}" {{- end }} {{- end -}} diff --git a/chart/skywalking/templates/oap-deployment.yaml b/chart/skywalking/templates/oap-deployment.yaml index d627a97..5406f64 100644 --- a/chart/skywalking/templates/oap-deployment.yaml +++ b/chart/skywalking/templates/oap-deployment.yaml @@ -81,9 +81,7 @@ spec: {{ toYaml .Values.imagePullSecrets | indent 8 }} {{- end }} initContainers: - {{- if hasPrefix "elasticsearch" .Values.oap.storageType }} - {{- include "skywalking.containers.wait-for-es" . | nindent 6 }} - {{- end }} + {{- include "skywalking.containers.wait-for-storage" . | nindent 6 }} containers: - name: {{ .Values.oap.name }} image: {{ .Values.oap.image.repository }}:{{ required "oap.image.tag is required" .Values.oap.image.tag }} @@ -126,24 +124,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.uid - - name: SW_STORAGE - value: {{ required "oap.storageType is required" .Values.oap.storageType }} - - name: SW_STORAGE_ES_CLUSTER_NODES -{{- if .Values.elasticsearch.enabled }} - value: "{{ .Values.elasticsearch.clusterName }}-{{ .Values.elasticsearch.nodeGroup }}:{{ .Values.elasticsearch.httpPort }}" -{{- else }} - value: "{{ .Values.elasticsearch.config.host }}:{{ .Values.elasticsearch.config.port.http }}" -{{- end }} -{{- if not .Values.elasticsearch.enabled }} - {{- if .Values.elasticsearch.config.user }} - - name: SW_ES_USER - value: "{{ .Values.elasticsearch.config.user }}" - {{- end }} - {{- if .Values.elasticsearch.config.password }} - - name: SW_ES_PASSWORD - value: "{{ .Values.elasticsearch.config.password }}" - {{- end }} -{{- end }} + {{- include "skywalking.oap.envs.storage" . | nindent 8 }} {{- range $key, $value := .Values.oap.env }} - name: {{ $key }} value: {{ $value | quote }} diff --git a/chart/skywalking/templates/oap-init.job.yaml b/chart/skywalking/templates/oap-init.job.yaml index 60db860..d061066 100644 --- a/chart/skywalking/templates/oap-init.job.yaml +++ b/chart/skywalking/templates/oap-init.job.yaml @@ -18,7 +18,7 @@ apiVersion: batch/v1 kind: Job metadata: - name: "{{ .Release.Name }}-es-init" + name: "{{ .Release.Name }}-oap-init" labels: app: {{ template "skywalking.name" . }} chart: {{ .Chart.Name }}-{{ .Chart.Version }} @@ -31,27 +31,27 @@ metadata: spec: template: metadata: - name: "{{ .Release.Name }}-es-init" + name: "{{ .Release.Name }}-oap-init" labels: app: {{ template "skywalking.name" . }} component: "{{ template "skywalking.fullname" . }}-job" release: {{ .Release.Name }} spec: serviceAccountName: {{ template "skywalking.serviceAccountName.oap" . }} - {{- if .Values.esInit.nodeAffinity }} + {{- if .Values.oapInit.nodeAffinity }} affinity: {{- end }} - {{- with .Values.esInit.nodeAffinity }} + {{- with .Values.oapInit.nodeAffinity }} nodeAffinity: {{ toYaml . | indent 10 }} {{- end }} -{{- if .Values.esInit.nodeSelector }} +{{- if .Values.oapInit.nodeSelector }} nodeSelector: -{{ toYaml .Values.esInit.nodeSelector | indent 8 }} +{{ toYaml .Values.oapInit.nodeSelector | indent 8 }} {{- end }} -{{- if .Values.esInit.tolerations }} +{{- if .Values.oapInit.tolerations }} tolerations: -{{ toYaml .Values.esInit.tolerations | indent 8 }} +{{ toYaml .Values.oapInit.tolerations | indent 8 }} {{- end }} {{- if .Values.imagePullSecrets }} imagePullSecrets: @@ -59,7 +59,7 @@ spec: {{- end }} restartPolicy: Never initContainers: - {{- include "skywalking.containers.wait-for-es" . | nindent 6 }} + {{- include "skywalking.containers.wait-for-storage" . | nindent 6 }} containers: - name: {{ .Values.oap.name }} image: {{ .Values.oap.image.repository }}:{{ required "oap.image.tag is required" .Values.oap.image.tag }} @@ -71,24 +71,7 @@ spec: env: - name: JAVA_OPTS value: "{{ .Values.oap.javaOpts }} -Dmode=init" - - name: SW_STORAGE - value: {{ required "oap.storageType is required" .Values.oap.storageType }} - - name: SW_STORAGE_ES_CLUSTER_NODES -{{- if .Values.elasticsearch.enabled }} - value: "{{ .Values.elasticsearch.clusterName }}-{{ .Values.elasticsearch.nodeGroup }}:{{ .Values.elasticsearch.httpPort }}" -{{- else }} - value: "{{ .Values.elasticsearch.config.host }}:{{ .Values.elasticsearch.config.port.http }}" -{{- end }} -{{- if not .Values.elasticsearch.enabled }} - {{- if .Values.elasticsearch.config.user }} - - name: SW_ES_USER - value: "{{ .Values.elasticsearch.config.user }}" - {{- end }} - {{- if .Values.elasticsearch.config.password }} - - name: SW_ES_PASSWORD - value: "{{ .Values.elasticsearch.config.password }}" - {{- end }} -{{- end }} + {{- include "skywalking.oap.envs.storage" . | nindent 8 }} {{- range $key, $value := .Values.oap.env }} - name: {{ $key }} value: {{ $value | quote }} diff --git a/chart/skywalking/values.yaml b/chart/skywalking/values.yaml index ade4916..f228e3d 100644 --- a/chart/skywalking/values.yaml +++ b/chart/skywalking/values.yaml @@ -117,7 +117,7 @@ ui: ## Limit load balancer source ips to list of CIDRs (where available) # loadBalancerSourceRanges: [] -esInit: +oapInit: nodeAffinity: {} nodeSelector: {} tolerations: [] @@ -371,6 +371,24 @@ elasticsearch: keystore: [] +postgresql: + enabled: false # Whether to start a demo postgresql deployment, don't use this for production. + config: + # The hostname of your own postgresql service, this only takes effect when postgresql.enabled is false. + host: postgresql-service.your-awesome-company.com + auth: + username: postgres + password: "123456" + database: skywalking + containerPorts: + postgresql: 5432 + primary: + persistence: + enabled: false + readReplicas: + persistence: + enabled: false + satellite: name: satellite replicas: 1