TiDB Dashboard 指南

TiDB Dashboard 是 TiDB 4.0 专门用来帮助观察与诊断整个 TiDB 集群的可视化面板,你可以在 TiDB Dashboard 了解详情。本篇文章将介绍如何在 Kubernetes 环境下访问 TiDB Dashboard。

快速上手

注意:

以下教程仅为演示如何快速访问 TiDB Dashboard,请勿在生产环境中直接使用以下方法。

TiDB Dashboard 目前在 4.0 版本中已经内嵌在了 PD 组件中,你可以通过以下的例子在 Kubernetes 环境下快速部署一个 4.0.0-rc 版本的 TiDB 集群。运行 kubectl apply -f 命令,将以下 yaml 文件部署到 Kubernetes 集群中。

apiVersion: pingcap.com/v1alpha1
kind: TidbCluster
metadata:
  name: basic
spec:
  version: v4.0.0-rc
  timezone: UTC
  pvReclaimPolicy: Delete
  pd:
    baseImage: pingcap/pd
    replicas: 1
    requests:
      storage: "1Gi"
    config: {}
  tikv:
    baseImage: pingcap/tikv
    replicas: 1
    requests:
      storage: "1Gi"
    config: {}
  tidb:
    baseImage: pingcap/tidb
    replicas: 1
    service:
      type: ClusterIP
    config: {}

当集群创建完毕时,你可以通过以下指令将 TiDB Dashboard 暴露在本地机器:

kubectl port-forward svc/tidb-pd -n ${namespace} 2379:2379

然后在浏览器中访问 http://localhost:2379/dashboard 即可访问到 TiDB Dashboard。

通过 Ingress 访问 TiDB Dashboard

注意:

我们推荐在生产环境、关键环境内使用 Ingress 来暴露 TiDB Dashboard 服务。由于内嵌式 Dashboard 的端口与 PD API 的端口是同一个端口,如果采用其他自治方案在生产环境、关键环境内暴露 TiDB Dashboard 服务,需要注意不应该暴露 PD API 的相关接口。

环境准备

使用 Ingress 前需要 Kubernetes 集群安装有 Ingress 控制器,仅创建 Ingress 资源无效。您可能需要部署 Ingress 控制器,例如 ingress-nginx。您可以从许多 Ingress 控制器 中进行选择。

使用 Ingress

你可以通过 Ingress 来将 TiDB Dashboard 服务暴露到 Kubernetes 集群外,从而在 Kubernetes 集群外通过 http/https 的方式访问服务。你可以通过 Ingress 了解更多关于 Ingress 的信息。以下是一个使用 Ingress 访问 TiDB Dashboard 的 yaml 文件例子。运行 kubectl apply -f 命令,将以下 yaml 文件部署到 Kubernetes 集群中。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: access-dashboard
  namespace: ${namespace}
spec:
  rules:
    - host: ${host}
      http:
        paths:
          - backend:
              serviceName: ${cluster_name}-pd
              servicePort: 2379
            path: /dashboard

当部署了 Ingress 后,你可以在 Kubernetes 集群外通过 http://${host}/dashboard 访问 TiDB Dashboard。

开启 Ingress TLS

注意:

由于 Ingress 假定了 TLS 终止,所以当目前 TiDB 集群开启了 TLS 验证时,你将无法通过 Ingress 访问 Dashboard。

Ingress 提供了 TLS 支持,你可以通过 Ingress TLS 了解更多。以下是一个使用 Ingress TLS 的例子,其中 testsecret-tls 包含了 exmaple.com 所需要的 tls.crttls.key

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: access-dashboard
  namespace: ${namespace}
spec:
  tls:
  - hosts:
    - ${host}
    secretName: testsecret-tls
  rules:
    - host: ${host}
      http:
        paths:
          - backend:
              serviceName: ${cluster_name}-pd
              servicePort: 2379
            path: /dashboard

以下是 testsecret-tls 的一个例子:

apiVersion: v1
kind: Secret
metadata:
  name: testsecret-tls
  namespace: default
data:
  tls.crt: base64 encoded cert
  tls.key: base64 encoded key
type: kubernetes.io/tls

当 Ingress 部署完成以后,你就可以通过 https://{host}/dashboard 访问 TiDB Dashboard。