容器(Linux Container)也可译为集装箱,详见《高冷的云原生,原来可以这样理解》。
容器是计算演进方向的一个节点(物理机、虚拟机、容器、无服务器计算)。
虚拟机采用的虚拟化技术是Hypervisor(KVM、XEN)。优点是隔离性较好,存在的问题是每个虚拟机需要操作系统、依赖环境,运行起来比较重,启动时间长。
容器采用的虚拟化技术是Namespace(《Linux 基础知识:网络命名空间》)和Cgroup,进行操作系统内核级的虚拟化。优点是轻量、秒级启动,缺点是容器间的隔离,安全性需要提高。
虚拟机的管理有CloudStack、OpenStack。
容器的管理也出现了Mesos、Swarm、Kubernetes。
Kubernetes的基础知识,可查阅:
Kubernetes:术语解释
Kubernetes:集群部署
Kubernetes:逻辑组件
Kubernetes:Pod简易理解
Kubernetes:flannel网络
Kubernetes:应用部署与访问
Kubernetes较好地解决了应用的编排与调度问题,但也存在着容器的安全隔离弱、运维管理成本高,需要进行容量规划、节点管理、服务组件告警处理等问题。
以阿里云为例,提供了容器服务ACK、弹性容器实例ECI、Serverless容器服务 ASK等。
下面我们来看下这些产品所解决的痛点是什么?
1. 容器服务ACK
针对Kubernetes学习曲线高、运维难等问题,公有云厂商通过适配和增强Kubernetes,简化运维工作,推出Kubernetes托管服务。
阿里云推出了容器服务ACK(Alibaba Cloud Container Service for Kubernetes),提供不同等级的服务:
用户自己进行容量规划、节点(Master和Worker)部署( ECS或者裸金属 )、维护等工作,称为专有模式。
用户只需部署Worker节点,Master节点和相关运维工作则由阿里云负责,称为托管模式。
如需扩容Kubernetes集群,则只需调整ECS个数,其它工作则自动完成(响应级别为分钟级)。
容器服务ACK中,不论是专用模式还是托管模式,都需要进行容量的手工伸缩(分钟级),并都存在资源利用不充分的问题(带来成本)。
针对这些问题,阿里云推出了弹性容器实例ECI(Elastic Container Instance)。一个ECI就是一个Pod(Pod由阿里云来运维),供Kubernetes调度和运行。用户只需提供打包好的镜像,并为容器运行消耗的资源按需付费(免运维)。
ECI(容器形态)和ECS(虚拟机形态)具有同样的地位,共享共用阿里云的计算基础设施。
基于ECI,阿里云推出了“Serverless”版本的ASK(Alibaba Serverless Kubernetes),不仅实现了Master节点的托管,还实现了计算节点的无限扩展。计算节点使用了Virtual Node来管理ECI(POD),用户只需提交Yaml 文件即可创建Pod。
每个Virtual Node最多支撑3000个POD,如POD数量超过3000个,则需要创建多个Virtual Node。
那么,Virtual Node是如何实现的呢?
在《Kubernetes:逻辑组件》一文中,我们知道Kubernetes集群的逻辑组件包含kubelet,而kubelet的作用就是在Node节点上运行,接受kube-scheduler的调度请求,并根据请求信息创建和运行容器。
为了让ECI这样的容器弹性实例与Kubernetes集成,作为其中的Node节点,微软Azure发起了Virtual Kubelet开源项目。其基本原理是Virtual Kubelet启动时,会伪装成一个Work节点,也就是Virtual Node,向kube-api-server组件注册,当有请求调度到Virtual Node时,Virtual Kubelet调用Provider的API接口,实现Pod的创建。
全部0条评论
快来发表一下你的评论吧 !