文件菜单

在Kubernetes中开始使用TIDB运算符

本文档解释了如何创建一个简单的Kubernetes集群,并使用它来使用TiDB Operator完成TiDB集群的基本测试部署。

警告:

本文档仅供演示使用。不要在生产环境中遵循它。有关生产环境,请参阅部署>集群部署TiDB

以下是本文档所遵循的步骤:

  1. 创建Kubernetes测试集群
  2. 部署TiDB运营商
  3. 部署TiDB集群及其监控服务
  4. 连接TiDB集群
  5. 升级TiDB集群
  6. 销毁TiDB集群

如果已经创建了Kubernetes集群,可以跳过步骤2,部署TiDB运营商

如果您想要进行生产级部署,请参考以下资源之一:

创建Kubernetes测试集群

本节介绍创建简单Kubernetes集群的两种不同方法,该集群可用于测试在TiDB Operator下运行的TiDB集群。选择最适合你的环境或经验水平。

您也可以使用谷歌云Shell在谷歌云平台的谷歌Kubernetes引擎中部署Kubernetes集群,并遵循集成教程部署TiDB Operator和TiDB集群:

使用类型创建Kubernetes群集

本节展示如何使用kind部署Kubernetes集群。

种类是一种使用Docker容器作为群集节点运行本地Kubernetes集群的工具。它是为测试本地Kubernetes集群而开发的。Kubernetes群集版本取决于那种使用的节点映像,您可以指定要用于节点的图像并选择任何其他发布的版本。参考码头工人中心查看可用的标记。

警告:

类型集群仅用于测试目的。不要使用在生产中。

部署前需要满足以下要求:

以下是使用的示例种类v0.8.1:

种创建集群

预期的输出:

创建集群“kind”…✓确保节点镜像(kindest/node:v1.18.2)✓准备节点✓写入配置;

检查群集是否已成功创建:

kubectl cluster-info

预期的输出:

要进一步调试和诊断集群问题,请使用“kubectl cluster-info dump”。

现在你已经准备好了部署TiDB运营商

要销毁Kubernetes集群,执行以下命令:

删除群集

使用minikube创建Kubernetes集群

介绍如何使用minikube部署Kubernetes集群。

Minikube可以在笔记本电脑上的VM中启动本地Kubernetes集群。它可以在macOS、Linux和Windows上工作。

警告:

minikube集群仅用于测试目的。不要使用它用于生产。

部署前需要满足以下要求:

  • minikube:版本1.0.0 +
    • Minikube需要一个兼容的管理程序。有关详细信息,请参阅minikube的安装说明。
  • kubectl:版本>= 1.12

注意:

尽管minikube支持——vm-driver =没有使用主机Docker而不是VM,它没有完全测试与TiDB操作符,可能无法工作。如果您想在没有虚拟化支持的系统上(例如,在VPS上)尝试TiDB Operator,您可以考虑使用种类代替。

安装Minikube后,执行以下命令以启动Minikube Kubernetes集群:

minikube开始

你应该会看到这样的输出,根据你的操作系统和管理程序的不同有一些不同:

Minikube v1.10.1在Darwin 10.15.4✨上自动选择Hyprokit驱动程序。其他选择:Docker,VMwareFusion下载驱动程序Docker-machine-driver-hyperkit:> docker-machine-driver-hyperkit.sha256:65 b / 65 b [---] 100.00%?P / S 0S> Docker-Machine-Driver-Hyperkit:10.90 MIB / 10.90 MIB 100.00%1.76 MIB P“Hyperkit”驱动程序需要提升权限。将执行以下命令:$ sudo chown root:wheel /users/user/.minikube/bin/docker-machine-driver-hyperkit $ sudo chmod u + s /users/user/.minikube/bin/docker- machine-Driver-Hyperkit下载VM引导映像...> Minikube-V1.10.0.iso.sha256:65 B / 65 B [ -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -p/s 0s > minikube-v1.10.0.iso: 174.99 MiB / 174.99 MiB [] 100.00% 6.63 MiB p/s 27s  Starting control plane node minikube in cluster minikube  Downloading Kubernetes v1.18.2 preload ... > preloaded-images-k8s-v3-v1.18.2-docker-overlay2-amd64.tar.lz4: 525.43 MiB  Creating hyperkit VM (CPUs=2, Memory=4000MB, Disk=20000MB) ...  Preparing Kubernetes v1.18.2 on Docker 19.03.8 ...  Verifying Kubernetes components...  Enabled addons: default-storageclass, storage-provisioner  Done! kubectl is now configured to use "minikube"

如果您访问Docker Hub有困难,您可以使用本地gcr。IO镜像,例如registry.cn-hangzhou.aliyuncs.com/google_containers

minikube start --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers

或者您可以在Docker中配置HTTP / HTTPS代理环境:

#更改127.0.0.1:1086为您的http/https代理服务器IP:PORTminikube开始——docker-envhttps_proxy.http://127.0.0.1:1086——docker-envhttp_proxy.http://127.0.0.1:1086

注意:

因为minikube运行在vm上(默认情况下),127.0.0.1是VM本身的IP地址。您可能需要在某些情况下修改代理以使用主机的真实IP地址。

看到minikube设置查看配置虚拟机和Kubernetes集群的更多选项。

要与集群交互,您可以使用kubectl,它作为子命令包含在minikube.制作kubectl命令可用时,您可以将以下别名定义命令添加到您的shell配置文件中,或者在打开新shell后执行以下别名定义命令。

别名kubectl='minikube kubectl——'

执行此命令检查Kubernetes的状态并确保kubectl可以连接到它:

kubectl cluster-info

期待此输出:

要进一步调试和诊断集群问题,请使用“kubectl cluster-info dump”。

你现在准备好了部署TiDB运营商

要销毁Kubernetes集群,执行以下命令:

Minikube删除

部署TiDB运营商

在进行之前,请确保满足以下要求:

  • 一个正在运行的kubernetes集群kubectl可以连接到
  • 执掌3安装了

部署TIDB运算符需要两个步骤:

安装TiDB Operator crd

TiDB Operator包括许多自定义资源定义(crd),它们实现TiDB集群的不同组件。

执行以下命令将crd安装到集群中:

Kubectl应用-f https://raw.githubusercontent.com/pingcap/tidb-operator/master/manifests/crd.yaml

预期的输出:

customyresourcedefinition.apiextensions.k8s.io/tidbclusters.www.schmieso.com创建了custom.cap.com创建了custom.cap.com创建了custom.cap.com创建了customResourceDefinition.apiextensions.k8s.io/restores.www.schmieso.com创建的custom.cap.com创建了custom.creesourcefinition.apiextensions.k8s.io/backupschedules.www.schmieso.com创建了customResourceFinition.apiextensions.k8s.io/tidbmonitors.www.schmieso.com创建了customResourceFinition.apiextensions.k8s.io/tidbinitializers.www.schmieso.com创建了custom.cap.com创建了custom.cap.com.piextsions.k8s.io/tidbclusterautos.www.schmieso.com创建

安装TiDB运营商

本节介绍如何使用Helm 3安装TiDB Operator。

  1. 添加PingCAP库:

    掌舵抢购添加pingcap https://charts.pingcap.org/

    预期的输出:

    “pingcap”已添加到您的存储库中
  2. 为TiDB操作符创建一个命名空间:

    Kubectl创建命名空间tidb-admin

    预期的输出:

    命名空间/ tidb-admin创建
  3. 安装TiDB运营商

    安装——命名空间tidb-admin tidb-operator pingcap/tidb-operator

    如果您无法访问Docker Hub,您可以尝试在阿里巴巴云中托管的图像:

    Helm Install  -  Namespace Tidb-admin Tidb-Operator Pingcap / Tidb-Operator --version v1.2.3 \ --set OperatorImage = Registry.cn-北京.Aliyuncs.com / Tidb / Tidb运算符:v1.2.3 \  -集Tidb.BackupManagerImage=registry.cn-beijing.aliyuncs.com/tidb/tidb-backup-manager:v1.2.3 \ --set scheduler.kubeSchedulerImageName=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler

    预期的输出:

    NAME: tidb-operator LAST DEPLOYED: Mon Jun 1 12:31:43 2020 NAMESPACE: tidb-admin STATUS: DEPLOYED REVISION: 1 TEST SUITE: None注意:确保tidb-operator组件正在运行:kubectl get pods——NAMESPACE tidb-admin -l app.kubernetes.io/instance=tidb-operator .io/instance=tidb-operator

要确认TiDB Operator组件正在运行,执行以下命令:

Kubectl获取Pods  -  Namespace Tidb-admin -L app.kubernetes.io/instanceTIDB运营商

预期的输出:

名称就绪状态重启年龄Tidb-controller-manager-6d8d5c6d64-b8lv4 1/1运行0 2m22s tidb-scheduler-644d59b46f-4f6sb 2/2运行0 2m22s

当所有pod都处于“Running”状态时,继续下一步。

部署TiDB集群及其监控服务

本节介绍如何部署TIDB集群及其监控服务。

部署TiDB集群

kubectl创建命名空间tidb-cluster&&Kubectl -n tidb-cluster apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/basic/tidb-cluster.yaml

如果您无法访问Docker Hub,您可以尝试在阿里巴巴云中托管的图像:

Kubectl创建命名空间tidb-cluster && \ Kubectl -n tidb-cluster apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/basic-cn/tidb-cluster.yaml

预期的输出:

命名空间/tid -cluster created tidbcluster.www.schmieso.com/basic已创建

部署TIDB监控服务

旋度lo https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/basic/tidb-monitor.yaml&&Kubectl -n tidb-cluster应用tidb-monitor.yaml

如果您无法访问Docker Hub,您可以尝试在阿里巴巴云中托管的图像:

kubectl-n tidb-cluster应用-f https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/basic-cn/tidb-onitor.yaml

预期的输出:

tidbmonitor.www.schmieso.com/basic创建了

查看POD状态

Kubectl得到Po -n tidb-cluster

预期的输出:

NAME READY STATUS restart AGE basic-discovery-6bb656bfd-kjkxw 1/1 Running 0 29s basic-monitor-5fc8589c89-2mwx5 0/3 PodInitializing 0 20s basic-pd-0 1/1 Running 0 29s

等待,直到所有服务的所有pod都启动。当您看到每种类型的pod (pd-tikv, 和-tidB.)在“跑步”状态,你可以按Ctrl+C回到命令行,然后继续连接到TiDB集群

预期的输出:

名称就绪状态重启年龄基本发现-6BB656BFD-XL5PB 1/1运行0 9M9S Basic-Monitor-5FC8589C89-GVGJJ 3/3运行0 8M58S Basic-PD-0 1/1运行0 9M8S Basic-TIDB-0 2/2运行0 7M14S Basic-Tikv-0 1/1运行0 8M13S

连接到TiDB

因为TiDB支持MySQL协议和它的大部分语法,你可以使用MySQL客户端连接到TiDB。

安装MySQL客户端

要连接到TIDB,您需要在主机上安装一个MySQL兼容客户端kubectl安装了。这可能是mysql从安装的MySQL Server,Mariadb Server,Percona Server或独立客户端的安装可从操作系统的包存储库执行。

转发端口4000

您可以通过将一个端口从本地主机转发到TiDB来连接到TiDB服务在Kubernetes。

首先,获取服务列表tidb-cluster命名空间:

kubectl获取svc-n tidb-cluster

预期的输出:

名称类型Cluster-IP外部IP端口(S)年龄基本发现ClusterIP 10.101.69.5 <无> 10261 / TCP 10M Basic-Grafana Clusterip 10.106.41.250 <无> 3000 / TCP 10M基本监视器 -  Reloader ClusterIP 10.99.19.157.225<无> 9089 / TCP 10M Basic-PD Clusterip 10.104.43.232 <无> 2379 / TCP 10M Basic-PD-PEER ClusterIP None  2380 / TCP 10M Basic-ProMetheus ClusterIP 10.106.177.227  9090 / TCP 10M Basic-tidb clusterip 10.99.24.91 <无> 4000 / TCP,10080 / TCP 8M40S Basic-TIDB-Peer Clusterip None  10080 / TCP 8M40S Basic-Tikv-Peer Clusterip None  20160 / TCP 9M39S

在这种情况下,TIDB服务被称为基于基地.执行以下命令,将本地主机端口转发给集群。

kubectl端口 - 前进-n tidb-cluster svc / basic-tidb4000.>pf4000.out

该命令在后台运行,并将其输出写入名为pf4000.out,因此您可以继续在同一壳会话中工作。

连接到TiDB服务

注意:

使用MySQL 8.0客户端连接到TiDB (< v4.0.7),如果用户帐户有密码,你必须显式指定——default-auth = mysql_native_password.这是因为mysql_native_password不再是默认的插件

mysql - h127.0.0.1 -P.4000.- u根

预期的输出:

欢迎来到MySQL Monitor。命令结束;或\ g。您的MySQL连接ID为76服务器版本:5.7.25-TIDB-V4.0.0 MySQL社区服务器(Apache License 2.0)版权所有(C)2000,2020,Oracle和/或其附属公司。版权所有。Oracle是Oracle Corporation和/或其关联公司的注册商标。其他名称可能是其各自所有者的商标。输入“帮助;”或'\ h'寻求帮助。键入'\ c'以清除当前输入语句。 mysql>

连接到集群后,可以执行以下命令来验证TiDB中可用的一些功能。(其中一些需要TiDB 4.0;如果您已经部署了较早的版本,请咨询升级TiDB集群部分)。

  • 创建一个你好,世界桌子:

    mysql>创建桌子你好,世界ID无符号空值自动递增关键vvarchar32查询好了0做作的0.17证券交易委员会mysql>选择Information_Schema.tikv_region_status在哪里db_name数据库table_name'你好,世界'\ G1.REGION_ID:2START_KEY:748000000000000000FF3700000000000000F8 END_KEY: TABLE_ID:55DB_NAME: test TABLE_NAME: hello_world0INDEX_ID:空值INDEX_NAME:空值EPOCH_CONF_VER:5EPOCH_VERSION:23WRITTEN_BYTES:0READ_BYTES:0APPROXIMATE_SIZE:1APPROXIMATE_KEYS:010.03证券交易委员会
  • 查询TiDB版本:

    mysql>选择tidb_version\ G1.tidb_version释放版本:v40.0社区版:Git提交哈希689.a6b6439ae7835947fcaccf329a3fc303986cb Git Branch: heads/参考文献/标签/v40.0UTC建立时间2020-05-28013740GoVersion: go113比赛启用:TIKV MIN版本:V30.0-60965b006877ca7234adaced7890d7b029ed1306检查表格下降10.00证券交易委员会
  • 查询TiKV存储状态:

    mysql>选择Information_Schema.tikv_store_status \ G1.可以:4地址:基本-tikv-0.基本的-tikv-同步Tidb.-集群svc:20160年STORE_STATE:0store_state_name:标签:空值版本:4.0.0容量:58.42直布罗陀可用:36.18直布罗陀LEADER_COUNT:3.LEADER_WEIGHT:1LEADER_SCORE:3.LEADER_SIZE:3.REGION_COUNT:21REGION_WEIGHT:1REGION_SCORE:21REGION_SIZE:21START_TS:2020-05-28224821LAST_HEARTBEAT_TS:2020-05-28225201正常运行时间:3.M40598302151年代10.01证券交易委员会
  • 查询TiDB集群信息。

    (此命令需要TiDB 4.0或更高版本。如果您部署了较早的版本,升级TiDB集群.)

    mysql>选择Information_Schema.cluster_info \ G1.类型: tidb INSTANCE: basic-Tidb.-0.基本的-Tidb.-同步Tidb.-集群svc:4000.STATUS_ADDRESS:基本-Tidb.-0.基本的-Tidb.-同步Tidb.-集群svc:10080版本:5.7.25-TiDB-v40.0GIT_HASH:689.a6b6439ae7835947fcaccf329a3fc303986cb START_TIME:2020-05-28T22:5011Z正常运行时间:3.m21459090928年代2.类型: pd INSTANCE: basic-帕金森病:2379STATUS_ADDRESS:基本-帕金森病:2379版本:4.0.0GIT_HASH:56d4c3d2237f5bf6fb11a794731ed1d95c8020c2 START_TIME:2020-05-28T22:4504Z正常运行时间:8m28459091915年代3.类型实例:基本的-tikv-0.基本的-tikv-同步Tidb.-集群svc:20160年STATUS_ADDRESS:0.0.0.02018年版本:4.0.0GIT_HASH:198a2cea01734ce8f46d55a29708f123f9133944 START_TIME:2020-05-28T22:4821Z正常运行时间:5m11公路459102648年代3.0.01证券交易委员会

访问Grafana仪表板

您可以转发Grafana的端口,以便您可以在本地访问Grafana Dashboard:

Kubectl port-forward -n tidb-cluster svc/basic-grafana3000.>pf3000.out.

你可以访问Grafana仪表盘http://localhost:3000在您运行的主机上kubectl.请注意,如果您没有运行kubectl在同一主机上(例如,在Docker容器中或远程主机上),您无法访问以下的Grafana仪表板http://localhost:3000来自浏览器。

说明Grafana的默认用户名和密码均为管理

有关在TiDB Operator中监视TiDB集群的更多信息,请参见为TiDB集群部署监视和警报

升级TiDB集群

TIDB运算符还可以轻松执行TIDB集群的滚动升级。本节介绍如何将TIDB群集升级到“夜间”版本。

在那之前,首先你需要熟悉两个kubectlsub-commands:

  • kubectl编辑在交互式文本编辑器中打开资源规范,管理员可以在其中进行更改并保存它们。如果更改是有效的,它们将传播到集群资源;如果它们是无效的,它们将被拒绝并返回错误消息。注意,不是所有的规范元素都在此时被验证;可以保存未应用到集群的更改,即使这些更改已被接受。

  • kubectl补丁将规范更改直接应用于正在运行的集群资源。有几种不同的补丁策略,每一种都有不同的功能、限制和允许的格式。

修改TiDB集群版本

在这种情况下,你可以使用一个JSON合并补丁来更新TiDB集群的版本为"nightly":

Kubectl patch tc basic -n tidb-cluster——type merge -p'{“spec”:{“版本”:“Release-4.0-Nightly”}}“

预期的输出:

tidbcluster.www.schmieso.com/basic修补

等待pod重新启动

要遵循群集的进度,因为其组件升级后,请执行以下命令。您应该看到一些窗格过境到“终止”,然后返回“ControlleCreating”,然后“跑步”。请注意,“age”pod列中的值是要重新启动的pod。

看kubectl得到Po -n tidb-cluster

预期的输出:

NAME READY STATUS重启AGE basic-discovery-6bb656bfd-7lbhx 1/1 Running 0 24m basic-pd-0 1/1 Terminating 0 5m31s basic-tidb-0 2/2 Running 0 2m19s basic-tikv-0 1/1 Running 0 4m13s

转发TiDB服务端口

重启所有pod之后,您应该能够看到集群的版本号已经更改。

请注意,您在上一步中设置的任何端口转发都需要重新进行,因为它们转发到的pod将被销毁并重新创建。如果熊市前锋进程仍在您的shell中运行,请在再次转发端口之前杀死它。

Kubectl port-forward -n tidb-cluster svc/basic-tidb 4000 > pf4000。了&

检查TiDB集群版本

mysql -h 127.0.0.1 -P 4000 -u root -e 'select tidb_version()\G'

预期的输出:

*************************** 1。row *************************** tidb_version(): Release Version: v4.0.0-6-gdec49a126 Edition: Community Git Commit Hash: dec49a12654c4f09f6fedfd2a0fb0154fc095449 Git Branch: Release -4.0 UTC Build Time: 2020-06-01 10:07:32 GoVersion: go1.13 Race Enabled: false TiKV Min Version:v3.0.0-60965b006877ca7234adaced7890d7b029ed1306 Drop前检查表:false

注意:

释放- 4.0每夜不是固定版本。在不同时间运行上面的命令可能会返回不同的结果。

有关升级运行在TiDB Operator上的TiDB集群的详细信息,请参见升级TiDB集群

销毁TiDB集群

在完成测试之后,您可能希望销毁TiDB集群。

销毁Kubernetes集群的说明依赖于如何创建群集。参考创建Kubernetes测试集群更多细节。

以下步骤显示如何销毁TIDB集群,但不会影响Kubernetes群集本身。

删除TIDB集群

Kubectl delete tc basic -n tidb-cluster . txt

tc在此命令中是tidbclusters的简短名称。

删除TIDB监控服务

Kubectl delete tidbmonitor basic -n tidb-cluster

删除PV数据

如果部署具有持久数据存储,删除TiDB集群并不会删除集群的数据。如果数据不再使用,请执行以下命令清理数据和动态创建的持久磁盘:

Kubectl删除PVC -n tidb-cluster -l app.kubernetes.io/instance基本的、app.kubernetes.io /管理TIDB运营商&&kubectl得到光伏- l app.kubernetes.io /命名空间tidb-cluster,app.kubernetes.io / managed-byTIDB运算符,app.kubernetes.io /实例基本-O名称|XARGS.-一世kubectl补丁- p{“规范”:{“persistentVolumeReclaimPolicy”:“Delete”}}”

删除名称空间

要确保没有挥之不去的资源,可以删除用于TIDB集群的命名空间。

kubectl删除命名空间tidb-cluster

停止kubectl转发端口

如果你还有跑步kubectl转发端口的进程,结束它们:

pgrep lfa kubectl

有关销毁在TiDB操作符中运行的TiDB集群的详细信息,请参阅销毁TiDB集群

下一步是什么

如果您准备在Kubernetes上部署TiDB集群用于生产环境,请参考以下文档: