• 在 AWS EKS 上部署 TiDB Operator 和 TiDB 集群
    • 环境配置准备
    • 部署集群
    • 访问数据库
    • Grafana 监控
    • 升级 TiDB 集群
    • 扩容 TiDB 集群
    • 自定义
      • 自定义 AWS 相关的资源
      • 自定义 TiDB 参数配置
    • 销毁集群

    在 AWS EKS 上部署 TiDB Operator 和 TiDB 集群

    本文介绍了如何使用个人电脑(Linux 或 macOS 系统)在 AWS EKS (Elastic Kubernetes Service) 上部署 TiDB Operator 和 TiDB 集群。

    环境配置准备

    部署前,请确认已安装以下软件并完成配置:

    • awscli >= 1.16.73,控制 AWS 资源

      要与 AWS 交互,必须配置 awscli。最快的方式是使用 aws configure 命令:

      {{< copyable “shell-regular” >}}

      1. aws configure

      替换下面的 AWS Access Key ID 和 AWS Secret Access Key:

      1. AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
      2. AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
      3. Default region name [None]: us-west-2
      4. Default output format [None]: json

      注意:

      Access key 必须至少具有以下权限:创建 VPC、创建 EBS、创建 EC2 和创建 Role。

    • terraform

    • kubectl >= 1.11
    • helm >= 2.9.0 且 < 3.0.0
    • jq
    • aws-iam-authenticator,AWS 权限鉴定工具,确保安装在 PATH 路径下。

      最简单的安装方法是下载编译好的二进制文件 aws-iam-authenticator,如下所示。

      Linux 用户下载二进制文件:

      {{< copyable “shell-regular” >}}

      1. curl -o aws-iam-authenticator https://amazon-eks.s3-us-west-2.amazonaws.com/1.12.7/2019-03-27/bin/linux/amd64/aws-iam-authenticator

      macOS 用户下载二进制文件:

      {{< copyable “shell-regular” >}}

      1. curl -o aws-iam-authenticator https://amazon-eks.s3-us-west-2.amazonaws.com/1.12.7/2019-03-27/bin/darwin/amd64/aws-iam-authenticator

      二进制文件下载完成后,执行以下操作:

      {{< copyable “shell-regular” >}}

      1. chmod +x ./aws-iam-authenticator && \
      2. sudo mv ./aws-iam-authenticator /usr/local/bin/aws-iam-authenticator

    部署集群

    默认部署会创建一个新的 VPC、一个 t2.micro 实例作为堡垒机,并包含以下 ec2 实例作为工作节点的 EKS 集群:

    • 3 台 m5d.xlarge 实例,部署 PD
    • 3 台 i3.2xlarge 实例,部署 TiKV
    • 2 台 c4.4xlarge 实例,部署 TiDB
    • 1 台 c5.xlarge 实例,部署监控组件

    使用如下命令部署集群。

    从 Github 克隆代码并进入指定路径:

    {{< copyable “shell-regular” >}}

    1. git clone --depth=1 https://github.com/pingcap/tidb-operator && \
    2. cd tidb-operator/deploy/aws

    使用 terraform 命令初始化并部署集群:

    {{< copyable “shell-regular” >}}

    1. terraform init

    {{< copyable “shell-regular” >}}

    1. terraform apply

    注意:

    terraform apply 过程中必须输入 “yes” 才能继续。

    整个过程可能至少需要 10 分钟。terraform apply 执行成功后,控制台会输出类似如下的信息:

    1. Apply complete! Resources: 67 added0 changed0 destroyed.
    2. Outputs:
    3. bastion_ip = [
    4. 52.14.50.145
    5. ]
    6. eks_endpoint = https://E10A1D0368FFD6E1E32E11573E5CE619.sk1.us-east-2.eks.amazonaws.com
    7. eks_version = 1.12
    8. monitor_endpoint = http://abd299cc47af411e98aae02938da0762-1989524000.us-east-2.elb.amazonaws.com:3000
    9. region = us-east-2
    10. tidb_dns = abd2e3f7c7af411e98aae02938da0762-17499b76b312be02.elb.us-east-2.amazonaws.com
    11. tidb_port = 4000
    12. tidb_version = v3.0.0-rc.1

    注意:

    你可以通过 terraform output 命令再次获取上面的输出信息。

    访问数据库

    terraform apply 完成后,可先通过 ssh 远程连接到堡垒机,再通过 MySQL client 来访问 TiDB 集群。

    所需命令如下(用上面的输出信息替换 <> 部分内容):

    {{< copyable “shell-regular” >}}

    1. ssh -i credentials/k8s-prod-<cluster_name>.pem ec2-user@<bastion_ip>

    {{< copyable “shell-regular” >}}

    1. mysql -h <tidb_dns> -P <tidb_port> -u root

    cluster_name 默认为 my-cluster。如果 DNS 名字无法解析,请耐心等待几分钟。

    你还可以通过 kubectlhelm 命令使用 kubeconfig 文件 credentials/kubeconfig_<cluster_name> 和 EKS 集群交互,主要有两种方式,如下所示。

    • 指定 —kubeconfig 参数:

      {{< copyable “shell-regular” >}}

      1. kubectl --kubeconfig credentials/kubeconfig_<cluster_name> get po -n tidb

      {{< copyable “shell-regular” >}}

      1. helm --kubeconfig credentials/kubeconfig_<cluster_name> ls
    • 或者,设置 KUBECONFIG 环境变量:

      {{< copyable “shell-regular” >}}

      1. export KUBECONFIG=$PWD/credentials/kubeconfig_<cluster_name>

      {{< copyable “shell-regular” >}}

      1. kubectl get po -n tidb

      {{< copyable “shell-regular” >}}

      1. helm ls

    Grafana 监控

    你可以通过浏览器访问 monitor_endpoint 地址查看 Grafana 监控指标。

    Grafana 默认登录信息:

    • 用户名:admin
    • 密码:admin

    升级 TiDB 集群

    要升级 TiDB 集群,可编辑 variables.tf 文件,修改 tidb_version 变量到更高版本,然后运行 terraform apply

    例如,要升级 TiDB 集群到 3.0.0-rc.2,则修改 tidb_versionv3.0.0-rc.2

    1. variable "tidb_version" {
    2. description = "tidb cluster version"
    3. default = "v3.0.0-rc.2"
    4. }

    注意:

    升级过程会持续一段时间,你可以通过 kubectl --kubeconfig credentials/kubeconfig_<cluster_name> get po -n tidb --watch 命令持续观察升级进度。

    扩容 TiDB 集群

    若要扩容 TiDB 集群,可按需修改 variables.tf 文件中的 tikv_count 或者 tidb_count 变量,然后运行 terraform apply

    例如,可以将 tidb_count 从 2 改为 4 以扩容 TiDB:

    1. variable "tidb_count" {
    2. default = 4
    3. }

    注意:

    • 由于缩容过程中无法确定会缩掉哪个节点,目前还不支持 TiDB 集群的缩容。
    • 扩容过程会持续几分钟,你可以通过 kubectl --kubeconfig credentials/kubeconfig_<cluster_name> get po -n tidb --watch 命令持续观察进度。

    自定义

    你可以按需修改 variables.tf 文件中的默认值,例如集群名称和镜像版本等。

    自定义 AWS 相关的资源

    默认情况下 terraform 脚本会新建 VPC。你也可以通过设置 create_vpcfalse,并指定 vpc_idprivate_subnet_idspublic_subnet_ids 变量为已有的 VPC id、subnet ids 来使用现有的网络。

    注意:

    由于 AWS 和 Terraform 的限制,还不支持复用已有 EKS 集群的 VPC 和 subnets,所以请确保只在你手动创建 VPC 的情况下修改该参数。

    由于 TiDB 服务通过 Internal Elastic Load Balancer 暴露,默认情况下,会创建一个 ec2 实例作为堡垒机,访问创建的 TiDB 集群。堡垒机上预装了 MySQL 和 Sysbench,所以你可以 SSH 到堡垒机然后通过 ELB 访问 TiDB。如果你的 VPC 中已经有了类似的 ec2 实例,你可以通过设置 create_bastionfalse 禁掉堡垒机的创建。

    TiDB 版本和组件数量也可以在 variables.tf 中修改,你可以按照自己的需求配置。

    目前,由于 PD 和 TiKV 依赖 NVMe SSD 实例存储卷,TiDB 集群组件的实例类型不能修改。

    自定义 TiDB 参数配置

    目前,支持自定义修改的 TiDB 参数并不多。有两种方式修改这些参数:

    • 部署集群之前,你可以直接修改 templates/tidb-cluster-values.yaml.tpl 文件中的配置,然后部署集群。
    • 如果集群已经在运行,每次修改 templates/tidb-cluster-values.yaml.tpl 文件中的配置都需要重新执行 terraform apply,并手动删除 Pod(s),否则集群会一直使用旧的配置。

    销毁集群

    可以通过如下命令销毁集群:

    {{< copyable “shell-regular” >}}

    1. terraform destroy

    注意:

    如果你不再需要存储卷中的数据,在执行 terraform destroy 后,你需要在 AWS 控制台手动删除 EBS 卷。