feat(clickhouse): Add ClickHouse (#3060)

* Add {Chart,templates/common}.yaml

* Add {questions,values}.yaml

* Add config.d PVC mounts

* Remove types from probes

* Add custom probes

* Add exec to probes

* Remove loops from probes

* Use HTTP probes

* Update charts/incubator/clickhouse/values.yaml

* Revert "Update charts/incubator/clickhouse/values.yaml"

This reverts commit 6f680bff5afae43ff26e01761e59ab29dc1bb799.

* Use HTTP probe

* Disable startup probe

* Update charts/incubator/clickhouse/values.yaml

* Add reference to docs regarding Linux capabilities

* Test different probe timings

* Fix linting errors

* Make root fs writable

* Cleanup

* Disable optional capabilities for advanced ClickHouse features

Co-authored-by: Kjeld Schouten-Lebbing <kjeld@schouten-lebbing.nl>
This commit is contained in:
Michael Schnerring
2022-07-10 09:33:51 +00:00
committed by GitHub
parent 5c38d66f09
commit 50516db10b
4 changed files with 396 additions and 0 deletions
+30
View File
@@ -0,0 +1,30 @@
apiVersion: v2
appVersion: "21.3.20.1"
dependencies:
- name: common
repository: https://library-charts.truecharts.org
version: 10.3.0
deprecated: false
description: ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).
home: https://github.com/truecharts/apps/tree/master/charts/incubator/clickhouse
icon: https://truecharts.org/_static/img/appicons/clickhouse.png
keywords:
- database
- clickhouse
- sql
kubeVersion: '>=1.16.0-0'
maintainers:
- email: info@truecharts.org
name: TrueCharts
url: https://truecharts.org
name: clickhouse
sources:
- https://clickhouse.com/
- https://hub.docker.com/r/yandex/clickhouse-server
type: application
version: 0.0.1
annotations:
truecharts.org/catagories: |
- database
truecharts.org/SCALE-support: "true"
truecharts.org/grade: U
+298
View File
@@ -0,0 +1,298 @@
# Include{groups}
questions:
- variable: portal
group: "Container Image"
label: "Configure Portal Button"
schema:
type: dict
hidden: true
attrs:
- variable: enabled
label: "Enable"
description: "enable the portal button"
schema:
hidden: true
editable: false
type: boolean
default: false
# Include{global}
- variable: controller
group: "Controller"
label: ""
schema:
additional_attrs: true
type: dict
attrs:
- variable: advanced
label: "Show Advanced Controller Settings"
schema:
type: boolean
default: false
show_subquestions_if: true
subquestions:
- variable: type
description: "Please specify type of workload to deploy"
label: "(Advanced) Controller Type"
schema:
type: string
default: "statefulset"
required: true
enum:
- value: "deployment"
description: "Deployment"
- value: "statefulset"
description: "Statefulset"
- value: "daemonset"
description: "Daemonset"
- variable: replicas
description: "Number of desired pod replicas"
label: "Desired Replicas"
schema:
type: int
default: 1
required: true
- variable: strategy
description: "Please specify type of workload to deploy"
label: "(Advanced) Update Strategy"
schema:
type: string
default: "RollingUpdate"
required: true
enum:
- value: "Recreate"
description: "Recreate: Kill existing pods before creating new ones"
- value: "RollingUpdate"
description: "RollingUpdate: Create new pods and then kill old ones"
- value: "OnDelete"
description: "(Legacy) OnDelete: ignore .spec.template changes"
# Include{controllerExpert}
# Include{containerConfig}
- variable: clickhouseDatabase
group: "App Configuration"
label: "Database Name"
schema:
type: string
default: "test"
required: true
- variable: clickhouseUsername
group: "App Configuration"
label: "Database User"
schema:
type: string
default: "test"
required: true
- variable: clickhousePassword
group: "App Configuration"
label: "Database Password"
schema:
type: string
default: ""
required: true
private: true
- variable: clickhouseDefaultAccessManagement
group: "App Configuration"
label: "Default Access Management"
schema:
type: int
default: 0
required: true
enum:
- value: 0
description: "Disabled"
- value: 1
description: "Enabled"
- variable: service
group: "Networking and Services"
label: "Configure Service(s)"
schema:
additional_attrs: true
type: dict
attrs:
- variable: main
label: "Main Service"
description: "The Primary service on which the healthcheck runs, often the webUI"
schema:
additional_attrs: true
type: dict
attrs:
# Include{serviceSelector}
- variable: main
label: "Main Service Port Configuration"
schema:
additional_attrs: true
type: dict
attrs:
- variable: port
label: "Port"
description: "This port exposes the container port on the service"
schema:
type: int
default: 8123
required: true
- variable: advanced
label: "Show Advanced settings"
schema:
type: boolean
default: false
show_subquestions_if: true
subquestions:
- variable: protocol
label: "Port Type"
schema:
type: string
default: "HTTP"
enum:
- value: HTTP
description: "HTTP"
- value: "HTTPS"
description: "HTTPS"
- value: TCP
description: "TCP"
- value: "UDP"
description: "UDP"
- variable: nodePort
label: "Node Port (Optional)"
description: "This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer"
schema:
type: int
min: 9000
max: 65535
- variable: targetPort
label: "Target Port"
description: "The internal(!) port on the container the Application runs on"
schema:
type: int
default: 8123
- variable: serviceexpert
group: "Networking and Services"
label: "Show Expert Config"
schema:
type: boolean
default: false
show_subquestions_if: true
subquestions:
- variable: hostNetwork
group: "Networking and Services"
label: "Host-Networking (Complicated)"
schema:
type: boolean
default: false
# Include{serviceExpert}
# Include{serviceList}
- variable: volumeClaimTemplates
label: "Integrated Persistent Storage"
description: "Integrated Persistent Storage"
group: "Storage and Persistence"
schema:
additional_attrs: true
type: dict
attrs:
- variable: data
label: Data Storage
description: Stores the ClickHouse Data
schema:
type: dict
hidden: true
attrs:
# Include{persistenceBasic}
# Include{persistenceAdvanced}
- variable: config-server
label: Server Configuration Storage
description: Files with Server Settings Adjustments
schema:
type: dict
hidden: true
attrs:
# Include{persistenceBasic}
# Include{persistenceAdvanced}
- variable: config-users
label: Users Configuration Storage
description: Files with Users Settings Adjustments
schema:
type: dict
hidden: true
attrs:
# Include{persistenceBasic}
# Include{persistenceAdvanced}
# Include{persistenceList}
# Include{ingressList}
# Include{security}
- variable: advancedSecurity
label: "Show Advanced Security Settings"
group: "Security and Permissions"
schema:
type: boolean
default: false
show_subquestions_if: true
subquestions:
- variable: securityContext
label: "Security Context"
schema:
additional_attrs: true
type: dict
attrs:
- variable: privileged
label: "Privileged mode"
schema:
type: boolean
default: false
- variable: readOnlyRootFilesystem
label: "ReadOnly Root Filesystem"
schema:
type: boolean
default: true
- variable: allowPrivilegeEscalation
label: "Allow Privilege Escalation"
schema:
type: boolean
default: false
- variable: runAsNonRoot
label: "runAsNonRoot"
schema:
type: boolean
default: true
# Include{securityContextAdvanced}
- variable: podSecurityContext
group: "Security and Permissions"
label: "Pod Security Context"
schema:
additional_attrs: true
type: dict
attrs:
- variable: runAsUser
label: "runAsUser"
description: "The UserID of the user running the application"
schema:
type: int
default: 568
- variable: runAsGroup
label: "runAsGroup"
description: "The groupID this App of the user running the application"
schema:
type: int
default: 568
- variable: fsGroup
label: "fsGroup"
description: "The group that should own ALL storage."
schema:
type: int
default: 568
# Include{podSecurityContextAdvanced}
# Include{resources}
# Include{advanced}
# Include{addons}
@@ -0,0 +1 @@
{{ include "tc.common.loader.all" . }}
+67
View File
@@ -0,0 +1,67 @@
image:
repository: yandex/clickhouse-server
pullPolicy: IfNotPresent
tag: 21.3.20.1@sha256:4eccfffb01d735ab7c1af9a97fbff0c532112a6871b2bb5fe5c478d86d247b7e
controller:
type: statefulset
strategy: RollingUpdate
rollingUpdate:
unavailable: 1
securityContext:
readOnlyRootFilesystem: false
# Optional capabilities advanced ClickHouse features. See also:
# https://github.com/ClickHouse/ClickHouse/blob/master/docker/server/README.md#linux-capabilities
# https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-clickhouse-in-docker/
# https://github.com/ClickHouse/ClickHouse/blob/b844c36a9d5e76300a88b4f49e6debccf1ad22e4/programs/install/Install.cpp#L793-L804
# capabilities:
# add:
# - IPC_LOCK
# - NET_ADMIN
# - SYS_NICE
service:
main:
ports:
main:
port: 8123
protocol: HTTP
targetPort: 8123
volumeClaimTemplates:
data:
enabled: true
mountPath: /var/lib/clickhouse
probes:
liveness:
type: HTTP
path: /ping
readiness:
type: HTTP
path: /ping
startup:
type: HTTP
path: /ping
clickhouseDatabase: "test"
clickhouseUsername: "test"
clickhousePassword: "testpass"
clickhouseDefaultAccessManagement: 0
existingSecret: ""
secret:
credentials:
enabled: true
data:
clickhouse-password: '{{ ( .Values.clickhousePassword | default "empty" ) }}'
env:
CLICKHOUSE_DB: "{{ .Values.clickhouseDatabase }}"
CLICKHOUSE_USER: "{{ .Values.clickhouseUsername }}"
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: "{{ .Values.clickhouseDefaultAccessManagement }}"
CLICKHOUSE_PASSWORD:
secretKeyRef:
name: '{{ .Values.existingSecret | default ( printf "%s-credentials" ( include "tc.common.names.fullname" . ) ) }}'
key: "clickhouse-password"