写点什么

原生 K8s 环境下 TiDB Operator 实战

  • 2022 年 7 月 11 日
  • 本文字数:2466 字

    阅读完需:约 8 分钟

作者: jiashiwen 原文来源:https://tidb.net/blog/00e04215


凑个热闹,k8s+tidb operator,便于更好的了解结构和操作细节。 k8s 和 tidb 都是目前开源社区中活跃的开源产品,tidb-operator 项目是一个在 k8s 上编排管理 tidb 集群的项目。本文详细记录了部署 k8s 及 install tidb-operator 的详细实施过程,希望能对刚入坑的同学有所帮助

环境

  • ubuntu 16.04

  • k8s 1.14.1

kubespray 安装 k8s

配置免密登录

yum -y install expect
复制代码


  • vi /tmp/autocopy.exp

配置 kubespray

pip install -r requirements.txtcp -rfp inventory/sample inventory/mycluster
复制代码


inventory/mycluster/inventory.ini


# ## Configure 'ip' variable to bind kubernetes services on a# ## different ip than the default iface# ## We should set etcd_member_name for etcd cluster. The node that is not a etcd member do not need to set the value, or can set the empty string value.[all]# node1 ansible_host=95.54.0.12  # ip=10.3.0.1 etcd_member_name=etcd1# node2 ansible_host=95.54.0.13  # ip=10.3.0.2 etcd_member_name=etcd2# node3 ansible_host=95.54.0.14  # ip=10.3.0.3 etcd_member_name=etcd3# node4 ansible_host=95.54.0.15  # ip=10.3.0.4 etcd_member_name=etcd4# node5 ansible_host=95.54.0.16  # ip=10.3.0.5 etcd_member_name=etcd5# node6 ansible_host=95.54.0.17  # ip=10.3.0.6 etcd_member_name=etcd6etcd1 ansible_host=10.0.0.31 etcd_member_name=etcd1etcd2 ansible_host=10.0.0.32 etcd_member_name=etcd2etcd3 ansible_host=10.0.0.33 etcd_member_name=etcd3master1 ansible_host=10.0.0.40node1 ansible_host=10.0.0.10node2 ansible_host=10.0.0.20node3 ansible_host=10.0.0.50
# ## configure a bastion host if your nodes are not directly reachable# bastion ansible_host=x.x.x.x ansible_user=some_user
[kube-master]# node1# node2master1[etcd]# node1# node2# node3etcd1etcd2etcd3
[kube-node]# node2# node3# node4# node5# node6node1node2node3
[k8s-cluster:children]kube-masterkube-node
复制代码

节点所需镜像的文件

由于某些镜像国内无法访问需要现将镜像通过代理下载到本地然后上传到本地镜像仓库或 dockerhub,同时修改配置文件,个别组件存放位置 https://storage.googleapis.com,需要新建 nginx 服务器分发文件


  • 建立 nginx 服务器

  • 安装 docker 及 docker-compose

  • 新建 nginx docker-compose.yml

  • ~/distribution/docker-compose.yml

  • 创建文件目录及 nginx 配置文件目录

  • ~/distribution/conf.d/open_distribute.conf

  • 启动

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

  • 需要下载并上传到私有仓库的镜像

  • 用于下载上传镜像的脚本

  • 修改文件 inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml,修改 k8s 镜像仓库

  • 修改 roles/download/defaults/main.yml

执行安装

  • 安装命令

  • 重置命令

验证 k8s 集群

tidb-operaor 部署

安装 helm

https://blog.csdn.net/bbwangj/article/details/81087911


  • 安装 helm

  • 查看 helm 版本

  • 初始化

为 k8s 提供 local volumes

  • 参考文档 https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/docs/operations.md tidb-operator 启动会为 pd 和 tikv 绑定 pv,需要在 discovery directory 下创建多个目录

  • 格式化并挂载磁盘

  • /etc/fstab 持久化 mount

  • 创建多个目录并 mount 到 discovery directory

  • /etc/fstab 持久化 mount

  • 为 tidb-operator 创建 local-volume-provisioner

Install TiDB Operator

部署 tidb

helm install charts/tidb-cluster --name=demo --namespace=tidbwatch kubectl get pods --namespace tidb -l app.kubernetes.io/instance=demo -o wide
复制代码

验证

安装 mysql 客户端

  • 参考文档 https://dev.mysql.com/doc/refman/8.0/en/linux-installation.html

  • centos 安装

  • ubuntu 安装

映射 tidb 端口

  • 查看 tidb serveice

  • 映射 tidb 端口

  • 首次登录 mysql

  • 修改 tidb 密码

趟坑小记

  • k8s 国内安装 k8s 镜像多在 gcr.io 国内访问不到,基本做法是把镜像导入 dockerhub 或者私有镜像,这一点在 k8s 部署章节有详细过程就不累述了。

  • tidb-operator 本地存储配置 operator 在启动集群时 pd 和 tikv 需要绑定本地存储如果挂载点不足会导致 pod 启动过程中找不到可已 bond 的 pv 始终处于 pending 或 createing 状态,详细配请参阅 https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/docs/operations.md 中“Sharing a disk filesystem by multiple filesystem PVs”一节,同一块磁盘绑定多个挂载目录,为 operator 提供足够的 bond

  • mysql 客户端版本问题 目前 tidb 只支持 mysql5.7 版本客户端 8.0 会报 ERROR 1105 (HY000): Unknown charset id 255


发布于: 刚刚阅读数: 5
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
原生K8s环境下 TiDB Operator实战_TiDB 社区干货传送门_InfoQ写作社区