1、演讲人:段绪勇目 录01背景03实践中的关键技术04案例分析02云原生的优化实践05Q&A背景25002400300032903290300010009301090115011901250807080901031192019年2020年2021年2022年2023年2024年(预估)各国广告市场美国广告市场中国广告市场单位:亿美元A流量分发B策略引擎C预测服务D数据处理E 大部分的模块都是单体应用 不同的系统、不同硬件使用的优化参数不同,应用需要单独调优 单体应用在突发的流量下,无法做到快速的扩容 Jenkins对于新旧服务器上线无法做到自动化管理,影响CICD时效性代码发布仓库集成流水线工具
2、支撑监控报警应用镜像构建任务调度k8s平台裸金属集群容器集群自建机房混合云部署执行引擎金丝雀/狗粮部署策略基于云原生的架构实践传统虚拟机管理中,资源分配固定,难以应对突发的计算需求,导致资源浪费或不足。资源分配限制1随着业务增长,传统虚拟机的扩展性受限,无法快速适应新的工作负载,影响业务发展。扩展性问题2虚拟机的维护和更新往往需要停机,这在现代业务中是不可接受的,限制了系统的灵活性。维护和更新困难3 每次新环境都需要手动配置 无法感知新服务器上线 手动管理SSH密钥,无法通过安全审计git repositoryRepoJenkins ServerBuild JobpushTriggerServ
3、erApplicationDeploy功能完备对新环境比较友好,开箱即用社区氛围活跃,支持多种语言对硬件支持良好支持计算资源池化存储资源池化网络资源池化开源且完善API强大调用路径长无法结合现有系统API身份验证镜像请求控制器调度调度Libvirt扣费体系鉴权体系资源管理系统Libvirt 上千台虚拟机如何与k8s相结合?Libvirt的优势有高级语言的SDK,二次开发非常方便XML配置描述清晰,依赖关系一目了然XML文件可通过Mysql存储,适合二次开发KubeVirt无缝集成 virtctl create-f ad.yaml virtctl start ad用户描述资源需求配置好资源的YA
4、ML描述VM对应的资源情况kubevirt与Libvirt交互判断指令资源配置文件调用Libvirt进行对应的操作控制器资源请求对yaml资源打包成pod向k8s调度器发起调度请求调度器开始调度预选阶段(对CPU.做筛选)亲和性筛选(是否有建议标签)节点有污染标签是否可用节点健康度自定义算法(核心、非核心调试)状态反馈向调度器反馈VM最终的状态kubectl describe node nevis 实现ListAndWatch 实时拥有热插拔感知 实现RegisterRequest 非内置资源设备状态检测LibvirtXENQEMUHyper-VVM ESXietcdk8s Master no
5、deAPI server:k8s Worker nodeDevice plugin ManagerDevice pluginGUPFGPAListAndWatch()RegisterRequest()健康检查注册资源资源分配接收设备信息POD调度获取非内置资源(如 GPU、FPGA 等)并提供设备的数量和状态k8s记录对应的非标请求节点满足Pod的资源请求,Kubelet 将其标记为可调度定期进行健康状态。出现故障,重新调度resources:limits: Kubelet 在创建容器时将设备映射到容器中以确保容器能够访问分配的硬件资源MAC可恢复的硬件故障发生Crash的硬件故障3引发系统崩
6、溃的硬件故障k8s心跳机制,控制器重新调度2对于潜在可恢复的硬件故障,提前知晓hwpoison检测到内存错误时,对内存页标注为有毒页通知对应的虚拟机,温和处理1硬盘状态smartctl工具文件系统fsck工具内存的hwpoison机制 业务制定权重确定告警间隔 权重超过70立即执行 超核心业务可到秒级 核心业务3分,1,5分,45秒间隔 每次报警间隔3分钟 每天有迁移上限 每半天有不重复迁移日志收集Kube-state-metricsPrometheusGrafana监控平面告警动作忽略钉钉邮件核心服务流量抖动迁移策略ClusterClusterClus