Eni多IP方案调研
背景
Eni多IP方案是由 VPC 功能负责路由,打通容器网络的连通性,可实现 Pod 和 Node 的控制面和数据面完全在同一网络层面,该模式下的 Pod 能够复用VPC 所有产品特性。
VPC-CNI(多IP共享) 模式和VPC-CNI(独占)模式下,集群内 Pod 与 Node 的 IP 均来自同一 VPC。区别是,独占模式指的是pod独享一块弹性网卡,而多IP共享模式指的是多个pod共享一块弹性网卡,将弹性网卡的辅助ip分配给pod,通过这种方式,增加单个Node上可以创建的pod数量。
注:但由于弹性网卡辅助 IP 数量的限制,单个 Node 上可以创建的 Pod 数量仍然会受到限制,但综合pod数量和性能的考虑,目前该方案已属较优。
ENI多IP方案支持的最大Pod数=(云主机支持的ENI数-1)×单个ENI支持的私有IP个数
跳过CloudFlare 5秒盾和浏览器检查
被 Cloudflare 保护的站点,在初次访问时,会等待 5 秒钟的验证,检测你是不是通过浏览器正常访问的,如下图:
爬虫如何绕过 Cloudflare 的 DDos 保护验证
本文主要说明如果通过技术手段绕过这个验证,我试了两种办法,都管用。
Docker daemon 宕机期间保持容器存活
默认情况下,当 Docker daemon 退出的时候, 会关闭正在运行的容器。从 1.12 开始,可以配置 daemon 参数,使容器在 daemon 进程不可用的时候已经保持运行。改参数降低了在 daemon 崩溃、计划性维护以及升级时容器的停止时间。
vGPU隔离方案
主要两个思路:
- 将GPU纳入cgroup管理,目前尚未有成熟的提案,短期内难以实现(阿里云估计是基于cgroup实现的);
- 基于GPU驱动封装实现,用户根据需要对驱动的某些关键接口(如显存分配、cuda thread创建等)进行封装劫持,在劫持过程中限制用户进程对计算资源的使用。
此类方案缺点是兼容性依赖于厂商驱动,但是整体方案较为轻量化,性能损耗极小(腾讯云的gpu-manager采用了该方案,据了解浪潮也是采用的这个方案)。
下面,基于对gpu-manager的源码和论文进行研究,讲述“劫持”方案的实现原理。
k8s集群GPU调研报告
vGPU虚拟化方案
前言
近几年,随着云计算、机器学习、人工智能、高性能计算、区块链等的兴起,GPU以其在浮点运算与并行运算性能方面的出色表现有了海量的市场需求。GPU早已经不再只是显示卡,而是成为了CPU 之外更大的计算模块。如今,GPU对企业的发展越来越重要。但是,相较于CPU,GPU价格昂贵。所以,如何提高GPU的使用率,对于客户来讲就非常重要。而GPU虚拟化正是能够帮助客户合理分配和使用GPU资源的关键技术。
从用户角度,GPU虚拟化分为虚拟机层面的虚拟化和容器层面的虚拟化。本方案中只针对后者展开讲述。目前,在实现方面主要有两个思路,一个是内核驱动,将GPU纳入cgroup管理,比如阿里云的cGPU方案;二是采用类rCuda方案,将GPU驱动封装劫持,从而限制用户进程对资源的使用。考虑到第二种方案的轻量性,本文的vGPU方案即采用了它。