介绍
ClickHouse Operator 是一个用于在Kubernetes集群中部署和管理ClickHouse数据库实例的工具。ClickHouse是一个用于联机分析处理(OLAP)的列式数据库管理系统(DBMS)。ClickHouse Operator为Kubernetes提供了自定义资源定义(CRD),通过这些CRD可以很容易地在Kubernetes上配置和运行Clickhouse集群。
主要特征和功能包括:
自动化运维: Clickhouse Operator能够自动化部署Clickhouse集群,包括数据库实例的创建和配置。
管理和扩展:它支持对Clickhouse集群的管理和扩展,包括添加或移出节点,自动化分片和复制配置。
配置管理:可通过Kubernetes配置映射来管理Clickhouse配置文件,使得配置的更新和应用更加便捷。
持久存储:Operator可以配合Kubernetes的持久卷(Persistent Volumes, PVs)和持久卷声明(Persistent Volume Claims,PVCs)来为Clickhouse集群提供稳定的存储。
监控集成:通常与Prometheus和Grafana监控系统集成,提供对Clickhouse集群性能的实时监控。
备份和恢复:支持备份Clickhouse数据并能够从备份中恢复,以防止数据丢失。
高可用性: Clickhouse Operator能够配置Clickhouse的复制和分片机制来提高数据的可用性和耐故障性。
使用Clickhouse Operator,用户可以利用Kubernetes的自动化能力来简化Clickhouse集群的部署和运维工作,从而在云原生环境中高效地运行大规模的数据分析任务。这对于需要在Kubernetes上运行复杂大数据工作负载和组织来说尤其有用。
部署
clickhouse-operator部署
路径:clickhouse-operator-install-bundle.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
wget https://raw.githubusercontent.com/Altinity/clickhouse-operator/master/deploy/operator/clickhouse-operator-install-bundle.yaml
kubectl apply -f clickhouse-operator-install-bundle.yaml
customresourcedefinition.apiextensions.k8s.io/clickhouseinstallations.clickhouse.altinity.com created
customresourcedefinition.apiextensions.k8s.io/clickhouseinstallationtemplates.clickhouse.altinity.com created
customresourcedefinition.apiextensions.k8s.io/clickhouseoperatorconfigurations.clickhouse.altinity.com created
customresourcedefinition.apiextensions.k8s.io/clickhousekeeperinstallations.clickhouse-keeper.altinity.com created
serviceaccount/clickhouse-operator created
clusterrole.rbac.authorization.k8s.io/clickhouse-operator-kube-system created
clusterrolebinding.rbac.authorization.k8s.io/clickhouse-operator-kube-system created
configmap/etc-clickhouse-operator-files created
configmap/etc-clickhouse-operator-confd-files created
configmap/etc-clickhouse-operator-configd-files created
configmap/etc-clickhouse-operator-templatesd-files created
configmap/etc-clickhouse-operator-usersd-files created
secret/clickhouse-operator created
deployment.apps/clickhouse-operator created
service/clickhouse-operator-metrics created
|
运行成功后,可以看到以下信息,说明Operator部署成功:
1
2
3
4
5
6
7
8
9
10
11
12
|
kubectl get crd |grep clickhouse.altinity.com
clickhouseinstallations.clickhouse.altinity.com 2024-04-15T02:15:33Z
clickhouseinstallationtemplates.clickhouse.altinity.com 2024-04-15T02:15:33Z
clickhouseoperatorconfigurations.clickhouse.altinity.com 2024-04-15T02:15:33Z
kubectl get pod -n kube-system |grep clickhouse
clickhouse-operator-7cbd5df7fc-gd7lt 2/2 Running 0 2m59s
|
验证
官方示例:
1
2
3
4
5
6
7
8
|
apiVersion: "clickhouse.altinity.com/v1"
kind: "ClickHouseInstallation"
metadata:
name: "simple-01"
spec:
configuration:
clusters:
- name: "simple"
|
部署
1
2
3
4
5
6
7
|
kubectl apply -f ck-sample.yaml
#查看状态
kubectl get pod |grep simple
chi-simple-01-simple-0-0-0 1/1 Running 0 59s
|
登录
1
2
3
4
5
6
7
8
9
10
|
kubectl exec -it chi-simple-01-simple-0-0-0 -- clickhouse-client
ClickHouse client version 24.3.2.23 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 24.3.2.
Warnings:
* Linux transparent hugepages are set to "always". Check /sys/kernel/mm/transparent_hugepage/enabled
chi-simple-01-simple-0-0-0.chi-simple-01-simple-0-0.default.svc.cluster.local :)
|
正式应用部署
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
apiVersion: "clickhouse.altinity.com/v1"
kind: "ClickHouseInstallation"
metadata:
name: "clickhouse"
spec:
defaults: #指定了若干默认模板配置
templates: #定义了服务、Pod、数据卷、和日志卷所使用的模板的名称。
serviceTemplate: service-template
podTemplate: pod-template
dataVolumeClaimTemplate: clickhouse-storage
logVolumeClaimTemplate: log-storage
configuration: #部分包含了用户配置、zookeeper配置以及集群布局等详细信息
users:
admin/network/ip: #为管理员用户定义了可以访问的 IP 地址范围
- "::/0"
- "0.0.0.0/0"
admin/networks/ip:
- "::/0"
- "0.0.0.0/0"
admin/password: "123456" #设置管理员用户的密码、使用的配置文件及启用访问管理功能。
admin/profile: default
admin/access_management: "1"
zookeeper: #详细列出zookeeper的主机名和端口号
nodes:
- host: zookeeper-0.zookeeper.default.svc.cluster.local
port: 2181
- host: zookeeper-1.zookeeper.default.svc.cluster.local
port: 2181
- host: zookeeper-2.zookeeper.default.svc.cluster.local
port: 2181
clusters: 定义集群名称
- name: kute
# templates:
# podTemplate: pod-template
layout: 配置集群布局,包含分片数和每个分片的副本数
shardsCount: 2
replicasCount: 2
templates:
serviceTemplates: #定义服务模版
- name: service-template
# generateName: chendpoint-{chi}
spec:
ports:
- name: http
port: 8123
nodePort: 38123
targetPort: 8123
- name: tcp
port: 9000
nodePort: 39000
targetPort: 9000
type: NodePort
podTemplates: #定义pod模块
- name: pod-template
spec:
containers:
- name: clickhouse
image: clickhouse/clickhouse-server:23.8
volumeMounts:
- name: clickhouse-storage
mountPath: /var/lib/clickhouse
- name: log-storage
mountPath: /var/log/clickhouse-server
# - name: clickhouse-config-vol # 挂载ConfigMap作为卷
# mountPath: /etc/clickhouse-server/users.xml
# subPath: users.xml
# volumes:
# - name: clickhouse-config-vol
# configMap:
# name: clickhouse-users
volumeClaimTemplates:
- name: clickhouse-storage
spec:
# no storageClassName - means use default storageClassName
#storageClassName: default
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
- name: log-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
|
控制台使用
1
2
3
4
5
6
7
8
9
10
11
|
clickhouse-client #登录控制台
ClickHouse client version 23.8.11.28 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 23.8.11 revision 54465.
Warnings:
* Linux transparent hugepages are set to "always". Check /sys/kernel/mm/transparent_hugepage/enabled
chi-clickhouse-kute-0-0-0.chi-clickhouse-kute-0-0.default.svc.cluster.local :)
|
sql示例
1
2
3
4
5
6
|
SELECT * FROM system.clusters; #查看集群配置
SELECT * FROM system.replicas; #查看集群中的分片
SELECT * FROM system.replication_queue; #查看集群节点的状态
SELECT * FROM system.distributed; #查看分布式表的信息
SELECT * FROM system.settings WHERE changed; #查看当前节点的配置
SELECT * FROM system.metrics; #查看当前节点的性能指标
|