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