介绍用于TiDB的Kubernetes运算符

丹和格雷格韦伯是PingCAP的云产品工程师。

Kubernetes的兴起极大地简化了云原生应用程序的部署和操作。 经验的重要部分是轻松运行像TiDB这样的云原生分布式数据库。 TiDB是一个开源的,MySQL兼容的“ NewSQL”数据库,它支持混合事务处理和分析处理(HTAP)。

在本教程中,我们将讨论如何使用TiDB Operator ,这是PingCAP的新开源项目,以利用Kubernetes部署整个TiDB平台及其所有组件。 TiDB Operator允许您监视Kubernetes集群中的TiDB部署,并提供管理职责的网关。

[InfoWorld解释: 什么是云原生? 开发软件的现代方式 | 入门: Azure云迁移指南 •教程: Google Cloud入门 | 通过InfoWorld的云计算新闻通讯了解云计算的最新发展。 ]

在这一点上,就像Linux基金会执行董事Jim Zemlin所说的那样,也许Kubernetes是云原生应用程序的事实上的编排引擎,即“云的Linux ”,这也许已成定局。 Kubernetes不仅是一种成熟且有用的技术,而且对许多大公司的IT运营都具有战略价值。 2017年, 至少有54%的《财富》 500强公司正在招聘Kubernetes技能。

CoreOS的Operator Framework流行的概念和模式的启发,大约一年前,我们开始构建TiDB Operator。 那时,Kubernetes不稳定或功能丰富,因此我们不得不实施许多变通办法以使我们的操作员...运转良好。 随着去年Kubernetes的迅猛发展,我们在将GitHub上TiDB Operator开源之前,重构了旧代码,使其与当今Kubernetes的标准和风格保持一致。

Kubernetes的日益普及催生了一个庞大的云原生应用生态系统,这一点可以由Cloud Native Computing Foundation(CNCF)组装的大量云原生项目来证明。 那么TiDB在所有这些方面适合什么呢? 这些应用程序中的大多数可以被认为是无状态的 ,占据了任何云本机体系结构的一些核心部分,例如微服务,服务网格,消息传递/跟踪/监视等。但是,有状态应用程序(例如持久性分布式数据库)还有一个地方)。 这就是TiDB的适用范围。

如何使用TiDB运算符

让我们深入研究如何在笔记本电脑上使用Kubernetes部署TiDB,尽管这可以在任何Kubernetes集群上完成。 请注意,此本地部署仅是为了使您能够体会TiDB Operator的测试和试验能力,而不能用于生产。 我们的团队和开源社区仍在对其进行测试。 我们鼓励您参加。

首先,让我们快速概述一下TiDB集群中的内容以及它如何与Kubernetes架构相适应。 每个TiDB集群都有三个组件:

  1. TiDB无状态SQL层;
  2. TiKV,持久化数据的分布式事务键值存储层;
  3. 布局驱动程序(PD),一个控制TiKV的元数据集群。

在Kubernetes的上下文中,TiKV和PD在磁盘上维护数据库状态,因此被映射到具有持久卷声明的StatefulSet。 TiDB无状态SQL层也映射到StatefulSet,但不会进行任何持久卷声明。

安装Kubernetes集群

该安装已经过测试,可以在MacOS和Linux上运行,但是请注意,在笔记本电脑上运行Kubernetes正在进行中。

Minikube是在笔记本电脑上运行Kubernetes的流行选项。 但是,Minikube仅创建一个Kubernetes节点。 要运行TiDB,我们需要多个Kubernetes节点。 有一些选项,但是在本教程中,我们将使用DinD(Docker中的Docker)。

DinD允许在顶级Docker容器内运行Docker守护程序。 这意味着顶级容器可以模拟Kubernetes节点并在其中启动容器。 kubeadm-dind-cluster项目通过DinD在独立计算机上作为Kubernetes节点启动了多个Docker容器,然后通过使用Docker在这些节点上启动Kubernetes组件来启动Kubernetes集群。

TiDB先决条件

在将TiDB集群部署到Kubernetes之前,请确保满足以下要求:

  • 资源需求:2+ CPU,4GB +内存
  • Docker :17.03或更高版本
  • Kubectl :1.10或更高版本
    • 注意:不同版本的Kubectl的输出可能会略有不同。
  • md5sha1sum
    • 对于Linux,默认情况下已安装md5sha1sum。
    • 对于MacOS,请确保已安装md5sha1sum。 如果不是,请运行brew install md5sha1sum进行安装。

使用DinD部署Kubernetes集群

使用DinD安装和部署多节点Kubernetes集群:

$ wget https://cdn.rawgit.com/kubernetes-sigs/kubeadm-dind-cluster/master/fixed/dind-cluster-v1.10.sh
$ chmod +x dind-cluster-v1.10.sh
$ CNI_PLUGIN=flannel NUM_NODES=4 ./dind-cluster-v1.10.sh up

注意:如果由于与防火墙相关的问题而无法提取Docker映像,则可以尝试以下方法(使用的Docker映像是从UCloud Docker Registry提取的):

$ git clone https://github.com/pingcap/kubeadm-dind-cluster
$ cd kubeadm-dind-cluster
$ NUM_NODES=4 tools/multi_k8s_dind_cluster_manager.sh rebuild e2e-v1.10

(此引导过程将花费5到10分钟。这是获取冷饮或拉伸的好时机。)

完成DinD集群引导后,使用以下命令验证Kubernetes集群已启动并正在运行:

$ kubectl get node,componentstatus
$ kubectl get po -n kube-system

您的输出应类似于以下屏幕截图,其中所有组件都在运行。 如果没有,给它更多的时间。

安装kubernetes IDG

如果您想在Kubernetes仪表板中查看部署,则可以使用以下命令启动代理:

$ kubectl proxy

然后,您可以查看仪表板

kubernetes仪表板 IDG

现在集群已启动并正在运行,您需要将Kubernetes软件包管理器Helm安装到集群中。 Helm将用于部署和管理TiDB Operator和TiDB集群。

$ os=`uname -s| tr ‘[:upper:]’ ‘[:lower:]’`
$ wget “https://storage.googleapis.com/kubernetes-helm/helm-v2.9.1-${os}-amd64.tar.gz”
$ tar xzf helm-v2.9.1-${os}-amd64.tar.gz
$ sudo mv ${os}-amd64/helm /usr/local/bin
$ git clone https://github.com/pingcap/tidb-operator
$ cd tidb-operator
$ kubectl apply -f manifests/tiller-rbac.yaml
$ helm init --service-account=tiller --upgrade
$ kubectl get po -n kube-system | grep tiller # verify Tiller is running; this should take only a few seconds
$ helm version # verify the Helm server is running

注意:如果由于防火墙导致图像拖拉失败导致分helm init --service-account=tiller --upgrade盒无法启动,则可以使用以下命令替换helm init --service-account=tiller --upgrade

helm init --service-account=tiller --upgrade —tiller-image=uhub.ucloud.cn/pingcap/tiller:v2.9.1

在Kubernetes中配置本地持久卷

LocalPersistentVolume用于持久保存PD / TiKV数据。 本地持久卷配置程序无法在DinD中直接使用,因此您将需要修改其部署。 而Kubernetes不支持动态provisionin 呢,所以你需要手动安装的磁盘或目录挂载点。

为了简化此操作,请使用以下脚本来帮助配置开发环境:

$ # create directories for local volumes, this happens in the tidb-operator directory
$ ./manifests/local-dind/pv-hosts.sh
$ # deploy local volume provisioner
$ kubectl apply -f manifests/local-dind/local-volume-provisioner.yaml
$ # wait for local-volume-provisioner pods to run, which may take a few minutes
$ kubectl get po -n kube-system -l app=local-volume-provisioner
$ # verify pv created
$ kubectl get pv

您的输出应如下所示:

配置本地卷 IDG

在DinD Kubernetes集群中安装TiDB Operator

$ kubectl apply -f manifests/crd.yaml
$ # This command creates the custom resource for the cluster that the operator uses.
$ kubectl get customresourcedefinitions
$ # Install the TiDB Operator into Kubernetes
$ helm install charts/tidb-operator --name=tidb-operator --namespace=pingcap
$ # while waiting for operator to run, you can check its status with this command
$ kubectl get po -n pingcap -l app=tidb-operator
安装tidb运算符 IDG

在DinD Kubernetes集群中部署TiDB集群

$ helm install charts/tidb-cluster --name=tidb-cluster --namespace=tidb
$ # you can watch the tidb cluster get created using this ‘watch’ command
$ watch kubectl get pods --namespace tidb -l cluster.pingcap.com/tidbCluster=demo -o wide

您的输出应如下所示:

部署tidb集群 IDG
$ # you can see all the services available to you now with your tidb cluster deployment and their port number to access them
$ kubectl get service -n tidb
kubectl获得服务 IDG
$ # you can see the entire pod with this command
$ kubectl get pod -n tidb
kubectl获取吊舱 IDG

要访问TiDB集群,请使用kubectl port-forward将服务公开给主机。

使用MySQL客户端访问TiDB:

  1. 使用Kubectl将主机端口转发到TiDB服务端口:
       $ kubectl port-forward svc/demo-tidb 4000:4000 --namespace=tidb
  1. 要使用MySQL客户端连接到TiDB,请打开一个新的终端选项卡或窗口,然后运行以下命令:
       $ mysql -h 127.0.0.1 -P 4000 -u root    
MySQL监视器 IDG

查看监视器仪表板:

  1. 使用Kubectl将主机端口转发到Grafana服务端口:
       $ kubectl port-forward svc/demo-grafana 3000:3000 --namespace=tidb
  1. 将您的Web浏览器指向http:// localhost:3000,以访问Grafana监视界面。
    • 默认用户名:admin
    • 默认密码:admin
tidb cluster grafana lg IDG

尝试扩展和升级TiDB

现在,您已经使用tidb-operator部署了一个可用的TiDB集群,下面是一些可以尝试的功能。

TiDB中的水平缩放

您只需修改副本数即可扩展或扩展TiDB集群。

首先配置图表/tidb-cluster/values.yaml文件。 例如,要扩展集群,可以将TiKV副本的数量从3修改为5,或将TiDB副本的数量从2修改为3。

然后运行以下命令以应用更改:

helm upgrade tidb-cluster charts/tidb-cluster --namespace=tidb

注意:如果您需要扩展TiKV,则消耗的时间取决于现有数据量,因为需要安全地迁移数据。

升级TiDB

首先配置图表/tidb-cluster/values.yaml文件。 例如,将PD / TiKV / TiDB映像的版本从v2.0.4更改为v2.0.5。

然后运行以下命令以应用更改:

helm upgrade tidb-cluster charts/tidb-cluster --namespace=tidb

销毁TiDB集群

完成测试后,请使用以下命令销毁TiDB集群:

$ helm delete tidb-cluster --purge

注意:这只会删除正在运行的Pod和其他资源。 数据保持不变。 如果不再需要数据,请运行以下命令来清理数据。 (请注意,这将永久删除数据。)

$ kubectl get pv -l cluster.pingcap.com/namespace=tidb -o name | xargs -I {} kubectl patch {} -p ‘{”spec”:{”persistentVolumeReclaimPolicy”:”Delete”}}’
$ kubectl delete pvc --namespace tidb --all

销毁DinD Kubernetes集群

如果您不再需要DinD Kubernetes集群,请切换到存储dind-cluster-v1.10.sh的目录并运行以下命令:

$ ./dind-cluster-v1.10.sh clean

TiDB的后续步骤

我们希望您现在已经成功地使用TiDB Operator来启动TiDB集群,并体验了与MySQL的无缝兼容性。 当然,云本机应用程序是为大型分布式系统中的许多机器而不是单个笔记本电脑设计的,因此TiDB Operator的许多方面在这里都无法展示。

TiDB运营商是TiDB正在进行的云原生之旅的重要一步。 但是,TiDB Operator仍是一个年轻的开源项目。 我们鼓励您关注它的发展,并通过您的贡献帮助我们改进它:错误报告,问题,PR等。下面是该项目的路线图

将来,我们将继续与Kubernetes社区一起发展,合并新功能,与各种云平台上的托管Kubernetes服务集成,并充分利用TiDB的部署和维护经验。 在TwitterLinkedInReddit上关注我们,并继续关注有关如何在生产级云环境中部署TiDB的更多教程。

丹和格雷格韦伯是PingCAP的云产品工程师。

-

新技术论坛提供了一个以前所未有的深度和广度探索和讨论新兴企业技术的场所。 选择是主观的,是基于我们对InfoWorld读者认为最重要和最感兴趣的技术的选择。 InfoWorld不接受发布的营销担保,并保留编辑所有贡献内容的权利。 将所有查询发送到 newtechforum@infoworld.com

From: https://www.infoworld.com/article/3297700/introducing-the-kubernetes-operator-for-tidb.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值