每个小节请阅读完成再操作,以免理解错误上下文意思,同时欢迎提Issue帮助改进。
部署顺序如下:
测试环境主机规划表
IP | hostname | 硬件配置 | 角色 | 位置 | 系统 |
---|---|---|---|---|---|
172.16.29.49 | CPU:4核 内存:8G 磁盘:50G | gateway(for Scientific Internet)、Jenkins | IDC | centos7 | |
172.16.29.51 | idcnode1 | CPU:8核 内存:16G 磁盘:200G | k8s-master | IDC | ubuntu20.4 |
172.16.29.52 | idcnode2 | CPU:16核 内存:32G 磁盘:100G | k8s-worker | IDC | ubuntu20.4 |
172.16.29.53 | idcnode3 | CPU:16核 内存:32G 磁盘:100G | k8s-worker | IDC | ubuntu20.4 |
172.16.29.54 | idcnode4 | CPU:16核 内存:32G 磁盘:100G+400G | k8s-worker,nfs-server | IDC | ubuntu20.4 |
172.23.10.87 | awsnode1 | CPU:8核 内存:16G 磁盘:100G | k8s-master,k8s-worker | AWS | ubuntu20.4 |
总共部署两套K8s环境,分别是IDC、AWS环境;IDC负责解析链数据、存储链数据、提供搜索服务;而AWS主要为客户和管理员提供可视化服务。
两套环境都是用同一个Jenkins创建Job进行部署,K8s上的组件和服务也都由Jenkins上的Job部署。
可依据高可用需求灵活扩展K8s集群规模
集群角色 | TARGET_ENV |
---|---|
开发环境 | web3eye-development-idc、web3eye-development-aws |
测试环境 | web3eye-testing-idc、web3eye-testing-aws |
生产环境 | web3eye-production-idc、web3eye-production-aws |
以下的TARGET_ENV使用web3eye-testing-*为例子
按照配置正常安装系统即可,若是在虚拟机上安装可考虑用克隆的方式提高安装速度。
K8s集群内的所有机器
目标:
- 设置root密码
- 开启root的ssh登录
- 固定IP
# 切换到root用户
su root
# 设置密码
passwd
#允许root登录
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
#允许密码登录
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/g' /etc/ssh/sshd_config
systemctl restart sshd
# 设置hostname
hostnamectl set-hostname <newhostname>
hostname <new-hostname>
Gateway机器主要为IDC提供统一的网络控制,主要为了更好的科学上网,此处也可选其他方式实现,如果没有科学上网的需求可不要gateway节点。
选择V2rayA主要考虑代理能力强,模式多且设置便捷,而且可用Web操作,在无图形化服务器非常好用。
安装方法:https://v2raya.org/docs/prologue/installation/redhat/
centos安装示例:
curl -Ls https://mirrors.v2raya.org/go.sh | bash
systemctl disable v2ray --now ### Xray 需要替换服务为 xray
yum install wget -y
wget https://github.com/v2rayA/v2rayA/releases/download/v2.2.4/installer_redhat_x64_2.2.4.rpm -O /tmp/v2raya.rpm
rpm -i /tmp/v2raya.rpm
systemctl start v2raya.service
systemctl enable v2raya.service
# 开启路由转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
yum install iptables-services -y
systemctl enable iptables
iptables -I FORWARD -j ACCEPT
service iptables save
# 同步时间
yum install ntpdate -y
ntpdate -u pool.ntp.org
ubuntu安装示例:
wget -qO - https://apt.v2raya.org/key/public-key.asc | sudo tee /etc/apt/keyrings/v2raya.asc
echo "deb [signed-by=/etc/apt/keyrings/v2raya.asc] https://apt.v2raya.org/ v2raya main" | sudo tee /etc/apt/sources.list.d/v2raya.list
sudo apt update -y
sudo apt install v2raya v2ray ## 也可以使用 xray 包
sudo systemctl start v2raya.service
sudo systemctl enable v2raya.service
启动后默认访问IP:2017
1.设置用户名密码
2.导入订阅码
3.测速选择较快的节点,开启proxy
4.在setting中开启系统代理,选择On:Proxy except CN Sites即可
安装完成后导入代理节点即可使用,同时将其他机器的网关设置成Gateway机器的IP,其他机器也能科学上网。
安装Jenkins此处安装在gateway角色上,一般来说只要不安装在K8s集群的机器上都可以
目标:
- 关闭Selinux和防火墙
- 安装Docker
- 启动Jenkins
- 初始化Jenkins
- 配置Git插件
因为gateway服务器是Centos系统,所以需要设置SeLinux和防火墙。
# 临时关闭Selinux
setenforce 0
# 永久关闭Selinux
vi /etc/selinux/config
## 将SELINUX=enforcing改为SELINUX=disabled
# 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
# 清除旧版本Docker
yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker \
docker-ce \
docker-ce-cli
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker -y
systemctl start docker
systemctl enable docker
docker run \
--name jenkins \
-d \
-p 18080:8080 \
-p 50000:50000 \
-v /opt/share/jenkins:/var/lib/jenkins \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--tmpfs /tmp:exec --tmpfs /run --tmpfs /run/lock --tmpfs /var/run \
-v /var/run/docker.sock:/var/run/docker.sock \
--restart always \
--privileged coastlinesss/jenkins:0.0.1 /usr/sbin/init
获取jenkins初始密码
docker exec -it jenkins cat /var/lib/jenkins/secrets/initialAdminPassword
访问jenkins web页面(172.16.29.49:18080),完成Jenkins初始配置,如添加用户等,在安装插件时可先安装建议插件。
配置Git 接受第一次连接(Dashboard > 系统管理 > 全局安全配置 ),找到Git Host Key Verification Configuration选择Accept first connection
本示例使用NFS作为存储类,也可以替换成其他存储方案。
首先选择一台主机(例子中提供存储的是idcnode4)安装nfs-server并配置一个路径提供NFS服务,后续通过Jenkins Job为K8s设置默认存储类。
nfs-server安装示例:
apt update
apt install nfs-kernel-server -y
# 此处省略将磁盘挂载到/k8sdata的过程
# 本例子/k8sdata为提供存储的目录
echo '/k8sdata *(rw,async,no_subtree_check,no_root_squash)' >> /etc/exports
systemctl start nfs-kernel-server.service
exportfs -a
试图及任务说明
视图 | 编号格式 | 任务说明 |
---|---|---|
00-kubernets | (development\testing\production)-000N-* | 安装K8s环境 |
01-basement | (development\testing\production)-100N-* | 安装基础组件 |
02-build | (development\testing\production)-200N-* | 构建项目 |
03-tag-(testing\production) | (testing\production)-300N-* | 打tag |
04-release-(feature\development\testing\production) | (feature\development\testing\production)-400N-* | release项目 |
05-deploy-(feature\development\testing\production) | (feature\development\testing\production)-500N-* | 部署项目 |
05-domain-(feature\development\testing\production) | (feature\development\testing\production)-600N-* | 网站上线相关 |
在Jenkins使用Kubeasz安装K8s,按照主机规划在IDC和AWS分别部署K8S环境。
按照主机规划修改
- hosts
- 主机规划,比如etcd、kube_master、kube_node
- [all:vars]下的用户名及密码
- cluster_dir
- config.yml
- nfs-provisioner下的配置,主要关注nfs_server及nfs_path
建议job-name: testing-0001-IDC-k8s-cluster、testing-0002-AWS-k8s-cluster
需要在IDC以及AWS环境中各安装一套K8S
安装Helm和设置默认存储类的Job参数如下
脚本路径:basement/Jenkinsfile
参数名 | testing-0003-IDC-set-gateway |
---|---|
INSTALL | true |
UNINSTALL | false |
TARGET | helm |
TARGET_ENV | 环境名 |
GATEWAY_HOST | 172.16.29.49 |
安装Helm和设置默认存储类的Job参数如下
脚本路径:basement/Jenkinsfile
参数名 | testing-0004-install-helm-for-jenkins |
---|---|
INSTALL | true |
UNINSTALL | false |
TARGET | helm |
在Jenkins创建对应Job进行环境设置和中间件安装,与其他项目Job设置只是Jenkinsfile文件路径有差异,需要关注。
参数名和值参考给出的表格。
主要目标:
- IDC基础组件
- milvus
- redis-cluster
- minio
- mysql
- AWS基础组件
- treafik
安装中间件的Job参数如下,其中TARGET参数为"all"时同时安装所有中间件。
也可以分开安装或卸载。指定TARGET参数为特定组件名称即可。
组件名单:
- milvus
- redis-cluster
- minio
- mysql
脚本路径:basement/Jenkinsfile
参数名 | testing-1002-install-all-basement | testing-1002-uninstall-all-basement |
---|---|---|
INSTALL | true | false |
UNINSTALL | false | true |
TARGET | all | all |
TARGET_ENV | web3eye-testing-idc |
组件名单:
- traefik
脚本路径:basement/Jenkinsfile
参数名 | testing-1003-install-traefik | testing-1003-uninstall-traefik |
---|---|---|
INSTALL | true | false |
UNINSTALL | false | true |
TARGET | traefik | traefik |
TARGET_ENV | web3eye-testing-aws |
项目名清单:
- IDC
- nft-meta
- ranker
- transform
- gateway
- block-etl
- AWS
- transform
- cloud-proxy
- entrance
- webui
- dashboard
配置部署Job时建议按照IDC、AWS分类
脚本路径:Jenkinsfile
参数名 | build | tag | release | deploy |
---|---|---|---|---|
BRANCH_NAME | 分支名 | 分支名 | 分支名 | 分支名 |
BUILD_TARGET | true | false | false | false |
DEPLOY_TARGET | false | false | false | true |
RELEASE_TARGET | false | false | true | true |
TAG_PATCH | false | true/false | false | false |
TAG_MINOR | false | true/false | false | false |
TAG_MAJOR | false | true/false | false | false |
AIMPROJECT | 项目名 | 项目名 | 项目名 | 项目名 |
TAG_FOR | test/prod | |||
TARGET_ENV | 环境名 | 环境名 | 环境名 | 环境名 |
CERT_NAME | aws-cert-name | |||
ROOT_DOMAIN | aws环境域名 | |||
ROOT_DOMAIN_HTTP_PORT | aws环境HTTP端口 |
release和deploy的Tag关系说明:
feature | development | testing | production | |
---|---|---|---|---|
BRANCH_NAME | branch | master | master | master |
TARGET_ENV | 任意环境 | development | testing | production |
最终Tag名 | branch名 | latest | 奇数版本号(如:0.5.3) | 偶数版本号(如:0.5.2) |
部署好所有项目后,要上线网站还需要配置TLS域名解析。
打开Dashboard(AWS的32443端口访问),添加Eth和Sol的Endpoints,再添加同步任务即可。
所有配置都在config/config.toml中,如果想修改有两种途径:
1.修改config/config.toml重新编译打包成Docker镜像
2.通过设置环境变量即可,比如k8s中可设置configMap、export变量
config.toml -> environment 转换规则
例:
path="/uu/ii"
port=50515
project-name="Web3Eye"
[mysql]
host="mysql"
port=3306
max-connect=100
log-dir="/var/log"
path=/uu/ii
port=50515
project_name=Web3Eye
mysql_host=mysql
mysql_port=3306
mysql_max_connect=100
log_dir=/var/log