《李明宇-行业应用迁移到云原生环境的挑战、路径与实践.pdf》由会员分享,可在线阅读,更多相关《李明宇-行业应用迁移到云原生环境的挑战、路径与实践.pdf(30页珍藏版)》请在三个皮匠报告上搜索。
1、行业应用迁移到云原生环境的挑战、路径与实践主讲人:李明宇演讲嘉宾介绍李明宇 中科院计算所高级工程师 二十年编程老师傅 中科院计算所高级工程师,开源项目活跃开发者,20 余年编程与软件开发经验,10余年云端系统研发与产业化工作经历。历任国家重点实验室研究组负责人,上市公司事业群技术总监、首席技术专家。李老师在理论研究和产业实践均有丰富的经验,为多家知名企业和单位落地云原生和数字化转型项目。荣获中国软件协会“优秀CTO”等多项荣誉,兼任中国新一代IT产业联盟分委会秘书长、全国高校人工智能与大数据创新联盟专家委员、北京开源创新委员会委员。CONTENT目录01云原生对于行业数字化的意义及挑战行业应用
2、迁移到云原生环境实践分享0203行业应用迁移到云原生环境的技术路径04 大模型与AIGC带来新挑战与方案云原生对于行业数字化的意义及挑战MachineNativeHardwareSoftwareVirtual MachineCloud ServerPlatformApplicationSoftwareCloud Native数字化转型导致业务系统的复杂度和规模迅速增长,分布式应用和多云/混合云架构成为主流。业务对IT系统的依赖达到了空前的高度,对其可用性、敏捷性和可扩展性提出了新的要求。API(大规模的、复杂的)业务系统可用性敏捷性可扩展性云原生对于行业数字化的意义及挑战分布式应用(微服务、A
3、I、HPC )将数据中心(而不再是机器)视为运行环境云原生应用API云原生平台(数据中心操作系统)驱动(插件)云原生基础设施资源将计算、存储、网络等基础设施资源对接到云原生平台 供给支撑应用运行Kernel对上提供一组功能与接口赋能云原生应用的构建和运行对下管理数据中心级的基础设施资源云原生对于行业数字化的意义及挑战1.容器化2.Pod设计sidecarinitContainers3.工作负载设计:Deployment、Service、StatefulSet、Headless Service4.逐步迁移至 K8s,保持部署在 K8s 上的服务实例和部署在机器上的服务实例能够相互发现、相互调用行
4、业应用迁移到云原生环境的技术路径编写dockerfile(或用工具生成)行业应用迁移到云原生环境实践分享FROM centos:7RUN yum-y update&yum-y install httpd phpCOPY./src/var/www/html/EXPOSE 80CMD/usr/sbin/httpd,-D,FOREGROUNDFROM php:8.2.7-apacheCOPY./src/var/www/html/容器化对比:体积/大小分层复用安全性功能单一原则行业应用迁移到云原生环境实践分享FROM centos:7RUN yum-y update&yum-y install htt
5、pd phpCOPY./src/var/www/html/EXPOSE 80CMD/usr/sbin/httpd,-D,FOREGROUNDFROM php:8.2.7-apacheCOPY./src/var/www/html/容器化对比:体积/大小分层复用安全性功能单一原则行业应用迁移到云原生环境实践分享容器化FROM maven:3.8.2-jdk-11 AS build-envADD src/app/srcADD pom.xml/app/WORKDIR/appRUN mvn package FROM gcr.io/distroless/java:11COPY-from=build-env
6、/app/target/mymicroservice.jar/app/WORKDIR/appEXPOSE 8080CMD mymicroservice.jar分阶段构建行业应用迁移到云原生环境实践分享容器化分阶段构建将第三方(可能是外协开发团队或者定制开发供应商)环境引入 DevOps(CI/CD)流水线FROM limingyu007/rust-with-config:1.54.0 as builderWORKDIR/root/guessing_gameCOPY.#RUN su-c cargo-vv b rootRUN cargo-vv install-path.FROM limingyu0
7、07/gcr.distroless.cc:20210814COPY-from=builder/usr/local/cargo/bin/guessing_game/ENV MAX_NUM=100 MAX_TRIES=10CMD/guessing_game行业应用迁移到云原生环境实践分享容器化分阶段构建C+应用的容器化 动态链接库的处理FROM ubuntu:20.04 as builder#switch to root user to install packagesUSER root ENV DEBIAN_FRONTEND=noninteractiveRUN apt update&apt in
8、stall-y zsh git build-essential csh gfortran m4 libcurl4-gnutls-dev zlib1g-dev mpich libmpich-dev#2-stage buildFROM ubuntu:20.04 COPY-from=builder/WRF/main/wrf.exe/app/mpi-funcCOPY-from=builder/3rdParty/libs/lib/行业应用迁移到云原生环境实践分享Pod Design 一个Pod可以由一个或多个容器组成 一个Pod中容器共享网络命名空间,在同一台机器上运行k8s nodek8s nodeP
9、odPodPodPod行业应用迁移到云原生环境实践分享Pod Design 一个Pod可以由一个或多个容器组成 一个Pod中容器共享网络命名空间,在同一台机器上运行k8s nodek8s nodePodPodPodPodSidecar 行业应用迁移到云原生环境实践分享Pod DesignapiVersion:v1kind:Podmetadata:name:my-podspec:containers:-name:main-appimage:my-applicationvolumeMounts:-name:log-volumemountPath:/var/log-name:sidecar-log-
10、handlerimage:busybox:1.28args:/bin/sh,-c,tail-n+1-f/var/log/my.logvolumeMounts:-name:log-volumemountPath:/var/logvolumes:-name:log-volumeemptyDir:不改代码,不跑agent,把本地文件日志转成云原生标准输出日志行业应用迁移到云原生环境实践分享Pod DesignapiVersion:v1kind:Podmetadata:name:video-transcoding-podspec:initContainers:-name:download-video
11、image:video-downloader:latest volumeMounts:-name:video-volume mountPath:/videos containers:-name:transcode-video image:video-transcoder:latest volumeMounts:-name:video-volume mountPath:/videos volumes:-name:video-volume emptyDir:initContainers准备容器为主容器(或其他容器)的运行准备数据/环境例:视频转码延时容器延迟后续容器的启动,直到外部依赖已就绪例:卫
12、星数据接收行业应用迁移到云原生环境实践分享故障检查与处理livenessProbe如果检查失败,Kubernetes将杀死容器,默认设置下,该容器将重启readinessProbe如果检查失败,Kubernetes会把Pod从服务代理的分发后端剔除startupProbe每种Probe主要支持以下三种检查方法:httpGet发送HTTP请求,返回200-400范围状态码为成功。exec执行Shell命令返回状态码是0为成功。tcpSocket发起TCP Socket建立成功。在K8s上构建和运行生产级服务gRPC 检查 1.24 beta行业应用迁移到云原生环境实践分享 containers:
13、-name:hello-springimage:hello-spring:v0.3readinessProbe:httpGet:path:/actuator/health/readinessport:8080initialDelaySeconds:30timeoutSeconds:2periodSeconds:3failureThreshold:1livenessProbe:httpGet:path:/actuator/health/livenessport:8080initialDelaySeconds:20timeoutSeconds:2periodSeconds:8failureThre
14、shold:2在K8s上构建和运行生产级服务 containers:-name:ftp image:your-ftp-image ports:-containerPort:21 livenessProbe:tcpSocket:port:21 initialDelaySeconds:5 periodSeconds:10 readinessProbe:exec:command:-sh -c -|ftp-n-v localhost 21 EOF user anonymous anonymous ls quit EOF initialDelaySeconds:5 periodSeconds:5行业应用
15、迁移到云原生环境实践分享在K8s上构建和运行生产级微服务apiVersion:apps/v1kind:Deploymentmetadata:name:lifecyclehook-demo-phpspec:selector:matchLabels:app:lifecyclehook-demo-phpreplicas:3template:metadata:labels:app:lifecyclehook-demo-phpspec:containers:-name:my-phpimage:limingyu007/phpsleepdemo:v2lifecycle:preStop:exec:comman
16、d:sh,-c,sleep 3优雅下线 长连接、慢请求例子:报表生成apiVersion:v1kind:Podmetadata:name:report-generatorspec:containers:-name:report-generator image:report-generator-image ports:-containerPort:8080 terminationGracePeriodSeconds:120行业应用迁移到云原生环境实践分享在K8s上构建和运行生产级服务statfulset和headless service 除了数据库和Kafka,还可以用在哪?1.同一份代码要运行
17、多个实例,每个服务实例要持久化/暂存/加载自己的数据;2.每个实例要独立寻址(不能一个IP负载均衡,更不能roundrobin);3.自动检测故障并恢复,恢复后数据不丢失;4.配置统一管理,每个实例可能在加载配置时根据具体情况进行一些修改,例如hostname符合以上一个或多个条件,可以选择用 statfulset+headless service 例:IoT或者工业控制领域:轨道交通、智能制造 行业应用迁移到云原生环境实践分享基于 Spring Cloud 和 dubbo 开发的应用迁移到 K8s 和 Istio 环境行业应用迁移到云原生环境实践分享基于 Spring Cloud 和 dub
18、bo 开发的应用迁移到 K8s 和 Istio 环境行业应用迁移到云原生环境实践分享跑批、离线任务、一次性任务、周期任务 apiVersion:batch/v1kind:Jobmetadata:name:grape-mpi-workersspec:completions:4parallelism:4completionMode:Indexedtemplate:metadata:labels:app:grape-mpitype:workersspec:containers:-name:grape-mpiimage:limingyu007/run_app:v1.1restartPolicy:Nev
19、erapiVersion:kubeflow.org/v1alpha2kind:TFJobmetadata:name:dist-mnist-pctspec:tfReplicaSpecs:PS:replicas:1restartPolicy:Nevertemplate:spec:containers:-name:tensorflowimage:emsixteeen/tf-dist-mnistWorker:replicas:2restartPolicy:Nevertemplate:spec:containers:-name:tensorflowimage:emsixteeen/tf-dist-mni
20、st行业应用迁移到云原生环境实践分享CRD与Operator,例子:AI训练任务、分布式视频转码#nginx-deployment.yamlapiVersion:apps/v1beta2kind:Deploymentmetadata:name:nginx-deploymentspec:replicas:3selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginxspec:containers:-name:nginximage:nginx:1.10ports:-containerPort:80行业应用迁移到云原生环境实践分享C
21、RD与Operator,例子:AI训练任务、分布式视频转码apiVersion:kubeflow.org/v1alpha2kind:TFJobmetadata:name:dist-mnist-pctspec:tfReplicaSpecs:PS:replicas:1restartPolicy:Nevertemplate:spec:containers:-name:tensorflowimage:emsixteeen/tf-dist-mnistWorker:replicas:2restartPolicy:Nevertemplate:spec:containers:-name:tensorflowi
22、mage:emsixteeen/tf-dist-mnist大模型与AIGC带来新挑战与方案OpenAI:我们将 Kubernetes 扩展到了 7500 个节点 GPU:NVLink/GPUDirect 计算密集:单个Pod占用整个节点 对象存储(Blob)使用多于文件存储 网络:VPC网络插件 5 个 API 服务器和 5 个 etcd 节点 节点级健康检查 Gang Scheduling大模型与AIGC带来新挑战与方案AI内容生成服务传统微服务&Web服务资源调度:GPU Sharing (训练时多卡分布式、推理时GPU共享)CPU+内存执行时间:十秒到分钟级,根据用户请求参数有所不同百毫秒级、秒级,绝大多数用户请求响应时间一致可扩展性:Session保持、优雅下线无状态服务,相对简单更新迭代:模型更新更新迭代:新功能、bug fixVSTHANKS