- Kubernetes是Google开源的容器集群管理系统。它构建Docker技术之上,为容器化的应用提供资源调度、部署运行、服务发现、扩容缩容等整一套功能,本质上可看作是基于容器技术的micro-PaaS平台。
- 因为Docker解决了应用编译构建的问题,所以Kubernetes架构上就可以专注在容器编排,服务发现等等运维相关特性上。
- PaaS的价值不是在帮你编译打包上,而是在于节省运维成本。
- Kubernetes的设计模型:
- Label的设计: Pod、Service、Replication Controller之间的是通过Label进行关联,这是一种轻绑定的方式,可以方便地组合业务,做灰度升级等等。
- 网络模型: Kubernetes采用扁平化的网络模型,每个Pod都有一个全局唯一的IP(IP-per-pod),Pod之间可以跨主机通信,相比于Docker 原生的NAT方式来说,这样使得容器在网络层面更像虚拟机或者物理机,复杂度整体降低,更加容易实现服务发现、迁移、负载均衡等功能。
- Docker是虚拟化的一种轻量级替代技术
- 不依赖任何语言、框架或系统,可以将App变成一种标准化的、可移植的、自管理的组件,并脱离服务器硬件在任何主流系统中开发、调试和运行。
- 在Linux系统上迅速创建一个容器,并在容器上部署和运行程序,并通过配置文件可以轻松实现应用程序的自动化安装、部署和升级,非常方便。
可以很方便地把生产环境和开发环境分开,互不影响。
- Docker核心技术
- cgroup。cgroups 实现了对资源的配额和度量。cgroups 的使用非常简单,提供类似文件的接口,在 /cgroup目录下新建一个文件夹即可新建一个group,在此文件夹中新建task文件,并将pid写入该文件,即可实现对该进程的资源控制。具体的资源配置选项可以在该文件夹中新建子subsystem,{子系统前缀}.{资源项} 是典型的配置方法, 如memory.usage_in_bytes就定义了该group 在subsystem memory中的一个内存限制选项。
- LXC。借助于namespace的隔离机制和cgroup限额功能,LXC提供了一套统一的API和工具来建立和管理container。LXC 旨在提供一个共享kernel的 OS 级虚拟化方法,在执行时不用重复加载Kernel,且container的kernel与host共享,因此可以大大加快container的 启动过程,并显著减少内存消耗。
- AUFS。主要功能是把多个文件夹的内容合并到一起,提供一个统一的视图,在docker里面用来组织image。
- docker的标准统一的打包部署运行方案。container运行时所构造的运行环境,是由具有依赖关系的多个Layer组成的。
- 一些概念
- docker image
- docker container。image的运行实例,共享内核。
- docker Daemon.创建和运行container的Linux守护进程,也是docker最主要的核心组件。可以绑定本地端口并提供Rest API, 用来远程访问和控制。
- docker Registry/Hub。标准镜像库