From 6de8c6401ae6f399565b7d13c83732f748b7c2da Mon Sep 17 00:00:00 2001 From: Aylei Date: Tue, 30 Jul 2019 18:08:36 +0800 Subject: [PATCH] update documents Signed-off-by: Aylei --- README.md | 2 + deploy/aliyun/variables.tf | 4 +- deploy/gcp/README.md | 254 +------------ .../modules/aliyun/tidb-cluster/variable.tf | 2 +- .../modules/aliyun/tidb-operator/variables.tf | 2 +- deploy/modules/aws/tidb-cluster/variables.tf | 2 +- .../share/tidb-cluster-release/variables.tf | 2 +- docs/aliyun-tutorial.md | 2 +- docs/aws-eks-tutorial.md | 200 +--------- docs/backup-restore.md | 115 +----- docs/cli-manual.md | 256 +------------ docs/google-kubernetes-tutorial.md | 183 +-------- docs/local-dind-tutorial.md | 354 +----------------- docs/minikube-tutorial.md | 244 +----------- docs/operation-guide.md | 248 +----------- docs/references/tidb-backup-configuration.md | 79 +--- docs/setup.md | 135 +------ docs/troubleshooting.md | 25 +- docs/user-guide.md | 12 +- static/tidb-operator-overview.png | Bin 0 -> 187509 bytes 20 files changed, 21 insertions(+), 2100 deletions(-) create mode 100644 static/tidb-operator-overview.png diff --git a/README.md b/README.md index 0048bef8e8..94926f4931 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ TiDB Operator manages [TiDB](https://github.com/pingcap/tidb) clusters on [Kubernetes](https://kubernetes.io) and automates tasks related to operating a TiDB cluster. It makes TiDB a truly cloud-native database. +![TiDB Operator Architecture](/static/tidb-operator-overview.png) + ## Features - __Safely scaling the TiDB cluster__ diff --git a/deploy/aliyun/variables.tf b/deploy/aliyun/variables.tf index 7e583a1131..e9c48b304c 100644 --- a/deploy/aliyun/variables.tf +++ b/deploy/aliyun/variables.tf @@ -10,7 +10,7 @@ variable "bastion_cpu_core_count" { variable "operator_version" { type = string - default = "v1.0.0-beta.3" + default = "v1.0.0" } variable "operator_helm_values" { @@ -34,7 +34,7 @@ variable "tidb_version" { } variable "tidb_cluster_chart_version" { description = "tidb-cluster chart version" - default = "v1.0.0-beta.3" + default = "v1.0.0" } variable "pd_count" { diff --git a/deploy/gcp/README.md b/deploy/gcp/README.md index 051eff9140..93b11be5b8 100644 --- a/deploy/gcp/README.md +++ b/deploy/gcp/README.md @@ -1,255 +1,3 @@ # Deploy TiDB Operator and TiDB cluster on GCP GKE -This document describes how to deploy TiDB Operator and a TiDB cluster on GCP GKE with your laptop (Linux or macOS) for development or testing. - -## Prerequisites - -First of all, make sure the following items are installed on your machine: - -* [Google Cloud SDK](https://cloud.google.com/sdk/install) -* [terraform](https://www.terraform.io/downloads.html) >= 0.12 -* [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl) >= 1.14 -* [helm](https://github.com/helm/helm/blob/master/docs/install.md#installing-the-helm-client) >= 2.9.0 and < 3.0.0 -* [jq](https://stedolan.github.io/jq/download/) - -## Configure - -Before deploying, you need to configure several items to guarantee a smooth deployment. - -### Configure Cloud SDK - -After you install Google Cloud SDK, you need to run `gcloud init` to [perform initial setup tasks](https://cloud.google.com/sdk/docs/initializing). - -### Configure APIs - -If the GCP project is new, make sure the relevant APIs are enabled: - -```bash -gcloud services enable cloudresourcemanager.googleapis.com && \ -gcloud services enable cloudbilling.googleapis.com && \ -gcloud services enable iam.googleapis.com && \ -gcloud services enable compute.googleapis.com && \ -gcloud services enable container.googleapis.com -``` - -### Configure Terraform - -The terraform script expects three variables to be set. - -* `TF_VAR_GCP_REGION`: The region to create the resources in, for example: `us-west1`. -* `TF_VAR_GCP_PROJECT`: The name of the GCP project. -* `TF_VAR_GCP_CREDENTIALS_PATH`: Path to a valid GCP credentials file. - - It is recommended to create a new service account to be used by Terraform as shown in the below example. - -Below we will set these environment variables - -```bash -# Replace the region with your GCP region and your GCP project name. -echo GCP_REGION=us-west1 >> terraform.tfvars -# First make sure you are connected to the correct project. gcloud config set project $PROJECT -echo "GCP_PROJECT=$(gcloud config get-value project)" >> terraform.tfvars -# Create a service account for terraform with restricted permissions and set the credentails path -./create-service-account.sh -``` - -## Deploy - - -Now that you have configured gcloud access, make sure you have a copy of the repo: - -```bash -git clone --depth=1 https://github.com/pingcap/tidb-operator -cd tidb-operator/deploy/gcp -``` - -You need to decide on instance types. If you just want to get a feel for a TiDB deployment and lower your cost, you can use the small settings. - - cat small.tfvars >> terraform.tfvars - -If you want to benchmark a production deployment, run: - - cat prod.tfvars >> terraform.tfvars - -The terraform creates a new VPC, two subnetworks, and an f1-micro instance as a bastion machine. -The production setup used the following instance types: - -* 3 n1-standard-4 instances for PD -* 3 n1-highmem-8 instances for TiKV -* 3 n1-standard-16 instances for TiDB -* 3 n1-standard-2 instances for monitor - -> *Note*: The number of nodes created depends on how many availability zones there are in the chosen region. Most have 3 zones, but us-central1 has 4. See [Regions and Zones](https://cloud.google.com/compute/docs/regions-zones/) for more information and see the [Customize](#customize) section on how to customize node pools in a regional cluster. - -The production setup, as listed above, requires at least 91 CPUs which exceed the default CPU quota of a GCP project. To increase your project's quota, follow the instructions [here](https://cloud.google.com/compute/quotas). You need more CPUs if you need to scale out. - -Once you choose your instances, you can install your TiDB cluster with: - -```bash -terraform init -terraform apply -``` - -When you run `terraform apply`, you may be asked to set three environment variables if you have not exported them in advance. See [Configure Terraform](#configure-terraform) for details. - -It might take 10 minutes or more to finish the process. A successful deployment gives the output like: - -``` -Apply complete! Resources: 17 added, 0 changed, 0 destroyed. - -Outputs: - -cluster_id = tidb -cluster_name = tidb -how_to_connect_to_mysql_from_bastion = mysql -h 172.31.252.20 -P 4000 -u root -how_to_ssh_to_bastion = gcloud compute ssh bastion --zone us-west1-b -kubeconfig_file = ./credentials/kubeconfig_tidb -monitor_ilb_ip = 35.227.134.146 -monitor_port = 3000 -region = us-west1 -tidb_ilb_ip = 172.31.252.20 -tidb_port = 4000 -tidb_version = v3.0.1 -``` - -## Access the database - -After `terraform apply` is successful, the TiDB cluster can be accessed by SSHing into the bastion machine and connecting via MySQL: - -```bash -# Replace the `<>` parts with values from the output. -gcloud compute ssh bastion --zone -mysql -h -P 4000 -u root -``` - -> *Note*: You need to install the MySQL client before you connect to TiDB via MySQL. - -## Interact with the cluster - -You can interact with the cluster using `kubectl` and `helm` with the kubeconfig file `credentials/kubeconfig_` as follows. The default `cluster_name` is `tidb`, which can be changed in `variables.tf`. - -```bash -# By specifying --kubeconfig argument. -kubectl --kubeconfig credentials/kubeconfig_ get po -n tidb -helm --kubeconfig credentials/kubeconfig_ ls - -# Or setting KUBECONFIG environment variable. -export KUBECONFIG=$PWD/credentials/kubeconfig_ -kubectl get po -n tidb -helm ls -``` - -## Upgrade - -To upgrade the TiDB cluster, modify the `tidb_version` variable to a higher version in the `variables.tf` file, and run `terraform apply`. - -For example, to upgrade the cluster to the 3.0.1 version, modify the `tidb_version` to `v3.0.1`: - -``` -variable "tidb_version" { - description = "TiDB version" - default = "v3.0.1" -} -``` - -The upgrading does not finish immediately. You can run `kubectl --kubeconfig credentials/kubeconfig_ get po -n tidb --watch` to verify that all pods are in `Running` state. Then you can [access the database](#access-the-database) and use `tidb_version()` to see whether the cluster has been upgraded successfully: - -```sql -MySQL [(none)]> select tidb_version(); -*************************** 1. row *************************** -tidb_version(): Release Version: v3.0.1 -Git Commit Hash: 06f3f63d5a87e7f0436c0618cf524fea7172eb93 -Git Branch: HEAD -UTC Build Time: 2019-05-28 12:48:52 -GoVersion: go version go1.12 linux/amd64 -Race Enabled: false -TiKV Min Version: 2.1.0-alpha.1-ff3dd160846b7d1aed9079c389fc188f7f5ea13e -Check Table Before Drop: false -1 row in set (0.001 sec) -``` - -## Scale - -To scale the TiDB cluster, modify `tikv_count`, `tikv_replica_count`, `tidb_count`, and `tidb_replica_count` in the `variables.tf` file to your desired count, and run `terraform apply`. - -Currently, scaling in is not supported since we cannot determine which node to remove. Scaling out needs a few minutes to complete, you can watch the scaling-out process by `kubectl --kubeconfig credentials/kubeconfig_ get po -n tidb --watch`. - -For example, to scale out the cluster, you can modify the number of TiDB instances from 1 to 2: - -``` -variable "tidb_count" { - description = "Number of TiDB nodes per availability zone" - default = 2 -} -``` - -> *Note*: Incrementing the node count creates a node per GCP availability zone. - -## Customize - -You can change default values in `variables.tf` (such as the cluster name and the TiDB version) as needed. - -### Customize GCP resources - -GCP allows attaching a local SSD to any instance type that is `n1-standard-1` or greater. - -### Customize TiDB parameters - -Currently, there are not too many parameters exposed to be customized. However, you can modify `templates/tidb-cluster-values.yaml.tpl` before deploying. If you modify it after the cluster is created and then run `terraform apply`, it can not take effect unless the pod(s) is manually deleted. - -### Customize node pools - -The cluster is created as a regional, as opposed to a zonal cluster. This means that GKE replicates node pools to each availability zone. This is desired to maintain high availability, however for the monitoring services, like Grafana, this is potentially unnecessary. It is possible to manually remove nodes if desired via `gcloud`. - -> *Note*: GKE node pools are managed instance groups, so a node deleted by `gcloud compute instances delete` will be automatically recreated and added back to the cluster. - -Suppose that you need to delete a node from the monitor pool. You can first do: - -```bash -gcloud compute instance-groups managed list | grep monitor -``` - -And the result will be something like this: - -```bash -gke-tidb-monitor-pool-08578e18-grp us-west1-b zone gke-tidb-monitor-pool-08578e18 0 0 gke-tidb-monitor-pool-08578e18 no -gke-tidb-monitor-pool-7e31100f-grp us-west1-c zone gke-tidb-monitor-pool-7e31100f 1 1 gke-tidb-monitor-pool-7e31100f no -gke-tidb-monitor-pool-78a961e5-grp us-west1-a zone gke-tidb-monitor-pool-78a961e5 1 1 gke-tidb-monitor-pool-78a961e5 no -``` - -The first column is the name of the managed instance group, and the second column is the zone in which it was created. You also need the name of the instance in that group, and you can get it by running: - -```bash -gcloud compute instance-groups managed list-instances --zone -``` - -For example: - -```bash -$ gcloud compute instance-groups managed list-instances gke-tidb-monitor-pool-08578e18-grp --zone us-west1-b - -NAME ZONE STATUS ACTION INSTANCE_TEMPLATE VERSION_NAME LAST_ERROR -gke-tidb-monitor-pool-08578e18-c7vd us-west1-b RUNNING NONE gke-tidb-monitor-pool-08578e18 -``` - -Now you can delete the instance by specifying the name of the managed instance group and the name of the instance, for example: - -```bash -gcloud compute instance-groups managed delete-instances gke-tidb-monitor-pool-08578e18-grp --instances=gke-tidb-monitor-pool-08578e18-c7vd --zone us-west1-b -``` - -## Destroy - -When you are done, the infrastructure can be torn down by running: - -```bash -terraform destroy -``` - -You have to manually delete disks in the Google Cloud Console, or with `gcloud` after running `terraform destroy` if you do not need the data anymore. - -> *Note*: When `terraform destroy` is running, an error with the following message might occur: `Error reading Container Cluster "tidb": Cluster "tidb" has status "RECONCILING" with message""`. This happens when GCP is upgrading the kubernetes master node, which it does automatically at times. While this is happening, it is not possible to delete the cluster. When it is done, run `terraform destroy` again. - - -## More information - -Please view our [operation guide](../../docs/operation-guide.md). +This document has been moved to [https://pingcap.com/docs/v3.0/tidb-in-kubernetes/deploy/gcp-gke/](https://pingcap.com/docs/v3.0/tidb-in-kubernetes/deploy/gcp-gke/). diff --git a/deploy/modules/aliyun/tidb-cluster/variable.tf b/deploy/modules/aliyun/tidb-cluster/variable.tf index fb53b40a9b..9d102b3e31 100644 --- a/deploy/modules/aliyun/tidb-cluster/variable.tf +++ b/deploy/modules/aliyun/tidb-cluster/variable.tf @@ -17,7 +17,7 @@ variable "tidb_version" { variable "tidb_cluster_chart_version" { description = "tidb-cluster chart version" - default = "v1.0.0-beta.3" + default = "v1.0.0" } variable "pd_count" { diff --git a/deploy/modules/aliyun/tidb-operator/variables.tf b/deploy/modules/aliyun/tidb-operator/variables.tf index 023b25e25c..25995da1cb 100644 --- a/deploy/modules/aliyun/tidb-operator/variables.tf +++ b/deploy/modules/aliyun/tidb-operator/variables.tf @@ -22,7 +22,7 @@ variable "cluster_network_type" { variable "operator_version" { type = string - default = "v1.0.0-beta.3" + default = "v1.0.0" } variable "operator_helm_values" { diff --git a/deploy/modules/aws/tidb-cluster/variables.tf b/deploy/modules/aws/tidb-cluster/variables.tf index f21f6e0da5..1d5e5c937f 100644 --- a/deploy/modules/aws/tidb-cluster/variables.tf +++ b/deploy/modules/aws/tidb-cluster/variables.tf @@ -1,6 +1,6 @@ variable "tidb_cluster_chart_version" { description = "tidb-cluster chart version" - default = "v1.0.0-beta.3" + default = "v1.0.0" } variable "create_tidb_cluster_release" { diff --git a/deploy/modules/share/tidb-cluster-release/variables.tf b/deploy/modules/share/tidb-cluster-release/variables.tf index 6101be5a20..10d441ba3e 100644 --- a/deploy/modules/share/tidb-cluster-release/variables.tf +++ b/deploy/modules/share/tidb-cluster-release/variables.tf @@ -5,7 +5,7 @@ variable "kubeconfig_filename" { variable "tidb_cluster_chart_version" { description = "tidb-cluster chart version" - default = "v1.0.0-beta.3" + default = "v1.0.0" } variable "cluster_name" { diff --git a/docs/aliyun-tutorial.md b/docs/aliyun-tutorial.md index 9fdef66ba8..44fdda744d 100644 --- a/docs/aliyun-tutorial.md +++ b/docs/aliyun-tutorial.md @@ -1,3 +1,3 @@ # Deploy on Aliyun (Alibaba Cloud) -Please see full documentation [here](../deploy/aliyun/README.md). +This document has been moved to [https://pingcap.com/docs/v3.0/tidb-in-kubernetes/deploy/alibaba-cloud/](https://pingcap.com/docs/v3.0/tidb-in-kubernetes/deploy/alibaba-cloud/). diff --git a/docs/aws-eks-tutorial.md b/docs/aws-eks-tutorial.md index e02e082c62..fef7883cb4 100644 --- a/docs/aws-eks-tutorial.md +++ b/docs/aws-eks-tutorial.md @@ -1,201 +1,3 @@ ---- -title: Deploy TiDB, a distributed MySQL compatible database, on Kubernetes via AWS EKS -summary: Tutorial for deploying TiDB on Kubernetes via AWS EKS. -category: operations ---- - -> **Note:** This documentation is outdated and might not work, so it is recommended to see the latest version in the [deploy directory](/deploy/aws/README.md). - # Deploy TiDB, a distributed MySQL compatible database, on Kubernetes via AWS EKS -## Requirements: -* [awscli](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) >= 1.16.73 -* [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl) >= 1.11 -* [helm](https://github.com/helm/helm/blob/master/docs/install.md#installing-the-helm-client) >= 2.9.0 and < 3.0.0 -* [jq](https://stedolan.github.io/jq/download/) -* [aws-iam-authenticator](https://github.com/kubernetes-sigs/aws-iam-authenticator#4-set-up-kubectl-to-use-authentication-tokens-provided-by-aws-iam-authenticator-for-kubernetes) -* [terraform](https://www.terraform.io/downloads.html) - -## Introduction - -This tutorial is designed to be a self-contained deployment of a Kubernetes cluster on AWS EKS with a running TiDB installattion managed by the TiDB Kubernetes operator. - -It takes you through these steps: - -- Standing up a Kubernetes cluster with TiDB running inside -- Connecting to TiDB -- Scale out the cluster -- Shutting down down the Kubernetes cluster - -> Warning: Following this guide will create objects in your AWS account that will cost you money against your AWS bill. - -## More about EKS - -AWS EKS provides managed Kubernetes master nodes - -- There's no master nodes to manage -- The master nodes are multi-AZ to provide redundancy -- The master nodes will scale automatically when necessary - -## Configure AWS user - -Before continuing, make sure you have create a new user (other than the -root user of your AWS account) in IAM, giving it enough permissions. -For simplicity you can just assign `AdministratorAccess` to the group this user -belongs to. With more detailed permissions, you will have to be sure you also have -`AmazonEKSClusterPolicy` and `AmazonEKSServicePolicy` for this user. - -Then generate a pair of access keys and keep them safe locally. - -## A bit more about Terraform - -Information about using Terraform with EKS can be found [here](https://www.terraform.io/docs/providers/aws/guides/eks-getting-started.html). -However if this is the first time using Terraform, please go take a glance -at [their tutorial here](https://www.terraform.io/intro/getting-started/install.html). -Firstly making sure your AWS access key pairs and your local Terraform works with -the most simplest infrastructure provision (e.g [this example](https://www.terraform.io/intro/getting-started/build.html#configuration)) before you -continue. - - -We will use Terraform templates to deploy EKS. Please install terraform using the steps [described in the terraform manual](https://www.terraform.io/intro/getting-started/install.html). For example, on MacOS or Linux: - -```sh -# For mac -wget https://releases.hashicorp.com/terraform/0.11.10/terraform_0.11.10_darwin_amd64.zip - -unzip terraform* -sudo mv terraform /usr/local/bin/ -``` - -```sh -# For linux -wget https://releases.hashicorp.com/terraform/0.11.10/terraform_0.11.10_linux_amd64.zip - -unzip terraform* -sudo mv terraform /usr/local/bin/ -``` - -At this point, let us make sure that `awscli` and `terraform` are properly configured. Here is a simple example that will provision a `t2.micro` for us - -```tf -# example.tf - -provider "aws" { - region = "us-east-1" -} - -resource "aws_instance" "example" { - ami = "ami-2757f631" - instance_type = "t2.micro" -} -``` - -Then run the following command to be sure the Terraform command is working. - -```sh -terraform init -terraform apply -# then verify instance creation on AWS console -terraform destroy -``` - -Note that Terraform will automatically search for saved API credentials (for example, in ~/.aws/credentials) - -In our next step, we will be deploying infrastructure based on the Terraform EKS tutorial. - -## Running the Terraform script - -The Terraform script is located in `./deploy/aws`. After changing directory, we can run the same commands as with our test example -```sh -terraform init -terraform apply -var-file=aws-tutorial.tfvars -``` -Here, we are passing in a file that specifies values for certain variables to the `terraform apply` command. - -The provisioning of all the infrastructure will take several minutes. We are creating: - -* 1 VPC -* 1 t2.micro as a bastion machine -* 1 internal ELB -* 1 c5d.large for PD pods -* 1 c5d.large for TiKV pods -* 1 c4.large for TiDB pods -* 1 c5.large for monitoring related pods - -When everything has been successfully created, you will see something like this: - -```sh -Apply complete! Resources: 67 added, 0 changed, 0 destroyed. - -Outputs: - -bastion_ip = [ - 3.14.255.194 -] -eks_endpoint = https://8B49E8619835B8C79BD383B542161819.sk1.us-east-2.eks.amazonaws.com -eks_version = 1.12 -monitor_endpoint = http://a37987df9710211e9b48c0ae40bc8d7b-1847612729.us-east-2.elb.amazonaws.com:3000 -region = us-east-2 -tidb_dns = internal-a37a17c22710211e9b48c0ae40bc8d7b-1891023212.us-east-2.elb.amazonaws.com -tidb_port = 4000 -tidb_version = v3.0.1 -``` - -> *NOTE*: Be careful about changing instance types for PD and TiKV worker groups as they rely on local SSD. Doing so may break user-data and local volume setup. -### Connecting to TiDB - -Access to TiDB is gated behind the bastion machine. First ssh into it and then use the mysql client -```sh -ssh -i credentials/k8s-prod-aws_tutorial.pem ec2-user@ -mysql -h -P -u root -``` - -### Interacting with the Kubernetes cluster - -It is possible to interact with the cluster via `kubectl` and `helm` with the kubeconfig file that is created `credentials/kubeconfig_aws_tutorial`. - -```sh -# By specifying --kubeconfig -kubectl --kubeconfig credentials/kubeconfig_aws_tutorial get po -n tidb -helm --kubeconfig credentials/kubeconfig_aws_tutorial ls - -# or setting KUBECONFIG environment variable -export KUBECONFIG=$PWD/credentials/kubeconfig_aws_tutorial -kubectl get po -n tidb -helm ls -``` - -### Viewing the Grafana dashboards - -Now that we know how to interact with the cluster, we can port-forward the Grafana service locally - -```bash -kubectl port-forward svc/tidb-cluster-grafana 3000:3000 -n tidb &>/dev/null & -``` - -We can now point a browser to `localhost:3000` and view the dashboards. - - -### Scale TiDB cluster - -To scale out TiDB cluster, modify `tikv_count` or `tidb_count` in `aws-tutorial.tfvars` to your desired count, and then run `terraform apply -var-file=aws-tutorial.tfvars`. - -> *Note*: Currently, scaling in is not supported since we cannot determine which node to scale. Scaling out needs a few minutes to complete, you can watch the scaling out by `kubectl --kubeconfig credentials/kubeconfig_aws_tutorial get po -n tidb --watch`. - -> *Note*: There are taints and tolerations in place such that only a single pod will be scheduled per node. The count is also passed onto helm via terraform. For this reason attempting to scale out pods via helm or `kubectl scale` will not work as expected. ---- - -## Destroy - -At the end of the tutorial, please make sure all the resources created by Kubernetes are removed (LoadBalancers, Security groups), so you get a -big bill from AWS. - -Simply run: - -```sh -terraform destroy -``` - -(Do this command at the end to clean up, you don't have to do it now!) - -> **NOTE:** You have to manually delete the EBS volumes after running `terraform destroy` if you don't need the data on the volumes any more. +This document has been moved to [https://pingcap.com/docs/v3.0/tidb-in-kubernetes/maintain/backup-and-restore/](https://pingcap.com/docs/v3.0/tidb-in-kubernetes/maintain/backup-and-restore/). diff --git a/docs/backup-restore.md b/docs/backup-restore.md index b236dcd53c..a45c907ec6 100644 --- a/docs/backup-restore.md +++ b/docs/backup-restore.md @@ -1,116 +1,3 @@ # Backup and Restore a TiDB Cluster -## Overview -TiDB Operator supports two kinds of backup: - -* [Full backup](#full-backup)(scheduled or ad-hoc) via [`mydumper`](https://www.pingcap.com/docs/dev/reference/tools/mydumper/), which helps you to logically back up a TiDB cluster. -* [Incremental backup](#incremental-backup) via [`TiDB-Binlog`](https://www.pingcap.com/docs/dev/reference/tools/tidb-binlog/overview/), which helps you replicate the data in a TiDB cluster to other databases or back up the data in real time. - -Currently, TiDB Operator only supports automatic [restore operation](#restore) for full backup taken by `mydumper`. Restoring the backup data captured by TiDB Binlog requires manual intervention. - -## Full backup - -Full backup uses `mydumper` to make a logical backup of TiDB cluster. The backup job will create a PVC([PersistentVolumeClaim](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims), the same below) to store backup data. - -By default, the backup uses PV ([Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistent-volumes)) to store the backup data. You can also store the backup data to [Google Cloud Storage](https://cloud.google.com/storage/) bucket, [Ceph Object Storage](https://ceph.com/ceph-storage/object-storage/) or [Amazon S3](https://aws.amazon.com/s3/) by changing the configuration. This way the PV temporarily stores backup data before it is placed in object storage. Refer to [TiDB cluster Backup configuration](./references/tidb-backup-configuration.md) for full configuration guide of backup and restore. - -You can either set up a scheduled full backup or take a full backup in an ad-hoc manner. - -### Scheduled full backup - -Scheduled full backup is created alongside the TiDB cluster, and it runs periodically like the crontab job. - -To configure a scheduled full backup, modify the `scheduledBackup` section in the `charts/tidb-cluster/values.yaml` file of the TiDB cluster: - -* Set `scheduledBackup.create` to `true` -* Set `scheduledBackup.storageClassName` to the PV storage class name used for backup data - -> **Note:** -> -> You must set the scheduled full backup PV's [reclaim policy](https://kubernetes.io/docs/tasks/administer-cluster/change-pv-reclaim-policy) to `Retain` to keep your backup data safe. - -* Configure `scheduledBackup.schedule` in the [Cron](https://en.wikipedia.org/wiki/Cron) format to define the scheduling. -* Create a Kubernetes [Secret](https://kubernetes.io/docs/concepts/configuration/secret/) containing the username and password that has the privilege to backup the database: - - ```shell - $ kubectl create secret generic backup-secret -n ${namespace} --from-literal=user= --from-literal=password= - ``` - -Then, create a new cluster with the scheduled full backup configured by `helm install`, or enabling scheduled full backup for the existing cluster by `helm upgrade`: - -```shell -$ helm upgrade ${RELEASE_NAME} charts/tidb-cluster -f charts/tidb-cluster/values.yaml -``` - -### Ad-Hoc full backup - -Ad-hoc backup is encapsulated in another helm chart, `charts/tidb-backup`. According to the `mode` in `charts/tidb-backup/values.yaml`, this chart can perform either full backup or restore. We will cover restore operation in the [restore section](#restore) of this document. - -To create an ad-hoc full backup job, modify the `charts/tidb-backup/values.yaml` file: - -* Set `clusterName` to the target TiDB cluster name -* Set `mode` to `backup` -* Set `storage.className` to the PV storage class name used for backup data -* Adjust the `storage.size` according to your database size - -> **Note:** - -> You must set the ad-hoc full backup PV's [reclaim policy](https://kubernetes.io/docs/tasks/administer-cluster/change-pv-reclaim-policy) to `Retain` to keep your backup data safe. - -Create a Kubernetes [Secret](https://kubernetes.io/docs/concepts/configuration/secret/) containing the username and password that has the privilege to backup the database: - -```shell -$ kubectl create secret generic backup-secret -n ${namespace} --from-literal=user= --from-literal=password= -``` - -Then run the following command to create an ad-hoc backup job: - -```shell -$ helm install charts/tidb-backup --name= --namespace=${namespace} -``` - -### View backups - -For backups stored in PV, you can view the PVs by using the following command: - -```shell -$ kubectl get pvc -n ${namespace} -l app.kubernetes.io/component=backup,pingcap.com/backup-cluster-name=${cluster_name} -``` - -If you store your backup data to [Google Cloud Storage](https://cloud.google.com/storage/), [Ceph Object Storage](https://ceph.com/ceph-storage/object-storage/) or [Amazon S3](https://aws.amazon.com/s3/), you can view the backups by using the related GUI or CLI tool. - -## Restore - -The helm chart `charts/tidb-backup` helps restore a TiDB cluster using backup data. To perform a restore operation, modify the `charts/tidb-backup/values.yaml` file: - -* Set `clusterName` to the target TiDB cluster name -* Set `mode` to `restore` -* Set `name` to the backup name you want to restore([view backups](#view-backups) helps you view all the backups available). If the backup is stored in `Google Cloud Storage`, `Ceph Object Storage` or `Amazon S3`, you must configure the corresponding section too (you might continue to use the same configuration you set in the [adhoc full backup](#ad-hoc-full-backup)). - -Create a Kubernetes [Secret](https://kubernetes.io/docs/concepts/configuration/secret/) containing the user and password that has the privilege to restore the database (skip this if you have already created one in the [adhoc full backup](#ad-hoc-full-backup) section): - -```shell -$ kubectl create secret generic backup-secret -n ${namespace} --from-literal=user= --from-literal=password= -``` - -Then, restore the backup: -```shell -$ helm install charts/tidb-backup --namespace=${namespace} -``` - -## Incremental backup - -Incremental backup leverages the [TiDB Binlog](https://www.pingcap.com/docs/dev/reference/tools/tidb-binlog/overview/) tool to collect binlog data from TiDB and provide real-time backup and replication to downstream platforms. - -Incremental backup is disabled in the TiDB cluster by default. To create a TiDB cluster with incremental backup enabled or enable incremental backup in existing TiDB cluster, modify the `charts/tidb-cluster/values.yaml` file: - -* Set `binlog.pump.create` to `true` -* Set `binlog.drainer.create` to `true` -* Set `binlog.pump.storageClassName` and `binlog.drainer.storageClassName` to a proper `storageClass` available in your kubernetes cluster -* Set `binlog.drainer.destDBType` to your desired downstream, explained in detail below - -Three types of downstream platforms available for incremental backup: - -* PersistenceVolume: default downstream. You can consider configuring a large PV for `drainer` (the `binlog.drainer.storage` variable) in this case -* MySQL compatible database: enabled by setting `binlog.drainer.destDBType` to `mysql`. You must configure the target address and credential in the `binlog.drainer.mysql` section too. -* Kafka: enable by setting `binlog.drainer.destDBType` to `kafka`. You must configure the zookeeper address and Kafka address in the `binlog.drainer.kafka` section too. +This document has been moved to [https://pingcap.com/docs/v3.0/tidb-in-kubernetes/maintain/backup-and-restore/](https://pingcap.com/docs/v3.0/tidb-in-kubernetes/maintain/backup-and-restore/). diff --git a/docs/cli-manual.md b/docs/cli-manual.md index 5c84ff4da3..5970fca5bb 100644 --- a/docs/cli-manual.md +++ b/docs/cli-manual.md @@ -1,257 +1,3 @@ # The TiDB Kubernetes Control(tkctl) User Manual -> **Disclaimer**: The tkctl CLI tool is currently **Alpha**. The design and sub-commands may change in the future, use at your own risk. - -The TiDB Kubernetes Control(tkctl) is a command line utility for TiDB operators to operate and diagnose their TiDB clusters in Kubernetes. - -- [Installation](#installation) - - [Build from Source](#build-from-source) - - [Shell Completion](#shell-completion) - - [Kubernetes Configuration](#kubernetes-configuration) -- [Commands](#commands) - - [tkctl version](#tkctl-version) - - [tkctl list](#tkctl-list) - - [tkctl use](#tkctl-use) - - [tkctl info](#tkctl-info) - - [tkctl get](#tkctl-get-component) - - [tkctl debug](#tkctl-debug-podname) - - [tkctl ctop](#tkctl-ctop) - - [tkctl help](#tkctl-help-command) - - [tkctl options](#tkctl-options) - -# Installation - -You can download the pre-built binary or build `tkctl` from source: - -### Download the Latest Pre-built Binary - -- [MacOS](http://download.pingcap.org/tkctl-darwin-amd64-latest.tgz) -- [Linux](http://download.pingcap.org/tkctl-linux-amd64-latest.tgz) -- [Windows](http://download.pingcap.org/tkctl-windows-amd64-latest.tgz) - -### Build from Source - -```shell -$ git clone https://github.com/pingcap/tidb-operator.git -$ GOOS=${YOUR_GOOS} make cli -$ mv tkctl /usr/local/bin/tkctl -``` - -## Shell Completion - -BASH -```shell -# setup autocomplete in bash into the current shell, bash-completion package should be installed first. -source <(tkctl completion bash) - -# add autocomplete permanently to your bash shell. -echo "if hash tkctl 2>/dev/null; then source <(tkctl completion bash); fi" >> ~/.bashrc -``` - -ZSH -```shell -# setup autocomplete in zsh into the current shell -source <(tkctl completion zsh) - -# add autocomplete permanently to your zsh shell -echo "if hash tkctl 2>/dev/null; then source <(tkctl completion zsh); fi" >> ~/.zshrc -``` - -## Kubernetes Configuration - -`tkctl` reuse the kubeconfig(default to `~/.kube/config`) file to talk with kubernetes cluster. You don't have to set up `kubectl` to use `tkctl`, but make sure you have `~/.kube/config` properly set. You can verify the configuration by executing: - -```shell -$ tkctl version -``` - -If you see the version of tkctl tool and version of TiDB operator installed in target cluster or "No TiDB Controller Manager found, please install one first.", `tkctl` is correctly configured to access your cluster. - -# Commands - -## tkctl version - -This command used to show the version of **tkctl** and **tidb-operator** installed in target cluster. - -Example: -``` -$ tkctl version -Client Version: v1.0.0-beta.1-p2-93-g6598b4d3e75705-dirty -TiDB Controller Manager Version: pingcap/tidb-operator:latest -TiDB Scheduler Version: pingcap/tidb-operator:latest -``` - -## tkctl list - -This command used to list all tidb clusters installed. - -| Flags | Shorthand | Description | -| ----- | --------- | ----------- | -| --all-namespaces | -A | search all namespaces | -| --output | -o | output format, one of [default,json,yaml], the default format is `default` | - -Example: - -``` -$ tkctl list -A -NAMESPACE NAME PD TIKV TIDB AGE -foo demo-cluster 3/3 3/3 2/2 11m -bar demo-cluster 3/3 3/3 1/2 11m -``` - -## tkctl use - -This command used to specify the current TiDB cluster to use, the other commands could omit `--tidbcluster` option and defaults to select current TiDB cluster if there is a current TiDB cluster set. - -Example: - -``` -$ tkctl use --namespace=foo demo-cluster -Tidb cluster switched to foo/demo-cluster -``` - -## tkctl info - -This command used to get the information of TiDB cluster, the current TiDB cluster will be used if exists. - -| Flags | Shorthand | Description | -| ----- | --------- | ----------- | -| --tidb-cluster | -t | select the tidb cluster, default to current TiDB cluster | - -Example: - -``` -$ tkctl info -Name: demo-cluster -Namespace: foo -CreationTimestamp: 2019-04-17 17:33:41 +0800 CST -Overview: - Phase Ready Desired CPU Memory Storage Version - ----- ----- ------- --- ------ ------- ------- - PD: Normal 3 3 200m 1Gi 1Gi pingcap/pd:v3.0.1 - TiKV: Normal 3 3 1000m 2Gi 10Gi pingcap/tikv:v3.0.1 - TiDB Upgrade 1 2 500m 1Gi pingcap/tidb:v3.0.1 -Endpoints(NodePort): - - 172.16.4.158:31441 - - 172.16.4.155:31441 -``` - -## tkctl get [component] - -This is a group of commands used to get the details of TiDB cluster componentes, the current TiDB cluster will be used if exists. - -Available components: `pd`, `tikv`, `tidb`, `volume`, `all`(query all components) - -| Flags | Shorthand | Description | -| ----- | --------- | ----------- | -| --tidb-cluster | -t | select the tidb cluster, default to current TiDB cluster | -| --output | -o | output format, one of [default,json,yaml], the default format is `default` | - -Example: - -``` -$ tkctl get tikv -NAME READY STATUS MEMORY CPU RESTARTS AGE NODE -demo-cluster-tikv-0 2/2 Running 2098Mi/4196Mi 2/2 0 3m19s 172.16.4.155 -demo-cluster-tikv-1 2/2 Running 2098Mi/4196Mi 2/2 0 4m8s 172.16.4.160 -demo-cluster-tikv-2 2/2 Running 2098Mi/4196Mi 2/2 0 4m45s 172.16.4.157 -$ tkctl get volume -tkctl get volume -VOLUME CLAIM STATUS CAPACITY NODE LOCAL -local-pv-d5dad2cf tikv-demo-cluster-tikv-0 Bound 1476Gi 172.16.4.155 /mnt/disks/local-pv56 -local-pv-5ade8580 tikv-demo-cluster-tikv-1 Bound 1476Gi 172.16.4.160 /mnt/disks/local-pv33 -local-pv-ed2ffe50 tikv-demo-cluster-tikv-2 Bound 1476Gi 172.16.4.157 /mnt/disks/local-pv13 -local-pv-74ee0364 pd-demo-cluster-pd-0 Bound 1476Gi 172.16.4.155 /mnt/disks/local-pv46 -local-pv-842034e6 pd-demo-cluster-pd-1 Bound 1476Gi 172.16.4.158 /mnt/disks/local-pv74 -local-pv-e54c122a pd-demo-cluster-pd-2 Bound 1476Gi 172.16.4.156 /mnt/disks/local-pv72 -``` - -## tkctl debug [pod_name] - -This command used to diagnose the Pods of TiDB cluster. It launches a debug container for you which has the nessary troubleshooting tools installed. - -| Flags | Shorthand | Description | -| ----- | --------- | ----------- | -| --image | | specify the docker image of debug container, default to `pingcap/tidb-debug:lastest` | -| --container | -c | select the container to diagnose, default to the first container of target Pod | -| --docker-socket | | specify the docker socket of cluster node, default to `/var/run/docker.sock` | -| --privileged | | whether launch container in privileged mode (full container capabilities) | - - -The default image of debug container contains almost all the related tools you may use then diagnosing, however, the image size can be kinda big. You may use `--image=pingcap/tidb-control:latest` if your just need a basic shell, `pd-ctl` and `tidb-ctl`. - -For the guide of using the default debug image (`tidb-debug`), refer to [tidb-debug](/misc/images/tidb-debug/README.md). - -Example: -``` -$ tkctl debug demo-cluster-tikv-0 -# you may have to wait a few seconds or minutes for the debug container running, then you will get the shell prompt -``` - -## tkctl ctop - -`tkctl ctop [pod_name | node/node_name ]` - -This command used to view the real-time stats of target pod or node. Compare to `kubectl top`, `tkctl ctop` provides network and disk stats, which are important for diagnosing TiDB cluster problem. - -| Flags | Shorthand | Description | -| ----- | --------- | ----------- | -| --image | | specify the docker image of ctop, default to `quay.io/vektorlab/ctop:0.7.2` | -| --docker-socket | | specify the docker socket of cluster node, default to `/var/run/docker.sock` | - -Example: - -``` -$ tkctl ctop demo-cluster-tikv-0 -$ tkctl ctop node/172.16.4.155 -``` - -If you don't see the prompt, please wait a few seconds or minutes. - -## tkctl help [command] - -This command used to print the help message of abitrary sub command. - -``` -$ tkctl help debug -``` - -## tkctl options - -This command used to view the global flags of `tkctl`. - -Example: -``` -$ tkctl options -The following options can be passed to any command: - - --alsologtostderr=false: log to standard error as well as files - --as='': Username to impersonate for the operation - --as-group=[]: Group to impersonate for the operation, this flag can be repeated to specify multiple groups. - --cache-dir='/Users/alei/.kube/http-cache': Default HTTP cache directory - --certificate-authority='': Path to a cert file for the certificate authority - --client-certificate='': Path to a client certificate file for TLS - --client-key='': Path to a client key file for TLS - --cluster='': The name of the kubeconfig cluster to use - --context='': The name of the kubeconfig context to use - --insecure-skip-tls-verify=false: If true, the server's certificate will not be checked for validity. This will -make your HTTPS connections insecure - --kubeconfig='': Path to the kubeconfig file to use for CLI requests. - --log_backtrace_at=:0: when logging hits line file:N, emit a stack trace - --log_dir='': If non-empty, write log files in this directory - --logtostderr=true: log to standard error instead of files - -n, --namespace='': If present, the namespace scope for this CLI request - --request-timeout='0': The length of time to wait before giving up on a single server request. Non-zero values -should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. - -s, --server='': The address and port of the Kubernetes API server - --stderrthreshold=2: logs at or above this threshold go to stderr - -t, --tidbcluster='': Tidb cluster name - --token='': Bearer token for authentication to the API server - --user='': The name of the kubeconfig user to use - -v, --v=0: log level for V logs - --vmodule=: comma-separated list of pattern=N settings for file-filtered logging -``` -These options are mainly used to talk with the kubernetes cluster, there are two options that used often: - -- `--context`: choose the kubernetes cluster -- `--namespace`: choose the kubernetes namespace +This document has been moved to [https://pingcap.com/docs/v3.0/tidb-in-kubernetes/reference/tools/tkctl/](https://pingcap.com/docs/v3.0/tidb-in-kubernetes/reference/tools/tkctl/). diff --git a/docs/google-kubernetes-tutorial.md b/docs/google-kubernetes-tutorial.md index c8161a8e4c..d8ec0936fc 100644 --- a/docs/google-kubernetes-tutorial.md +++ b/docs/google-kubernetes-tutorial.md @@ -1,185 +1,4 @@ ---- -title: Deploy TiDB, a distributed MySQL compatible database, to Kubernetes on Google Cloud -summary: Tutorial for deploying TiDB on Google Cloud using Kubernetes. -category: operations ---- - # Deploy TiDB, a distributed MySQL compatible database, to Kubernetes on Google Cloud -## Introduction - -This tutorial is designed to be [run in Google Cloud Shell](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/pingcap/tidb-operator&tutorial=docs/google-kubernetes-tutorial.md). It takes you through these steps: - -- Launch a new 3-node Kubernetes cluster (optional) -- Install the Helm package manager for Kubernetes -- Deploy the TiDB Operator -- Deploy your first TiDB cluster -- Connect to the TiDB cluster -- Scale out the TiDB cluster -- Shut down the Kubernetes cluster (optional) - -## Select a project - -This tutorial launches a 3-node Kubernetes cluster of `n1-standard-1` machines. Pricing information can be [found here](https://cloud.google.com/compute/pricing). - -Please select a project before proceeding: - - - - -## Enable API access - -This tutorial will require use of the Compute and Container APIs. Please enable them before proceeding: - - - - -## Configure gcloud defaults - -This step defaults gcloud to your preferred project and [zone](https://cloud.google.com/compute/docs/regions-zones/), which will simplify the commands used for the rest of this tutorial: - - gcloud config set project {{project-id}} && - gcloud config set compute/zone us-west1-a - -## Launch a 3-node Kubernetes cluster - -It's now time to launch a 3-node kubernetes cluster! The following command launches a 3-node cluster of `n1-standard-1` machines. - -It will take a few minutes to complete: - - gcloud container clusters create tidb - -Once the cluster has launched, set it to be the default: - - gcloud config set container/cluster tidb - -The last step is to verify that `kubectl` can connect to the cluster, and all three machines are running: - - kubectl get nodes - -If you see `Ready` for all nodes, congratulations! You've setup your first Kubernetes cluster. - -## Install Helm - -Helm is the package manager for Kubernetes, and is what allows us to install all of the distributed components of TiDB in a single step. Helm requires both a server-side and a client-side component to be installed. - -Install `helm`: - - curl https://raw.githubusercontent.com/helm/helm/master/scripts/get | bash - -Copy `helm` to your `$HOME` directory so that it will persist after the Cloud Shell reaches its idle timeout: - - mkdir -p ~/bin && - cp /usr/local/bin/helm ~/bin && - echo 'PATH="$PATH:$HOME/bin"' >> ~/.bashrc - -Helm will also need a couple of permissions to work properly: - - kubectl apply -f ./manifests/tiller-rbac.yaml && - helm init --service-account tiller --upgrade - -It takes a minute for helm to initialize `tiller`, its server component: - - watch "kubectl get pods --namespace kube-system | grep tiller" - -When you see `Running`, it's time to hit Ctrl+C and proceed to the next step! - -## Deploy TiDB Operator - -The first TiDB component we are going to install is the TiDB Operator, using a Helm Chart. TiDB Operator is the management system that works with Kubernetes to bootstrap your TiDB cluster and keep it running. This step assumes you are in the `tidb-operator` working directory: - - kubectl apply -f ./manifests/crd.yaml && - kubectl apply -f ./manifests/gke/persistent-disk.yaml && - helm install ./charts/tidb-operator -n tidb-admin --namespace=tidb-admin - -We can watch the operator come up with: - - watch kubectl get pods --namespace tidb-admin -o wide - -When you see both tidb-scheduler and tidb-controller-manager are `Running`, press Ctrl+C and proceed to launch a TiDB cluster! - -## Deploy your first TiDB cluster - -Now with a single command we can bring-up a full TiDB cluster: - - helm install ./charts/tidb-cluster -n demo --namespace=tidb --set pd.storageClassName=pd-ssd,tikv.storageClassName=pd-ssd - -It will take a few minutes to launch. You can monitor the progress with: - - watch kubectl get pods --namespace tidb -o wide - -The TiDB cluster includes 2 TiDB pods, 3 TiKV pods, and 3 PD pods. When you see all pods `Running`, it's time to Ctrl+C and proceed forward! - -## Connect to the TiDB cluster - -There can be a small delay between the pod being up and running, and the service being available. You can watch list services available with: - - watch "kubectl get svc -n tidb" - -When you see `demo-tidb` appear, you can Ctrl+C. The service is ready to connect to! - -To connect to TiDB within the Kubernetes cluster, you can establish a tunnel between the TiDB service and your Cloud Shell. This is recommended only for debugging purposes, because the tunnel will not automatically be transferred if your Cloud Shell restarts. To establish a tunnel: - - kubectl -n tidb port-forward svc/demo-tidb 4000:4000 &>/tmp/port-forward.log & - -From your Cloud Shell: - - sudo apt-get install -y mysql-client && - mysql -h 127.0.0.1 -u root -P 4000 - -Try out a MySQL command inside your MySQL terminal: - - select tidb_version(); - -If you did not specify a password in helm, set one now: - - SET PASSWORD FOR 'root'@'%' = ''; - -_Note that, this command contains some special characters which cannot be -auto-populated in the google cloud shell tutorial: you need to copy and paste it into your console manually._ - -Congratulations, you are now up and running with a distributed TiDB database compatible with MySQL! - -## Scale out the TiDB cluster - -With a single command we can easily scale out the TiDB cluster. To scale out TiKV: - - helm upgrade demo charts/tidb-cluster --set pd.storageClassName=pd-ssd,tikv.storageClassName=pd-ssd,tikv.replicas=5 - -Now the number of TiKV pods is increased from the default 3 to 5. You can check it with: - - kubectl get po -n tidb - -## Accessing the Grafana dashboard - -To access the Grafana dashboards, you can create a tunnel between the Grafana service and your shell. -To do so, use the following command: - - kubectl -n tidb port-forward svc/demo-grafana 3000:3000 &>/dev/null & - -In Cloud Shell, click on the Web Preview button and enter 3000 for the port. This will open a new browser tab pointing to the Grafana dashboards. Alternatively, use the following URL https://ssh.cloud.google.com/devshell/proxy?port=3000 in a new tab or window. - -If not using Cloud Shell, point a browser to `localhost:3000`. - -## Destroy the TiDB cluster - -When the TiDB cluster is not needed, you can delete it with the following command: - - helm delete demo --purge - -The above commands only delete the running pods, the data is persistent. If you do not need the data anymore, you should run the following commands to clean the data and the dynamically created persistent disks: - - kubectl delete pvc -n tidb -l app.kubernetes.io/instance=demo,app.kubernetes.io/managed-by=tidb-operator && - kubectl get pv -l app.kubernetes.io/namespace=tidb,app.kubernetes.io/managed-by=tidb-operator,app.kubernetes.io/instance=demo -o name | xargs -I {} kubectl patch {} -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}' - -## Shut down the Kubernetes cluster - -Once you have finished experimenting, you can delete the Kubernetes cluster with: - - gcloud container clusters delete tidb - - -## More information +This document has been moved to [https://pingcap.com/docs/v3.0/tidb-in-kubernetes/get-started/deploy-tidb-from-kubernetes-gke/](https://pingcap.com/docs/v3.0/tidb-in-kubernetes/get-started/deploy-tidb-from-kubernetes-gke/). -For production deployments, view our [operation guide](./operation-guide.md), and look at the GKE section. -We also have a simple [terraform based deployment](../deploy/gcp/README.md). diff --git a/docs/local-dind-tutorial.md b/docs/local-dind-tutorial.md index 928b728054..5bc8e8e445 100644 --- a/docs/local-dind-tutorial.md +++ b/docs/local-dind-tutorial.md @@ -1,355 +1,3 @@ # Deploy TiDB to Kubernetes on Your Laptop -This document describes how to deploy a TiDB cluster to Kubernetes on your laptop (Linux or macOS) for development or testing. - -[Docker in Docker](https://hub.docker.com/_/docker/) (DinD) runs Docker containers as virtual machines and runs another layer of Docker containers inside the first layer of Docker containers. [kubeadm-dind-cluster](https://github.com/kubernetes-sigs/kubeadm-dind-cluster) uses this technology to run the Kubernetes cluster in Docker containers. TiDB Operator uses a modified DinD script to manage the DinD Kubernetes cluster. - -## Prerequisites - -Before deploying a TiDB cluster to Kubernetes, make sure the following requirements are satisfied: - -- Resources requirement: CPU 2+, Memory 4G+ - - > **Note:** For macOS, you need to allocate 2+ CPU and 4G+ Memory to Docker. For details, see [Docker for Mac configuration](https://docs.docker.com/docker-for-mac/#advanced). - -- [Docker](https://docs.docker.com/install/): 17.03 or later - - > **Note:** [Legacy Docker Toolbox](https://docs.docker.com/toolbox/toolbox_install_mac/) users must migrate to [Docker for Mac](https://store.docker.com/editions/community/docker-ce-desktop-mac) by uninstalling Legacy Docker Toolbox and installing Docker for Mac, because DinD cannot run on Docker Toolbox and Docker Machine. - - > **Note:** `kubeadm` validates installed Docker version during the installation process. If you are using Docker later than 18.06, there would be warning messages. The cluster might still be working, but it is recommended to use a Docker version between 17.03 and 18.06 for better compatibility. You can find older versions of docker [here](https://download.docker.com/). - -- [Helm Client](https://github.com/helm/helm/blob/master/docs/install.md#installing-the-helm-client): version >= 2.9.0 and < 3.0.0 -- [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl): 1.10 at least, 1.13 or later recommended - - > **Note:** The outputs of different versions of `kubectl` might be slightly different. - -- For Linux users, `kubeadm` might produce warning messages during the installation process if you are using kernel 5.x or later versions. The cluster might still be working, but it is recommended to use kernel version 3.10+ or 4.x for better compatibility. - -- `root` access or permissions to operate with the Docker daemon. - -- Supported filesystem - - For Linux users, if the host machine uses an XFS filesystem (default in CentOS 7), it must be formatted with `ftype=1` to enable `d_type` support, see [Docker's documentation](https://docs.docker.com/storage/storagedriver/overlayfs-driver/) for details. - - You can check if your filesystem supports `d_type` using command `xfs_info / | grep ftype`, where `/` is the data directory of you installed Docker daemon. - - If your root directory `/` uses XFS without `d_type` support, but there is another partition does, or is using another filesystem, it is also possible to change the data directory of Docker to use that partition. - - Assume a supported filesystem is mounted at path `/data`, use the following instructions to let Docker use it: - - ```sh - # Create a new directory for docker data storage - mkdir -p /data/docker - - # Stop docker daemon - systemctl stop docker.service - - # Make sure the systemd directory exist - mkdir -p /etc/systemd/system/docker.service.d/ - - # Overrite config - cat << EOF > /etc/systemd/system/docker.service.d/docker-storage.conf - [Service] - ExecStart= - ExecStart=/usr/bin/dockerd --data-root /data/docker -H fd:// --containerd=/run/containerd/containerd.sock - EOF - - # Restart docker daemon - systemctl daemon-reload - systemctl start docker.service - ``` - -## Step 1: Deploy a Kubernetes cluster using DinD - -First, make sure that the docker daemon is running, and you can install and set up a Kubernetes cluster (version 1.12) using DinD for TiDB Operator with the script in our repository: - -```sh -# Get the code -$ git clone --depth=1 https://github.com/pingcap/tidb-operator - -# Set up the cluster -$ cd tidb-operator -$ manifests/local-dind/dind-cluster-v1.12.sh up -``` - -If the cluster fails to pull Docker images during the startup due to the firewall, you can set the environment variable `KUBE_REPO_PREFIX` to `uhub.ucloud.cn/pingcap` before running the script `dind-cluster-v1.12.sh` as follows (the Docker images used are pulled from [UCloud Docker Registry](https://docs.ucloud.cn/compute/uhub/index)): - -``` -$ KUBE_REPO_PREFIX=uhub.ucloud.cn/pingcap manifests/local-dind/dind-cluster-v1.12.sh up -``` - -An alternative solution is to configure HTTP proxies in DinD: - -```sh -$ export DIND_HTTP_PROXY=http://: -$ export DIND_HTTPS_PROXY=http://: -$ export DIND_NO_PROXY=.svc,.local,127.0.0.1,0,1,2,3,4,5,6,7,8,9 # whitelist internal domains and IP addresses -$ manifests/local-dind/dind-cluster-v1.12.sh up -``` - -There might be some warnings during the process due to various settings and environment of your system, but the command should exit without any error. You can verify the k8s cluster is up and running by: - -```sh -# Get the cluster information -$ kubectl cluster-info -Kubernetes master is running at http://127.0.0.1:8080 -KubeDNS is running at http://127.0.0.1:8080/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy -kubernetes-dashboard is running at http://127.0.0.1:8080/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy - -# List host nodes (in the DinD installation, they are docker containers) in the cluster -$ kubectl get nodes -o wide -NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME -kube-master Ready master 11m v1.12.5 10.192.0.2 Debian GNU/Linux 9 (stretch) 3.10.0-957.12.1.el7.x86_64 docker://18.9.0 -kube-node-1 Ready 9m32s v1.12.5 10.192.0.3 Debian GNU/Linux 9 (stretch) 3.10.0-957.12.1.el7.x86_64 docker://18.9.0 -kube-node-2 Ready 9m32s v1.12.5 10.192.0.4 Debian GNU/Linux 9 (stretch) 3.10.0-957.12.1.el7.x86_64 docker://18.9.0 -kube-node-3 Ready 9m32s v1.12.5 10.192.0.5 Debian GNU/Linux 9 (stretch) 3.10.0-957.12.1.el7.x86_64 docker://18.9.0 -``` - -## Step 2: Install TiDB Operator in the DinD Kubernetes cluster - -Once the k8s cluster is up and running, we can install TiDB Operator into it using `helm`: - -```sh -$ helm install charts/tidb-operator --name=tidb-operator --namespace=tidb-admin --set scheduler.kubeSchedulerImageName=mirantis/hypokube --set scheduler.kubeSchedulerImageTag=final -``` - -Then wait a few minutes until TiDB Operator is running: - -```sh -$ kubectl get pods --namespace tidb-admin -l app.kubernetes.io/instance=tidb-operator -NAME READY STATUS RESTARTS AGE -tidb-controller-manager-5cd94748c7-jlvfs 1/1 Running 0 1m -tidb-scheduler-56757c896c-clzdg 2/2 Running 0 1m -``` - -## Step 3: Deploy a TiDB cluster in the DinD Kubernetes cluster - -By using `helm` along with TiDB Operator, we can easily set up a TiDB cluster: - -```sh -$ helm install charts/tidb-cluster --name=demo --namespace=tidb -``` - -And wait a few minutes for all TiDB components to get created and ready: - -```sh -# Use `Ctrl + C` to exit watch mode -$ kubectl get pods --namespace tidb -l app.kubernetes.io/instance=demo -o wide --watch - -# Get basic information of the TiDB cluster -$ kubectl get tidbcluster -n tidb -NAME PD STORAGE READY DESIRE TIKV STORAGE READY DESIRE TIDB READY DESIRE -demo pingcap/pd:v3.0.1 1Gi 3 3 pingcap/tikv:v3.0.1 10Gi 3 3 pingcap/tidb:v3.0.1 2 2 - -$ kubectl get statefulset -n tidb -NAME DESIRED CURRENT AGE -demo-pd 3 3 1m -demo-tidb 2 2 1m -demo-tikv 3 3 1m - -$ kubectl get service -n tidb -NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE -demo-discovery ClusterIP 10.96.146.139 10261/TCP 1m -demo-grafana NodePort 10.111.80.73 3000:32503/TCP 1m -demo-pd ClusterIP 10.110.192.154 2379/TCP 1m -demo-pd-peer ClusterIP None 2380/TCP 1m -demo-prometheus NodePort 10.104.97.84 9090:32448/TCP 1m -demo-tidb NodePort 10.102.165.13 4000:32714/TCP,10080:32680/TCP 1m -demo-tidb-peer ClusterIP None 10080/TCP 1m -demo-tikv-peer ClusterIP None 20160/TCP 1m - -$ kubectl get configmap -n tidb -NAME DATA AGE -demo-monitor 5 1m -demo-monitor-dashboard-extra-v3 2 1m -demo-monitor-dashboard-v2 5 1m -demo-monitor-dashboard-v3 5 1m -demo-pd 2 1m -demo-tidb 2 1m -demo-tikv 2 1m - -$ kubectl get pod -n tidb -NAME READY STATUS RESTARTS AGE -demo-discovery-649c7bcbdc-t5r2k 1/1 Running 0 1m -demo-monitor-58745cf54f-gb8kd 2/2 Running 0 1m -demo-pd-0 1/1 Running 0 1m -demo-pd-1 1/1 Running 0 1m -demo-pd-2 1/1 Running 0 1m -demo-tidb-0 1/1 Running 0 1m -demo-tidb-1 1/1 Running 0 1m -demo-tikv-0 1/1 Running 0 1m -demo-tikv-1 1/1 Running 0 1m -demo-tikv-2 1/1 Running 0 1m -``` - -## Access the database and monitor dashboards - -To access the TiDB cluster, use `kubectl port-forward` to expose services to the host. The port numbers in command are in `:` format. - -> **Note:** If you are deploying DinD on a remote machine rather than a local PC, there might be problems accessing "localhost" of that remote system. When you use `kubectl` 1.13 or later, it is possible to expose the port on `0.0.0.0` instead of the default `127.0.0.1` by adding `--address 0.0.0.0` to the `kubectl port-forward` command. - -- Access TiDB using the MySQL client - - Before you start testing your TiDB cluster, make sure you have installed a MySQL client. - - 1. Use `kubectl` to forward the host machine port to the TiDB service port: - - ```sh - $ kubectl port-forward svc/demo-tidb 4000:4000 --namespace=tidb - ``` - - > **Note:** If the proxy is set up sucessfully, it will print something like `Forwarding from 0.0.0.0:4000 -> 4000`. After testing, press `Ctrl + C` to stop the proxy and exit. - - 2. Then, to connect to TiDB using the MySQL client, open a new terminal tab or window and run the following command: - - ```sh - $ mysql -h 127.0.0.1 -P 4000 -u root - ``` - -- View the monitor dashboards - - 1. Use `kubectl` to forward the host machine port to the Grafana service port: - - ```sh - $ kubectl port-forward svc/demo-grafana 3000:3000 --namespace=tidb - ``` - - > **Note:** If the proxy is set up sucessfully, it will print something like `Forwarding from 0.0.0.0:3000 -> 3000`. After testing, press `Ctrl + C` to stop the proxy and exit. - - 2. Then, open your web browser at http://localhost:3000 to access the Grafana monitoring interface. - - * Default username: admin - * Default password: admin - -- Permanent remote access - - Although this is a very simple demo cluster and does not apply to any serious usage, it is useful if it can be accessed remotely without `kubectl port-forward`, which might require an open terminal. - - TiDB, Prometheus, and Grafana are exposed as `NodePort` Services by default, so it is possible to set up a reverse proxy for them. - - 1. Find their listing port numbers using the following command: - - ```sh - $ kubectl get service -n tidb | grep NodePort - demo-grafana NodePort 10.111.80.73 3000:32503/TCP 1m - demo-prometheus NodePort 10.104.97.84 9090:32448/TCP 1m - demo-tidb NodePort 10.102.165.13 4000:32714/TCP,10080:32680/TCP 1m - ``` - - In this sample output, the ports are: 32503 for Grafana, 32448 for Prometheus, and 32714 for TiDB. - - 2. Find the host IP addresses of the cluster. - - DinD is a K8s cluster running inside Docker containers, so Services expose ports to the containers' address, instead of the real host machine. We can find IP addresses of Docker containers by the following command: - - ```sh - $ kubectl get nodes -o yaml | grep address - addresses: - - address: 10.192.0.2 - - address: kube-master - addresses: - - address: 10.192.0.3 - - address: kube-node-1 - addresses: - - address: 10.192.0.4 - - address: kube-node-2 - addresses: - - address: 10.192.0.5 - - address: kube-node-3 - ``` - - Use the IP addresses for reverse proxy. - - 3. Set up a reverse proxy. - - Either (or all) of the container IPs can be used as upstream for a reverse proxy. You can use any reverse proxy server that supports TCP (for TiDB) or HTTP (for Grafana and Prometheus) to provide remote access. HAProxy and NGINX are two common choices. - -## Scale the TiDB cluster - -You can scale out or scale in the TiDB cluster simply by modifying the number of `replicas`. - -1. Edit the `charts/tidb-cluster/values.yaml` file with your preferred text editor. - - For example, to scale out the cluster, you can modify the number of TiKV `replicas` from 3 to 5, or the number of TiDB `replicas` from 2 to 3. - -2. Run the following command to apply the changes: - - ```sh - helm upgrade demo charts/tidb-cluster --namespace=tidb - ``` - -> **Note:** If you need to scale in TiKV, the consumed time depends on the volume of your existing data, because the data needs to be migrated safely. - -Use `kubectl get pod -n tidb` to verify the number of each compoments equal to values in the `charts/tidb-cluster/values.yaml` file, and all pods are in `Running` state. - -## Upgrade the TiDB cluster - -1. Edit the `charts/tidb-cluster/values.yaml` file with your preferred text editor. - - For example, change the version of PD/TiKV/TiDB `image` to `v3.0.1`. - -2. Run the following command to apply the changes: - - ```sh - helm upgrade demo charts/tidb-cluster --namespace=tidb - ``` - -Use `kubectl get pod -n tidb` to verify that all pods are in `Running` state. Then you can connect to the database and use `tidb_version()` function to verify the version: - -```sh -MySQL [(none)]> select tidb_version(); -*************************** 1. row *************************** -tidb_version(): Release Version: v3.0.1 -Git Commit Hash: 06f3f63d5a87e7f0436c0618cf524fea7172eb93 -Git Branch: HEAD -UTC Build Time: 2019-05-28 12:48:52 -GoVersion: go version go1.12 linux/amd64 -Race Enabled: false -TiKV Min Version: 2.1.0-alpha.1-ff3dd160846b7d1aed9079c389fc188f7f5ea13e -Check Table Before Drop: false -1 row in set (0.001 sec) -``` - -## Destroy the TiDB cluster - -When you are done with your test, use the following command to destroy the TiDB cluster: - -```sh -$ helm delete demo --purge -``` - -> **Note:** This only deletes the running pods and other resources, the data is persisted. - -If you do not need the data anymore, run the following commands to clean up the data. (Be careful, this permanently deletes the data). - -```sh -$ kubectl get pv -l app.kubernetes.io/namespace=tidb -o name | xargs -I {} kubectl patch {} -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}' -$ kubectl delete pvc --namespace tidb --all -``` - -## Stop and Re-start the Kubernetes cluster - -* If you want to stop the DinD Kubernetes cluster, run the following command: - - ```sh - $ manifests/local-dind/dind-cluster-v1.12.sh stop - ``` - - You can use `docker ps` to verify that there is no docker container running. - -* If you want to restart the DinD Kubernetes after you stop it, run the following command: - - ``` - $ manifests/local-dind/dind-cluster-v1.12.sh start - ``` - -## Destroy the DinD Kubernetes cluster - -If you want to clean up the DinD Kubernetes cluster, run the following commands: - -```sh -$ manifests/local-dind/dind-cluster-v1.12.sh clean -$ sudo rm -rf data/kube-node-* -``` - -> **Warning:** You must clean the data after you destroy the DinD Kubernetes cluster, otherwise the TiDB cluster would fail to start when you try to bring a new cluster up again. +This document has been moved to [https://pingcap.com/docs/v3.0/tidb-in-kubernetes/get-started/deploy-tidb-from-kubernetes-dind/](https://pingcap.com/docs/v3.0/tidb-in-kubernetes/get-started/deploy-tidb-from-kubernetes-dind/). diff --git a/docs/minikube-tutorial.md b/docs/minikube-tutorial.md index 2c29624fbf..ad83e13dbe 100644 --- a/docs/minikube-tutorial.md +++ b/docs/minikube-tutorial.md @@ -1,245 +1,3 @@ # Deploy TiDB in the minikube cluster -This document describes how to deploy a TiDB cluster in the [minikube](https://kubernetes.io/docs/setup/minikube/) cluster. - -## Table of Contents - -- [Start a Kubernetes cluster with minikube](#start-a-kubernetes-cluster-with-minikube) - * [What is minikube?](#what-is-minikube) - * [Install minikube and start a Kubernetes cluster](#install-minikube-and-start-a-kubernetes-cluster) - * [Install kubectl to access the cluster](#install-kubectl-to-access-the-cluster) -- [Install TiDB operator and run a TiDB cluster with it](#install-tidb-operator-and-run-a-tidb-cluster-with-it) - * [Install helm](#install-helm) version >= 2.9.0 and < 3.0.0 - * [Install TiDB operator in the Kubernetes cluster](#install-tidb-operator-in-the-kubernetes-cluster) - * [Launch a TiDB cluster](#launch-a-tidb-cluster) - * [Test TiDB cluster](#test-tidb-cluster) - * [Monitor TiDB cluster](#monitor-tidb-cluster) - * [Delete TiDB cluster](#delete-tidb-cluster) -- [FAQs](#faqs) - * [TiDB cluster in minikube is not responding or responds slow](#tidb-cluster-in-minikube-is-not-responding-or-responds-slow) - -## Start a Kubernetes cluster with minikube - -### What is minikube? - -[Minikube](https://kubernetes.io/docs/setup/minikube/) can start a local -Kubernetes cluster inside a VM on your laptop. It works on macOS, Linux, and -Windows. - -> **Note:** -> -> Although Minikube supports `--vm-driver=none` that uses host docker instead of VM, it is not fully tested with TiDB Operator and may not work. If you want to try TiDB Operator on a system without virtualization support (e.g., on a VPS), you may consider using [DinD](local-dind-tutorial.md) instead. - -### Install minikube and start a Kubernetes cluster - -See [Installing Minikube](https://kubernetes.io/docs/tasks/tools/install-minikube/) to install -minikube (1.0.0+) on your machine. - -After you installed minikube, you can run the following command to start a -Kubernetes cluster. - -``` -minikube start -``` - -For Chinese mainland users, you may use local gcr.io mirrors such as -`registry.cn-hangzhou.aliyuncs.com/google_containers`. - -``` -minikube start --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers -``` - -or configure HTTP/HTTPS proxy environments in your docker, e.g. - -``` -# change 127.0.0.1:1086 to your http/https proxy server IP:PORT -minikube start --docker-env https_proxy=http://127.0.0.1:1086 \ - --docker-env http_proxy=http://127.0.0.1:1086 -``` - -> **Note:** -> -> As minikube is running with VMs (default), the `127.0.0.1` is the VM itself, you might want to use your real IP address of the host machine in some cases. - -See [minikube setup](https://kubernetes.io/docs/setup/minikube/) for more options to -configure your virtual machine and Kubernetes cluster. - -### Install kubectl to access the cluster - -The Kubernetes command-line tool, -[kubectl](https://kubernetes.io/docs/user-guide/kubectl/), allows you to run -commands against Kubernetes clusters. - -Install kubectl according to the instructions in [Install and Set Up kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/). - -After kubectl is installed, test your minikube Kubernetes cluster: - -``` -kubectl cluster-info -``` - -## Install TiDB operator and run a TiDB cluster with it - -### Install helm - -Helm is the package manager for Kubernetes and is what allows us to install all of the distributed components of TiDB in a single step. Helm requires both a server-side and a client-side component to be installed. - -``` -curl https://raw.githubusercontent.com/helm/helm/master/scripts/get | bash -``` - -Install helm tiller: - -``` -helm init -``` - -If you have limited access to gcr.io, you can try a mirror, e.g. - -``` -helm init --upgrade --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:$(helm version --client --short | grep -P -o 'v\d+\.\d+\.\d') -``` - -Once it is installed, running `helm version` should show you both the client -and server version, e.g. - -``` -$ helm version -Client: &version.Version{SemVer:"v2.13.1", -GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"} -Server: &version.Version{SemVer:"v2.13.1", -GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"} -``` - -If it shows only the client version, `helm` cannot yet connect to the server. Use -`kubectl` to see if any tiller pods are running. - -``` -kubectl -n kube-system get pods -l app=helm -``` - -### Install TiDB operator in the Kubernetes cluster - -Clone tidb-operator repository: - -``` -git clone --depth=1 https://github.com/pingcap/tidb-operator -cd tidb-operator -kubectl apply -f ./manifests/crd.yaml -helm install charts/tidb-operator --name tidb-operator --namespace tidb-admin -``` - -Now, we can watch the operator come up with: - -``` -kubectl get pods --namespace tidb-admin -o wide --watch -``` -> **Note:** -> -> For Mac OS, if you are prompted "watch: command not found", you need to install the `watch` command using `brew install watch`. The same applies to other `watch` commands in this document. - -If you have limited access to gcr.io (pods failed with ErrImagePull), you can -try a mirror of kube-scheduler image. You can upgrade tidb-operator like this: - -``` -helm upgrade tidb-operator charts/tidb-operator --namespace tidb-admin --set \ - scheduler.kubeSchedulerImageName=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler -``` - -When you see both tidb-scheduler and tidb-controller-manager are running, you -can process to launch a TiDB cluster! - -### Launch a TiDB cluster - -To launch a TiDB cluster, use the following command: - -``` -helm install charts/tidb-cluster --name demo --set \ - schedulerName=default-scheduler,pd.storageClassName=standard,tikv.storageClassName=standard,pd.replicas=1,tikv.replicas=1,tidb.replicas=1 -``` - -You can watch the cluster up and running using: - -``` -kubectl get pods --namespace default -l app.kubernetes.io/instance=demo -o wide --watch -``` - -Use Ctrl+C to quit the watch mode. - -### Test TiDB cluster - -Before you start testing your TiDB cluster, make sure you have installed a MySQL client. Note that there can be a small delay between the time when the pod is up and running, and when the service -is available. You can watch the list of available services with: - -``` -kubectl get svc --watch -``` - -When you see `demo-tidb` appear, it's ready to connect to TiDB server. - -To connect your MySQL client to the TiDB server, take the following steps: - -1. Forward a local port to the TiDB port. - -``` -kubectl port-forward svc/demo-tidb 4000:4000 -``` - -2. In another terminal window, connect the TiDB server with a MySQL client: - -``` -mysql -h 127.0.0.1 -P 4000 -uroot -``` - -Or you can run a SQL command directly: - -``` -mysql -h 127.0.0.1 -P 4000 -uroot -e 'select tidb_version();' -``` - -### Monitor TiDB cluster - -To monitor the status of the TiDB cluster, take the following steps. - -1. Forward a local port to the Grafana port. - -``` -kubectl port-forward svc/demo-grafana 3000:3000 -``` - -2. Open your browser, and access Grafana at `http://localhost:3000`. - -Alternatively, Minikube provides `minikube service` that exposes Grafana as a service for you to access more conveniently. - -``` -minikube service demo-grafana -``` - -And it will automatically set up the proxy and open the browser for Grafana. - -### Delete TiDB cluster - -Use the following commands to delete the demo cluster: - -``` -helm delete --purge demo - -# update reclaim policy of PVs used by demo to Delete -kubectl get pv -l app.kubernetes.io/instance=demo -o name | xargs -I {} kubectl patch {} -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}' - -# delete PVCs -kubectl delete pvc -l app.kubernetes.io/managed-by=tidb-operator -``` - -## FAQs - -### TiDB cluster in minikube is not responding or responds slow - -The minikube VM is configured by default to only use 2048MB of memory and 2 -CPUs. You can allocate more resources during `minikube start` using the `--memory` and `--cpus` flag. -Note that you'll need to recreate minikube VM for this to take effect. - -``` -minikube delete -minikube start --cpus 4 --memory 4096 ... -``` +This document has been moved to [https://pingcap.com/docs/v3.0/tidb-in-kubernetes/get-started/deploy-tidb-from-kubernetes-minikube/](https://pingcap.com/docs/v3.0/tidb-in-kubernetes/get-started/deploy-tidb-from-kubernetes-minikube/). diff --git a/docs/operation-guide.md b/docs/operation-guide.md index 80a0bc130a..4e6c9ac682 100644 --- a/docs/operation-guide.md +++ b/docs/operation-guide.md @@ -1,249 +1,3 @@ # TiDB Cluster Operation Guide -TiDB Operator can manage multiple clusters in the same Kubernetes cluster. - -The following variables will be used in the rest of the document: - -```shell -$ releaseName="demo" -$ namespace="tidb" -``` - -> **Note:** The rest of the document will use `values.yaml` to reference `charts/tidb-cluster/values.yaml` - -## Configuration - -TiDB Operator uses `values.yaml` as TiDB cluster configuration file. It provides the default basic configuration which you can use directly for quick deployment, but if you have specific configuration requirements or for production deployment, you need to manually modify the variables in the `values.yaml` file. - -* Resource setting - - * CPU & Memory - - The default deployment doesn't set CPU and memory requests or limits for any of the pods, these settings can make TiDB cluster run on a small Kubernetes cluster like DinD or the default GKE cluster for testing. But for production deployment, you would likely to adjust the cpu, memory and storage resources according to the [recommendations](https://pingcap.com/docs/dev/how-to/deploy/hardware-recommendations/#software-and-hardware-recommendations). - - The resource limits should be equal or bigger than the resource requests, it is suggested to set limit and request equal to get [`Guaranteed` QoS]( https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/#create-a-pod-that-gets-assigned-a-qos-class-of-guaranteed). - - * Storage - - The variables `pd.storageClassName` and `tikv.storageClassName` in `values.yaml` are used to set `StorageClass` of PD and TiKV,their default setting are `local-storage` with minimal size. - - If you don't want to use the default `StorageClass` or your Kubernetes cluster does not support `local-storage` class, please execute the following command to find an available `StorageClass` and select the ones you want to provide to TiDB cluster. - - ```shell - $ kubectl get sc - ``` - -* Disaster Tolerance setting - - TiDB is a distributed database. Its disaster tolerance means that when any physical node failed, not only to ensure TiDB server is available, but also ensure the data is complete and available. - - How to guarantee Disaster Tolerance of TiDB cluster on Kubernetes? - - We mainly solve the problem from the scheduling of services and data. - - * Disaster Tolerance of TiDB instance - - TiDB Operator provides an extended scheduler to guarantee PD/TiKV/TiDB instance disaster tolerance on host level. TiDB Cluster has set the extended scheduler as default scheduler, you will find the setting in the variable `schedulerName` of `values.yaml`. - - In the other hand use `PodAntiAffinity` term of `affinity` to ensure disaster tolerance on the other topology levels (e.g. rack, zone, region). - refer to the doc: [pod affnity & anti affinity](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#inter-pod-affinity-and-anti-affinity-beta-feature), moreover `values.yaml` also provides a typical disaster tolerance setting example in the comments of `pd.affinity`. - - * Disaster Tolerance of data - - Disaster tolerance of data is guaranteed by TiDB Cluster itself. The only work Operator needs to do is that collects topology info from specific labels of Kubernetes nodes where TiKV Pod runs on and then PD will schedule data replicas auto according to the topology info. - Because current TiDB Operator can only recognize some specific labels, so you can only set nodes topology info with the following particular labels - - * `region`: region where node is located - * `zone`: zone where node is located - * `rack`: rack where node is located - * `kubernetes.io/hostname`: hostname of the node - - you need label topology info to nodes of Kubernetes cluster use the following command - ```shell - # Not all tags are required - $ kubectl label node region= zone= rack= kubernetes.io/hostname= - ``` - -For other settings, the variables in `values.yaml` are self-explanatory with comments. You can modify them according to your need before installing the charts. - - -## GKE - -On GKE, local SSD volumes by default are limited to 375 GiB size and can perform sub-optimally. - -For proper performance, you must: - -* make sure SSD is mounted with the `nobarrier` option (it is not on COS) - -We have a [daemonset](../manifests/gke/local-ssd-provision.yaml) that -* fixes any performance issues -* remounts local SSD disks with a UUID for safety and ensures that the nobarrier option is set -* combines all local SSD disks into one large disk with lvm tools. -* Run the local-volume-provisioner - -The terraform deployment will automatically install that. - -> **Note**: On Ubuntu this setup that combines local SSD assumes you are running only one process that needs local SSD per VM. - - -## Deploy TiDB cluster - -After TiDB Operator and Helm are deployed correctly and configuration completed, TiDB cluster can be deployed using following command: - -```shell -$ helm install charts/tidb-cluster --name=${releaseName} --namespace=${namespace} -$ kubectl get po -n ${namespace} -l app.kubernetes.io/instance=${releaseName} -``` - -## Access TiDB cluster - -By default TiDB service is exposed using [`NodePort`](https://kubernetes.io/docs/concepts/services-networking/service/#nodeport). You can modify it to `ClusterIP` which will disable access from outside of the cluster. Or modify it to [`LoadBalancer`](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer) if the underlining Kubernetes supports this kind of service. - -```shell -$ kubectl get svc -n ${namespace} # check the available services -``` - -By default the TiDB cluster has no root password set. Setting a password in helm is insecure. Instead you can set the name of a K8s secret as `tidb.passwordSecretName` in `values.yaml`. Note that this is only used to initialize users: once your tidb cluster is initialized you may delete the secret. The format of the secret is `user=password`, so you can set the root user password with: - -``` -kubectl create namespace ${namespace} -kubectl create secret generic tidb-secret --from-literal=root= --namespace=${namespace} -``` - -You can retrieve the password from the initialization `Secret`: - -```shell -$ PASSWORD=$(kubectl get secret -n ${namespace} tidb-secret -ojsonpath="{.data.root}" | base64 --decode) -$ echo ${PASSWORD} -``` - -* Access inside of the Kubernetes cluster - - When your application is deployed in the same Kubernetes cluster, you can access TiDB via domain name `demo-tidb.tidb.svc` with port `4000`. Here `demo` is the `releaseName`. And the latter `tidb` is the namespace you specified when using `helm install` to deploy TiDB cluster. - -* Access outside of the Kubernetes cluster - - * Using kubectl portforward - - ```shell - $ kubectl port-forward -n ${namespace} svc/${releaseName}-tidb 4000:4000 &>/tmp/portforward-tidb.log - $ mysql -h 127.0.0.1 -P 4000 -u root -p - ``` - - * Using LoadBalancer - - When you set `tidb.service.type` to `LoadBalancer` and the underlining Kubernetes support LoadBalancer, then a LoadBalancer will be created for TiDB service. You can access it via the external IP with port `4000`. Some cloud platforms support internal load balancer via service annotations, for example you can add annotation `cloud.google.com/load-balancer-type: Internal` to `tidb.service.annotations` to create an internal load balancer for TiDB on GKE. - - * Using NodePort - - You can access TiDB via any node's IP with tidb service node port. The node port is the port after `4000`, usually greater than `30000`. - -## Scale TiDB cluster - -TiDB Operator supports both horizontal and vertical scaling, but there are some caveats for storage vertical scaling. - -* Kubernetes is v1.11 or later, please reference [the official blog](https://kubernetes.io/blog/2018/07/12/resizing-persistent-volumes-using-kubernetes/) -* Backend storage class supports resizing. (Currently only a limited of network storage class supports resizing) - -When using local persistent volumes, even CPU and memory vertical scaling can cause problems because there may be not enough resources on the node. - -Due to the above reasons, it's recommended to do horizontal scaling other than vertical scaling when workload increases. - -### Horizontal scaling - -To scale in/out TiDB cluster, just modify the `replicas` of PD, TiKV and TiDB in `values.yaml` file. And then run the following command: - -```shell -$ helm upgrade ${releaseName} charts/tidb-cluster -``` - -### Vertical scaling - -To scale up/down TiDB cluster, modify the cpu/memory/storage limits and requests of PD, TiKV and TiDB in `values.yaml` file. And then run the same command as above. - -> **Note**: See the above caveats of vertical scaling. Before [#35](https://github.com/pingcap/tidb-operator/issues/35) is fixed, you have to manually configure the block cache size for TiKV in charts/tidb-cluster/templates/config/_tikv-config.tpl - -## Upgrade TiDB cluster - -Upgrade TiDB cluster is similar to scale TiDB cluster, but by changing `image` of PD, TiKV and TiDB to different image versions in `values.yaml`. And then run the following command: - -```shell -$ helm upgrade ${releaseName} charts/tidb-cluster -``` - -For minor version upgrade, updating the `image` should be enough. When TiDB major version is out, the better way to update is to fetch the new charts from tidb-operator and then merge the old values.yaml with new values.yaml. And then upgrade as above. - -## Change TiDB cluster Configuration - -Since `v1.0.0`, TiDB operator can perform rolling-update on configuration updates. This feature is disabled by default in favor of backward compatibility, you can enable it by setting `enableConfigMapRollout` to `true` in your helm values file. - -> **Note**: currently, changing PD's `scheduler` and `replication` configurations(`maxStoreDownTime` and `maxReplicas` in `values.yaml`, and all the configuration key under `[scheduler]` and `[replication]` section if you override the pd config file) after cluster creation has no effect. You have to configure these variables via `pd-ctl` after the cluster creation, see: [pd-ctl](https://pingcap.com/docs/dev/reference/tools/pd-control/) - -> WARN: changing this variable against a running cluster will trigger an rolling-update of PD/TiKV/TiDB pods even if there's no configuration change. - -## Destroy TiDB cluster - -To destroy TiDB cluster, run the following command: - -```shell -$ helm delete ${releaseName} --purge -``` - -The above command only delete the running pods, the data is persistent. If you do not need the data anymore, you can run the following command to clean the data: - -```shell -$ kubectl delete pvc -n ${namespace} -l app.kubernetes.io/instance=${releaseName},app.kubernetes.io/managed-by=tidb-operator -$ kubectl get pv -l app.kubernetes.io/namespace=${namespace},app.kubernetes.io/managed-by=tidb-operator,app.kubernetes.io/instance=${releaseName} -o name | xargs -I {} kubectl patch {} -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}' -``` - -> **Note:** the above command will delete the data permanently. Think twice before executing them. - - -## Monitor - -TiDB cluster is monitored with Prometheus and Grafana. When TiDB cluster is created, a Prometheus and Grafana pod will be created and configured to scrape and visualize metrics. - -By default the monitor data is not persistent, when the monitor pod is killed for some reason, the data will be lost. This can be avoided by specifying `monitor.persistent` to `true` in `values.yaml` file. - -You can view the dashboard using `kubectl portforward`: - -```shell -$ kubectl port-forward -n ${namespace} svc/${releaseName}-grafana 3000:3000 &>/tmp/portforward-grafana.log -``` - -Then open your browser at http://localhost:3000 The default username and password are both `admin` - -The Grafana service is exposed as `NodePort` by default, you can change it to `LoadBalancer` if the underlining Kubernetes has load balancer support. And then view the dashboard via load balancer endpoint. - -### View TiDB Slow Query Log - -For default setup, tidb is configured to export slow query log to STDOUT along with normal server logs. You can obtain the slow query log by `grep` the keyword `SLOW_QUERY`: - -```shell -$ kubectl logs -n ${namespace} ${tidbPodName} | grep SLOW_QUERY -``` - -Optionally, you can output slow query log in a separate sidecar by enabling `separateSlowLog`: - -```yaml -# Uncomment the following line to enable separate output of the slow query log - # separateSlowLog: true -``` - -Run `helm upgrade` to apply the change, then you can obtain the slow query log from the sidecar named `slowlog`: - -```shell -$ kubectl logs -n ${namespace} ${tidbPodName} -c slowlog -``` - -To retrieve logs from multiple pods, [`stern`](https://github.com/wercker/stern) is recommended. - -```shell -$ stern -n ${namespace} tidb -c slowlog -``` - -## Backup and restore - -TiDB Operator provides highly automated backup and recovery operations for a TiDB cluster. You can easily take full backup or setup incremental backup of a TiDB cluster, and restore the TiDB cluster when the cluster fails. - -For detailed operation guides of backup and restore, refer to [Backup and Restore TiDB Cluster](./backup-restore.md). +This document has been moved to [https://pingcap.com/docs/v3.0/tidb-in-kubernetes/tidb-operator-overview/](https://pingcap.com/docs/v3.0/tidb-in-kubernetes/tidb-operator-overview/). diff --git a/docs/references/tidb-backup-configuration.md b/docs/references/tidb-backup-configuration.md index 426427b0f8..29a582219b 100644 --- a/docs/references/tidb-backup-configuration.md +++ b/docs/references/tidb-backup-configuration.md @@ -1,80 +1,3 @@ # TiDB Backup Configuration Reference -`TiDB-Backup` is a helm chart designed for TiDB cluster backup and restore via the [`mydumper`](https://www.pingcap.com/docs/dev/reference/tools/mydumper/) and [`loader`](https://www.pingcap.com/docs-cn/tools/loader/). This documentation explains `TiDB-Backup` configuration. Refer to [Restore and Backup TiDB cluster](#tidb-backup-configuration-reference) for user guide with example. - -## Configuration - -### `mode` - -- To choose the operation, backup or restore, required -- Default: "backup" - -### `clusterName` - -- The name of the TiDB cluster that data is backed up from or restore to, required -- Default: "demo" - -### `name` - -- The backup name -- Default: "fullbackup-${date}", date is the start time of backup, accurate to minute - -### `secretName` - -- The name of the secret which stores user and password used for backup/restore -- Default: "backup-secret" -- You can create the secret by `kubectl create secret generic backup-secret -n ${namespace} --from-literal=user=root --from-literal=password=` - -### `storage.className` - -- The storageClass used to store the backup data -- Default: "local-storage" - -### `storage.size` - -- The storage size of PersistenceVolume -- Default: "100Gi" - -### `backupOptions` - -- The options that are passed to [`mydumper`](https://github.com/maxbube/mydumper/blob/master/docs/mydumper_usage.rst#options) -- Default: "--chunk-filesize=100" - -### `restoreOptions` - -- The options that are passed to [`loader`](https://www.pingcap.com/docs-cn/tools/loader/) -- Default: "-t 16" - -### `gcp.bucket` - -- The name of the GCP bucket used to store backup data - -> **Note:** - -> Once you set any variables under `gcp` section, the backup data will be uploaded to Google Cloud Storage, namely, you have to keep the configuration intact. - -### `gcp.secretName` - -- The name of the secret which stores the gcp service account credentials json file -- You can create the secret by `kubectl create secret generic gcp-backup-secret -n ${namespace} --from-file=./credentials.json`. To download credentials json, refer to [Google Cloud Documentation](https://cloud.google.com/docs/authentication/production#obtaining_and_providing_service_account_credentials_manually) - -### `ceph.endpoint` - -- The endpoint of ceph object storage - -> **Note:** - -> Once you set any variables under `ceph` section, the backup data will be uploaded to ceph object storage, namely, you have to keep the configuration intact. - -### `ceph.bucket` - -- The bucket name of ceph object storage - -### `ceph.secretName` - -- The name of the secret which stores ceph object store access key and secret key -- You can create the secret by: - - ```shell - $ kubectl create secret generic ceph-backup-secret -n ${namespace} --from-literal=access_key= --from-literal=secret_key= - ``` +This document has been moved to [https://pingcap.com/docs/v3.0/tidb-in-kubernetes/reference/configuration/backup/](https://pingcap.com/docs/v3.0/tidb-in-kubernetes/reference/configuration/backup/). diff --git a/docs/setup.md b/docs/setup.md index cdc1024e82..447daaf457 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -1,136 +1,3 @@ # TiDB Operator Setup -## Requirements - -Before deploying the TiDB Operator, make sure the following requirements are satisfied: - -* Kubernetes v1.10 or greater -* [DNS addons](https://kubernetes.io/docs/tasks/access-application-cluster/configure-dns-cluster/) -* [PersistentVolume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) -* [RBAC](https://kubernetes.io/docs/admin/authorization/rbac) enabled (optional) -* [Helm](https://helm.sh) version >= v2.8.2 and < v3.0.0 -* Kubernetes v1.12 is required for zone-aware persistent volumes. - -> **Note:** Allthough TiDB Operator can use network volume to persist TiDB data, this is slower due to redundant replication. It is highly recommended to set up [local volume](https://kubernetes.io/docs/concepts/storage/volumes/#local) for better performance. - -> **Note:** Network volumes in a multi availability zone setup require Kubernetes v1.12 or greater. We do recommend using networked volumes for backup in the tidb-bakup chart. - -## Kubernetes - -TiDB Operator runs on top of Kubernetes cluster, you can use one of the methods listed [here](https://kubernetes.io/docs/setup/pick-right-solution/) to set up a Kubernetes cluster. Just make sure the Kubernetes cluster version is equal or greater than v1.10. If you want to use AWS, GKE or local machine, there are quick start tutorials: - -* [Local DinD tutorial](./local-dind-tutorial.md) -* [Google GKE tutorial](./google-kubernetes-tutorial.md) -* [AWS EKS tutorial](./aws-eks-tutorial.md) - -If you want to use a different envirnoment, a proper DNS addon must be installed in the Kubernetes cluster. You can follow the [official documentation](https://kubernetes.io/docs/tasks/access-application-cluster/configure-dns-cluster/) to set up a DNS addon. - -TiDB Operator uses [PersistentVolume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) to persist TiDB cluster data (including the database, monitor data, backup data), so the Kubernetes must provide at least one kind of persistent volume. To achieve better performance, local SSD disk persistent volume is recommended. You can follow [this step](#local-persistent-volume) to auto provisioning local persistent volumes. - -The Kubernetes cluster is suggested to enable [RBAC](https://kubernetes.io/docs/admin/authorization/rbac). Otherwise you may want to set `rbac.create` to `false` in the values.yaml of both tidb-operator and tidb-cluster charts. - -Because TiDB by default will use lots of file descriptors, the [worker node](https://access.redhat.com/solutions/61334) and its Docker daemon's ulimit must be configured to greater than 1048576: - -```shell -$ sudo vim /etc/systemd/system/docker.service -``` - -Set `LimitNOFILE` to equal or greater than 1048576. - -Otherwise you have to change TiKV's `max-open-files` to match your work node `ulimit -n` in the configuration file `charts/tidb-cluster/templates/config/_tikv-config.tpl`, but this will impact TiDB performance. - -## Helm - -You can follow Helm official [documentation](https://helm.sh) to install Helm in your Kubernetes cluster. The following instructions are listed here for quick reference: - -1. Install helm client - - ``` - $ curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash - ``` - - Or if you use macOS, you can use homebrew to install Helm by `brew install kubernetes-helm` - -2. Install helm server - - ```shell - $ kubectl apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/manifests/tiller-rbac.yaml - $ helm init --service-account=tiller --upgrade - $ kubectl get po -n kube-system -l name=tiller # make sure tiller pod is running - ``` - - If `RBAC` is not enabled for the Kubernetes cluster, then `helm init --upgrade` should be enough. - -## Local Persistent Volume - -### Prepare local volumes - -See the [operations guide in sig-storage-local-static-provisioner](https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/docs/operations.md) which explains setup and cleanup of local volumes on the nodes. - -It also provides some [best practices](https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/docs/best-practices.md) for production. - -### Deploy local-static-provisioner - -After mounting all data disks on Kubernetes nodes, you can deploy [local-volume-provisioner](https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner) to automatically provision the mounted disks as Local PersistentVolumes. - -```shell -$ kubectl apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/manifests/local-dind/local-volume-provisioner.yaml -$ kubectl get po -n kube-system -l app=local-volume-provisioner -$ kubectl get pv | grep local-storage -``` - -The local-volume-provisioner creates a volume for each mounted disk. Note that for example on GKE this will create local volumes only of size 375GiB and that you need to manually alter the setup to create larger disks. - -## Install TiDB Operator - -TiDB Operator uses [CRD](https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/) to extend Kubernetes, so to use TiDB Operator, you should first create `TidbCluster` custom resource kind. This is a one-time job, namely you can only need to do this once in your Kubernetes cluster. - -```shell -$ kubectl apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/manifests/crd.yaml -$ kubectl get crd tidbclusters.pingcap.com -``` - -After the `TidbCluster` custom resource is created, you can install TiDB Operator in your Kubernetes cluster. - -Uncomment the `scheduler.kubeSchedulerImage` in `values.yaml`, set it to the same as your kubernetes cluster version. - -```shell -$ git clone https://github.com/pingcap/tidb-operator.git -$ cd tidb-operator -$ helm install charts/tidb-operator --name=tidb-operator --namespace=tidb-admin -$ kubectl get po -n tidb-admin -l app.kubernetes.io/name=tidb-operator -``` - -## Custom TiDB Operator - -Customizing is done by modifying `charts/tidb-operator/values.yaml`. The rest of the document will use `values.yaml` to reference `charts/tidb-operator/values.yaml` - -TiDB Operator contains two components: - -* tidb-controller-manager -* tidb-scheduler - -This two components are stateless, so they are deployed via `Deployment`. You can customize the `replicas` and resource limits/requests as you wish in the values.yaml. - -After editing values.yaml, run the following command to apply the modification: - -```shell -$ helm upgrade tidb-operator charts/tidb-operator -``` - -## Upgrade TiDB Operator - -Upgrading TiDB Operator itself is similar to customize TiDB Operator, modify the image version in values.yaml and then run `helm upgrade`: - -```shell -$ helm upgrade tidb-operator charts/tidb-operator -``` - -When a new version of tidb-operator comes out, simply update the `operatorImage` in values.yaml and run the above command should be enough. But for safety reasons, you should get the new charts from tidb-operator repo and merge the old values.yaml with new values.yaml. And then upgrade as above. - -TiDB Operator is for TiDB cluster maintenance, what this means is that when TiDB cluster is up and running, you can just stop TiDB Operator and TiDB cluster still works well unless you need to do TiDB cluster maintenance like scaling, upgrading etc. - -## Upgrade Kubernetes - -When you have a major version change of Kubernetes, you need to make sure that the kubeSchedulerImageTag matches it. By default, this value is generated by helm during install/upgrade so you need to perform a helm upgrade to reset it. - +This document has been moved to [https://pingcap.com/docs/v3.0/tidb-in-kubernetes/deploy/tidb-operator/](https://pingcap.com/docs/v3.0/tidb-in-kubernetes/deploy/tidb-operator/). diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index 10364e2982..795fa932f2 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -1,26 +1,3 @@ # Troubleshooting -## Some pods are pending for a long time - -When a pod is pending, it means the required resources are not satisfied. The most common cases are: - -* CPU, memory or storage insufficient - - Check the detail info of the pod by: - - ```shell - $ kubectl describe po -n - ``` - - When this happens, either reduce the resource requests of the TiDB cluster and then using `helm` to upgrade the cluster. If the storage request is larger than any of the available volumes, you have to delete the pod and corresponding pending PVC. - -* Storage class not exist or no PV available - - You can check this by: - - ```shell - $ kubectl get pvc -n - $ kubectl get pv | grep | grep Available - ``` - - When this happens, you can change the `storageClassName` and then using `helm` to upgrade the cluster. After that, delete the pending pods and the corresponding pending PVC and waiting new pod and pvc to be created. +This document has been moved to [https://pingcap.com/docs/v3.0/tidb-in-kubernetes/troubleshoot/](https://pingcap.com/docs/v3.0/tidb-in-kubernetes/troubleshoot/). diff --git a/docs/user-guide.md b/docs/user-guide.md index bcd36441b0..1e4632e7b9 100644 --- a/docs/user-guide.md +++ b/docs/user-guide.md @@ -1,13 +1,3 @@ # TiDB Operator User Guide -For quick start, please reference one of the following tutorials: - -* [Local DinD tutorial](./local-dind-tutorial.md) -* [Google GKE tutorial](./google-kubernetes-tutorial.md) -* [AWS EKS tutorial](./aws-eks-tutorial.md) - -If you are already familiar with [Kubernetes](https://kubernetes.io) and [TiDB](https://pingcap.com/docs), the following docs can be helpful for managing TiDB clusters with TiDB Operator - -* [TiDB Operator Setup](./setup.md) -* [TiDB Cluster Operation Guide](./operation-guide.md) -* [Troubleshooting](./troubleshooting.md) +This document has been moved to [https://pingcap.com/docs/v3.0/tidb-in-kubernetes/tidb-operator-overview/](https://pingcap.com/docs/v3.0/tidb-in-kubernetes/tidb-operator-overview/). diff --git a/static/tidb-operator-overview.png b/static/tidb-operator-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..7a74eb04688ed83b820c9ce8fdd5205e9ced01b4 GIT binary patch literal 187509 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

K5#9G>fJweJ8Z9KWk7=;kD@eYg{NCnqO4?y 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 tPX7nPe_sausbl^h41Y77|9^zx>;