大量更新

This commit is contained in:
zeaslity
2025-03-26 15:22:01 +08:00
parent ab6a130950
commit 86bcbad396
32 changed files with 22417 additions and 19468 deletions

View File

@@ -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/

View File

@@ -0,0 +1,21 @@
apiVersion: v2
appVersion: 2.1.7
description: Apache Doris is an easy-to-use, high-performance and real-time analytical
database based on MPP architecture, known for its extreme speed and ease of use.
home: https://doris.apache.org
icon: https://charts.selectdb.com/images/doris.jpg
keywords:
- doris
- database
- olap
- sharding
kubeVersion: '>= 1.19'
maintainers:
- email: hudechao@selectdb.com
name: Dechao Hu
name: doris
sources:
- https://github.com/apache/doris
- https://github.com/apache/doris-operator
type: application
version: 25.2.1

View File

@@ -0,0 +1,61 @@
# Deploy Doris Cluster by Helm
[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/doris)](https://artifacthub.io/packages/search?repo=doris)
This chart for deploying doris on kubernetes use Doris-Operator. Before using this chart, please install doris-operator as [install doc](https://artifacthub.io/packages/helm/doris/doris-operator).
## Install doris
### Add helm-chart repo and install doris-operator
this document and doris-operator installation document are duplicated. you can skip If they have already been executed completely.
1. Add the selectdb repository
```Bash
$ helm repo add selectdb https://charts.selectdb.com
```
2. Update the Helm Chart Repo to the latest version
```Bash
$ helm repo update selectdb
```
3. Check the Helm Chart Repo is the latest version
```Bash
$ helm search repo selectdb
NAME CHART VERSION APP VERSION DESCRIPTION
selectdb/doris-operator 1.3.1 1.3.1 Doris-operator for doris creat ...
selectdb/doris 1.3.1 2.0.3 Apache Doris is an easy-to-use ...
```
4. Install doris-operator (with default config in a namespace named `doris`)
```Bash
$ helm install operator selectdb/doris-operator
```
### Install the doris use doriscluster
- Use default config for deploying doris
This deploy only deploy fe and be components using default storageClass for providing persistent volume.
```bash
$ helm install doriscluster selectdb/doris
```
- Custom doris deploying
when you want to specify resources or different deployment type, please custom the [`values.yaml`](./values.yaml) and use next command for deploying.
```bash
$ helm install -f values.yaml doriscluster selectdb/doris
```
### Validate installation status
After executing the installation command, deployment and distribution, service deployment scheduling and startup will take a certain amount of time. Check the deployment status of Pods through the kubectl get pods command.
Observe that the Pod of `doriscluster` is in the `Running` state and all containers in the Pod are ready, that means, the deployment is successful.
```Bash
$ kubectl get pod --namespace doris
NAME READY STATUS RESTARTS AGE
doriscluster-helm-fe-0 1/1 Running 0 1m39s
doriscluster-helm-fe-1 1/1 Running 0 1m39s
doriscluster-helm-fe-2 1/1 Running 0 1m39s
doriscluster-helm-be-0 1/1 Running 0 16s
doriscluster-helm-be-1 1/1 Running 0 16s
doriscluster-helm-be-2 1/1 Running 0 16s
```
## Uninstall doriscluster
Please confirm the Doris is not used, when using next command to uninstall `doriscluster`.
```bash
$ helm uninstall doriscluster
```

View File

@@ -0,0 +1 @@
Thank you for installing {{ .Chart.Name }}-{{ .Chart.Version }}

View File

@@ -0,0 +1,267 @@
{*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
*}
{{- define "doriscluster.name" -}}
{{ default .Chart.Name .Values.dorisCluster.name }}
{{- end }}
{{- define "doriscluster.namespace" -}}
{{ print .Release.Namespace }}
{{- end }}
{{- define "kube-control.name" -}}
{{- print "doris-operator" }}
{{- end }}
{{/*
doris cluster pod default resource.
*/}}
{{- define "doriscluster.default.resource" }}
requests:
cpu: 8
memory: 16Gi
limits:
cpu: 16
memory: 32Gi
{{- end }}
{{/*
doris cluster admin user and password secret name.
*/}}
{{- define "doriscluster.secret.name" -}}
{{ template "doriscluster.name" . }}-secret-base64
{{- end -}}
{{/*
doris cluster fe configMap default name.
*/}}
{{- define "doriscluster.default.feConfigMap.name" -}}
{{ template "doriscluster.name" . }}-fe-configmap
{{- end -}}
{{/*
doris cluster fe pod default configMap resolve file.
*/}}
{{- define "doriscluster.default.feConfig.resolveKey" }}
{{- print "fe.conf" }}
{{- end }}
{{/*
doris cluster be configMap default name.
*/}}
{{- define "doriscluster.default.beConfigMap.name" -}}
{{ template "doriscluster.name" . }}-be-configmap
{{- end -}}
{{/*
doris cluster pod default configMap resolve file.
*/}}
{{- define "doriscluster.default.beConfig.resolveKey" }}
{{- print "be.conf" }}
{{- end }}
{{/*
doris cluster cn configMap default name.
*/}}
{{- define "doriscluster.default.cnConfigMap.name" -}}
{{ template "doriscluster.name" . }}-cn-configmap
{{- end -}}
{{/*
doris cluster cn pod default configMap resolve file.
*/}}
{{- define "doriscluster.default.cnConfig.resolveKey" }}
{{- print "be.conf" }}
{{- end }}
{{/*
doris cluster broker configMap default name.
*/}}
{{- define "doriscluster.default.brokerConfigMap.name" -}}
{{ template "doriscluster.name" . }}-broker-configmap
{{- end -}}
{{/*
doris cluster broker pod default configMap resolve file.
*/}}
{{- define "doriscluster.default.brokerConfig.resolveKey" }}
{{- print "apache_hdfs_broker.conf" }}
{{- end }}
{{/*
doris cluster cn pod autoscaler default version.
*/}}
{{- define "doriscluster.default.autoScalerVersion" -}}
{{- print "v2" }}
{{- end -}}
{{/*
doris cluster fe PVC
*/}}
{{- define "doriscluster.fe.pvc" -}}
{{- if and .Values.feSpec.persistentVolumeClaim.metaPersistentVolume .Values.feSpec.persistentVolumeClaim.metaPersistentVolume.storage}}
- mountPath: /opt/apache-doris/fe/doris-meta
name: fe-meta
persistentVolumeClaimSpec:
{{- if or .Values.feSpec.persistentVolumeClaim.metaPersistentVolume.storageClassName .Values.feSpec.persistentVolumeClaim.logsPersistentVolume.storageClassName }}
storageClassName: {{ default .Values.feSpec.persistentVolumeClaim.logsPersistentVolume.storageClassName .Values.feSpec.persistentVolumeClaim.metaPersistentVolume.storageClassName }}
{{- end }}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.feSpec.persistentVolumeClaim.metaPersistentVolume.storage}}
{{- end }}
{{- if and .Values.feSpec.persistentVolumeClaim.logsPersistentVolume .Values.feSpec.persistentVolumeClaim.logsPersistentVolume.storage}}
- mountPath: /opt/apache-doris/fe/log
name: fe-log
persistentVolumeClaimSpec:
{{- if or .Values.feSpec.persistentVolumeClaim.logsPersistentVolume.storageClassName .Values.feSpec.persistentVolumeClaim.metaPersistentVolume.storageClassName}}
storageClassName: {{ default .Values.feSpec.persistentVolumeClaim.metaPersistentVolume.storageClassName .Values.feSpec.persistentVolumeClaim.logsPersistentVolume.storageClassName }}
{{- end }}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.feSpec.persistentVolumeClaim.logsPersistentVolume.storage}}
{{- end }}
{{- end -}}
{{/*
doris cluster be PVC
*/}}
{{- define "doriscluster.be.pvc" -}}
{{- if and .Values.beSpec.persistentVolumeClaim.dataPersistentVolume .Values.beSpec.persistentVolumeClaim.dataPersistentVolume.storage}}
- mountPath: /opt/apache-doris/be/storage
name: be-storage
persistentVolumeClaimSpec:
{{- if or .Values.beSpec.persistentVolumeClaim.dataPersistentVolume.storageClassName .Values.beSpec.persistentVolumeClaim.logsPersistentVolume.storageClassName }}
storageClassName: {{ default .Values.beSpec.persistentVolumeClaim.logsPersistentVolume.storageClassName .Values.beSpec.persistentVolumeClaim.dataPersistentVolume.storageClassName }}
{{- end }}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.beSpec.persistentVolumeClaim.dataPersistentVolume.storage}}
{{- end }}
{{- if and .Values.beSpec.persistentVolumeClaim.logsPersistentVolume .Values.beSpec.persistentVolumeClaim.logsPersistentVolume.storage}}
- mountPath: /opt/apache-doris/be/log
name: be-log
persistentVolumeClaimSpec:
{{- if or .Values.beSpec.persistentVolumeClaim.dataPersistentVolume.storageClassName .Values.beSpec.persistentVolumeClaim.logsPersistentVolume.storageClassName }}
storageClassName: {{ default .Values.beSpec.persistentVolumeClaim.dataPersistentVolume.storageClassName .Values.beSpec.persistentVolumeClaim.logsPersistentVolume.storageClassName }}
{{- end }}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.beSpec.persistentVolumeClaim.logsPersistentVolume.storage}}
{{- end }}
{{- end -}}
{{/*
doris cluster cn PVC
*/}}
{{- define "doriscluster.cn.pvc" -}}
{{- if and .Values.cnSpec.persistentVolumeClaim.dataPersistentVolume .Values.cnSpec.persistentVolumeClaim.dataPersistentVolume.storage}}
- mountPath: /opt/apache-doris/be/storage
name: cn-storage
persistentVolumeClaimSpec:
{{- if or .Values.cnSpec.persistentVolumeClaim.dataPersistentVolume.storageClassName .Values.cnSpec.persistentVolumeClaim.logsPersistentVolume.storageClassName }}
storageClassName: {{ default .Values.cnSpec.persistentVolumeClaim.logsPersistentVolume.storageClassName .Values.cnSpec.persistentVolumeClaim.dataPersistentVolume.storageClassName }}
{{- end }}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.cnSpec.persistentVolumeClaim.dataPersistentVolume.storage}}
{{- end }}
{{- if and .Values.cnSpec.persistentVolumeClaim.logsPersistentVolume .Values.cnSpec.persistentVolumeClaim.logsPersistentVolume.storage}}
- mountPath: /opt/apache-doris/be/log
name: cn-log
persistentVolumeClaimSpec:
{{- if or .Values.cnSpec.persistentVolumeClaim.dataPersistentVolume.storageClassName .Values.cnSpec.persistentVolumeClaim.logsPersistentVolume.storageClassName }}
storageClassName: {{ default .Values.cnSpec.persistentVolumeClaim.dataPersistentVolume.storageClassName .Values.cnSpec.persistentVolumeClaim.logsPersistentVolume.storageClassName }}
{{- end }}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.cnSpec.persistentVolumeClaim.logsPersistentVolume.storage}}
{{- end }}
{{- end -}}
{{/*
doris cluster broker PVC
*/}}
{{- define "doriscluster.broker.pvc" -}}
{{- if and .Values.brokerSpec.persistentVolumeClaim.logsPersistentVolume .Values.brokerSpec.persistentVolumeClaim.logsPersistentVolume.storage}}
- mountPath: /opt/apache-doris/apache_hdfs_broker/log
name: broker-log
persistentVolumeClaimSpec:
{{- if .Values.brokerSpec.persistentVolumeClaim.logsPersistentVolume.storageClassName}}
storageClassName: {{ .Values.brokerSpec.persistentVolumeClaim.logsPersistentVolume.storageClassName }}
{{- end }}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.brokerSpec.persistentVolumeClaim.logsPersistentVolume.storage}}
{{- end }}
{{- end -}}
{{- define "doriscluster.feConfig.configMaps" }}
{{- range .Values.feSpec.configMap.mountConfigMaps }}
- configMapName: {{ .configMapName }}
mountPath: {{ .mountPath }}
{{- end }}
{{- end }}
{{- define "doriscluster.beConfig.configMaps" }}
{{- range .Values.beSpec.configMap.mountConfigMaps }}
- configMapName: {{ .configMapName }}
mountPath: {{ .mountPath }}
{{- end }}
{{- end }}
{{- define "doriscluster.cnConfig.configMaps" }}
{{- range .Values.cnSpec.configMap.mountConfigMaps }}
- configMapName: {{ .configMapName }}
mountPath: {{ .mountPath }}
{{- end }}
{{- end }}
{{- define "doriscluster.brokerConfig.configMaps" }}
{{- range .Values.brokerSpec.configMap.mountConfigMaps }}
- configMapName: {{ .configMapName }}
mountPath: {{ .mountPath }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,31 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
{{- $originalMap := omit .Values.beSpec.configMap "mountConfigMaps" }}
{{- if $originalMap }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "doriscluster.default.beConfigMap.name" . }}
namespace: {{ template "doriscluster.namespace" . }}
labels:
app.kubernetes.io/name: doriscluster
app.kubernetes.io/instance: {{ template "doriscluster.name" . }}
app.kubernetes.io/part-of: {{ template "kube-control.name" . }}
data:
{{- toYaml $originalMap | nindent 2}}
{{- end }}

View File

@@ -0,0 +1,31 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
{{- $originalMap := omit .Values.brokerSpec.configMap "mountConfigMaps" }}
{{- if $originalMap }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "doriscluster.default.brokerConfigMap.name" . }}
namespace: {{ template "doriscluster.namespace" . }}
labels:
app.kubernetes.io/name: doriscluster
app.kubernetes.io/instance: {{ template "doriscluster.name" . }}
app.kubernetes.io/part-of: {{ template "kube-control.name" . }}
data:
{{- toYaml $originalMap | nindent 2}}
{{- end }}

View File

@@ -0,0 +1,31 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
{{- $originalMap := omit .Values.cnSpec.configMap "mountConfigMaps" }}
{{- if $originalMap }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "doriscluster.default.cnConfigMap.name" . }}
namespace: {{ template "doriscluster.namespace" . }}
labels:
app.kubernetes.io/name: doriscluster
app.kubernetes.io/instance: {{ template "doriscluster.name" . }}
app.kubernetes.io/part-of: {{ template "kube-control.name" . }}
data:
{{- toYaml $originalMap | nindent 2}}
{{- end }}

View File

@@ -0,0 +1,31 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
{{- $originalMap := omit .Values.feSpec.configMap "mountConfigMaps" }}
{{- if $originalMap }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "doriscluster.default.feConfigMap.name" . }}
namespace: {{ template "doriscluster.namespace" . }}
labels:
app.kubernetes.io/name: doriscluster
app.kubernetes.io/instance: {{ template "doriscluster.name" . }}
app.kubernetes.io/part-of: {{ template "kube-control.name" . }}
data:
{{- toYaml $originalMap | nindent 2}}
{{- end }}

View File

@@ -0,0 +1,56 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
{{$cmDatas := list }}
{{- range $cp := .Values.feSpec.configMap.mountConfigMaps }}
{{- if $cp.data }}
{{- $cmDatas = append $cmDatas $cp }}
{{- end }}
{{- end }}
{{- range $index, $cp := .Values.beSpec.configMap.mountConfigMaps }}
{{- if $cp.data }}
{{- $cmDatas = append $cmDatas $cp }}
{{- end }}
{{- end }}
{{- range $index, $cp := .Values.brokerSpec.configMap.mountConfigMaps }}
{{- if $cp.data }}
{{- $cmDatas = append $cmDatas $cp }}
{{- end }}
{{- end }}
{{- range $index, $cp := .Values.cnSpec.configMap.mountConfigMaps }}
{{- if $cp.data }}
{{- $cmDatas = append $cmDatas $cp }}
{{- end }}
{{- end }}
{{- range $cp := $cmDatas }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ $cp.configMapName }}
namespace: {{ template "doriscluster.namespace" $ }}
labels:
app.kubernetes.io/name: doriscluster
app.kubernetes.io/instance: {{ template "doriscluster.name" $ }}
app.kubernetes.io/part-of: {{ template "kube-control.name" $ }}
data:
{{- toYaml $cp.data | nindent 2 }}
---
{{- end }}

View File

@@ -0,0 +1,368 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# This yaml have dorisCluster CRD all fields. The yaml only for reference how to config, not for deploy on kubernetes.
apiVersion: doris.selectdb.com/v1
kind: DorisCluster
metadata:
name: {{ template "doriscluster.name" . }}
namespace: {{ template "doriscluster.namespace" . }}
labels:
app.kubernetes.io/name: doriscluster
app.kubernetes.io/instance: {{ template "doriscluster.name" . }}
app.kubernetes.io/part-of: {{ template "kube-control.name" . }}
{{- if .Values.dorisCluster.annotations }}
annotations:
{{- toYaml .Values.dorisCluster.annotations | nindent 4 }}
{{- end }}
spec:
{{- if .Values.dorisCluster.adminUser }}
adminUser:
{{- toYaml .Values.dorisCluster.adminUser | nindent 4 }}
{{- else if .Values.dorisCluster.authSecret }}
authSecret: {{ template "doriscluster.secret.name" . }}
{{- end }}
feSpec:
replicas: {{ .Values.feSpec.replicas }}
{{- if .Values.feSpec.electionNumber }}
electionNumber: {{ .Values.feSpec.electionNumber }}
{{- end }}
{{- if .Values.feSpec.labels }}
podLabels:
{{- toYaml .Values.feSpec.labels | nindent 6 }}
{{- end }}
image: {{ .Values.feSpec.image.repository }}:{{ .Values.feSpec.image.tag }}
{{- if .Values.feSpec.image.imagePullSecrets }}
imagePullSecrets:
{{- toYaml .Values.feSpec.image.imagePullSecrets | nindent 4 }}
{{- end }}
{{- if .Values.feSpec.service }}
service:
type: {{ .Values.feSpec.service.type }}
{{- if and (eq "LoadBalancer" .Values.feSpec.service.type) .Values.feSpec.service.loadbalancerIP }}
loadBalancerIP: {{ .Values.feSpec.service.loadbalancerIP }}
{{- end }}
{{- if .Values.feSpec.service.servicePorts }}
servicePorts:
{{- toYaml .Values.feSpec.service.servicePorts | nindent 6 }}
{{- end }}
{{- if .Values.feSpec.service.annotations }}
annotations:
{{- toYaml .Values.feSpec.service.annotations | nindent 8 }}
{{- end }}
{{- end }}
{{- if .Values.feSpec.configMap }}
configMapInfo:
{{- $originalMap := .Values.feSpec.configMap }}
{{- $defaultMap := omit $originalMap "mountConfigMaps" }}
{{- if $defaultMap }}
configMapName: {{ template "doriscluster.default.feConfigMap.name" . }}
resolveKey: {{ template "doriscluster.default.feConfig.resolveKey" . }}
{{- end }}
{{- if .Values.feSpec.configMap.mountConfigMaps }}
configMaps:
{{- template "doriscluster.feConfig.configMaps" . }}
{{- end }}
{{- end }}
{{- if .Values.feSpec.resource }}
{{- toYaml .Values.feSpec.resource | nindent 4 }}
{{- else }}
{{- include "doriscluster.default.resource" .}}
{{- end }}
{{- if .Values.feSpec.nodeSelector }}
nodeSelector:
{{- toYaml .Values.feSpec.nodeSelector | nindent 6 }}
{{- end }}
{{- if .Values.feSpec.env }}
envVars:
{{- toYaml .Values.feSpec.env | nindent 4 }}
{{- end }}
{{- if .Values.feSpec.affinity }}
affinity:
{{- toYaml .Values.feSpec.affinity | nindent 6 }}
{{- end }}
{{- if .Values.feSpec.tolerations }}
tolerations:
{{- toYaml .Values.feSpec.tolerations | nindent 4 }}
{{- end }}
{{- if .Values.feSpec.hostAliases }}
hostAliases:
{{- toYaml .Values.feSpec.hostAliases | nindent 4 }}
{{- end }}
{{- if .Values.feSpec.persistentVolumeClaim }}
persistentVolumes:
{{- template "doriscluster.fe.pvc" . }}
{{- end }}
{{- if .Values.feSpec.systemInitialization }}
systemInitialization:
{{- if .Values.feSpec.systemInitialization.initImage }}
initImage: {{ .Values.feSpec.systemInitialization.initImage }}
{{- end }}
{{- if .Values.feSpec.systemInitialization.command }}
command: {{ .Values.feSpec.systemInitialization.command }}
{{- end }}
{{- end }}
beSpec:
replicas: {{ .Values.beSpec.replicas }}
{{- if .Values.beSpec.labels }}
podLabels:
{{- toYaml .Values.beSpec.labels | nindent 6 }}
{{- end }}
image: {{ .Values.beSpec.image.repository }}:{{ .Values.beSpec.image.tag }}
{{- if .Values.beSpec.image.imagePullSecrets }}
imagePullSecrets:
{{- toYaml .Values.beSpec.image.imagePullSecrets | nindent 4 }}
{{- end }}
{{- if .Values.beSpec.service }}
service:
type: {{ .Values.beSpec.service.type }}
{{- if and (eq "LoadBalancer" .Values.beSpec.service.type) .Values.beSpec.service.loadbalancerIP }}
loadBalancerIP: {{ .Values.beSpec.service.loadbalancerIP }}
{{- end }}
{{- if .Values.beSpec.service.servicePorts }}
servicePorts:
{{- toYaml .Values.beSpec.service.servicePorts | nindent 6 }}
{{- end }}
{{- if .Values.beSpec.service.annotations }}
annotations:
{{- toYaml .Values.beSpec.service.annotations | nindent 8 }}
{{- end }}
{{- end }}
{{- if .Values.beSpec.configMap }}
configMapInfo:
{{- $originalMap := .Values.beSpec.configMap }}
{{- $defaultMap := omit $originalMap "mountConfigMaps" }}
{{- if $defaultMap }}
configMapName: {{ template "doriscluster.default.beConfigMap.name" . }}
resolveKey: {{ template "doriscluster.default.beConfig.resolveKey" . }}
{{- end }}
{{- if .Values.beSpec.configMap.mountConfigMaps }}
configMaps:
{{- template "doriscluster.beConfig.configMaps" . }}
{{- end }}
{{- end }}
{{- if .Values.beSpec.resource }}
{{- toYaml .Values.beSpec.resource | nindent 4 }}
{{- else }}
{{- include "doriscluster.default.resource" .}}
{{- end }}
{{- if .Values.beSpec.nodeSelector }}
nodeSelector:
{{- toYaml .Values.beSpec.nodeSelector | nindent 6 }}
{{- end }}
{{- if .Values.beSpec.env }}
envVars:
{{- toYaml .Values.beSpec.env | nindent 4 }}
{{- end }}
{{- if .Values.beSpec.affinity }}
affinity:
{{- toYaml .Values.beSpec.affinity | nindent 6 }}
{{- end }}
{{- if .Values.beSpec.tolerations }}
tolerations:
{{- toYaml .Values.beSpec.tolerations | nindent 4 }}
{{- end }}
{{- if .Values.beSpec.hostAliases }}
hostAliases:
{{- toYaml .Values.beSpec.hostAliases | nindent 4 }}
{{- end }}
{{- if .Values.beSpec.persistentVolumeClaim }}
persistentVolumes:
{{- template "doriscluster.be.pvc" . }}
{{- end }}
{{- if .Values.beSpec.systemInitialization }}
systemInitialization:
{{- if .Values.beSpec.systemInitialization.initImage }}
initImage: {{ .Values.beSpec.systemInitialization.initImage }}
{{- end }}
{{- if .Values.beSpec.systemInitialization.command }}
command: {{ .Values.beSpec.systemInitialization.command }}
{{- end }}
{{- end }}
{{- if .Values.dorisCluster.enabledCn }}
cnSpec:
replicas: {{ .Values.cnSpec.replicas }}
{{- if .Values.cnSpec.labels }}
podLabels:
{{- toYaml .Values.cnSpec.labels | nindent 6 }}
{{- end }}
image: {{ .Values.cnSpec.image.repository }}:{{ .Values.cnSpec.image.tag }}
{{- if .Values.cnSpec.image.imagePullSecrets }}
imagePullSecrets:
{{- toYaml .Values.cnSpec.image.imagePullSecrets | nindent 4 }}
{{- end }}
{{- if .Values.cnSpec.service }}
service:
type: {{ .Values.cnSpec.service.type }}
{{- if and (eq "LoadBalancer" .Values.cnSpec.service.type) .Values.cnSpec.service.loadbalancerIP }}
loadBalancerIP: {{ .Values.cnSpec.service.loadbalancerIP }}
{{- end }}
{{- if .Values.cnSpec.service.servicePorts }}
servicePorts:
{{- toYaml .Values.cnSpec.service.servicePorts | nindent 6 }}
{{- end }}
{{- if .Values.cnSpec.service.annotations }}
annotations:
{{- toYaml .Values.cnSpec.service.annotations | nindent 8 }}
{{- end }}
{{- end }}
{{- if .Values.cnSpec.configMap }}
configMapInfo:
{{- $originalMap := .Values.cnSpec.configMap }}
{{- $defaultMap := omit $originalMap "mountConfigMaps" }}
{{- if $defaultMap }}
configMapName: {{ template "doriscluster.default.cnConfigMap.name" . }}
resolveKey: {{ template "doriscluster.default.cnConfig.resolveKey" . }}
{{- end }}
{{- if .Values.cnSpec.configMap.mountConfigMaps }}
configMaps:
{{- template "doriscluster.cnConfig.configMaps" . }}
{{- end }}
{{- end }}
{{- if .Values.cnSpec.resource }}
{{- toYaml .Values.cnSpec.resource | nindent 4 }}
{{- else }}
{{- include "doriscluster.default.resource" .}}
{{- end }}
{{- if .Values.cnSpec.nodeSelector }}
nodeSelector:
{{- toYaml .Values.cnSpec.nodeSelector | nindent 6 }}
{{- end }}
{{- if .Values.cnSpec.env }}
envVars:
{{- toYaml .Values.cnSpec.env | nindent 4 }}
{{- end }}
{{- if .Values.cnSpec.affinity }}
affinity:
{{- toYaml .Values.cnSpec.affinity | nindent 6 }}
{{- end }}
{{- if .Values.cnSpec.tolerations }}
tolerations:
{{- toYaml .Values.cnSpec.tolerations | nindent 4 }}
{{- end }}
{{- if .Values.cnSpec.hostAliases }}
hostAliases:
{{- toYaml .Values.cnSpec.hostAliases | nindent 4 }}
{{- end }}
{{- if .Values.cnSpec.persistentVolumeClaim }}
persistentVolumes:
{{- template "doriscluster.cn.pvc" . }}
{{- end }}
{{- if .Values.cnSpec.systemInitialization }}
systemInitialization:
{{- if .Values.cnSpec.systemInitialization.initImage }}
initImage: {{ .Values.cnSpec.systemInitialization.initImage }}
{{- end }}
{{- if .Values.cnSpec.systemInitialization.command }}
command: {{ .Values.cnSpec.systemInitialization.command }}
{{- end }}
{{- end }}
{{- if .Values.cnSpec.autoScalingPolicy.enable }}
autoScalingPolicy:
version: {{default ( include "doriscluster.default.autoScalerVersion" . ) .Values.cnSpec.autoScalingPolicy.version }}
minReplicas: {{ .Values.cnSpec.autoScalingPolicy.minReplicas}}
maxReplicas: {{ .Values.cnSpec.autoScalingPolicy.maxReplicas}}
hpaPolicy:
{{- toYaml .Values.cnSpec.autoScalingPolicy.hpaPolicy | nindent 8 }}
{{- end }}
{{- end }}
{{- if .Values.dorisCluster.enabledBroker }}
brokerSpec:
replicas: {{ .Values.brokerSpec.replicas }}
{{- if .Values.brokerSpec.labels }}
podLabels:
{{- toYaml .Values.brokerSpec.labels | nindent 6 }}
{{- end }}
image: {{ .Values.brokerSpec.image.repository }}:{{ .Values.brokerSpec.image.tag }}
{{- if .Values.brokerSpec.image.imagePullSecrets }}
imagePullSecrets:
{{- toYaml .Values.brokerSpec.image.imagePullSecrets | nindent 4 }}
{{- end }}
{{- if .Values.brokerSpec.configMap }}
configMapInfo:
{{- $originalMap := .Values.brokerSpec.configMap }}
{{- $defaultMap := omit $originalMap "mountConfigMaps" }}
{{- if $defaultMap }}
configMapName: {{ template "doriscluster.default.brokerConfigMap.name" . }}
resolveKey: {{ template "doriscluster.default.brokerConfig.resolveKey" . }}
{{- end }}
{{- if .Values.brokerSpec.configMap.mountConfigMaps }}
configMaps:
{{- template "doriscluster.brokerConfig.configMaps" . }}
{{- end }}
{{- end }}
{{- if .Values.brokerSpec.resource }}
{{- toYaml .Values.brokerSpec.resource | nindent 4 }}
{{- else }}
{{- include "doriscluster.default.resource" .}}
{{- end }}
{{- if .Values.brokerSpec.nodeSelector }}
nodeSelector:
{{- toYaml .Values.brokerSpec.nodeSelector | nindent 6 }}
{{- end }}
{{- if .Values.brokerSpec.env }}
envVars:
{{- toYaml .Values.brokerSpec.env | nindent 4 }}
{{- end }}
{{- if .Values.brokerSpec.affinity }}
affinity:
{{- toYaml .Values.brokerSpec.affinity | nindent 6 }}
{{- end }}
{{- if .Values.brokerSpec.tolerations }}
tolerations:
{{- toYaml .Values.brokerSpec.tolerations | nindent 4 }}
{{- end }}
{{- if .Values.brokerSpec.hostAliases }}
hostAliases:
{{- toYaml .Values.brokerSpec.hostAliases | nindent 4 }}
{{- end }}
{{- if .Values.brokerSpec.persistentVolumeClaim }}
persistentVolumes:
{{- template "doriscluster.broker.pvc" . }}
{{- end }}
{{- if .Values.brokerSpec.systemInitialization }}
systemInitialization:
{{- if .Values.brokerSpec.systemInitialization.initImage }}
initImage: {{ .Values.brokerSpec.systemInitialization.initImage }}
{{- end }}
{{- if .Values.brokerSpec.systemInitialization.command }}
command: {{ .Values.brokerSpec.systemInitialization.command }}
{{- end }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,31 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
{{- if .Values.dorisCluster.authSecret }}
apiVersion: v1
kind: Secret
metadata:
name: {{ template "doriscluster.secret.name" . }}
namespace: {{ template "doriscluster.namespace" . }}
labels:
app.kubernetes.io/name: doriscluster
app.kubernetes.io/instance: {{ template "doriscluster.name" . }}
app.kubernetes.io/part-of: {{ template "kube-control.name" . }}
type: kubernetes.io/basic-auth
data:
{{- toYaml .Values.dorisCluster.authSecret | nindent 2}}
{{- end }}

View File

@@ -0,0 +1,697 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# deploy a doris cluster
dorisCluster:
# the name of doriscluster, if not set, the chart name will be used.
name: "doriscluster-helm"
# annotations for doris cluster.
annotations: {}
# specify the cn deploy or not.
enabledCn: false
# specify the broker deploy or not.
enabledBroker: false
# specify the doriscluster adminuser or not.
# set adminUser will record the password in clear text. This method has been abandoned and is not recommended.
# When adding adminuser. should follow the steps:
# 1. Start dorisclusert without adminUser
# 2. Run 'CREATE USER ...' or 'SET PASSWORD ...' in mysql client
# 3. Add the name and password added in the previous step to adminUser and execute helm
adminUser: {}
# name: root
# password: "12345"
# use authSecret can encrypt and save passwords, recommend this method
# 1. run shell: echo -n '{your_password}' | base64 to get password base64 string
# 2. run shell: echo -n '{your_user}' | base64 to get user base64 string
# 3. Fill the encrypted string into the corresponding position
# as follow, username is 'root' , password is 't0p-Secret'
authSecret: {}
# username: cm9vdA==
# password: dDBwLVNlY3JldA==
feSpec:
replicas: 3
# electionNumber represents `FOLLOWER` number, replicas - electionNumber as `OBSERVER`
# electionNumber: 3
# the pod labels for user select or classify pods.
labels: {}
# selectdb.app.classify: "classify-1"
image:
repository: apache/doris
tag: fe-2.1.7
# imagePullSecrets:
# - name: imagePullSecret
# config the service port for fe service.
# if you want to use a dedicated port for fe service, you can config the port.
# see https://kubernetes.io/docs/concepts/services-networking/service/#field-spec-ports for more details.
service:
# the fe service type, only supported ClusterIP, NodePort, LoadBalancer
type: ClusterIP
# type: NodePort
# servicePorts:
# - nodePort: 30001
# targetPort: 9030
# - nodePort: 30002
# targetPort: 8030
# the loadBalancerIP for static ip config when the type=LoadBalancer and loadbalancerIp is not empty.
# type: "LoadBalancer"
# loadbalancerIP: "127.0.0.1"
# use LoadBalancer on cloud platform, try to configure it using annotations:
annotations: {}
# service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
# specify the configMap, as a dictionary.
# Its 'key' is the config file name in the doris 'doris_root_path/fe/conf/' file path,
# Its 'value' is the text content of the corresponding file (it should be relatively long, actually).
configMap: {}
# 'fe.conf' is the startup config file of fe, and the name must be 'fe.conf'.
# fe.conf: |
# http_port = 8030
# rpc_port = 9020
# query_port = 9030
# edit_log_port = 9010
# Other config files can also be specified here
# hdfs-site.xml: |
# <?xml version="1.0" encoding="UTF-8"?>
#
# <configuration>
# <property>
# <name>dfs.nameservices</name>
# <value>ns</value>
# </property>
#
# mountConfigMaps supports configmap mounting in the form of specifying the mounting directory
# but please note that the mounting path cannot be repeated.
# if the elements within mountConfigMaps contain data, it means that the configmap does not need to be created manually by the user, and vice versa.
# in the following example, the user needs to manually create configmap 'cm-1'
# mountConfigMaps: {}
# - configMapName: cm-1
# mountPath: /etc/cm1
# - configMapName: cm-2
# mountPath: /etc/cm2
# data:
# copy_file1: |
# text *** content
# copy_file2: |
# text *** content
# If configured separately here, it will overwrite the total resources configuration default.
# but the default configuration of other types will still take effect.
resource: {}
# requests:
# cpu: 8
# memory: 16Gi
# limits:
# cpu: 16
# memory: 32Gi
# If specified, the pod's nodeSelectordisplayName="Map of nodeSelectors to match when scheduling pods on nodes"
nodeSelector: {}
# kubernetes.io/arch: amd64
# kubernetes.io/os: linux
# app.kubernetes.node.name: "k8s-node1"
# env represents an environment variable present in a Container.
# 'name' of the environment variable. Must be a C_IDENTIFIER.
# no more than one of the following may be specified: 'value' or 'valueFrom',
# 'value' is the value of environment.
# 'valueFrom' is source for the environment variable's value. Cannot be used if 'value' is not empty.
env: []
# - name: "HOME"
# value: "/opt/selectdb"
# - name: HOST_IP
# valueFrom:
# fieldRef:
# apiVersion: v1
# fieldPath: status.hostIP
# affinity is the constraints of pod scheduling
# nodeAffinity: Describes node affinity scheduling rules for the pod.
# podAffinity: Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).
# PodAntiAffinity: Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).
# reference: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
affinity: {}
# nodeAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# key: "app.kubernetes.node.name"
# operator: "In"
# values:
# - "k8s-node1"
# "k8s-node2"
# podAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# key: "app.kubernetes.node.name"
# operator: "In"
# values:
# - "fe1"
# "fe2"
# podAntiAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# key: "app.kubernetes.node.name"
# operator: "NotIn"
# values:
# - "fe1"
# "fe2"
# the pod this Toleration is attached to tolerates any taint that matches. Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
# the triple <key,value,effect> using the matching operator <operator>.
# 'key' is the taint key that the toleration applies to. Empty means match all taint keys. if the 'key' is empty, 'operator' must be Exists; this combination means to match all values and all keys.
# 'operator' represents a key's relationship to the 'value'. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.
# 'value' is the taint value the toleration matches to. If the 'operator' is Exists, the 'value' should be empty, otherwise just a regular string.
# 'effect' indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
tolerations: []
# - key: "toleration"
# operator: "Equal"
# value: "master"
# - key: "node-role.kubernetes.io/master"
# operator: "Exists"
# effect: "NoSchedule"
# - operator: "Exists"
# hostAliases allows adding entries to /etc/hosts inside the containers
hostAliases: []
# If doris use hdfs or catalog, config the map of namenode host here is beneficial
# - ip: "127.0.0.1"
# hostnames:
# - "hostname1"
# - ip: "127.0.0.2"
# hostnames:
# - "hostname2"
persistentVolumeClaim: {}
# meta volume, mountPath is /opt/apache-doris/fe/doris-meta
# metaPersistentVolume:
# storage: 200Gi
# when use specific storageclass, the storageClassName should reConfig, example as annotation.
# storageClassName: ""
# logs volume, mountPath is /opt/apache-doris/fe/log
# logsPersistentVolume:
# storage: 100Gi
# when use specific storageclass, the storageClassName should reConfig, example as annotation.
# storageClassName: ""
systemInitialization: {}
# initImage: "selectdb/alpine:latest"
# command: [ "/sbin/sysctl", "-w", "vm.max_map_count=2000000" ]
beSpec:
replicas: 3
# the pod labels for user select or classify pods.
labels: {}
# selectdb.app.classify: "classify-1"
image:
repository: apache/doris
tag: be-2.1.7
# imagePullSecrets:
# - name: imagePullSecret
# config the service port for be service.
# if you want to use a dedicated port for be service, you can config the port.
# see https://kubernetes.io/docs/concepts/services-networking/service/#field-spec-ports for more details.
service:
# the be service type, only supported ClusterIP, NodePort, LoadBalancer
type: ClusterIP
# type: NodePort
# servicePorts:
# - nodePort: 30003
# targetPort: 9040
# - nodePort: 30004
# targetPort: 8040
# the loadBalancerIP for static ip config when the type=LoadBalancer and loadbalancerIp is not empty.
# type: "LoadBalancer"
# loadbalancerIP: "127.0.0.1"
# use LoadBalancer on cloud platform, try to configure it using annotations
annotations: {}
# service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
# specify the configMap, as a dictionary.
# Its 'key' is the config file name in the doris 'doris_root_path/fe/conf/' file path,
# Its 'value' is the text content of the corresponding file (it should be relatively long, actually).
configMap: {}
# 'be.conf' is the startup config file of be, and the name must be 'be.conf'.
# be.conf: |
# be_port = 9060
# webserver_port = 8040
# heartbeat_service_port = 9050
# brpc_port = 8060
# storage_root_path = /data/doris/be/storage
# Other config files can also be specified here
# hdfs-site.xml: |
# <?xml version="1.0" encoding="UTF-8"?>
#
# <configuration>
# <property>
# <name>dfs.nameservices</name>
# <value>ns</value>
# </property>
#
# mountConfigMaps supports configmap mounting in the form of specifying the mounting directory
# but please note that the mounting path cannot be repeated.
# if the elements within mountConfigMaps contain data, it means that the configmap does not need to be created manually by the user, and vice versa.
# in the following example, the user needs to manually create configmap 'cm-1'
# mountConfigMaps: {}
# - configMapName: cm-1
# mountPath: /etc/cm1
# - configMapName: cm-2
# mountPath: /etc/cm2
# data:
# copy_file1: |
# text *** content
# copy_file2: |
# text *** content
# If configured separately here, it will overwrite the total resources configuration default.
# but the default configuration of other types will still take effect.
resource: {}
# requests:
# cpu: 8
# memory: 16Gi
# limits:
# cpu: 16
# memory: 32Gi
# If specified, the pod's nodeSelectordisplayName="Map of nodeSelectors to match when scheduling pods on nodes"
nodeSelector: {}
# kubernetes.io/arch: amd64
# kubernetes.io/os: linux
# app.kubernetes.node.name: "k8s-node1"
# env represents an environment variable present in a Container.
# 'name' of the environment variable. Must be a C_IDENTIFIER.
# no more than one of the following may be specified: 'value' or 'valueFrom',
# 'value' is the value of environment.
# 'valueFrom' is source for the environment variable's value. Cannot be used if 'value' is not empty.
env: []
# - name: "HOME"
# value: "/opt/selectdb"
# - name: HOST_IP
# valueFrom:
# fieldRef:
# apiVersion: v1
# fieldPath: status.hostIP
# affinity is the constraints of pod scheduling
# nodeAffinity: Describes node affinity scheduling rules for the pod.
# podAffinity: Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).
# PodAntiAffinity: Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).
# reference: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
affinity: {}
# nodeAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# key: "app.kubernetes.node.name"
# operator: "In"
# values:
# - "k8s-node1"
# "k8s-node2"
# podAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# key: "app.kubernetes.node.name"
# operator: "In"
# values:
# - "fe1"
# "fe2"
# podAntiAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# key: "app.kubernetes.node.name"
# operator: "NotIn"
# values:
# - "fe1"
# "fe2"
# the pod this Toleration is attached to tolerates any taint that matches. Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
# the triple <key,value,effect> using the matching operator <operator>.
# 'key' is the taint key that the toleration applies to. Empty means match all taint keys. if the 'key' is empty, 'operator' must be Exists; this combination means to match all values and all keys.
# 'operator' represents a key's relationship to the 'value'. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.
# 'value' is the taint value the toleration matches to. If the 'operator' is Exists, the 'value' should be empty, otherwise just a regular string.
# 'effect' indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
tolerations: []
# - key: "toleration"
# operator: "Equal"
# value: "master"
# - key: "node-role.kubernetes.io/master"
# operator: "Exists"
# effect: "NoSchedule"
# - operator: "Exists"
# hostAliases allows adding entries to /etc/hosts inside the containers
hostAliases: []
# If doris use hdfs or catalog, config the map of namenode host here is beneficial
# - ip: "127.0.0.1"
# hostnames:
# - "hostname1"
# - ip: "127.0.0.2"
# hostnames:
# - "hostname2"
persistentVolumeClaim: {}
# data volume, mountPath is /opt/apache-doris/be/storage
# dataPersistentVolume:
# storage: 200Gi
# when use specific storageclass, the storageClassName should reConfig, example as annotation.
# storageClassName: ""
# logs volume, mountPath is /opt/apache-doris/be/log
# logsPersistentVolume:
# storage: 100Gi
# when use specific storageclass, the storageClassName should reConfig, example as annotation.
# storageClassName: ""
systemInitialization: {}
# initImage: "selectdb/alpine:latest"
# command: [ "/sbin/sysctl", "-w", "vm.max_map_count=2000000" ]
cnSpec:
replicas: 3
# the pod labels for user select or classify pods.
labels: {}
# selectdb.app.classify: "classify-1"
image:
repository: apache/doris
tag: be-2.1.7
# imagePullSecrets:
# - name: imagePullSecret
# config the service port for cn service.
# if you want to use a dedicated port for cn service, you can config the port.
# see https://kubernetes.io/docs/concepts/services-networking/service/#field-spec-ports for more details.
service:
# the cn service type, only supported ClusterIP, NodePort, LoadBalancer
type: ClusterIP
# type: NodePort
# servicePorts:
# - nodePort: 30005
# targetPort: 9040
# - nodePort: 30006
# targetPort: 8040
# type: "LoadBalancer"
# the loadBalancerIP for static ip config when the type=LoadBalancer and loadbalancerIp is not empty.
# loadbalancerIP: "127.0.0.1"
# use LoadBalancer on cloud platform, try to configure it using annotations
annotations: {}
# service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
# specify the configMap, as a dictionary.
# Its 'key' is the config file name in the doris 'doris_root_path/fe/conf/' file path,
# Its 'value' is the text content of the corresponding file (it should be relatively long, actually).
configMap: {}
# 'be.conf' is the startup config file of cn, and the name must be 'be.conf'.
# be.conf: |
# be_port = 9060
# webserver_port = 8040
# heartbeat_service_port = 9050
# brpc_port = 8060
# storage_root_path = /data/doris/be/storage
# be_node_role=computation
# Other config files can also be specified here
# hdfs-site.xml: |
# <?xml version="1.0" encoding="UTF-8"?>
#
# <configuration>
# <property>
# <name>dfs.nameservices</name>
# <value>ns</value>
# </property>
#
# mountConfigMaps supports configmap mounting in the form of specifying the mounting directory
# but please note that the mounting path cannot be repeated.
# if the elements within mountConfigMaps contain data, it means that the configmap does not need to be created manually by the user, and vice versa.
# in the following example, the user needs to manually create configmap 'cm-1'
# mountConfigMaps: {}
# - configMapName: cm-1
# mountPath: /etc/cm1
# - configMapName: cm-2
# mountPath: /etc/cm2
# data:
# copy_file1: |
# text *** content
# copy_file2: |
# text *** content
# If configured separately here, it will overwrite the total resources configuration default.
# but the default configuration of other types will still take effect.
resource: {}
# requests:
# cpu: 8
# memory: 16Gi
# limits:
# cpu: 16
# memory: 32Gi
# If specified, the pod's nodeSelectordisplayName="Map of nodeSelectors to match when scheduling pods on nodes"
nodeSelector: {}
# kubernetes.io/arch: amd64
# kubernetes.io/os: linux
# app.kubernetes.node.name: "k8s-node1"
# env represents an environment variable present in a Container.
# 'name' of the environment variable. Must be a C_IDENTIFIER.
# no more than one of the following may be specified: 'value' or 'valueFrom',
# 'value' is the value of environment.
# 'valueFrom' is source for the environment variable's value. Cannot be used if 'value' is not empty.
env: []
# - name: "HOME"
# value: "/opt/selectdb"
# - name: HOST_IP
# valueFrom:
# fieldRef:
# apiVersion: v1
# fieldPath: status.hostIP
# affinity is the constraints of pod scheduling
# nodeAffinity: Describes node affinity scheduling rules for the pod.
# podAffinity: Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).
# PodAntiAffinity: Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).
# reference: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
affinity: {}
# nodeAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# key: "app.kubernetes.node.name"
# operator: "In"
# values:
# - "k8s-node1"
# "k8s-node2"
# podAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# key: "app.kubernetes.node.name"
# operator: "In"
# values:
# - "fe1"
# "fe2"
# podAntiAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# key: "app.kubernetes.node.name"
# operator: "NotIn"
# values:
# - "fe1"
# "fe2"
# the pod this Toleration is attached to tolerates any taint that matches. Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
# the triple <key,value,effect> using the matching operator <operator>.
# 'key' is the taint key that the toleration applies to. Empty means match all taint keys. if the 'key' is empty, 'operator' must be Exists; this combination means to match all values and all keys.
# 'operator' represents a key's relationship to the 'value'. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.
# 'value' is the taint value the toleration matches to. If the 'operator' is Exists, the 'value' should be empty, otherwise just a regular string.
# 'effect' indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
tolerations: []
# - key: "toleration"
# operator: "Equal"
# value: "master"
# - key: "node-role.kubernetes.io/master"
# operator: "Exists"
# effect: "NoSchedule"
# - operator: "Exists"
# hostAliases allows adding entries to /etc/hosts inside the containers
hostAliases: []
# If doris use hdfs or catalog, config the map of namenode host here is beneficial
# - ip: "127.0.0.1"
# hostnames:
# - "hostname1"
# - ip: "127.0.0.2"
# hostnames:
# - "hostname2"
persistentVolumeClaim: {}
# data volume, mountPath is /opt/apache-doris/be/storage
# dataPersistentVolume:
# storage: 200Gi
# when use specific storageclass, the storageClassName should reConfig, example as annotation.
# storageClassName: ""
# logs volume, mountPath is /opt/apache-doris/be/log
# logsPersistentVolume:
# storage: 100Gi
# when use specific storageclass, the storageClassName should reConfig, example as annotation.
# storageClassName: ""
systemInitialization: {}
# initImage: "selectdb/alpine:latest"
# command: [ "/sbin/sysctl", "-w", "vm.max_map_count=2000000" ]
# specific cn auto scale policy
autoScalingPolicy:
enable: true
# version: v2
minReplicas: 1
maxReplicas: 4
# hpaPolicy response to horizontlaPodAutoscaler's HorizontalPodAutoscalerSpec
hpaPolicy: {}
# metrics:
# - type: Resource
# resource:
# name: cpu
# target:
# type: Utilization
# averageUtilization: 30
brokerSpec:
replicas: 3
# the pod labels for user select or classify pods.
labels: {}
# selectdb.app.classify: "classify-1"
image:
repository: apache/doris
tag: broker-2.1.7
# imagePullSecrets:
# - name: imagePullSecret
# specify the configMap, as a dictionary.
# Its 'key' is the config file name in the doris 'doris_root_path/fe/conf/' file path,
# Its 'value' is the text content of the corresponding file (it should be relatively long, actually).
configMap: {}
# 'apache_hdfs_broker.conf' is the startup config file of broker, and the name must be 'apache_hdfs_broker.conf'.
# apache_hdfs_broker.conf: |
# broker_ipc_port: 8000
# client_expire_seconds: 3600
# Other config files can also be specified here
# hdfs-site.xml: |
# <?xml version="1.0" encoding="UTF-8"?>
#
# <configuration>
# <property>
# <name>dfs.nameservices</name>
# <value>ns</value>
# </property>
#
# mountConfigMaps supports configmap mounting in the form of specifying the mounting directory
# but please note that the mounting path cannot be repeated.
# if the elements within mountConfigMaps contain data, it means that the configmap does not need to be created manually by the user, and vice versa.
# in the following example, the user needs to manually create configmap 'cm-1'
# mountConfigMaps: {}
# - configMapName: cm-1
# mountPath: /etc/cm1
# - configMapName: cm-2
# mountPath: /etc/cm2
# data:
# copy_file1: |
# text *** content
# copy_file2: |
# text *** content
# If configured separately here, it will overwrite the total resources configuration default.
# but the default configuration of other types will still take effect.
resource: {}
# requests:
# cpu: 8
# memory: 16Gi
# limits:
# cpu: 16
# memory: 32Gi
# If specified, the pod's nodeSelectordisplayName="Map of nodeSelectors to match when scheduling pods on nodes"
nodeSelector: {}
# kubernetes.io/arch: amd64
# kubernetes.io/os: linux
# app.kubernetes.node.name: "k8s-node1"
# env represents an environment variable present in a Container.
# 'name' of the environment variable. Must be a C_IDENTIFIER.
# no more than one of the following may be specified: 'value' or 'valueFrom',
# 'value' is the value of environment.
# 'valueFrom' is source for the environment variable's value. Cannot be used if 'value' is not empty.
env: []
# - name: "HOME"
# value: "/opt/selectdb"
# - name: HOST_IP
# valueFrom:
# fieldRef:
# apiVersion: v1
# fieldPath: status.hostIP
# affinity is the constraints of pod scheduling
# nodeAffinity: Describes node affinity scheduling rules for the pod.
# podAffinity: Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).
# PodAntiAffinity: Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).
# reference: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
affinity: {}
# nodeAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# key: "app.kubernetes.node.name"
# operator: "In"
# values:
# - "k8s-node1"
# "k8s-node2"
# podAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# key: "app.kubernetes.node.name"
# operator: "In"
# values:
# - "fe1"
# "fe2"
# podAntiAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# key: "app.kubernetes.node.name"
# operator: "NotIn"
# values:
# - "fe1"
# "fe2"
# the pod this Toleration is attached to tolerates any taint that matches. Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
# the triple <key,value,effect> using the matching operator <operator>.
# 'key' is the taint key that the toleration applies to. Empty means match all taint keys. if the 'key' is empty, 'operator' must be Exists; this combination means to match all values and all keys.
# 'operator' represents a key's relationship to the 'value'. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.
# 'value' is the taint value the toleration matches to. If the 'operator' is Exists, the 'value' should be empty, otherwise just a regular string.
# 'effect' indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
tolerations: []
# - key: "toleration"
# operator: "Equal"
# value: "master"
# - key: "node-role.kubernetes.io/master"
# operator: "Exists"
# effect: "NoSchedule"
# - operator: "Exists"
# hostAliases allows adding entries to /etc/hosts inside the containers
hostAliases: []
# If doris use hdfs or catalog, config the map of namenode host here is beneficial
# - ip: "127.0.0.1"
# hostnames:
# - "hostname1"
# - ip: "127.0.0.2"
# hostnames:
# - "hostname2"
persistentVolumeClaim: {}
# logs volume, mountPath is /opt/apache-doris/apache_hdfs_broker/log
# logsPersistentVolume:
# storage: 100Gi
# when use specific storageclass, the storageClassName should reConfig, example as annotation.
# storageClassName: ""
systemInitialization: {}
# initImage: "selectdb/alpine:latest"
# command: [ "/sbin/sysctl", "-w", "vm.max_map_count=2000000" ]