Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Serving
提交
364ec04d
S
Serving
项目概览
PaddlePaddle
/
Serving
1 年多 前同步成功
通知
186
Star
833
Fork
253
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
105
列表
看板
标记
里程碑
合并请求
10
Wiki
2
Wiki
分析
仓库
DevOps
项目成员
Pages
S
Serving
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
105
Issue
105
列表
看板
标记
里程碑
合并请求
10
合并请求
10
Pages
分析
分析
仓库分析
DevOps
Wiki
2
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
364ec04d
编写于
3月 15, 2022
作者:
T
TeslaZhao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update doc
上级
f0f1723c
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
112 addition
and
0 deletion
+112
-0
doc/Offical_Docs/2-4_Kubernetes_CN.md
doc/Offical_Docs/2-4_Kubernetes_CN.md
+112
-0
doc/Offical_Docs/3-0_QuickStart_Int_CN.md
doc/Offical_Docs/3-0_QuickStart_Int_CN.md
+0
-0
doc/Offical_Docs/3-2_QuickStart_Pipeline_OCR_CN.md
doc/Offical_Docs/3-2_QuickStart_Pipeline_OCR_CN.md
+0
-0
doc/Offical_Docs/4-0_ModelZoo_CN.md
doc/Offical_Docs/4-0_ModelZoo_CN.md
+0
-0
doc/images/kubernetes_design.png
doc/images/kubernetes_design.png
+0
-0
未找到文件。
doc/Offical_Docs/2-4_Kubernetes_CN.md
0 → 100644
浏览文件 @
364ec04d
# Kubernetes 集群部署
Kubernetes 是一个基于容器技术的分布式架构的解决方案,是云原生容器集群管理系统,提供服务发现与负载均衡、存储编排、自动部署和回滚、资源管理、自动恢复以及密钥和配置管理。Paddle Serving 支持 Kubenetes 集群部署方案,为企业级用户提供集群部署示例。
## 部署方案
为了解决 Pod 迁移、Node Pod 端口、域名动态分配等问题,选择使用 Ingress 解决方案,对外提供可访问的 URL、负载均衡、SSL、基于名称的虚拟主机等功能。在众多 Ingress 插件中选用 Kong 作为微服务的 API 网关,因其具备以下优势:
-
拥有丰富的微服务功能,如 API认证、鉴权、DDos保护和灰度部署等
-
提供一些 API、服务的定义,可抽象成 Kubernetes 的 CRD,通过 Kubernetes Ingress 配置实现同步状态到 Kong 集群
-
集群配置信息存储在 postgres 数据库,配置信息实现全局节点共享和实时同步
-
有成熟的第三方管理 UI,实现可视化管理 Kong 配置
Paddle Serving 的 Kubernetes 集群部署方案设计如下图所示,用户流量通过 Kong Ingress 转发到 Kubernetes 集群。Kubernetes 集群负责管理 Service 和 Pod 实例。
<p
align=
"center"
>
<img
src=
"../images/kubernetes_design.png"
width=
"250"
>
</p>
## 部署步骤
**一. 准备环境**
推荐
[
购买并使用百度智能云 CCE 集群
](
https://cloud.baidu.com/doc/CCE/index.html
)
,提供完整的部署环境。如自行安装 Kubenetes 集群,请参考
[
教程
](
https://kubernetes.io/zh/docs/setup/
)
。
此外,还需要准备一个用于 Kubenetes 集群部署的镜像仓库,通常与云服务提供商绑定,如果使用百度智能云的CCE集群,可以参照
[
百度智能云 CCR 镜像仓库使用方式
](
https://cloud.baidu.com/doc/CCR/index.html
)
。当然 Docker Hub 也可以作为镜像仓库,但下载速度慢,集群扩容时间较长。
在 Kubenetes 集群中运行下面命令,安装网关工具 Kong
```
kubectl apply -f https://bit.ly/kong-ingress-dbless
```
**二. 制作镜像**
首先,可直接使用 Paddle Serving 提供的镜像作为 Base 制作业务镜像,或者重新制作镜像。Paddle Serving 提供以下3种镜像,区别如下:
-
开发镜像:安装多种开发工具,可用于调试和编译代码,镜像体积较大。
-
运行镜像:安装运行 Serving 的必备工具,经过裁剪后镜像体积较小,适合在存储受限场景使用
-
Java 镜像:为 Java SDK 提供基础环境,包括 JRE、JDK 和 Maven
-
XPU 镜像:为 Arm 或 异构硬件(百度昆仑、海光DCU)环境部署
完整镜像列表,请参考
[
DOCKER 开发镜像列表
](
./Docker_Images_CN.md
)
其次,需要在镜像文件中添加 Serving 业务代码和模型。假定按上述步骤已拥有Serving运行镜像 paddle_serving:cuda10.2-py36,以 PaddleOCR 文字识别任务为例展示镜像制作方法。
```
bash
# run docker
docker run
--rm
-dit
--name
pipeline_serving_demo paddle_serving:cuda10.2-py36 bash
cd
Serving/examples/Pipeline/PaddleOCR/ocr
# get models
python
-m
paddle_serving_app.package
--get_model
ocr_rec
tar
-xzvf
ocr_rec.tar.gz
python
-m
paddle_serving_app.package
--get_model
ocr_det
tar
-xzvf
ocr_det.tar.gz
cd
..
# copy OCR directory to your docker
docker
cp
ocr pipeline_serving_demo:/home/
# commit and push it
docker commit pipeline_serving_demo registry.baidubce.com/paddlepaddle/serving:k8s-pipeline-demo
docker push registry.baidubce.com/paddlepaddle/serving:k8s-pipeline-demo
```
最终,你完成了业务镜像制作环节。
**三. 集群部署**
Paddle Serving 封装了脚本 generate_k8s_yamls.sh 用以生成 Kubernetes 部署配置。以 OCR 为例,运行以下命令生成 Kubernetes 集群配置。
```
sh tools/generate_k8s_yamls.sh --app_name ocr --image_name registry.baidubce.com/paddlepaddle/serving:k8s-pipeline-demo --workdir /home/ocr --command "python3.6 web_service.py" --port 9999
```
需要注意的是 app_name 需要同 URL 的函数名相同。例如 ocr 示例的访问 URL 是 https://127.0.0.1:9292/ocr/prediction。
运行命令后,生成2个 yaml 文件,分别是 k8s_serving.yaml 和 k8s_ingress.yaml。执行以下命令启动 Kubernetes 集群 和 Ingress 网关。
```
kubectl apply -f k8s_serving.yaml
kubectl apply -f k8s_ingress.yaml
```
最终通过输入以下命令检验集群部署状态:
```
kubectl get deploy
```
部署状态如下:
```
NAME READY UP-TO-DATE AVAILABLE AGE
ocr 1/1 1 1 2d20h
```
查询集群服务状态:
```
kubectl get service --all-namespaces
```
集群部署状态如下:
```
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default bert ClusterIP 172.16.86.12 <none> 9292/TCP 20m
default kubernetes ClusterIP 172.16.0.1 <none> 443/TCP 28d
default ocr ClusterIP 172.16.152.43 <none> 9999/TCP 50m
kong kong-proxy LoadBalancer 172.16.88.132 <pending> 80:8893/TCP,443:8805/TCP 25d
kong kong-validation-webhook ClusterIP 172.16.38.100 <none> 443/TCP 25d
kube-system heapster ClusterIP 172.16.240.64 <none> 80/TCP 28d
kube-system kube-dns ClusterIP 172.16.0.10 <none> 53/UDP,53/TCP,9153/TCP 28d
kube-system metrics-server ClusterIP 172.16.34.157 <none> 443/TCP 28d
```
doc/Offical_Docs/3-0_QuickStart_Int_CN.md
0 → 100644
浏览文件 @
364ec04d
doc/Offical_Docs/3-2_QuickStart_Pipeline_OCR_CN.md
0 → 100644
浏览文件 @
364ec04d
doc/Offical_Docs/4-0_ModelZoo_CN.md
0 → 100644
浏览文件 @
364ec04d
doc/images/kubernetes_design.png
0 → 100644
浏览文件 @
364ec04d
33.6 KB
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录