理解了云计算的实质,Kubernetes就好理解了,它提供的是容器云。在私有数据中心,服务运行在物理主机的Host OS上,云计算场景下运行在虚拟机上,k8s场景下应用运行在容器内,容器替代了虚拟机。 容器是什么? 相对虚拟化,容器是更轻量级的技术,它将应用软件及依赖打包在一起,便于部署和迁移。如果说Java语言实现了一次编译,处处运行,那么容器实现了一次安装,多次运行。在Linux上,容器技术的底层实现机制是Linux Kernel的Control Group(CGroup)。它维护各种各样的名字空间(进程ID,IPC,网络等等),并按照Group管理系统资源分配和释放。可以在每个CGroup上施加限制(CPU、内存、IO等等),确保资源的使用配额。所有的容器可以有自己的资源和文件系统镜像,但是共享内核。容器比虚拟机开销小,性能上占优势。虚拟机比容器隔离性(isolation)好,更容易保证不同租客不相互影响。 容器技术有多种选择,Docker和Singularity是两种比较流行的选择。它们的底层机制是共通的,但是在镜像管理上有差别。Docker通过层(Layer)与层的叠加优化镜像空间的利用率,通过Overlay2文件系统实现只读共享和写时拷贝。Singularity采用不同的文件格式(SIF),通过压缩技术优化空间利用率,镜像主体部分只读共享。无论Docker和Singularity都不适合容器内部大量读写,所以容器需要和外部存储结合使用,容器镜像承载只读的二进制程序和软件包,外部存储承载程序的数据读写。 k8s从哪里来? k8s源于Google的开源项目Kubernetes。尴尬的是Google内部真正使用的系统叫Borg,不是k8s。有一种野史说法是,Google将Borg中的一些边缘技术通过Golang实现,变成了Kubernetes。当然Google的说法是Kubernetes吸取了Borg的优秀理念。Google将一个自己并不使用的技术开源给大家使用,可谓“纯粹的奉献”。 大家了解Google是因为它闻名遐迩的三件套GFS、MapReduce和BigTable。大概从2003年开始,这三件套发表了论文,但没有开放源代码,大家只闻其名,不见其形。后来有位工程师Doug […]
Monthly Archives: April 2023
云计算是很大的话题,这个领域的玩家都是巨头,个个都财雄势大,每人都有一家之言。本文只从用户角度,看看云和计算结合都有些什么问题。 云计算的起源与初衷 云计算是近些年炒的厉害的概念,也是生物技术相关企业常被推销的解决方案。究其起源,云计算发端于IBM的IT外包服务(IT outsourcing),简单的说就是企业把自己全套IT基础设施托管在IBM的数据中心,后者负责运维。亚马逊(Amazon)后来居上,提供了ECS、S3等等云服务。Amazon的“中国化”就产生了现在的阿里云、腾讯云、华为云等。 云计算带来了什么新技术呢?云计算不带来什么新技术,它是一种商业模式上的创新,即将企业的一次性固定成本转化为运营成本。云计算最适合的运用场景是解决峰值需求。用户平常只需要5台机器,某个星期需要几千台机器,可以去租用云服务商的机器,避免投入千台机器的成本。云服务商通常就是那些已经买了大量机器的企业。亚马逊、阿里、京东都是电商。反正已经投入了这么多机器,忙的时候自己用,闲的时候租给你用。那么非峰值场景企业用不用云服务呢?答案取决于你对成本和安全这两个核心问题的考虑。成本问题自己可以算,安全问题很简单:云计算是异地计算,所有数据和服务都在云服务提供商手里,都在他们的运营人员手里。所以该怎么决策?算算你的成本是否划算,摸摸你的后背是否觉得安全。现在很多人说云计算是趋势,是政治正确。抛开这两个问题谈趋势,只能是忽悠。 云上安全吗? 我们再闲话几句安全问题。安全是一个很大的问题,我们这里只能扯一扯和云计算相关的安全问题。云计算的安全问题本质是信任问题,不等于安全技术。因为所有的服务和数据都在远端,我们需要确信它们是安全的。我们常用的安全技术例如加密解密,只能保证数据在传输过程中,或者数据落盘之后的安全。前提是数据在云上的整个环节都执行了严格的安全标准。感兴趣的同志们可以研究研究美国的HIPPA标准,它制定出来保护病人隐私数据。亚马逊有它的实现指南,规定了网络服务要怎么样,数据库要怎么样,存储要怎么样等等。国内的法规如何呢?我们都不知道。笔者曾经请教RSA的专家云安全的问题,为什么不能和用户签署一份服务质量协议(Service Level Agreement),承诺用户安全?他回答说“NO”,事情不是这样子做的。没有人能证明系统是安全的,你永远只能证明系统不安全。当然也无法承诺安全,你只能承诺系统的行为是按照期望那样发生的。你永远只能用技术去保证你的服务只会在哪台机器运行,这台机器所有的操作日志都存留一下,进入机房的人员都有签字录像,等等等等。你把每件事都记下来,交给客户和可信第三方来审计,说看吧,我能做到这些,你相信自己安全吗?。至于我们的可信第三方和审计怎么样?自己去想想。 笔者亲身经历了Amazon云上的安全事件。当时我们公司在Amazon(美国地区)部署了一个网站,是一个Twiki服务,仅仅开放80端口。没有任何意外(当时很意外),我们的网站被攻击了,变成了少儿不宜视频服务,Google搜索发现成千上万的链接指向我们。其实攻击的方式很简单,利用了Twiki搜索框的漏洞。一个星期后,Amazon给我们发了邮件,报告我们的虚拟机在试图攻击别人的虚拟机。这个指责毫无疑问是正确的,因为我们的虚拟机已经不“属于”我们了。我们向Amazon投诉,它的回答是“我们只是提供虚拟机,虚拟机里面由用户自己负责”。这当然是有道理的,它涉及到云厂商和用户在基础架构服务(IaaS)的权责划分。但是它暴露了一个问题:用户上云可以将IT成本减少到什么程度? […]
Singularity 介绍 Singularity容器技术在功能上类似于Docker,使用上与Docker略有不同。Docker用户可以轻松上手使用。用户访问网站 (https://sylabs.io/guides/3.7/user-guide/introduction.html) 可以了解详细使用方法。这里仅仅结合Docker介绍一下Singularity的日常使用方法。 Singularity与Docker的一个很大区别是生产环境使用的Singulariy容器是只读的SIF格式文件。用户可以将Hub上的容器存储成本地的SIF文件运行,确保Singularity容器执行的可重复性。这意味着SIF容器一旦创建并签名,运行时不发生改变。Docker容器由于镜像的管理方式,往往不能确保可重复性。 Singularity 技术几个重要概念 构建自己的容器 Singularity容器有两种存在形式:SIF和sandbox。SIF只读,主要用来执行用户程序。sandbox可修改,可用来开发和创建新容器。用户可以通过三种方式创建自己需要的容器。 […]