乐趣区

关于mysql:容器化-ClickHouse-on-K8s-部署篇建议收藏

作者:苏厚镇 青云科技数据库研发工程师

目前从事 RadonDB ClickHouse 相干工作,热衷于钻研数据库内核。

连续上篇《容器化 ClickHouse on K8s 基本概念解析篇》,能够理解到 Operator 提供简便治理 ClickHouse 集群性能,Helm 提供便捷部署集群性能。

本篇将以部署 RadonDB ClickHouse[1] 作为示例。在同样选用 Operator 的条件下,比拟 Kubectl 和 Helm 两种形式在 K8s 上部署 ClickHouse 集群的便捷性。并简要介绍如何在 K8s 上通过 Operator 轻便疾速地治理 ClickHouse 集群。

| 应用 Kubectl + Operator 部署

前置条件

  • 已装置 Kubernetes 集群。

    部署步骤

1、部署 RadonDB ClickHouse Operator

$ kubectl apply -f https://github.com/radondb/radondb-clickhouse-kubernetes/clickhouse-operator-install.yaml

留神:若需 Operator 监控所有的 Kubernetes namespace,则需将其部署在 kube-system namespace 下。否则只会监控部署到的 namespace。

2、编写 CR 的部署文件

以下 yaml 文件形容了利用 RadonDB ClickHouse Operator 装置两分片两正本集群的 ClickHouse 的配置标准。

apiVersion: "clickhouse.radondb.com/v1"
kind: "ClickHouseInstallation"  # 利用 Operator 创立集群
metadata:
  name: "ClickHouse"
spec:
  defaults:
 templates:                  # 磁盘挂载
   dataVolumeClaimTemplate: data
   logVolumeClaimTemplate: data
  configuration:
    clusters:                   # 集群节点形容,三分片两正本
      - name: "replicas"
        layout:
          shardsCount: 2
          replicasCount: 2
  templates:
     volumeClaimTemplates:   # 磁盘信息形容
       - name: data
            reclaimPolicy: Retain
         spec:
           accessModes:
             - ReadWriteOnce
           resources:
             requests:
               storage: 10Gi

3、应用 Kubectl 部署

以 test 名称空间为例:

$ kubectl -n test apply -f hello-kubernetes.yaml
clickhouseinstallation.clickhouse.radondb.com/ClickHouse created

留神:若 RadonDB ClickHouse Operator 没有部署在 kube-system 中,则须要将 RadonDB ClickHouse 集群与 Operator 部署在同一名称空间。

部署胜利后,Kubernetes 会将 CR 信息存入 etcd 中,而 Operator 则将感知 etcd 的变动。当 Operator 获取 CR 变动内容时,将依据 CR 的内容创立对应的 StatefulSet、Service 等相干内容。

4、查看集群的运行状况

可获取四个正在运行的 RadonDB ClickHouse Pod,组成两片两正本的集群,同时提供一个 LoadBalancer SVC,供内部拜访应用。

# 查看 Pod 运行状态
$ kubectl get pods -n test
NAME                               READY   STATUS    RESTARTS   AGE
pod/chi-ClickHouse-replicas-0-0-0   1/1     Running   0          3m13s
pod/chi-ClickHouse-replicas-0-1-0   1/1     Running   0          2m51s
pod/chi-ClickHouse-replicas-1-0-0   1/1     Running   0          2m34s
pod/chi-ClickHouse-replicas-1-1-0   1/1     Running   0          2m17s

# 查看 SVC 运行状态
$ kubectl get service -n test
NAME                                 TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE
service/chi-ClickHouse-replicas-0-0   ClusterIP      None            <none>        8123/TCP,9000/TCP,9009/TCP      2m53s
service/chi-ClickHouse-replicas-0-1   ClusterIP      None            <none>        8123/TCP,9000/TCP,9009/TCP      2m36s
service/chi-ClickHouse-replicas-1-0   ClusterIP      None            <none>        8123/TCP,9000/TCP,9009/TCP      2m19s
service/chi-ClickHouse-replicas-1-1   ClusterIP      None            <none>        8123/TCP,9000/TCP,9009/TCP      117s
service/clickhouse-ClickHouse         LoadBalancer   10.96.137.152   <pending>     8123:30563/TCP,9000:30615/TCP   3m14s

至此,如何应用 Kubectl + Operator 的形式部署 RadonDB ClickHouse 集群便介绍结束,可看到整个过程还是须要肯定 K8s 常识“功底”的。

| 应用 Helm + Operator 部署

前置条件

  • 已装置 Kubernetes 集群;
  • 已装置 Helm 包管理工具。

部署步骤

1、增加 RadonDB ClickHouse 的 Helm 仓库

$ helm repo add ck https://radondb.github.io/radondb-clickhouse-kubernetes/
$ helm repo update

2、部署 RadonDB ClickHouse Operator

$ helm install clickhouse-operator ck/clickhouse-operator

3、部署 RadonDB ClickHouse 集群

$ helm install clickhouse ck/clickhouse-cluster

4、查看集群的运行状况

可获取六个正在运行的 RadonDB ClickHouse Pod,以及三个 Zookeeper Pod,组成三分片两正本的集群,同时提供一个 ClusterIP service,供拜访应用。如果须要在内部对集群进行拜访,此处可通过 kubectl edit service/clickhouse-ClickHouse 将 service 的类型自行批改为 NodePort 或 LoadBalancer。

# 查看 Pod 运行状态
$ kubectl get pods -n test
NAME                                READY   STATUS    RESTARTS   AGE
pod/chi-ClickHouse-replicas-0-0-0   2/2     Running   0          3m13s
pod/chi-ClickHouse-replicas-0-1-0   2/2     Running   0          2m51s
pod/chi-ClickHouse-replicas-1-0-0   2/2     Running   0          2m34s
pod/chi-ClickHouse-replicas-1-1-0   2/2     Running   0          2m17s
pod/chi-ClickHouse-replicas-2-0-0   2/2     Running   0          115s
pod/chi-ClickHouse-replicas-2-1-0   2/2     Running   0          48s
pod/zk-clickhouse-cluster-0         1/1     Running   0          3m13s
pod/zk-clickhouse-cluster-1         1/1     Running   0          3m13s
pod/zk-clickhouse-cluster-2         1/1     Running   0          3m13s

# 查看 SVC 运行状态
$ kubectl get service -n test
NAME                                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE
service/chi-ClickHouse-replicas-0-0   ClusterIP   None            <none>        8123/TCP,9000/TCP,9009/TCP      2m53s
service/chi-ClickHouse-replicas-0-1   ClusterIP   None            <none>        8123/TCP,9000/TCP,9009/TCP      2m36s
service/chi-ClickHouse-replicas-1-0   ClusterIP   None            <none>        8123/TCP,9000/TCP,9009/TCP      2m19s
service/chi-ClickHouse-replicas-1-1   ClusterIP   None            <none>        8123/TCP,9000/TCP,9009/TCP      117s
service/chi-ClickHouse-replicas-2-0   ClusterIP   None            <none>        8123/TCP,9000/TCP,9009/TCP      50s
service/chi-ClickHouse-replicas-2-1   ClusterIP   None            <none>        8123/TCP,9000/TCP,9009/TCP      13s
service/clickhouse-ClickHouse         ClusterIP   10.96.137.152   <none>        8123/TCP,9000/TCP               3m14s
service/zk-client-clickhouse-cluster  ClusterIP   10.107.33.51    <none>        2181/TCP,7000/TCP               3m13s
service/zk-server-clickhouse-cluster  ClusterIP   None            <none>        2888/TCP,3888/TCP               3m13s

至此,通过 Helm 形式部署 RadonDB ClickHouse on Kubernetes 集群结束,能够看到 Helm 部署形式绝对更不便和简捷。简化了 CR 部署文件配置过程,无需把握全副 Kubernetes 的 Yaml 语法和 CR 部署文件各参数含意,能够通过打包利用疾速部署。

| 应用 Operator 治理 RadonDB ClickHouse 集群

下面演示了如何应用 Operator 部署 RadonDB ClickHouse 集群,上面咱们来验证一下 Operator 治理集群的性能。

增加分片

如果须要给 ClickHouse 增加一个额定的分片应该怎么操作呢?此时只须要批改咱们部署的 CR 即可。

$ kubectl get chi -n test
NAME         CLUSTERS   HOSTS   STATUS
clickhouse   1          6       Completed

$ kubectl edit chi/clickhouse -n test
# 这里咱们仅截取须要批改的内容
spec:
  configuration:
    clusters:
      - name: "replicas"
        layout:
          shardsCount: 4        # 将分片改为 4
          replicasCount: 2

批改胜利后,Kubernetes 会将 CR 信息存入 etcd 中,而 Operator 则将感知 etcd 的变动。当 Operator 获取 CR 变动内容时,将依据 CR 的内容创立对应的 StatefulSet、Service 等相干内容。

上面查看 RadonDB ClickHouse 集群的运行状况,能够看到减少了两个 RadonDB ClickHouse Pod,实现集群分片的减少。

$ kubectl get pods -n test
NAME                               READY   STATUS    RESTARTS   AGE
pod/chi-ClickHouse-replicas-0-0-0   1/1     Running   0          14m
pod/chi-ClickHouse-replicas-0-1-0   1/1     Running   0          14m
pod/chi-ClickHouse-replicas-1-0-0   1/1     Running   0          13m
pod/chi-ClickHouse-replicas-1-1-0   1/1     Running   0          13m
pod/chi-ClickHouse-replicas-2-0-0   1/1     Running   0          13m
pod/chi-ClickHouse-replicas-2-1-0   1/1     Running   0          12m
pod/chi-ClickHouse-replicas-3-0-0   1/1     Running   0          102s
pod/chi-ClickHouse-replicas-3-1-0   1/1     Running   0          80s

硬盘扩容

同样的,如果须要给 ClickHouse Pods 进行扩容,也只需批改 CR 即可。

$ kubectl get chi -n test
NAME         CLUSTERS   HOSTS   STATUS
clickhouse   1          8       Completed

$ kubectl edit chi/clickhouse -n test

以批改存储容量为 20 Gi 为例。

volumeClaimTemplates:
- name: data
  reclaimPolicy: Retain
  spec:
    accessModes:
    - ReadWriteOnce
    resources:
      requests:
        storage: 20Gi 

批改胜利后,Operator 将主动申请扩容,重建 StatefulSet,并挂载扩容后的硬盘。

通过查看集群的 PVC 挂载状况,能够看到硬盘曾经更新为 20Gi 容量。

$ kubectl get pvc -n clickhouse
NAME                                          STATUS   VOLUME   CAPACITY   ACCESS MODES
data-chi-clickhouse-cluster-all-nodes-0-0-0   Bound    pv4      20Gi       RWO         
data-chi-clickhouse-cluster-all-nodes-0-1-0   Bound    pv5      20Gi       RWO         
data-chi-clickhouse-cluster-all-nodes-1-0-0   Bound    pv7      20Gi       RWO         
data-chi-clickhouse-cluster-all-nodes-1-1-0   Bound    pv6      20Gi       RWO         
...

结语

至此,咱们便理解到在 Kubernetes 平台上部署 RadonDB ClickHouse 集群的两种办法,以及 Operator 治理 ClickHouse 集群的基本操作。

下期预报

无关 ClickHouse Operator 我的项目的更多具体细节、原理、代码架构等。尽请期待……

参考

[1]. RadonDB ClickHouse:https://github.com/radondb/radondb-clickhouse-kubernetes

对于 RadonDB

RadonDB 开源社区 是一个面向云原生、容器化的数据库开源社区。为数据库技术爱好者提供围绕支流开源数据库(MySQL、PostgreSQL、Redis、MongoDB、ClickHouse 等)的技术分享平台,并提供企业级 RadonDB 开源产品及服务。

目前 RadonDB 开源数据库系列产品已被 光大银行、浦发硅谷银行、哈密银行、泰康保险、太平保险、安盛保险、阳光保险、百年人寿、安吉物流、安畅物流、蓝月亮、天财商龙、罗克佳华、升哲科技、无锡汇跑体育、北京电信、江苏交通控股、四川航空、昆明航空、国控生物 等上千家企业及社区用户采纳。

RadonDB 可基于云平台与 Kubernetes 容器平台交付,不仅提供笼罩多场景的数据库产品解决方案,而且提供业余的集群治理和自动化运维能力,次要性能个性包含: 高可用主从切换、数据强一致性、读写拆散、一键装置部署、多维指标监控 & 告警、弹性扩容 & 缩容、横向自在扩大、主动备份 & 复原、同城多活、异地灾备 等。RadonDB 仅需企业及社区用户专一于业务层逻辑开发,无需关注集群高可用选型、治理和运维等简单问题,帮忙企业及社区用户大幅度晋升业务开发与价值翻新的效率!

GitHub:https://github.com/radondb

微信群:请搜寻增加群助手微信号 radondb

退出移动版