关注分享主机优惠活动
国内外VPS云服务器

热点资讯 | TiDB 算子实践

总结:一种环境,两种安装配置,无密码登录,以及节点所需镜像文件的配置。 有些镜像在国内无法访问,需要通过代理将镜像下载到本地,然后上传到本地镜像仓库,或者同时修改配置文件。 对于单个组件存储位置,您将需要创建新的服务器分发文件。 本文转载自北京也门公众号

K8s 和 TiDB 都是活跃在开源社区的开源产品。   TiDB
Operator 项目是一个在 K8s 上协调和管理 TiDB 的项目。 集群项目。 本文记录了部署 K8s 和安装 TiDB
Operator 的详细实现过程。 希望对刚入坑的同学有所帮助。

1.环境

Ubuntu 16.04
K8s 1.14.1

2.K8s的Kubespray安装无密码登录配置

1 yum -y install Expect

vi /tmp/autocopy.exp

 1 #!/usr/bin/expect 2 3 超时 4 设置 user_hostname [lindex $argv ] 5 设置密码 [lindex $argv ] 6 spawn ssh-copy-id $user_hostname 7 Expect { 8 "(是/否)?" 9 {10 发送 " yes"11 Expect "* assword :" { send "$password"}12 }13 "*assword:"14 {15 send "$password"16 }17 }18 期望 eof
 1 ssh-keyscan addip >> ~/.ssh/known_hosts 2 3 ssh-keygen -t rsa -P "" 4 5 for i in 10.0.0.{31,32,33,40,10, 20, 50}; 运行 ssh-keyscan $i >> ~/.ssh/known_hosts;  完成 6 7 /tmp/autocopy.exp root@addeip 8 ssh-copy-id addedip 910 /tmp/autocopy .exp root@10.0.0.3111 /tmp/autocopy.exp root@10.0.0.3212 /tmp/autocopy .exp root@10.0.0.3313 /tmp/autocopy.exp root@10.0.0.4014 /tmp/autocopy.exp root@10.0.0.1015 /tmp/autocopy.exp root@10.0.0.2016 /tmp/autocopy.exp root@10.0。 0.50

配置 Kubespray

1 pip install -rrequirements.txt2 cp -rfp inventory/sample inventory/mycluster

inventory/mycluster/inventory 。 ini

inventory/mycluster/inventory.ini

 1 # ## 配置 2 # ## "ip" 将 Kubernetes 服务绑定到与默认 iface 变量不同的 IP 3 # ## 必须设置etcd集群的etcd_member_name。   非etcd成员的节点不需要设置该值。 或者,您可以设置一个空字符串值。   4 [全部] 5 # 节点 1 ansible_host=95.54.0.12 # ip=10.3。    0.1 etcd_member_name = etcd1 6#node2 ansible_host = 95.54.0.13#ip = 10.3.0.2 etcd_member_name = etcd2 7#node3 ansible_host = 95.54.0.14# =10.3 .0.4 etcd_member_name=etcd4 9 #node5 ansible_host=95.54.0.16 #ip=10.3.0.5 etcd_member_name=etcd510 #node6 ansible_host=95.54.0.17 #ip=10.3.0.6 etcd_member_name=etcd611 ansible_host=10.0.0.3 1 etcd_member_name= etcd112 etcd2 ansible_host = 10.0.0.32 etcd_member_name=etcd213 etcd3 ansible_host=10.0.0.33 etcd_member_name=etcd314 master1 ansible_host=10.0.0.4015 node1 ansible_host=10.0.0.1016 node2 ansible_host=10.0.0.2017 node3 ansible_host=10.0.0.501819 # ## 如果节点无法直接访问,则配置堡垒主机20 # 堡垒 ansible_host=x.x.x.x ansible_user=some_user2122 [kube-master]23 # node124 #节点 225 主节点 126 [etcd]27 # 节点 128 # 节点 229 # 节点 330 etcd131 etcd232 etcd33334 [kube-node]35 # 节点 236 # 节点 337 # 节点 438 # 节点 539 # 节点 640 节点 141 节点 242 节点 34344 [ k8s-cluster:child]45 kube- master46 kube-node

node所需的镜像文件

有些镜像在中国无法访问,因为你无法访问,您需要通过代理将图片下载到本地,然后上传到: 访问您本地的镜像仓库或DockerHub,同时修改配置文件。 各个组件存储在 https://storage.googleapis.com 中,并要求您创建新的 Nginx 服务器分发文件。

创建Nginx服务器

~/distribution/docker-compose.yml

创建文件目录和Nginx配置文件目录

~/distribution/conf.d/open_distribute.conf

开始

下载并上传所需文件。文件的具体版本号请参见roles/download/defaults/main.yml文件中的kubeadm_version、kube_version和image_arch参数。

安装 Docker 和 Docker-Compose

 1 apt-get install 2 apt-transport-https 3 ca-certificates 4curl 5 gnupg[k4 ]agent 6 软件-属性-common 7 8curl - fsSL https://download.docker com/linux/ubuntu/gpg | sudo apt-key add - 910 add[ k4]apt -存储库 11“deb [arch=amd64] https://download.docker.com/linux/ubuntu 12 $(lsb_release -cs) 13 stable”1415 apt-get update1617 apt-get install docker-ce docker-ce-clicontainerd.io1819 chmod +x /usr/local/bin /docker-compose20 sudo curl -L "https://github.com/ docker/compose/ releases/download/1.24.0/docker-compose-$(uname -s)[ k4]$(uname - m)" -o /usr/local/bin /docker[k4 ]撰写

新Nginx docker-compose.yml

1 mkdir ~/distribution2 vi ~/distribution/docker-compose.yml
 1 # 2 分发版本: "2 " 3 服务:4 分发:5 镜像:nginx:1.15.12 6 卷:7 - ./conf.d:/etc/nginx/conf.d 8 - ./distributedfiles:/usr/share/nginx /html 9 network_mode: "host"10 容器名称: nginx_distribute 
1 mkdir ~/distribution/distributedfiles2 mkdir ~/distribution/3 mkdir ~/distribution/conf.d4 vi ~/distribution/conf.d/ 听 5 8888 open_distribute.conf
 1 #open_distribute.conf 2 3 server { 4 #服务器名称 distribution.search.leju.com;   6 7 root /usr/share/nginx/html; 8 9 add_header 访问-控制 -允许-来源 *; 10 add_header 访问-控制-全部ow- header; 16 }17 过期;18 位置 ~ .*.(gif|jpg|jpeg|png|bmp|swf|eot|ttf|woff|woff2|svg)$ {19 过期过期 -1; 20}2122 地点 ~ .   *.(js|css)?$ {23 expired -1 ;24 }25 } # 公共静态文件域名结束: [distribute.search.leju.com ]
1 docker[k4 ] -d
1 配置 wget https://storage.googleapis.com/kubernetes-release/release/v1.14.1/bin/linux/amd64/kubeadm23 scp /tmp/ kubeadm 10.0 。 0.60:/root/distribution/distributedfiles45 wget https://storage.googleapis.com/kubernetes-release/release/v1.14.1/bin/linux/amd64/hyperkube

下载必须上传镜像到私有仓库

 1 docker pull k8s.gcr.io/cluster-proportional-autoscaler-amd64:1.4.0 2 docker tag k8s.gcr.io/cluster[ k4 ] Proportional-Autoscaler-amd64:1.4.0 jiashiwen/cluster-Proportional-Autoscaler-amd64:1.4.0 3 docker Push jiashiwen/cluster-proportional-autoscaler - amd64 :1.4.0 4 5 docker pull k8s.gcr.io/k8s-dns-node-cache:1.15.1 6 docker 标签 k8s.gcr.io/k8s-dns-node [ k4]cache:1.15.1 jiashiwen/k8s-dns-node-cache:1.15.1 7 docker Push jiashiwen/k8s-dns-node-cache:1.15 .1 8 9 docker pull gcr.io/google_containers/pause-amd64:3.110 docker 标签 gcr.io/google_containers/pause-amd64:3.1 jiashiwen/pause-amd64:3.111 docker push jiashiwen/pause[k4 ]amd64: 3.11213 docker pull gcr.io/google_containers/kubernetes-仪表板-amd64:v1.10.114 docker 标签 gcr.io/google_containers/k4]dashboard-amd64:v1.10.1 jiashiwen/kubernetes-dashboard-amd64:v1.10.115 docker Push jiashiwen/kubernetes-dashboard- amd64:v1.10.11617 docker pull gcr.io/google_containers/kube-apiserver:v1.14.118 docker 标签 gcr.io/google_containers/kube-apiserver:v1.14.1 jiashiwen/kube-apiserver:v1 .14.119 docker push jiashiwen/kube-apiserver:v1.14.12021 docker pull gcr.io/google_containers/kube-controller-manager:v1.14.122 docker tag gcr.io/google_containers/kube-controller-管理器:v1.14.1 jiashiwen/kube-controller-manager:v1.14.123 docker push jiashiwen/kube-controller-manager:v1.14.12425 docker pull gcr.io/google_containers/kube[k4 ]scheduler :v1.14.126 docker 标签 gcr.io/google_containers/kube-s调度程序:v1.14.1 jiashiwen/kube-scheduler:v1.14.127 docker push jiashiwen/kube-scheduler:v1.14.12829 docker pull gcr.io/google_containers/kube-proxy:v1.14.130 docker tag gcr。    io/google_containers/kube-proxy:v1.14.1 jiashiwen/kube-proxy:v1.14.131 docker push jiashiwen/kube-proxy:v1.14.13233 docker pull gcr.io/google_containers/pause:3.134 docker 标签gcr.io/google_containers/pause:3.1 jiashiwen/pause:3.135 docker push jiashiwen/pause:3.13637 docker pull gcr.io/google_containers/coredns:1.3.138 docker tag gcr.io/google_containers/coredns:1.3.1 jiashiwen/coredns :1.3.139 docker Push jiashiwen/coredns:1.3.1

下载上传图片脚本

 1 #!/bin/bash 2 3 privaterepo=jiashiwen 4 5 k8sgcrimages= ( 6 集群-比例-自动缩放器-amd64:1.4.0 7 k8s-dns-节点-缓存:1.15.1 8 ) 910 gcrimages=(11 暂停-amd64:3.112 kubernetes-dashboard-amd64:v1.10.113 kube-apiserver:v1.14.114 kube-controller-manager :v1 .14.115 kube-scheduler:v1.14.116 kube-proxy:v1.14.117 stop:3.118 coredns:1.3.119 )202122 (k8sgcrimageName in ${k8sgcrimages[@]}) do23 echo $k8sgcrimageName24 docker pull k8s .gcr .io/$k8sgcrimageName25 docker 标签 k8s.gcr.io/$k8sgcrimageName $privaterepo/$k8sgcrimageName26 docker Push ${gcrimages[@]} 的 gcrimageName $privaterepo/$k8sgcrimageName27 did282930; do31 echo $gcrimageName32 docker pull gcr.io /google_containers /$gcrimageName33 docker tag gcr.io/google_containers/$gcrimageName $privaterepo/$gcrimageName34 docker Push $privaterepo/$gcrimageName35 完成

修改文件 inventory/mycluster /group_vars/k8s- cluster/k8s- ]clu修改ster.yml,K8s镜像仓库

1 # kube_image_repo: "gcr.io/google-containers" 2 kube_image_repo: "jiashiwen"

滚动/下载/更改默认值/ main.yml

 1 #dnsautoscaler_image_repo: "k8s.gcr.io/cluster-proportional-autoscaler-{{ image_arch }}" 2 dnsautoscaler_image_repo: " jiashiwen/cluster- 比例-autoscaler-{{ image_arch }}" 3 4 #kube_image_repo: "gcr.io/google-containers" 5 kube_image_repo: "jiashiwen" 6 7 #pod_infra_image_repo: "gcr.io/google_containers/pause[ k4] ]{{ image_arch }}" 8 pod_infra_image_repo: "jiashiwen/pause-{{ image_arch }}" 910 #dashboard_image_repo: "gcr.io/google_containers/kubernetes-dashboard-{ { image_arch }}" 11 dump_image_repo : "jiashiwen/kubernetes-dashboard-{{ image_arch }}"1213 #nodelocaldns_image_repo: "k8s.gcr.io/k8s-dns-node-cache"14 nodelocaldns_image_repo:"jiashiwen/k8s-dns-node-cache"1516 #kubeadm_download_url:"https://storage .googleapis.com/kubernetes-release/release/{{ kubeadm_version }}/bin/linux/{{ image_arch }}/kubeadm"17 kubeadm_download_url:"http://10.0.0.60:8888/kubeadm"1819 #hyperkube_download_url :“https://storage.googleapis.com/kubernetes-release/release/{{ kube_version }}/bin/linux/{{ image_arch }}/ hyperkube”20 hyperkube_download_url:“http://10.0.0.60: 8888/hyperkube”

3.运行安装

安装命令

1 ansible-playbook -i inventory/mycluster/inventory.ini cluster .yml

重置命令

1 ansible-playbook -i inventory/mycluster/inventory.ini Replace.yml

4. 验证 K8 cluster

安装 Kubectl

在本地浏览器中打开 http。s://storage.googleapis.co...

$(curl -s https://storage.googleapis.co...://storage.googleapis.com/kubernetes[ k4 ]release/release/v1.14.1/bin/linux/amd64/kubectl

上传下载的kubectl

1 scp /tmp/kubectl root@xxx:/root

更改属性

1 chmod +x ./kubectl2 mv ./kubectl /usr/local/bin/kubectl

Ubuntu

1 安装 sudo snap kubectl --classic 

CentOS

在主节点上更改 ~/

1 scp 10.0.0.40 :/root/.kube/config ~/.kube/config

执行命令查看集群 >

1 获取kubectlnodes2 kubectl cluster [ k4]信息

5.TiDB-Operaor Deploy

安装Helm

https://blog.csdn.net /bbwangj...

helm 安装

 一个curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh2 chmod 700 get_helm.sh3 ./get_helm.sh

显示 helm 版本

1 helm 版本

初始化

 1 helm init --升级-iregistry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.13.1 --stable-repo-url https: //kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

为K8提供本地卷

参考文档https://github.com/kubernetes. ..
Tidb- 运算符调用将 pv 绑定到 pd 和 tikv。 此外,必须在 discovery 目录下创建多个目录。

格式化并挂载磁盘

1 mkfs.ext4 /dev/vdb2 DISK_UUID=$(blkid -s UUID -o value /dev/vdb) 3 mkdir / mnt/$DISK_UUID4 mount -t ext4 /dev/vdb /mnt/$DISK_UUID

/etc/fstab 持久挂载

1 echo UUID=`sudo blkid [ k4]s UUID -o Value /dev/vdb` /mnt/$DISK_UUID ext4 default 0 2 | sudo tee -a /etc/fstab

创建并发现多个目录将其挂载到该目录。cctory

1 for i in $(seq 1 10) do2 sudo mkdir -p /mnt/${DISK_UUID}/vol${i} /mnt/disks/${DISK_UUID}_vol$ {i}3 sudo mount --bind /mnt/${DISK_UUID }/vol${i} /mnt/disks/${DISK_UUID}_vol${i}4 完成

/ etc/fstab 持久挂载

1 for i in $(seq 1 10); do2 echo /mnt/${DISK_UUID}/vol${i} /mnt/disks/${DISK_UUID}_vol$ { i} none bind 0 0 | sudo tee -a /etc/fstab3 完成

为 tidb-operator 创建本地 - 卷 - 配置器

1 $ kubectl apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/manifests/local-dind/local-volume-provisioner.yaml2 $ kubectl get po [ k4]n kube- 系统 -l app=local-volume-provisioner3 $ kubectl get pv --all-namespaces | grep local-storage 

6. 安装 TiDB Operator

项目中将使用 gcr.io/google-containers/hyperkube 在中国无法访问。 最简单的方法是将镜像推回 dockerhub 并修改charts/tidb-operator/values.yaml。

 1 调度程序: 2 # 使用 rbac。    create=false,用户负责创建此帐户 3 # rbac.create=true 创建此服务帐户 4 # 另请参阅 rbac.create 和集群范围 5 serviceAccount: tidb[ k4]scheduler 6 logLevel: 2 7 Replicas: 1 8调度器名称:tidb-scheduler 9 资源:10 限制:11 cpu:250m12 内存:150Mi13 请求:14 cpu:80m15 内存:50Mi16 # kubeSchedulerImageName:gcr.io/google -containers/hyperkube17 kubeSchedulerImageName:yourrepo/ hyperkube18 #这里默认匹配 kubernetes 版本19 # kubeSchedulerImageTag: Latest

TiDB Operator 使用 CRD 来扩展 Kubernetes,所以 TiDB Operator 要使用,首先创建 TidbCluster 自定义资源类型。

1 kubectl apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/manifests/crd.yaml2 kubectl get crd t​​idbclusters.pingcap.com 

安装 TiDB-Operator

1 $ git clone https://github.com/pingcap/tidb-operator.git2 $ cd tidb-operator3 $ helm installcharts/ tidb-operator --name=tidb-operator --namespace=tidb-admin4 $ kubectl get pod --namespace tidb[k4 ]admin - l app.kubernetes.io/instance=tidb-operator

7. 部署TiDB

1 helm 安装charts/tidb-cluster [k4 ]-name= demo--namespace=tidb2 watch kubectl get pods --namespace tidb [ k4]l app.kubernetes.io/instance=demo -wide

8. /b>安装MySQL客户端

参考文档https://dev.mysql.com/doc/ref...

CentOS安装

1 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm2 yum localinstall mysql80-community-release[k4 ] ]el7-3.noarch.rpm -y3 yum repolist all | grep mysql4 yum-config-manager --mysql80- 禁用社区 5 yum- config[k4 ]manager --启用 mysql57-community 6 yum install mysql-community-client

Ubuntu 安装

1 wget https://dev. mysql.com /get/mysql-apt-config_0.8.13-1_all .deb2 dpkg -i mysql-apt-config_0.8.13-1_all # 选择 MySQL。 version 6 dpkg -reconfigure mysql-apt-config7 apt install mysql-]Client -y

9. 映射 TiDB 端口

查看 TiDB 服务

1 kubectl get svc --all-namespaces

映射 TiDB 端口

1 # 仅本地访问 2 kubectl port-转发 svc/demo - tidb 4000:4000 --namespace=tidb34 # 其他主机访问 5 kubectl port-forward --address 0.0.0.0 svc/demo-tidb 4000:4000 [k4 ]-namespace =tidb

首次登录MySQL

1 mysql -h 127.0.0.1 -P 4000 -u root -D test 

修改 TiDB 密码

1 设置 "root"@"%" = "wD3cLpyO5M"; 的密码  Flash的好处;

提示和提示

1.国内安装K8s

K8s镜像国内可以从gcr.io获得无法访问。 基本方法是将镜像导入 DockerHub 或私有镜像。 K8s介绍章节中没有涉及到这一点。 我厌倦了数数。

2. TiDB-Operator 的本地存储配置

Operator 启动集群时,pd 和 TiKV 必须绑定本地存储。 如果挂载点不足,启动时将找不到 Pod。 组合 PV 始终处于挂起或创建状态。 有关配置详细信息,请参阅 https://github.com/kubernetes... 上的“与多个文件系统 PV 共享磁盘文件系统”部分,以将多个 PV 绑定到同一磁盘。 下载目录,为运营商提供足够的保证金。

3. MySQL 客户端版本问题

目前 TiDB 仅支持 MySQL5.7 版本。 客户端 8.0 报告错误 1105 (HY000):未知字符集 ID 255。


点击“K8s”了解更多信息。

文章转载自公众号“北京IT男”

未经允许不得转载:主机频道 » 热点资讯 | TiDB 算子实践

评论 抢沙发

评论前必须登录!