Commit d5812ce8 by wangtingwei

格式

1 parent 0b6a24a5
Showing with 65 additions and 77 deletions
# 平台部署文档
# 平台部署文档
......@@ -2,27 +2,27 @@
## 一、涉及的项目仓库
#### 1.1、configmap配置文件模板
### 1.1、configmap配置文件模板
##### https://tingweiwang@gitlab.seetatech.com/tingweiwang/configmap.git
##### 说明:配置文件采用k8s configmap外部挂载实现,配置文件中的部分可变字段如mysql连接地址做成了模板,可以通过sed修改模版替换为变量进行渲染。
#### 配置文件采用k8s configmap外部挂载实现,配置文件中的某些可变字段比如Mysql连接地址、端口、等做成了通用模板,需要通过sed修改模版替换为相应变量进行渲染。
#### 1.2、平台部署所需的相关文件
### 1.2、平台部署所需的相关文件
##### 说明:包括平台部署到k8s集群中的yaml文件、初始化sql语句、渲染configmap脚本等
#### 包括平台部署到k8s集群中的服务yaml文件、初始化sql语句、渲染configmap脚本等
https://tingweiwang@gitlab.seetatech.com/tingweiwang/ksy-project-docking.git
##### https://tingweiwang@gitlab.seetatech.com/tingweiwang/ksy-project-docking.git
## 二、基础软件依赖及配置
### 2.1、Mysql数据库
#### 2.1.1、版本为5.7.28
- #### 版本说明:5.7.28
#### 2.1.2、配置文件:
- #### 部署方式说明:可以用二进制部署、docker部署、k8s部署,我们自己为了运维方便像数据库这些有状态中间件是通过二进制部署的。
###### bind-address 不要设置127.0.0.1 ,因为其他节点Pod需要与之通信,根据mysql实际部署情况修改配置文件
- #### 配置文件说明:我们在配置文件上有以下两个要求,一个是bind-address 不要设置127.0.0.1 ,因为其他节点Pod需要与之通信,第二个为mysql需要设置字符集utf8mb4,其他方面配置则根据mysql实际部署情况修改
```
[mysqld_safe]
......@@ -54,7 +54,7 @@ myisam-recover-options = BACKUP
query_cache_limit = 1M
query_cache_size = 16M
log_error = /var/log/mysql/error.log
expire_logs_days = 10
expire_logs_days = 10
max_binlog_size = 100M
interactive_timeout=28800000
wait_timeout=28800000
......@@ -69,11 +69,11 @@ default-character-set = utf8mb4
```
#### 2.2.3、数据库初始化操作
- #### Mysql数据库初始化操作
- ##### 用户授权
#### 1、用户授权
###### 示例中mysql用户为root、密码为seetatech、授予权限为最高,可以根据实际情况降低权限,但是需要保证mysql用户具备增删改查权限、另外授予访问mysql数据库主机这里为%代表所有主机,此处可以设置为内网网段。
#### 以下示例中mysql用户为root、密码为seetatech、授予的权限为最高,此处可以根据实际情况降低权限,但是需要保证mysql用户具备增删改查权限、另外授予访问mysql数据库主机这里为%代表所有主机,此处可以设置为内网网段。
```shell
$ use mysql;
......@@ -83,7 +83,7 @@ $ GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' identified by 'seetatech';
$ flush privileges;
```
- ##### 创建数据库
#### 2、创建数据库
```shell
$ CREATE SCHEMA `autodl-core`;
......@@ -95,9 +95,9 @@ $ CREATE SCHEMA `kpl`;
$ CREATE SCHEMA `quota`;
```
- ##### 执行初始化sql语句
#### 3、执行初始化sql语句
###### 初始化sql文件在https://tingweiwang@gitlab.seetatech.com/tingweiwang/ksy-project-docking.git项目中的sql目录下。按照数字顺序从小到大执行。然后再添加sql记录
#### 初始化sql文件在https://tingweiwang@gitlab.seetatech.com/tingweiwang/ksy-project-docking.git项目中的sql目录下。按照数字顺序从小到大执行。执行完成后再添加以下sql记录
```shell
$ INSERT INTO `autodl-core`.`service` (`service_id`, `noti_api`) VALUES ("kpl3", "http://kpl--monitor.kpl.svc.cluster.local:8920/status");
......@@ -105,11 +105,11 @@ $ INSERT INTO `autodl-core`.`service` (`service_id`, `noti_api`) VALUES ("kpl3",
### 2.2、redis数据库
#### 2.2.1、版本为5.0.6
- #### 版本说明:5.0.6
#### 2.2.2、配置文件
- #### 部署方式说明:可以用二进制部署、docker部署、k8s部署,我们自己为了运维方便像数据库这些有状态中间件是通过二进制部署的
###### bind不要设置为127.0.0.1,平台用到了redis的消息侦听功能,需要配置notify-keyspace-events "KEA",配置文件中已添加,使用了requirepass 设置了密码为seetatech。可以根据实际需求更改。
- #### 配置文件说明:我们在配置文件上有以下两个要求,bind不要设置为127.0.0.1,平台用到了redis的消息侦听功能,需要配置notify-keyspace-events "KEA"示例配置文件中已添加,并且使用了requirepass 设置redis密码为seetatech。可以根据实际需求更改。
```
daemonize yes
......@@ -167,11 +167,9 @@ requirepass seetatech
### 2.3、mongo数据库
#### 2.3.1、版本为4.0.10
- #### 版本说明:4.0.10
#### 2.3.2、配置文件:
###### bind不要设置为127.0.0.1, auth=true设置开启认证。
- #### 配置文件说明:bind不要设置为127.0.0.1, 配置中使用auth=true设置开启了登陆认证。
```
dbpath=/data/mongodb
......@@ -183,9 +181,9 @@ auth=true
bind_ip=0.0.0.0
```
#### 2.3.3、创建mongo初始化用户
- #### 创建mongo初始化用户
###### 示例中创建的用户名字为admin、密码为admin、role角色为root。
#### 示例中创建的用户名字为admin、密码为admin、role角色为root。
```shell
use admin;
......@@ -200,11 +198,9 @@ db.createUser(
### 2.4、Docker
#### 2.4.1、版本为18.09.2
#### 2.4.2、配置文件
- #### 版本说明:18.09.2
###### 以下是/etc/docker/daemon.json示例,配置了加速仓库以及insecure registry地址。
- #### 配置文件说明:以下是/etc/docker/daemon.json示例,配置了加速仓库以及insecure registry地址。
```json
{
......@@ -213,7 +209,7 @@ db.createUser(
}
```
###### 以下是docker.service配置文件,这里主要通过 --graph设置了docker数据目录为/data/dock er。通过EnvironmentFile=/run/flannel/subnet.env以及$DOCKER_NETWORK_OPTIONS 参数实现了docker对接flannel网络插件的配置(我们的flannel网络插件是二进制方式安装如,果是其他方式比如CSI可以参考官方文档如何配置与docker对接)
#### 以下是docker.service配置文件,这里主要通过 --graph设置了docker数据目录为/data/docker,因为docker镜像往往会越来越大,/data目录我们是单独挂载的大容量ssd硬盘,然后通过EnvironmentFile=/run/flannel/subnet.env以及$DOCKER_NETWORK_OPTIONS 参数实现了docker对接flannel网络插件的配置,此处我们的flannel网络插件是二进制方式安装的,如果是其他方式比如CSI可以参考官方文档如何配置与docker对接的。
```
[Unit]
......@@ -243,25 +239,17 @@ WantedBy=multi-user.target
### 2.5、kubernetes
#### 2.5.1、版本为1.15.5
#### 2.5.2、其他要求
###### k8s集群中网络组件为flannel
###### k8s集群中dns组件为coredns,对应的svc名字需要为kube-dns
#### 版本说明:1.15.5
###### k8s集群中kubelet数据目录为/data/kubelet,二进制部署时可以通过--root-dir设置,其他部署方式见官方文档
#### 其他说明:k8s集群中网络组件为flannel、k8s集群中dns组件为coredns,需要注意的对应的svc名字需要为kube-dns、k8s集群中kubelet数据目录为/data/kubelet,因为默认是/var/lib/kubelet,服务可能会使用empty dir类型的存储卷,上面产生的数据会存储到kubelet数据目录上,所以这里修改了kubelet数据目录,另外平台部署yaml中声明了需要hostpath挂载kubelet数据目录下的pod-resources,目前这里我们的hardcode写死为/data/kubelet所以需要0保持一致。二进制部署时可以通过--root-dir设置,其他部署方式见官方文档。
### 2.6、Nvidia-docker2
#### 2.6.1、版本为2.2.1
#### 版本说明:2.2.1
#### 2.6.2、注意事项
#### 其他说明:Nvidia-docker2只有gpu服务器需要装,不要在cpu服务器上安装。
###### Nvidia-docker2只有gpu服务器需要装,不要在cpu服务器上安装。
###### 以下示例为安装了Nvidia-docker2的docker daemon.json示例为
#### 以下示例为安装了Nvidia-docker2的docker daemon.json示例为
```json
{
......@@ -279,7 +267,7 @@ WantedBy=multi-user.target
### 2.7、 Nvidia-device-plugin插件
###### k8s集群安装好,将以下内容报错为yaml文件,通过kubectl apply -f 创建即可。需要注意yaml 中hostpath /var/lib/kubelet/device-plugins是否存在kubelet.sock,更改了kubelet数据目录为/data/后,此处需要保持一致/data/kubelet/device-plugins
#### k8s集群安装好,将以下内容报错为yaml文件,通过kubectl apply -f 创建即可。需要注意yaml 中hostpath /var/lib/kubelet/device-plugins是否存在kubelet.sock,更改了kubelet数据目录为/data/后,此处需要保持一致/data/kubelet/device-plugins
```
# Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved.
......@@ -348,11 +336,11 @@ spec:
### 2.8、镜像仓库
###### 镜像仓库可以选择registry或者harbor。用于推送拉取和推送docker镜像。
#### 镜像仓库可以选择registry或者harbor。用于推送拉取和推送docker镜像。
### 2.9、NFS共享存储
###### 服务端配置:
- #### 服务端配置
```shell
$ apt install nfs-kernel-server -y
......@@ -365,23 +353,21 @@ vim /etc/exports 添加:
service nfs-kernel-server restart 重启生效
```
###### 客户端配置:所有k8s节点需要安装好nfs客户端 nfs-common,pod才能够正常挂载。
- #### 客户端配置
#### 所有k8s节点需要安装好nfs客户端 nfs-common,pod才能够正常挂载。
```shell
$ apt install nfs-common -y
```
###### 注意事项:
###### 使用async模式,上传数据集压缩包时解压超时
###### 开启no_root_squash ,防止权限问题
#### 注意事项:使用async模式,上传数据集压缩包时解压超时,开启no_root_squash ,防止权限问题
## 三、配置平台k8s维度的基础环境
#### 3.1、创建namespace、serviceaccout、secrets、pv 、pvc等资源
- #### 创建namespace、serviceaccout、secrets、pv 、pvc等资源
###### 相关的配置在https://tingweiwang@gitlab.seetatech.com/tingweiwang/ksy-project-docking.git 的kpl_base目录,平台有两个namespace一个是autodl另外一个是kpl 。kpl_base下面的子目录中分别存放了这两个namespace的资源配置。
#### 相关的配置在https://tingweiwang@gitlab.seetatech.com/tingweiwang/ksy-project-docking.git 的kpl_base目录,平台有两个namespace一个是autodl另外一个是kpl 。kpl_base下面的子目录中分别存放了这两个namespace的资源配置。
```shell
# 针对nfs实际部署情况修改kpl_base/autodl/4-pv_pvc 以及kpl_base/kpl/4-pv_pvc信息。
......@@ -390,9 +376,9 @@ $ kubectl apply -f kpl_base/autodl/
$ kubectl apply -f kpl_base/kpl/
```
#### 3.2、创建镜像仓库imagePull secrets
- #### 创建镜像仓库imagePull secrets
###### 某些用户的镜像仓库项目目录并不是公有类型,无法直接pull镜像,需要配置imagePull secrets,假如你们的镜像仓库不需要认证,此时仍需要创建该secrets,因为在部署yaml中已经配置引用了。你可以配置一个空的也可以。secrets名字为harbor-secret
#### 某些用户的镜像仓库项目目录并不是公有类型,无法直接pull镜像,需要配置imagePull secrets,假如你们的镜像仓库不需要认证,此时仍需要创建该secrets,因为在部署yaml中已经配置引用了。你可以配置一个空的也可以。secrets名字为harbor-secret
```shell
kubectl create secret -n autodl docker-registry \
......@@ -412,15 +398,15 @@ kubectl create secret -n kpl docker-registry \
harbor-secret
```
#### 3.3、节点打label
- #### 节点打label
##### 3.3.1、cpu节点标签
#### 1、cpu节点标签
```shell
kubectl label node <节点名> autodl=true kpl=true cpu=true user_job_node=true internal_service_node=true
```
##### 3.3.2、gpu节点标签
#### 2、gpu节点标签
```shell
kubectl label node <节点名> autodl=true kpl=true gpu=true cpu=true user_job_node=true internal_service_node=true
......@@ -428,9 +414,9 @@ kubectl label node <节点名> autodl=true kpl=true gpu=true cpu=true user_job_n
## 四、配置文件介绍及创建
###### 配置文件configmap模板仓库为https://tingweiwang@gitlab.seetatech.com/tingweiwang/configmap.git ,里面包含了平台所需配置文件的模板,需要配合下面的sed-config.sh脚本进行渲染。
#### 配置文件configmap模板仓库为https://tingweiwang@gitlab.seetatech.com/tingweiwang/configmap.git ,里面包含了平台所需配置文件的模板,需要配合下面的sed-config.sh脚本进行渲染。
###### 修改configmap模板渲染脚本在https://tingweiwang@gitlab.seetatech.com/tingweiwang/ksy-project-docking.git项目中有一个sed-configmap目录里面有一个sed-config.sh用于渲染configmap的脚本。需要根据环境实际情况更改变量,相关变量介绍已经在sed-config.sh中介绍。
#### 修改configmap模板渲染脚本在https://tingweiwang@gitlab.seetatech.com/tingweiwang/ksy-project-docking.git项目中有一个sed-configmap目录里面有一个sed-config.sh用于渲染configmap的脚本。需要根据环境实际情况更改变量,相关变量介绍已经在sed-config.sh中介绍。
```shell
$ sh sed-config.sh
......@@ -440,25 +426,27 @@ $ kubectl apply -f {configmap目录}/kpl
## 五、服务创建
#### 5.1、服务yaml文件位置介绍
- #### 服务yaml文件位置介绍
#### 各个组件的yaml文件在https://tingweiwang@gitlab.seetatech.com/tingweiwang/ksy-project-docking.git中的kpl_deploy_yaml中。每个组件下面的目录都有服务yaml文件。
###### 各个组件的yaml文件在https://tingweiwang@gitlab.seetatech.com/tingweiwang/ksy-project-docking.git中的kpl_deploy_yaml中。每个组件下面的目录都有服务yaml文件。
- #### 服务镜像列表如下
#### 5.2、服务镜像列表如下
#### 该镜像仓库是公有仓库,可以从公网下载。镜像替换时,根据服务yaml中的镜像名去匹配替换即可。
```shell
hb.seetatech.com/core/adl-core-v1:20200902205144
hb.seetatech.com/core/core--nginx:20200902205144
hb.seetatech.com/core/core--collector:20200902205144
hb.seetatech.com/seetaas/kpl-backend-v1:20200902205144
hb.seetatech.com/seetaas/kpl--nginx:20200902205144
hb.seetatech.com/seetaas/kpl--frontend:20200902205144
hb.seetatech.com/seetaas/kpl-stream-v1:20200902205144
hb.seetatech.com/core/adl-core-v1:20200907193152
hb.seetatech.com/core/core--nginx:20200907193152
hb.seetatech.com/core/core--collector:20200907193152
hb.seetatech.com/seetaas/kpl-backend-v1:20200907193152
hb.seetatech.com/seetaas/kpl--nginx:20200907193152
hb.seetatech.com/seetaas/kpl--frontend:20200907193152
hb.seetatech.com/seetaas/kpl-stream-v1:20200907193152
```
#### 5.3、服务部署创建
- #### 服务部署创建
###### 将yaml中的image改为自己的镜像信息(<仓库地址>/<项目目录>/<镜像名和tag>),然后通过kubectl apply -f部署
#### 将yaml中的image改为自己的镜像信息(<仓库地址>/<项目目录>/<镜像名和tag>),然后通过kubectl apply -f部署
```shell
$ kubectl apply -f kpl_deploy_yaml/1-autodl-core
......@@ -471,13 +459,13 @@ $ kubectl apply -f kpl_deploy_yaml/5-kpl-launcher/kpl-launcher
## 六、服务端口暴露以及访问
#### 6.1、k8s集群外部服务端口
- #### k8s集群外部服务端口
###### 30180端口:服务采用nodeport形式对外暴露,通过nodeport类型的 kpl--nginx-svc的30180端口将流量进行转发。
#### 30180端口:服务采用nodeport形式对外暴露,通过nodeport类型的 kpl--nginx-svc的30180端口将流量进行转发。
###### 30205端口:通过nodeport暴露的tcp服务,对应kpl--stream的svc用于平台能够通过ssh进入容器的服务
#### 30205端口:通过nodeport暴露的tcp服务,对应kpl--stream的svc用于平台能够通过ssh进入容器的服务
#### 6.2、平台地址访问
- #### 平台地址访问
```shell
http://<node_ip>:30180
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!