在CCE集群中部署使用ClickHouse
ClickHouse是一款用于联机分析(OLAP)的列式数据库管理系统,适用于处理大规模数据集的实时查询和分析。ClickHouse容器化部署方式主要有4种,具体请参见表1。ClickHouse Operator是在Kubernetes上部署和管理ClickHouse集群的工具,它具备复制集群、管理用户与配置文件以及处理数据持久化的存储卷等功能。这些功能共同简化了应用程序的配置、管理和监控工作。
部署方式 |
部署方便程度 |
管理方便程度 |
---|---|---|
Kubectl原生部署 |
难 |
难 |
Kubectl+Operator部署 |
中 |
中 |
Helm部署 |
易 |
难 |
Helm+Operator部署 |
易 |
易 |
下面将介绍在CCE集群中如何利用Kubectl+Operator方式部署ClickHouse,参考文档:https://github.com/Altinity/clickhouse-operator。
前提条件
- 已创建一个集群,且集群有可用节点,具体操作步骤请参见购买Standard/Turbo集群。
- 集群内节点已绑定弹性公网IP,且已配置kubectl命令行工具,具体请参见将弹性公网IP绑定至实例和通过kubectl连接集群。
部署ClickHouse的基本步骤
以1.29版本CCE Turbo集群为例部署ClickHouse,集群的相关参数请参见表2。
集群参数 |
参数值 |
---|---|
集群类型 |
CCE Turbo集群 |
集群版本 |
1.29 |
Region |
上海一 |
容器引擎 |
Containerd |
网络模型 |
云原生网络2.0 |
服务转发模式 |
iptables |
- 创建ClickHouse Operator。
- 下载官方提供yaml文件“clickhouse-operator-install-bundle.yaml”创建ClickHouse Operator,其中clickhouse-operator-install-bundle.yaml来源于https://github.com/Altinity/clickhouse-operator/blob/master/deploy/operator/clickhouse-operator-install-bundle.yaml。
clickhouse-operator-install-bundle.yaml将ClickHouse Operator部署在系统命名空间kube-system中,因此ClickHouse Operator能够监控Kubernetes中所有的命名空间的相关资源。若ClickHouse Operator部署在其他命名空间中,则只会监控该特定命名空间内的资源。
kubectl apply -f clickhouse-operator-install-bundle.yaml
回显结果如下:
customresourcedefinition.apiextensions.k8s.io/clickhouseinstallations.clickhouse.altinity.comcreated customresourcedefinition.apiextensions.k8s.io/clickhouseinstallationtemplates.clickhouse.altinity.com created customresourcedefinition.apiextensions.k8s.io/clickhouseoperatorconfigurations.clickhouse.altinity.com created ...
- 检查ClickHouse Operator是否创建成功。
kubectl get pod -n kube-system | grep clickhouse
回显结果如下,若Pod状态为Running则说明ClickHouse Operator创建成功。
clickhouse-operator-656d67bd4d-k64gm 2/2 Running 4 (15m ago) 3d23h
- 通过以下命令查看集群中所有与ClickHouse相关的CRD资源。
kubectl get crd | grep clickhouse
回显结果如下:
clickhouseinstallations.clickhouse.altinity.com 2024-08-20T09:30:30Z clickhouseinstallationtemplates.clickhouse.altinity.com 2024-08-20T09:30:30Z clickhousekeeperinstallations.clickhouse-keeper.altinity.com 2024-08-20T09:30:30Z clickhouseoperatorconfigurations.clickhouse.altinity.com 2024-08-20T09:30:30Z
- 下载官方提供yaml文件“clickhouse-operator-install-bundle.yaml”创建ClickHouse Operator,其中clickhouse-operator-install-bundle.yaml来源于https://github.com/Altinity/clickhouse-operator/blob/master/deploy/operator/clickhouse-operator-install-bundle.yaml。
- 创建命名空间test-clickhouse-operator。为了方便验证测试,后续的操作都将在test-clickhouse-operator内进行。
kubectl create namespace test-clickhouse-operator
- 创建ClickHouse集群。
- 创建一个名为simple-01.yaml的YAML文件,其中simple-01.yaml为自定义名称。simple-01.yaml来源于https://raw.githubusercontent.com/Altinity/clickhouse-operator/master/docs/chi-examples/01-simple-layout-01-1shard-1repl.yaml。
vim simple-01.yaml
ClickHouseInstallation是一个在Kubernetes集群中使用ClickHouse Operator时定义的自定义资源对象(CR),创建或更新ClickHouseInstallation资源后,ClickHouse Operator会根据这些配置自动创建和管理相应的Kubernetes资源,如StatefulSets、Services、PersistentVolumeClaims等,以确保ClickHouse集群按照预期运行。
文件内容如下:
apiVersion: "clickhouse.altinity.com/v1" kind: "ClickHouseInstallation" metadata: name: "simple-01" spec: configuration: users: # printf 'test_password' | sha256sum test_user/password_sha256_hex: 10a6e6cc8311a3e2bcc09bf6c199adecd5dd59408c343e926b129c4914f3cb01 test_user/password: test_password # to allow access outside from kubernetes test_user/networks/ip: - 0.0.0.0/0 clusters: - name: "simple"
利用上述文件创建ClickHouse集群。
kubectl apply -n test-clickhouse-operator -f simple-01.yaml
- 创建一个名为simple-01.yaml的YAML文件,其中simple-01.yaml为自定义名称。simple-01.yaml来源于https://raw.githubusercontent.com/Altinity/clickhouse-operator/master/docs/chi-examples/01-simple-layout-01-1shard-1repl.yaml。
- 检查ClickHouse资源是否创建成功。
- 查看命名空间test-clickhouse-operator的Pod资源,若Pod状态都为Running,则说明Pod创建成功。
kubectl get pod -n test-clickhouse-operator
回显结果如下:
NAME READY STATUS RESTARTS AGE chi-simple-01-simple-0-0-0 2/2 Running 0 3d7h
- 其次,查看相关的服务资源。
kubectl get service -n test-clickhouse-operator
回显结果如下:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE chi-simple-01-simple-0-0 ClusterIP None <none> 9000/TCP,8123/TCP,9009/TCP 3d7h clickhouse-simple-01 ClusterIP None <none> 9000/TCP,8123/TCP 3d8h
- 查看命名空间test-clickhouse-operator的Pod资源,若Pod状态都为Running,则说明Pod创建成功。
- 连接ClickHouse DataBase。
kubectl -n test-clickhouse-operator exec -ti chi-simple-01-simple-0-0-0 -- clickhouse-client
若回显结果如下,则说明连接成功。输入“exit”,按下回车键,可退出ClickHouse DataBase。
ClickHouse client version 24.8.2.3 (official build). Connecting to localhost:9000 as user default. Connected to ClickHouse server version 24.8.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.test-clickhouse-operator.svc.cluster.local :)
- ClickHouse集群资源清理。
利用以下命令删除上述ClickHouse集群。
kubectl delete -f simple-01.yaml -n test-clickhouse-operator
回显结果如下:
clickhouseinstallation.clickhouse.altinity.com "simple-01" deleted
示例1:创建绑定持久化存储的ClickHouse集群
动态挂载(VolumeClaimTemplate)仅支持挂载云硬盘存储和本地持久卷,并且仅有状态工作负载支持动态挂载。
- 创建存储类(StorageClass)。
- 创建一个名为csi-disk-ssd.yaml的YAML文件,其中csi-disk-ssd.yaml为自定义名称。
vim csi-disk-ssd.yaml
文件内容如下,CCE默认支持的SAS类型的云硬盘。 若想使用其他类型的云硬盘,需要创建对应的StorageClass,StorageClass部分参数说明请参见表3。
allowVolumeExpansion: true apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-disk-ssd provisioner: everest-csi-provisioner parameters: csi.storage.k8s.io/csi-driver-name: disk.csi.everest.io csi.storage.k8s.io/fstype: ext4 everest.io/disk-volume-type: SSD everest.io/passthrough: "true" reclaimPolicy: Delete volumeBindingMode: Immediate
表3 StorageClass部分参数说明 参数
说明
provisioner
存储资源提供商,CCE均由everest插件提供,此处只能填写everest-csi-provisioner。
parameters
存储参数,不同类型的存储支持的参数不同。详情请参见parameters参数说明。
须知:everest.io/disk-volume-type表示云盘类型,有多种选择。
- SAS:高I/O。
- SSD:超高I/O。
- GPSSD:通用型SSD。
- ESSD:极速型SSD。
- GPSSD2:通用型SSD v2,everest版本为2.4.4及以上支持使用,使用时需同时指定everest.io/disk-iops和everest.io/disk-throughput注解。
- ESSD2:极速型SSD v2,everest版本为2.4.4及以上支持使用,使用时需指定everest.io/disk-iops注解。
默认类型:SAS。
reclaimPolicy
用来指定创建PV的persistentVolumeReclaimPolicy字段值,支持Delete和Retain。如果StorageClass对象被创建时没有指定reclaimPolicy,它将默认为Delete。
- Delete:表示动态创建的PV,在PVC销毁的时候PV也会自动销毁。
- Retain:表示动态创建的PV,在PVC销毁的时候PV不会自动销毁。
volumeBindingMode
表示卷绑定模式,即动态创建PV的时间,分为立即创建和延迟创建。
- Immediate:创建PVC时完成PV绑定和动态创建。
- WaitForFirstConsumer:延迟PV的绑定和创建,当在工作负载中使用该PVC时才执行PV创建和绑定流程。
- 根据csi-disk-ssd.yaml,创建名为csi-disk-ssd的StorageClass。
kubectl create -f csi-disk-ssd.yaml
- 创建一个名为csi-disk-ssd.yaml的YAML文件,其中csi-disk-ssd.yaml为自定义名称。
- 创建绑定持久化存储的ClickHouse集群。
- 创建一个名为pv-simple.yaml的YAML文件,其中pv-simple.yaml为自定义名称。
vim pv-simple.yaml
云硬盘存储卷只支持单个节点读写的访问模式,即accessModes需设置为ReadWriteOnce。
apiVersion: "clickhouse.altinity.com/v1" kind: "ClickHouseInstallation" metadata: name: "pv-simple" namespace: test-clickhouse-operator spec: defaults: templates: dataVolumeClaimTemplate: data-volume-template logVolumeClaimTemplate: log-volume-template configuration: clusters: - name: "simple" layout: shardsCount: 1 replicasCount: 1 templates: volumeClaimTemplates: # 动态挂载 - name: data-volume-template # 定义数据存储卷的模板 spec: accessModes: - ReadWriteOnce # 云硬盘存储卷只支持单个节点读写的访问模式,即ReadWriteOnce resources: requests: storage: 10Gi storageClassName: csi-disk-ssd # 指定使用的存储类为新建的csi-disk-ssd - name: log-volume-template # 定义的日志存储卷的模板 spec: accessModes: - ReadWriteOnce # 云硬盘存储卷只支持单个节点读写的访问模式,即ReadWriteOnce resources: requests: storage: 10Gi storageClassName: csi-disk-ssd # 指定使用的存储类为新建的csi-disk-ssd
- 利用pv-simple.yaml创建ClickHouse集群。
kubectl -n test-clickhouse-operator create -f pv-simple.yaml
- 创建一个名为pv-simple.yaml的YAML文件,其中pv-simple.yaml为自定义名称。
- 检查ClickHouse资源是否创建成功,以及是否成功挂载持久化存储。
- 查看命名空间test-clickhouse-operator的Pod资源,若Pod状态都为Running,则说明Pod创建成功。
kubectl get pod -n test-clickhouse-operator
回显结果如下,则说明Pod创建成功。
NAME READY STATUS RESTARTS AGE chi-pv-simple-simple-0-0-0 2/2 Running 0 5m2s chi-simple-01-simple-0-0-0 1/1 Running 0 3d7h
- 查看名为data-volume-template和log-volume-template的PVC是否创建成功。
kubectl get pvc -n test-clickhouse-operator
回显结果如下,STATUS为Bound则说明PVC绑定成功。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE data-volume-template-chi-pv-simple-simple-0-0-0 Bound pvc-981b1d73-a13e-41d5-aade-ea8c6b1199d7 10Gi RWO csi-disk-ssd <unset> 28s log-volume-template-chi-pv-simple-simple-0-0-0 Bound pvc-fcf70a2e-131d-4da1-a9c2-eddd89887b45 10Gi RWO csi-disk-ssd <unset> 28s
- 检查存储卷挂载情况。
首先,进入chi-pv-simple-simple-0-0-0容器的命令行界面。
kubectl -n test-clickhouse-operator exec -ti chi-pv-simple-simple-0-0-0 -c clickhouse bash
其次,输入以下命令查看存储卷挂载情况。
df -h
由回显结果可知,相关存储卷已挂载至ClickHouse集群。Ctrl+D可退出当前命令行界面。
Filesystem Size Used Avail Use% Mounted on overlay 99G 5.1G 89G 6% / tmpfs 64M 0 64M 0% /dev tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/mapper/vgpaas-share 99G 5.1G 89G 6% /etc/hosts shm 64M 0 64M 0% /dev/shm /dev/sdb 9.8G 66M 9.8G 1% /var/lib/clickhouse /dev/sda 9.8G 37M 9.8G 1% /var/log/clickhouse-server tmpfs 6.3G 12K 6.3G 1% /run/secrets/kubernetes.io/serviceaccount tmpfs 3.9G 0 3.9G 0% /proc/acpi tmpfs 3.9G 0 3.9G 0% /proc/scsi tmpfs 3.9G 0 3.9G 0% /sys/firmware
- 查看命名空间test-clickhouse-operator的Pod资源,若Pod状态都为Running,则说明Pod创建成功。
- 连接ClickHouse Database。
kubectl -n test-clickhouse-operator exec -ti chi-pv-simple-simple-0-0-0 -- clickhouse-client
回显结果如下,则说明连接ClickHouse Database成功。输入“exit”,按下回车键,可退出ClickHouse DataBase。
Defaulted container "clickhouse" out of: clickhouse, clickhouse-log ClickHouse client version 24.8.2.3 (official build). Connecting to localhost:9000 as user default. Connected to ClickHouse server version 24.8.2. Warnings: * Linux transparent hugepages are set to "always". Check /sys/kernel/mm/transparent_hugepage/enabled chi-pv-simple-simple-0-0-0.chi-pv-simple-simple-0-0.test-clickhouse-operator.svc.cluster.local :)
- ClickHouse集群资源清理。
利用以下命令删除上述ClickHouse集群,即绑定持久化存储的ClickHouse集群。
kubectl delete -f pv-simple.yaml -n test-clickhouse-operator
回显结果如下:
clickhouseinstallation.clickhouse.altinity.com "pv-simple" deleted
示例2:创建挂载负载均衡类型服务的ClickHouse集群
本节将为您介绍如何创建挂载负载均衡类型服务的ClickHouse集群,挂载负载均衡类型服务可以帮助您从公网访问ClickHouse集群。
- 创建挂载负载均衡类型服务的ClickHouse集群,方便您从公网访问ClickHouse集群。
- 创建一个名为elb.yaml的YAML文件,其中elb.yaml为自定义名称。
vim elb.yaml
文件内容如下,annotations kubernetes.io/elb.autocreate部分参数请参见表4。
apiVersion: "clickhouse.altinity.com/v1" kind: "ClickHouseInstallation" metadata: name: "ck-elb" namespace: test-clickhouse-operator spec: defaults: templates: dataVolumeClaimTemplate: data-volume-nas serviceTemplate: chi-service-elb configuration: clusters: - name: "ck-elb" templates: podTemplate: pod-template-with-nas layout: shardsCount: 1 replicasCount: 1 templates: podTemplates: - name: pod-template-with-nas spec: containers: - name: clickhouse image: clickhouse/clickhouse-server:23.8 volumeMounts: - name: data-volume-nas mountPath: /var/lib/clickhouse volumeClaimTemplates: # 数据卷声明模板,指定存储访问模式、请求的存储的大小和存储类 - name: data-volume-nas spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi storageClassName: csi-disk-ssd serviceTemplates: # 服务模板 - name: chi-service-elb metadata: annotations: # 表示负载均衡器类型,union(默认值)-共享型负载均衡,performance-独享型负载均衡 kubernetes.io/elb.class: union # 自动创建Ingress关联的ELB,定义用于配置负载均衡器的相关参数 kubernetes.io/elb.autocreate: >- {"type":"public","bandwidth_name":"cce-bandwidth-ck","bandwidth_chargemode":"bandwidth","bandwidth_size":5,"bandwidth_sharetype":"PER","eip_type":"5_bgp"} spec: ports: - name: http port: 8123 - name: client port: 9000 type: LoadBalancer # 服务类型被设置为负载均衡器
表4 kubernetes.io/elb.autocreate部分参数说明 参数
是否必填
参数类型
描述
type
否
String
负载均衡实例网络类型,公网或者私网。
- public :公网型负载均衡。
- inner :私网型负载均衡。
默认类型:inner。
bandwidth_name
公网型负载均衡必填
String
带宽的名称,默认值为:cce-bandwidth-******。
取值范围:只能由中文、英文字母、数字、下划线、中划线、点组成,且长度范围为1-64个字符。
bandwidth_chargemode
否
String
带宽付费模式。
- bandwidth :按带宽计费。
- traffic :按流量计费。
默认类型:bandwidth。
bandwidth_size
公网型负载均衡必填
Integer
带宽大小,默认1Mbit/s~2000Mbit/s,请根据Region带宽支持范围设置。
调整带宽时的最小单位会根据带宽范围不同存在差异。
- 小于等于300Mbit/s:默认最小单位为1Mbit/s。
- 大于300Mbit/s且小于等于1000Mbit/s:默认最小单位为50Mbit/s。
- 大于1000Mbit/s:默认最小单位为500Mbit/s。
bandwidth_sharetype
公网型负载均衡必填
String
带宽共享方式,PER表示独享带宽。
eip_type
公网型负载均衡必填
String
弹性公网IP类型。
- 5_telcom:电信。
- 5_union:联通。
- 5_bgp:全动态BGP。
- 5_sbgp:静态BGP。
具体类型以各区域配置为准,详情请参见弹性公网IP控制台。
- 根据elb.yaml创建ClickHouse集群。
kubectl create -f elb.yaml -n test-clickhouse-operator
- 创建一个名为elb.yaml的YAML文件,其中elb.yaml为自定义名称。
- 检查ClickHouse资源是否创建成功,以及是否成功挂载负载均衡类型服务。
- 查看命名空间test-clickhouse-operator的Pod资源,若Pod状态都为Running,则说明Pod创建成功。
kubectl get pod -n test-clickhouse-operator
回显结果如下,则说明ClickHouseInstallation创建成功。
NAME READY STATUS RESTARTS AGE chi-ck-elb-ck-elb-0-0-0 1/1 Running 0 3m4s chi-pv-simple-simple-0-0-0 2/2 Running 0 33m chi-simple-01-simple-0-0-0 1/1 Running 0 3d7h
- 利用以下命令查看负载均衡服务是否创建成功。
kubectl get svc -n test-clickhouse-operator
回显结果如下,则说明创建成功。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE chi-ck-elb-ck-elb-0-0 ClusterIP None <none> 9000/TCP,8123/TCP,9009/TCP 2s chi-pv-simple-simple-0-0 ClusterIP None <none> 9000/TCP,8123/TCP,9009/TCP 35m chi-simple-01-simple-0-0 ClusterIP None <none> 9000/TCP,8123/TCP,9009/TCP 38m clickhouse-pv-simple ClusterIP None <none> 8123/TCP,9000/TCP 35m clickhouse-simple-01 ClusterIP None <none> 8123/TCP,9000/TCP 3d7h
- 查看命名空间test-clickhouse-operator的Pod资源,若Pod状态都为Running,则说明Pod创建成功。
- 连接ClickHouse Database。
kubectl -n test-clickhouse-operator exec -ti chi-ck-elb-ck-elb-0-0-0 -- clickhouse-client
回显结果如下,则说明连接ClickHouse Database成功。输入“exit”,按下回车键,可退出ClickHouse DataBase。
ClickHouse client version 23.8.16.16 (official build). Connecting to localhost:9000 as user default. Connected to ClickHouse server version 23.8.16 revision 54465. Warnings: * Linux transparent hugepages are set to "always". Check /sys/kernel/mm/transparent_hugepage/enabled chi-ck-elb-ck-elb-0-0-0.chi-ck-elb-ck-elb-0-0.test-clickhouse-operator.svc.cluster.local :)
- ClickHouse集群资源清理。
利用以下命令删除上述ClickHouse集群,即挂载负载均衡类型服务的ClickHouse集群。
kubectl delete -f elb.yaml -n test-clickhouse-operator
回显结果如下:
clickhouseinstallation.clickhouse.altinity.com "ck-elb1" deleted
后续步骤:ClickHouse其他资源清理。
- 利用以下命令删除命名空间test-clickhouse-operator。
kubectl delete namespace test-clickhouse-operator
回显结果如下:
namespace "test-clickhouse-operator" deleted
- 利用以下命令删除ClickHouse Operator。
kubectl delete -f clickhouse-operator-install-bundle.yaml
回显结果如下:
customresourcedefinition.apiextensions.k8s.io "clickhouseinstallations.clickhouse.altinity.com" deleted customresourcedefinition.apiextensions.k8s.io "clickhouseinstallationtemplates.clickhouse.altinity.com" deleted customresourcedefinition.apiextensions.k8s.io "clickhouseoperatorconfigurations.clickhouse.altinity.com" deleted customresourcedefinition.apiextensions.k8s.io "clickhousekeeperinstallations.clickhouse-keeper.altinity.com" deleted ...