diff --git a/.dockerignore b/.dockerignore index 61c7f5a..e66f1d7 100644 --- a/.dockerignore +++ b/.dockerignore @@ -140,3 +140,9 @@ tmp/ apps/networkx/client/python/dist/ apps/networkx/python_bindings/build/ + +charts/gart/charts/ + +k8s/debezium-config.yaml +k8s/gart-config.yaml +k8s/writer-deployment.yaml diff --git a/.gitignore b/.gitignore index 87fb07b..61a2abd 100644 --- a/.gitignore +++ b/.gitignore @@ -139,5 +139,11 @@ tmp/ apps/networkx/client/python/dist/ apps/networkx/python_bindings/build/ +charts/gart/charts/ + +k8s/debezium-config.yaml +k8s/gart-config.yaml +k8s/writer-deployment.yaml + *.zip _deps/ diff --git a/Dockerfile b/Dockerfile index c2ffad4..09c6370 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,20 +23,25 @@ FROM ubuntu:22.04 ARG build_type=All RUN apt-get update && apt-get install -y \ - build-essential \ - cmake \ - git \ - lsb-release \ - sudo \ - python3 \ - python3-pip \ - vim \ - wget + build-essential \ + cmake \ + git \ + lsb-release \ + sudo \ + python3 \ + python3-pip \ + vim \ + wget \ + netcat-openbsd \ + && rm -rf /var/lib/apt/lists/* + +RUN touch /workspace/env_script.sh RUN if [ "$build_type" = "All" ]; then \ - apt-get install -y openssh-server \ - && mkdir -p /var/run/sshd /workspace \ - && touch /workspace/env_script.sh \ + apt-get update && apt-get install -y \ + openssh-server \ + && rm -rf /var/lib/apt/lists/* \ + && mkdir -p /var/run/sshd; \ && echo "mkdir -p /root/.ssh && ssh-keygen -q -t rsa -N '' -f /root/.ssh/id_rsa" >> /workspace/env_script.sh \ && echo "cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys" >> /workspace/env_script.sh \ && echo "service ssh start" >> /workspace/env_script.sh; \ @@ -55,9 +60,6 @@ RUN if [ "$build_type" = "All" ]; then \ WORKDIR /deps RUN /workspace/gart/scripts/install-deps.sh /deps $build_type -# Complete the installation -RUN rm -rf /var/lib/apt/lists/* - # Find the Kafka directory and write its path to a file RUN if [ "$build_type" = "All" ]; then \ set -eux; \ diff --git a/charts/gart/.helmignore b/charts/gart/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/charts/gart/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/gart/Chart.yaml b/charts/gart/Chart.yaml new file mode 100644 index 0000000..ea5c46a --- /dev/null +++ b/charts/gart/Chart.yaml @@ -0,0 +1,22 @@ +annotations: + category: Database + licenses: Apache-2.0 +apiVersion: v2 +appVersion: 1.16.0 +name: gart +description: Graph Analysis on Relational Transactional Datasets +home: https://github.com/graphscope/gart +type: application +version: 0.1.0 +maintainers: +- name: GraphScope + url: https://github.com/graphscope + + +dependencies: +- name: kafka + repository: https://charts.bitnami.com/bitnami + version: "*" +- name: etcd + repository: https://charts.bitnami.com/bitnami + version: "*" \ No newline at end of file diff --git a/charts/gart/templates/_helpers.tpl b/charts/gart/templates/_helpers.tpl new file mode 100644 index 0000000..7d5c30e --- /dev/null +++ b/charts/gart/templates/_helpers.tpl @@ -0,0 +1,166 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "gart.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +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. +*/}} +{{- define "gart.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 "gart.debezium.fullname" -}} +{{- printf "%s-%s" (include "gart.fullname" .) "debezium" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "gart.converter.fullname" -}} +{{- printf "%s-%s" (include "gart.fullname" .) "converter" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "gart.writer.fullname" -}} +{{- printf "%s-%s" (include "gart.fullname" .) "writer" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "gart.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "gart.labels" -}} +helm.sh/chart: {{ include "gart.chart" . }} +{{ include "gart.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "gart.selectorLabels" -}} +app.kubernetes.io/name: {{ include "gart.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Return the proper gart converter image name +*/}} +{{- define "gart.converter.image" -}} +{{- $tag := .Chart.AppVersion | toString -}} +{{- with .Values.converter.image -}} +{{- if .tag -}} +{{- $tag = .tag | toString -}} +{{- end -}} +{{- if .registry -}} +{{- printf "%s/%s:%s" .registry .repository $tag -}} +{{- else -}} +{{- printf "%s:%s" .repository $tag -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Return the proper gart writer image name +*/}} +{{- define "gart.writer.image" -}} +{{- $tag := .Chart.AppVersion | toString -}} +{{- with .Values.writer.image -}} +{{- if .tag -}} +{{- $tag = .tag | toString -}} +{{- end -}} +{{- if .registry -}} +{{- printf "%s/%s:%s" .registry .repository $tag -}} +{{- else -}} +{{- printf "%s:%s" .repository $tag -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Return the proper gart debezium image name +*/}} +{{- define "gart.debezium.image" -}} +{{- $tag := .Chart.AppVersion | toString -}} +{{- with .Values.debezium.image -}} +{{- if .tag -}} +{{- $tag = .tag | toString -}} +{{- end -}} +{{- if .registry -}} +{{- printf "%s/%s:%s" .registry .repository $tag -}} +{{- else -}} +{{- printf "%s:%s" .repository $tag -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Return the proper gart curl image name +*/}} +{{- define "gart.curl.image" -}} +{{- $tag := .Chart.AppVersion | toString -}} +{{- with .Values.curl.image -}} +{{- if .tag -}} +{{- $tag = .tag | toString -}} +{{- end -}} +{{- if .registry -}} +{{- printf "%s/%s:%s" .registry .repository $tag -}} +{{- else -}} +{{- printf "%s:%s" .repository $tag -}} +{{- end -}} +{{- end -}} +{{- end -}} + + +{{/* +Return the configmap with the gart configuration +*/}} +{{- define "gart.configmapName" -}} +{{- if .Values.existingConfigmap -}} + {{- printf "%s" (tpl .Values.existingConfigmap $) -}} +{{- else -}} + {{- printf "%s-%s" (include "gart.fullname" .) "config" | trimSuffix "-" -}} +{{- end -}} +{{- end -}} + +{{/* +Return the configmap with the gart debezium configuration +*/}} +{{- define "gart.debezium.configmapName" -}} +{{- if .Values.debezium.existingConfigmap -}} + {{- printf "%s" (tpl .Values.debezium.existingConfigmap $) -}} +{{- else -}} + {{- printf "%s-%s" (include "gart.debezium.fullname" .) "config" | trimSuffix "-" -}} +{{- end -}} +{{- end -}} + +{{/* +Return the job name with the gart debezium +*/}} +{{- define "gart.debezium.jobName" -}} +{{- if .Values.debezium.job -}} + {{- printf "%s" (tpl .Values.debezium.job $) -}} +{{- else -}} + {{- printf "%s-%s" (include "gart.debezium.fullname" .) "job" | trimSuffix "-" -}} +{{- end -}} +{{- end -}} \ No newline at end of file diff --git a/charts/gart/templates/configmap.yaml b/charts/gart/templates/configmap.yaml new file mode 100644 index 0000000..542d8ab --- /dev/null +++ b/charts/gart/templates/configmap.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "gart.configmapName" . }} + namespace: {{ .Release.Namespace }} +data: + DB_HOST: {{ .Values.dataconfig.dbHost | quote }} + DB_PORT: {{ .Values.dataconfig.dbPort | quote }} + DB_USER: {{ .Values.dataconfig.dbUser | quote }} + DB_PASSWORD: {{ .Values.dataconfig.dbPassword | quote }} + DB_TYPE: {{ .Values.dataconfig.dbType | quote }} + DB_NAME: {{ .Values.dataconfig.dbName | quote }} + V6D_SOCKET: {{ .Values.dataconfig.v6dSocket | quote }} + V6D_SIZE: {{ .Values.dataconfig.v6dSize | quote }} + ETCD_PREFIX: {{ .Values.dataconfig.etcdPrefix | quote }} + ENABLE_BULKLOAD: {{ .Values.dataconfig.enableBulkload | quote }} + SUBGRAPH_NUM: {{ .Values.dataconfig.subgraphNum | quote }} diff --git a/charts/gart/templates/converter/deployment.yaml b/charts/gart/templates/converter/deployment.yaml new file mode 100644 index 0000000..66bec13 --- /dev/null +++ b/charts/gart/templates/converter/deployment.yaml @@ -0,0 +1,57 @@ +{{- $kafka_service_name := .Values.kafka.fullnameOverride }} +{{- $kafka_service_port := int .Values.kafka.service.ports.client }} +{{- $kafka_service := printf "%s:%d" $kafka_service_name $kafka_service_port }} + +{{- $etcd_service_name := .Values.etcd.fullnameOverride }} +{{- $etcd_service_port := int .Values.etcd.containerPorts.client }} +{{- $etcd_service := printf "%s:%d" $etcd_service_name $etcd_service_port }} + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "gart.converter.fullname" . }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.converter.replicaCount }} + selector: + matchLabels: + app: converter + template: + metadata: + labels: + app: converter + spec: + containers: + - name: converter + image: {{ include "gart.converter.image" . }} + imagePullPolicy: {{ .Values.converter.image.pullPolicy | quote }} + command: ["/bin/bash", "-c"] + args: + - | + cd /workspace/gart/build && + until nc -z {{ $kafka_service_name }} {{ $kafka_service_port }}; do echo waiting for kafka; sleep 5; done && + until nc -z {{ $etcd_service_name }} {{ $etcd_service_port }}; do echo waiting for etcd; sleep 5; done && + sleep 60 && + ./gart \ + --db-host ${DB_HOST} \ + --db-port ${DB_PORT} \ + --db-name ${DB_NAME} \ + --db-type ${DB_TYPE} \ + --user ${DB_USER} \ + --password ${DB_PASSWORD} \ + --v6d-sock ${V6D_SOCKET} \ + --v6d-size ${V6D_SIZE} \ + --etcd-endpoint {{ $etcd_service }} \ + --etcd-prefix ${ETCD_PREFIX} \ + --kafka-server {{ $kafka_service }} \ + --subgraph-num ${SUBGRAPH_NUM} \ + --enable-bulkload ${ENABLE_BULKLOAD} \ + --rg-from-etcd 1 \ + --k8s-mode yes \ + --role converter && + sleep infinity + envFrom: + - configMapRef: + name: {{ include "gart.configmapName" . }} + + diff --git a/charts/gart/templates/debezium/configmap.yaml b/charts/gart/templates/debezium/configmap.yaml new file mode 100644 index 0000000..0870358 --- /dev/null +++ b/charts/gart/templates/debezium/configmap.yaml @@ -0,0 +1,42 @@ +{{- $kafka_service_name := .Values.kafka.fullnameOverride }} +{{- $kafka_service_port := int .Values.kafka.service.ports.client }} +{{- $kafka_service := printf "%s:%d" $kafka_service_name $kafka_service_port }} +{{- $kafka_service := quote $kafka_service }} + +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "gart.debezium.configmapName" . }} + namespace: {{ .Release.Namespace }} +data: + mysql-connector.json: |- + { + "name": "debezium-connector-mysql", + "config": { + "connector.class": "io.debezium.connector.mysql.MySqlConnector", + "database.hostname": {{ .Values.dataconfig.dbHost | quote }}, + "database.port": {{ .Values.dataconfig.dbPort | quote }}, + "database.user": {{ .Values.dataconfig.dbUser | quote }}, + "database.password": {{ .Values.dataconfig.dbPassword | quote }}, + "database.include.list": {{ .Values.dataconfig.dbName | quote }}, + "table.include.list": "ldbc.organisation,ldbc.place,ldbc.tag,ldbc.tagclass,ldbc.person,ldbc.comment,ldbc.post,ldbc.forum,ldbc.org_islocationin,ldbc.ispartof,ldbc.issubclassof,ldbc.hastype,ldbc.comment_hascreator,ldbc.comment_hastag,ldbc.comment_islocationin,ldbc.replyof_comment,ldbc.replyof_post,ldbc.post_hascreator,ldbc.post_hastag,ldbc.post_islocationin,ldbc.forum_containerof,ldbc.forum_hasmoderator,ldbc.forum_hastag,ldbc.person_hasinterest,ldbc.person_islocationin,ldbc.forum_hasmember,ldbc.knows,ldbc.likes_comment,ldbc.likes_post,ldbc.studyat,ldbc.workat", + "snapshot.mode": "initial", + "database.server.id": "1", + "include.schema.changes": "false", + "tombstones.on.delete": "false", + "topic.prefix": "fullfillment", + "schema.history.internal.kafka.topic": "schemahistory.fullfillment", + "transforms": "Combine,ReplaceField", + "transforms.Combine.type": "io.debezium.transforms.ByLogicalTableRouter", + "transforms.Combine.topic.regex": "(.*)", + "transforms.Combine.topic.replacement": "binlog", + "transforms.ReplaceField.type": "org.apache.kafka.connect.transforms.ReplaceField$Value", + "transforms.ReplaceField.exclude": "ts_ms,transaction", + "key.converter": "org.apache.kafka.connect.json.JsonConverter", + "value.converter": "org.apache.kafka.connect.json.JsonConverter", + "key.converter.schemas.enable": "false", + "value.converter.schemas.enable": "false", + "database.history.kafka.bootstrap.servers": {{ $kafka_service }}, + "schema.history.internal.kafka.bootstrap.servers": {{ $kafka_service }} + } + } diff --git a/charts/gart/templates/debezium/deployment.yaml b/charts/gart/templates/debezium/deployment.yaml new file mode 100644 index 0000000..8f11979 --- /dev/null +++ b/charts/gart/templates/debezium/deployment.yaml @@ -0,0 +1,45 @@ +{{- $kafka_service_name := .Values.kafka.fullnameOverride }} +{{- $kafka_service_port := int .Values.kafka.service.ports.client }} +{{- $kafka_service := printf "%s:%d" $kafka_service_name $kafka_service_port }} +{{- $kafka_service := quote $kafka_service }} + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "gart.debezium.fullname" . }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.debezium.replicaCount }} + selector: + matchLabels: + app: debezium-mysql-connect + template: + metadata: + labels: + app: debezium-mysql-connect + spec: + containers: + - name: debezium-mysql-connect + image: {{ include "gart.debezium.image" . }} + imagePullPolicy: {{ .Values.debezium.image.pullPolicy | quote }} + env: + - name: BOOTSTRAP_SERVERS + value: {{ $kafka_service }} + - name: GROUP_ID + value: "1" + - name: CONFIG_STORAGE_TOPIC + value: "debezium-connect-configs" + - name: OFFSET_STORAGE_TOPIC + value: "debezium-connect-offsets" + - name: STATUS_STORAGE_TOPIC + value: "debezium-connect-status" + ports: + - containerPort: {{ .Values.debezium.containerPort }} + volumeMounts: + - name: debezium-config-volume + mountPath: /kafka/connect/debezium-config + volumes: + - name: debezium-config-volume + configMap: + name: {{ include "gart.debezium.configmapName" . }} + diff --git a/charts/gart/templates/debezium/job.yaml b/charts/gart/templates/debezium/job.yaml new file mode 100644 index 0000000..5d31700 --- /dev/null +++ b/charts/gart/templates/debezium/job.yaml @@ -0,0 +1,46 @@ +{{- $debezium_service_name := include "gart.debezium.fullname" . }} +{{- $debezium_service_port := int .Values.debezium.containerPort }} +{{- $debezium_service := printf "%s:%d" $debezium_service_name $debezium_service_port }} + +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ include "gart.debezium.jobName" . }} + namespace: {{ .Release.Namespace }} +spec: + template: + spec: + containers: + - name: debezium-connector-launch + image: {{ include "gart.curl.image" . }} + imagePullPolicy: {{ .Values.curl.image.pullPolicy | quote }} + command: ["/bin/sh"] + args: + - "-c" + - > + echo "Applying Debezium connector configuration..."; + CONFIG=$(cat /etc/debezium-connector-config/mysql-connector.json); + while : ; do + HTTP_STATUS=$(curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" \ + --data "$CONFIG" \ + http://{{ $debezium_service }}/connectors/ \ + -o /dev/null -w '%{http_code}') + + if [ "$HTTP_STATUS" -eq 200 ] || [ "$HTTP_STATUS" -eq 201 ]; then + echo "Debezium service is ready." + break + else + echo "Debezium service not ready, waiting... Status: $HTTP_STATUS" + sleep 5 + fi + done + volumeMounts: + - name: config-volume + mountPath: "/etc/debezium-connector-config" + restartPolicy: OnFailure + volumes: + - name: config-volume + configMap: + name: {{ include "gart.debezium.configmapName" . }} + + diff --git a/charts/gart/templates/debezium/svc.yaml b/charts/gart/templates/debezium/svc.yaml new file mode 100644 index 0000000..0d9bf28 --- /dev/null +++ b/charts/gart/templates/debezium/svc.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "gart.debezium.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + app: debezium-mysql-connect +spec: + type: ClusterIP + ports: + - port: {{ .Values.debezium.containerPort }} + targetPort: {{ .Values.debezium.containerPort }} + selector: + app: debezium-mysql-connect diff --git a/charts/gart/templates/writer/statefulset.yaml b/charts/gart/templates/writer/statefulset.yaml new file mode 100644 index 0000000..fb493f9 --- /dev/null +++ b/charts/gart/templates/writer/statefulset.yaml @@ -0,0 +1,59 @@ +{{- $kafka_service_name := .Values.kafka.fullnameOverride }} +{{- $kafka_service_port := int .Values.kafka.service.ports.client }} +{{- $kafka_service := printf "%s:%d" $kafka_service_name $kafka_service_port }} + +{{- $etcd_service_name := .Values.etcd.fullnameOverride }} +{{- $etcd_service_port := int .Values.etcd.containerPorts.client }} +{{- $etcd_service := printf "%s:%d" $etcd_service_name $etcd_service_port }} + +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ include "gart.writer.fullname" . }} + namespace: {{ .Release.Namespace }} +spec: + serviceName: "writer" + replicas: {{ .Values.dataconfig.subgraphNum }} + selector: + matchLabels: + app: writer + template: + metadata: + labels: + app: writer + spec: + containers: + - name: writer + image: {{ include "gart.writer.image" . }} + imagePullPolicy: {{ .Values.writer.image.pullPolicy | quote }} + command: ["/bin/bash", "-c"] + args: + - | + cd /workspace/gart/build && + until nc -z {{ $kafka_service_name }} {{ $kafka_service_port }}; do echo waiting for kafka; sleep 5; done && + until nc -z {{ $etcd_service_name }} {{ $etcd_service_port }}; do echo waiting for etcd; sleep 5; done && + sleep 100 && + ./gart \ + --db-host ${DB_HOST} \ + --db-port ${DB_PORT} \ + --db-name ${DB_NAME} \ + --db-type ${DB_TYPE} \ + --user ${DB_USER} \ + --password ${DB_PASSWORD} \ + --v6d-sock ${V6D_SOCKET} \ + --v6d-size ${V6D_SIZE} \ + --etcd-endpoint {{ $etcd_service }} \ + --etcd-prefix ${ETCD_PREFIX} \ + --kafka-server {{ $kafka_service }} \ + --subgraph-num ${SUBGRAPH_NUM} \ + --subgraph-id $((${HOSTNAME##*-} + 0)) \ + --enable-bulkload ${ENABLE_BULKLOAD} \ + --rg-from-etcd 1 \ + --k8s-mode yes \ + --role writer && + sleep infinity + envFrom: + - configMapRef: + name: {{ include "gart.configmapName" . }} + + diff --git a/charts/gart/values.yaml b/charts/gart/values.yaml new file mode 100644 index 0000000..e7d7853 --- /dev/null +++ b/charts/gart/values.yaml @@ -0,0 +1,187 @@ +# Default values for gart. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: nginx + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + tag: "" + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Automatically mount a ServiceAccount's API credentials? + automount: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: {} +podLabels: {} + +podSecurityContext: {} + # fsGroup: 2000 + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + port: 80 + +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: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +livenessProbe: + httpGet: + path: / + port: http +readinessProbe: + httpGet: + path: / + port: http + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +# Additional volumes on the output Deployment definition. +volumes: [] +# - name: foo +# secret: +# secretName: mysecret +# optional: false + +# Additional volumeMounts on the output Deployment definition. +volumeMounts: [] +# - name: foo +# mountPath: "/etc/foo" +# readOnly: true + +nodeSelector: {} + +tolerations: [] + +affinity: {} + +# kafka config +kafka: + kraft: + enabled: false + zookeeper: + enabled: true + replicaCount: 1 + persistence: + enabled: false + controller: + replicaCount: 0 + broker: + replicaCount: 1 + persistence: + enabled: false + resources: + requests: + cpu: 2 + memory: 4096Mi + limits: + cpu: 3 + memory: 4096Mi + #logPersistence: + # enabled: true + # existingClaim: gart-pvc + fullnameOverride: "gart-release-kafka" + service: + ports: + client: 9092 + persistence: + enabled: false + listeners: + client: + protocol: PLAINTEXT + controller: + protocol: PLAINTEXT + interbroker: + protocol: PLAINTEXT + extraConfig: | + offsets.topic.replication.factor=1 + transaction.state.log.replication.factor=1 + autoCreateTopicsEnable=true + +# etcd config +etcd: + auth: + rbac: + create: false + persistence: + enabled: false + fullnameOverride: "gart-release-etcd" + +# debezium config +debezium: + replicaCount: 1 + image: + repository: debezium/connect + tag: latest + pullPolicy: IfNotPresent + containerPort: 8083 + +curl: + image: + repository: curlimages/curl + tag: latest + pullPolicy: IfNotPresent + +# converter config +converter: + replicaCount: 1 + image: + repository: gart-converter + tag: latest + pullPolicy: IfNotPresent + +# writer config +writer: + replicaCount: 1 + image: + repository: gart-writer + tag: latest + pullPolicy: IfNotPresent + +dataconfig: + subgraphNum: 2 + dbHost: "127.0.0.1" + dbPort: "3306" + dbUser: "dbuser" + dbPassword: "123456" + dbType: "mysql" + dbName: "ldbc" + v6dSocket: "/tmp/v6d.sock" + v6dSize: "750G" + etcdPrefix: "gart_meta_" + enableBulkload: 1