容器化 | ClickHouse on K8s 部署篇【建议收藏】[通俗易懂]

容器化 | ClickHouse on K8s 部署篇【建议收藏】[通俗易懂]作者:苏厚镇 青云科技数据库研发工程师 目前从事 RadonDB ClickHouse 相关工作,热衷于研究数据库内核。 延续上篇《容器化 ClickHouse on K8s 基本概念解析篇》,可以了

容器化 | 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,供外部访问使用。

容器化 | ClickHouse on K8s 部署篇【建议收藏】[通俗易懂]

# 查看 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。

容器化 | ClickHouse on K8s 部署篇【建议收藏】[通俗易懂]

# 查看 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
容器化 | ClickHouse on K8s 部署篇【建议收藏】[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5939.html

(0)
上一篇 2023-04-20
下一篇 2023-04-20

相关推荐

  • 使用mysql命令_mysql 1067错误

    使用mysql命令_mysql 1067错误mysqladmin是一个执行管理操作的客户端程序。它可以用来检查服务器的配置和当前状态、创建和删除数据库等。 mysqladmin工具的使用格式:mysqladmin [option] comman

    2022-12-24
    146
  • excel函数怎么提取字符串_15个常用excel函数公式

    excel函数怎么提取字符串_15个常用excel函数公式如果忽略则为1主要功能:从一个文本字符串的第一个字符开始返回指定个数的字符2.右边提取在C4单元格输入公式。

    2023-03-01
    145
  • Python time模块:高效处理时间相关任务的利器

    Python time模块:高效处理时间相关任务的利器在Python程序的开发中,时间处理是一个十分重要的问题,Python中的time模块就是专门提供了对时间处理的相关函数和方法的模块。该模块可以帮助我们在处理时间相关任务的时候,提高代码的效率和可读性,提供强大的功能支持。本文将从多个方面对Python time模块进行详细的阐述,包括时间表示、时间计算、时间格式化、线程睡眠等知识点。

    2024-02-17
    93
  • python生成窗口最大值数组(Python 数组最大值)

    python生成窗口最大值数组(Python 数组最大值)Python的数组就是列表。比如对列表ls=[1,2,3,4,5,6]来处理。

    2023-11-19
    127
  • hbase跨集群数据迁移_hbase region

    hbase跨集群数据迁移_hbase region前言: 《读者来信》是HBase老店开设的一个问答专栏,旨在能为更多的小伙伴解决工作中常遇到的HBase相关的问题。老店会尽力帮大家解决这些问题或帮你发出求救贴,老店希望这会是一个互帮互助的小平台。有

    2023-02-13
    154
  • MySQL数据类型 – 数据类型默认值

    MySQL数据类型 – 数据类型默认值数据类型默认值数据类型规范可以有显式或隐式的默认值。数据类型规范中的DEFAULT值子句显式指示列的默认值。示例:SERIALDEFAULTVALUE是一种特殊情况。在整数列的定义中,它是NOTNU…

    2023-04-06
    141
  • Python安装matplotlib教程

    Python安装matplotlib教程a href=”https://beian.miit.gov.cn/”苏ICP备号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-07-07
    46
  • Python安装位置

    Python安装位置Python是目前最流行的编程语言之一,其代码易于理解、简洁、高效,因此受到了很多人的欢迎。Python的安装位置是学习、使用和开发Python的重要问题。因此,在本文中,我们将深入阐述Python的安装位置问题。

    2024-05-22
    49

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注