diff --git a/chart/values.yaml b/chart/values.yaml index e195cdd..809102c 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -4,4 +4,5 @@ tools: # - prometheus - hashicorp-vault - crowdsec - - redis \ No newline at end of file + - redis + - clickhouse \ No newline at end of file diff --git a/clickhouse/Chart.yaml b/clickhouse/Chart.yaml new file mode 100644 index 0000000..5d130b4 --- /dev/null +++ b/clickhouse/Chart.yaml @@ -0,0 +1,34 @@ +# Chart: keydb-custom +# Helm chart tailored for KeyDB (EqAlpha) on 2 Raspberry Pi 5 nodes +# - Mode: master (statefulset index 0) + replica (index 1) +# - Replica runs as replicaof master at startup +# - server-threads = 4 +# - Config mounted via ConfigMap +# - Liveness / readiness probes included +# - Persistence via PersistentVolumeClaim (storageClass configurable) +# ----------------------------------------------------------------------------- +# Chart.yaml +# ----------------------------------------------------------------------------- +apiVersion: v2 +name: clickhouse +description: A Helm chart for Kubernetes + +dependencies: +- name: tool + version: 0.1.0 + repository: https://gitea.arcodange.duckdns.org/api/packages/arcodange-org/helm +- name: clickhouse + version: 0.4.0 + repository: https://charts.pascaliske.dev + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application +version: 0.1.0 +appVersion: "latest" \ No newline at end of file diff --git a/clickhouse/templates/helm-chart-config.yaml b/clickhouse/templates/helm-chart-config.yaml new file mode 100644 index 0000000..31cb271 --- /dev/null +++ b/clickhouse/templates/helm-chart-config.yaml @@ -0,0 +1,3 @@ +{{- if eq .Values.tool.kind "HelmChart" -}} +{{- include "tool.helm-chart-config.tpl" . -}} +{{- end -}} \ No newline at end of file diff --git a/clickhouse/templates/helm-chart.yaml b/clickhouse/templates/helm-chart.yaml new file mode 100644 index 0000000..c6b793d --- /dev/null +++ b/clickhouse/templates/helm-chart.yaml @@ -0,0 +1,3 @@ +{{- if eq .Values.tool.kind "HelmChart" -}} +{{- include "tool.helm-chart.tpl" . -}} +{{- end -}} \ No newline at end of file diff --git a/clickhouse/values.yaml b/clickhouse/values.yaml new file mode 100644 index 0000000..ebc2fe5 --- /dev/null +++ b/clickhouse/values.yaml @@ -0,0 +1,163 @@ +clickhouse: &clickhouse_config + image: + # -- The registry to pull the image from. + registry: docker.io + # -- The repository to pull the image from. + repository: clickhouse/clickhouse-server + # -- The docker tag, if left empty chart's appVersion will be used. + # @default -- `.Chart.AppVersion` + tag: '' + # -- The pull policy for the controller. + pullPolicy: IfNotPresent + + nameOverride: '' + fullnameOverride: '' + + controller: + # -- Create a workload for this chart. + enabled: true + # -- Type of the workload object. + kind: StatefulSet + # -- The number of replicas. + replicas: 1 + # -- The controller update strategy. Currently only applies to controllers of kind `Deployment`. + updateStrategy: {} + # -- Additional annotations for the controller object. + annotations: {} + # -- Additional labels for the controller object. + labels: {} + + service: + # -- Create a service for exposing this chart. + enabled: true + # -- The service type used. + type: ClusterIP + # -- ClusterIP used if service type is `ClusterIP`. + clusterIP: '' + # -- LoadBalancerIP if service type is `LoadBalancer`. + loadBalancerIP: '' + # -- Allowed addresses when service type is `LoadBalancer`. + loadBalancerSourceRanges: [] + # -- Additional annotations for the service object. + annotations: {} + # -- Additional labels for the service object. + labels: {} + + env: + # -- Timezone for the container. + - name: TZ + value: Europe/Paris + + # -- List of extra arguments for the container. + extraArgs: [] + # - --loglevel warning + + ports: + rest: + # -- Enable the port inside the `Controller` and `Service` objects. + enabled: true + # -- The port used as internal port and cluster-wide port if `.service.type` == `ClusterIP`. + port: 8123 + # -- The external port used if `.service.type` == `NodePort`. + nodePort: null + # -- The protocol used for the service. + protocol: TCP + rpc: + # -- Enable the port inside the `Controller` and `Service` objects. + enabled: true + # -- The port used as internal port and cluster-wide port if `.service.type` == `ClusterIP`. + port: 9000 + # -- The external port used if `.service.type` == `NodePort`. + nodePort: null + # -- The protocol used for the service. + protocol: TCP + + configMap: + # -- Create a new config map object. + create: true + # -- Mount path of the config map object. + mountPath: /etc/config + # -- Use an existing config map object. + existingConfigMap: '' + # -- Map of configuration files as strings. + files: {} + # file1.yml: | + # # contents + # file2.yml: | + # # contents + # -- Additional annotations for the config map object. + annotations: {} + # -- Additional labels for the config map object. + labels: {} + + persistentVolumeClaim: + # -- Create a new persistent volume claim object. + create: true + # -- Mount path of the persistent volume claim object. + mountPath: /var/lib/clickhouse + # -- Access mode of the persistent volume claim object. + accessMode: ReadWriteOnce + # -- Volume mode of the persistent volume claim object. + volumeMode: Filesystem + # -- Storage request size for the persistent volume claim object. + size: 1Gi + # -- Storage class name for the persistent volume claim object. + storageClassName: '' + # -- Use an existing persistent volume claim object. + existingPersistentVolumeClaim: '' + # -- Additional annotations for the persistent volume claim object. + annotations: {} + # -- Additional labels for the persistent volume claim object. + labels: {} + + serviceAccount: + # -- Create a `ServiceAccount` object. + create: true + # -- Specify the service account used for the controller. + name: '' + # -- Additional annotations for the role and role binding objects. + annotations: {} + # -- Additional labels for the role and role binding objects. + labels: {} + + # -- Pod-level security attributes. More info [here](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#security-context). + securityContext: + fsGroup: 101 + runAsNonRoot: true + runAsGroup: 101 + runAsUser: 101 + + # -- Compute resources used by the container. More info [here](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/). + resources: {} + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + + # -- Pod-level affinity. More info [here](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling). + affinity: {} + # nodeAffinity: + # requiredDuringSchedulingIgnoredDuringExecution: + # nodeSelectorTerms: + # - matchExpressions: + # - key: kubernetes.io/hostname + # operator: In + # values: + # - my-node-xyz + + # -- Pod-level tolerations. More info [here](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#scheduling). + tolerations: [] + # - key: node-role.kubernetes.io/control-plane + # operator: Exists + # effect: NoSchedule + + +tool: + # kind: 'SubChart' or 'HelmChart', if subchart then uncomment Chart.yaml dependency, else comment and use tool library with helm chart template + kind: 'SubChart' + repo: https://charts.pascaliske.dev + chart: clickhouse + version: 0.4.0 + values: *clickhouse_config