基于k8s安装TiDB4.0集群
作者:周万春
微信:lovemysql3306
1、导入需要的镜像(所有节点)
(1).联网环境镜像 pull 地址
docker pull pingcap/pd:v4.0.8
docker pull pingcap/tikv:v4.0.8
docker pull pingcap/tidb:v4.0.8
docker pull pingcap/tidb-binlog:v4.0.8
docker pull pingcap/ticdc:v4.0.8
docker pull pingcap/tiflash:v4.0.8
docker pull pingcap/tidb-monitor-reloader:v1.0.1
docker pull pingcap/tidb-monitor-initializer:v4.0.8
docker pull grafana/grafana:6.0.1
docker pull prom/prometheus:v2.18.1
docker pull busybox:1.26.2
docker pull quay.io/external_storage/local-volume-provisioner:v2.3.4
docker pull pingcap/tidb-operator:v1.1.7
docker pull pingcap/tidb-backup-manager:v1.1.7
docker pull bitnami/kubectl:latest
docker pull pingcap/advanced-statefulset:v0.3.3
(2).导出镜像
docker save -o local-volume-provisioner-v2.3.4.tar quay.io/external_storage/local-volume-provisioner:v2.3.4
docker save -o tidb-operator-v1.1.7.tar pingcap/tidb-operator:v1.1.7
docker save -o tidb-backup-manager-v1.1.7.tar pingcap/tidb-backup-manager:v1.1.7
docker save -o bitnami-kubectl.tar bitnami/kubectl:latest
docker save -o advanced-statefulset-v0.3.3.tar pingcap/advanced-statefulset:v0.3.3
docker save -o pd-v4.0.8.tar pingcap/pd:v4.0.8
docker save -o tikv-v4.0.8.tar pingcap/tikv:v4.0.8
docker save -o tidb-v4.0.8.tar pingcap/tidb:v4.0.8
docker save -o tidb-binlog-v4.0.8.tar pingcap/tidb-binlog:v4.0.8
docker save -o ticdc-v4.0.8.tar pingcap/ticdc:v4.0.8
docker save -o tiflash-v4.0.8.tar pingcap/tiflash:v4.0.8
docker save -o tidb-monitor-reloader-v1.0.1.tar pingcap/tidb-monitor-reloader:v1.0.1
docker save -o tidb-monitor-initializer-v4.0.8.tar pingcap/tidb-monitor-initializer:v4.0.8
docker save -o grafana-6.0.1.tar grafana/grafana:6.0.1
docker save -o prometheus-v2.18.1.tar prom/prometheus:v2.18.1
docker save -o busybox-1.26.2.tar busybox:1.26.2
(3).导入镜像
docker load -i advanced-statefulset-v0.3.3.tar
docker load -i bitnami-kubectl.tar
docker load -i busybox-1.26.2.tar
docker load -i grafana-6.0.1.tar
docker load -i kube-scheduler-v1.15.9.tar
docker load -i kube-scheduler-v1.16.9.tar
docker load -i local-volume-provisioner-v2.3.4.tar
docker load -i mysqlclient-latest.tar
docker load -i pd-v4.0.8.tar
docker load -i prometheus-v2.18.1.tar
docker load -i ticdc-v4.0.8.tar
docker load -i tidb-backup-manager-v1.1.7.tar
docker load -i tidb-binlog-v4.0.8.tar
docker load -i tidb-monitor-initializer-v4.0.8.tar
docker load -i tidb-monitor-reloader-v1.0.1.tar
docker load -i tidb-operator-v1.1.7.tar
docker load -i tidb-v4.0.8.tar
docker load -i tiflash-v4.0.8.tar
docker load -i tikv-v4.0.8.tar
docker load -i tiller-v2.16.7.tar
2、安装 helm 客户端(master 节点)
# wget -c https://get.helm.sh/helm-v3.4.2-linux-amd64.tar.gz
# tar -xf helm-v3.4.2-linux-amd64.tar.gz
# cd linux-amd64/
# chmod +x helm
# cp -a helm /usr/local/bin/
# helm version -c
3、创建持久化存储 PV(所有节点)
(1).格式化挂载磁盘
# mkfs.ext4 /dev/sdb
# mkdir -p /mnt/disks
# vim /etc/fstab
/dev/sdb /mnt/disks ext4 defaults 0 0
# mount -a
# df -Th
(2).创建目录并绑定
# for i in `seq 50`; do
mkdir -p /tidb-disk/pv0$i && mkdir -p /mnt/disks/pv0$i
mount --bind /tidb-disk/pv0$i /mnt/disks/pv0$i
done
# for i in `seq 50`; do
echo /tidb-disk/pv0${i} /mnt/disks/pv0${i} none bind 0 0 | sudo tee -a /etc/fstab
done
(3).创建 provisioner
# wget -c https://raw.githubusercontent.com/pingcap/tidb-operator/v1.1.7/manifests/local-dind/local-volume-provisioner.yaml
里面的 hostDir & mountDir 目录需要配置成对应的:
hostDir: /mnt/disks
mountDir: /mnt/disks
安装 provisioner
# kubectl apply -f ./local-volume-provisioner.yaml
查看 provisioner
# kubectl get pods -n kube-system
# 查看 PV 状态
# kubectl get pv -n kube-system
# kubectl get storageclass
4、创建 TiDB CRD(master 节点)
# wget -c https://raw.githubusercontent.com/pingcap/tidb-operator/v1.1.7/manifests/crd.yaml
# kubectl apply -f ./crd.yaml
# kubectl get crd
5、安装 operator(master 节点)
# wget -c http://charts.pingcap.org/tidb-operator-v1.1.7.tgz
# tar -xf tidb-operator-v1.1.7.tgz
# vim ./tidb-operator/values.yaml
kubeSchedulerImageName: k8s.gcr.io/kube-scheduler
# kubectl create namespace tidb-admin
helm install --namespace tidb-admin tidb-operator -f ./tidb-operator/values.yaml --version v1.1.7
kubectl get pods --namespace tidb-admin -l app.kubernetes.io/instance=tidb-operator
kubectl get pods -n tidb-admin
6、配置 coredns(master 节点)
# kubectl edit cm -n kube-system coredns
找到 fallthrough 行:
去掉 fallthrough 后面的 pro.cluster188
# kubectl get pod -n kube-system -o wide | grep dns
coredns-6c7c584fd5-5vnhl 1/1 Running 0 39m 20.2.0.123 host1 <none> <none>
coredns-6c7c584fd5-5xsn5 1/1 Running 0 39m 20.2.42.63 host2 <none> <none>
# kubectl delete pod coredns-6c7c584fd5-5vnhl -n kube-system
pod "coredns-6c7c584fd5-5vnhl" deleted
# kubectl delete pod coredns-6c7c584fd5-5xsn5 -n kube-system
pod "coredns-6c7c584fd5-5xsn5" deleted
再次查看会出来两个新的coredns pod
# kubectl get pod -n kube-system -o wide | grep dns
7、部署 TiDB 集群(master 节点)
# wget -c https://github.com/pingcap/tidb-operator/blob/v1.1.7/examples/advanced/tidb-cluster.yaml
# vim ./tidb-cluster.yaml 修改内容
# cat ./tidb-cluster.yaml
apiVersion: pingcap.com/v1alpha1
kind: TidbCluster
metadata:
name: mycluster
namespace: mycluster
spec:
version: "v4.0.8"
timezone: UTC
configUpdateStrategy: RollingUpdate
hostNetwork: false
imagePullPolicy: IfNotPresent
helper:
image: busybox:1.26.2
enableDynamicConfiguration: true
pd:
baseImage: pingcap/pd
config: {}
replicas: 3
requests:
cpu: "100m"
storage: 1Gi
mountClusterClientSecret: false
storageClassName: "local-storage"
tidb:
baseImage: pingcap/tidb
replicas: 3
requests:
cpu: "100m"
config: {}
service:
type: NodePort
externalTrafficPolicy: Cluster
mysqlNodePort: 30011
statusNodePort: 30012
tikv:
baseImage: pingcap/tikv
config: {}
replicas: 3
requests:
cpu: "100m"
storage: 1Gi
mountClusterClientSecret: false
storageClassName: "local-storage"
tiflash:
baseImage: pingcap/tiflash
maxFailoverCount: 3
replicas: 1
storageClaims:
- resources:
requests:
storage: 100Gi
storageClassName: local-storage
pump:
baseImage: pingcap/tidb-binlog
replicas: 1
storageClassName: local-storage
requests:
storage: 30Gi
schedulerName: default-scheduler
config:
addr: 0.0.0.0:8250
gc: 7
heartbeat-interval: 2
ticdc:
baseImage: pingcap/ticdc
replicas: 3
config:
logLevel: info
enablePVReclaim: false
pvReclaimPolicy: Retain
tlsCluster: {}
# kubectl create namespace mycluster
# kubectl apply -f ./tidb-cluster1.yaml -n mycluster
# kubectl get po -n mycluster
8、初始化 TiDB 集群设置密码(master 节点)
# kubectl create secret generic tidb-secret --from-literal=root="PingCAP@TiDB4000"
# wget -c https://github.com/pingcap/tidb-operator/blob/master/manifests/initializer/tidb-initializer.yaml
# cat ./tidb-initializer.yaml
---
apiVersion: pingcap.com/v1alpha1
kind: TidbInitializer
metadata:
name: mycluster
namespace: mycluster
spec:
image: tnir/mysqlclient
# imagePullPolicy: IfNotPresent
cluster:
namespace: demo
name: demo
initSql: |-
create database app;
# initSqlConfigMap: tidb-initsql
passwordSecret: tidb-secret
# permitHost: 172.6.5.8
# resources:
# limits:
# cpu: 1000m
# memory: 500Mi
# requests:
# cpu: 100m
# memory: 50Mi
# timezone: "Asia/Shanghai"
# kubectl apply -f ./tidb-initializer.yaml --namespace=mycluster
9、部署监控(master 节点)(master 节点)
# wget -c https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/basic/tidb-monitor.yaml
# cat ./tidb-monitor.yaml
apiVersion: pingcap.com/v1alpha1
kind: TidbMonitor
metadata:
name: mycluster
spec:
clusters:
- name: mycluster
prometheus:
baseImage: prom/prometheus
version: v2.18.1
grafana:
baseImage: grafana/grafana
version: 6.0.1
initializer:
baseImage: pingcap/tidb-monitor-initializer
version: v4.0.8
reloader:
baseImage: pingcap/tidb-monitor-reloader
version: v1.0.1
imagePullPolicy: IfNotPresent
# kubectl -n mycluster apply -f ./tidb-monitor.yaml
tidbmonitor.pingcap.com/basic created
10、查看 TiDB 集群信息命令
# kubectl get pods -n mycluster -o wide
# kubectl get all -n mycluster
# kubectl get svc -n mycluster
11、更改 TiDB 集群配置命令
# kubectl edit tc -n mycluster