容器是一个可以在共享的操作系统上将应用程序以指定格式打包并运行在一个与操作系统相关联的环境中的方法,利用操作系统虚拟化技术,如 Linux 命名空间及cgroup、Windows孤岛及作业对象来隔离进程,并控制进程对 CPU、内存和磁盘等资源的访问。
与虚拟机相比不同的是,容器并不会打包整个操作系统而只是打包应用程序所必须的库和设置,这将使得容器具备高效率、轻量化、系统隔离性,以上特性将会确保无论在何处部署,容器每次运行都会完全一致。
容器具有轻量级、可移植、独立等特点,多个容器可共享主机操作系统内核,启动和关停速度快,占用资源少,便于在不同环境中以一致方式部署和运行应用。
微服务是一种将单个应用程序开发为一套小服务的架构理念。每个服务运行在自己的进程中,围绕业务能力构建,通过轻量级机制(如 HTTP资源的API )通信,可独立部署和扩展。是一种把一个庞大的应用拆成几个小的独立的服务,再把独立的服务串起来的架构设计。
Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,促进声明式配置和自动化。它具有可移植(支持多种云环境)、可扩展(模块化、插件化)、自动化(自动部署、重启、复制、伸缩)等特点,主要职责是容器编排,确保容器在集群中健康运行。
Kubernetes 集群由一个控制平面和一组用于运行容器化应用的工作机器组成,这些工作机器称作节点(Node)。每个集群至少需要一个工作节点来运行Pod。
工作节点托管着组成应用负载的Pod。控制平面管理集群中的工作节点和 Pod。在生产环境中,控制平面通常跨多台计算机运行,而一个集群通常运行多个节点,以提供容错和高可用。
可移植:支持公有云,私有云,混合云,多重云(multi-cloud)。
可扩展: 模块化,插件化,可挂载,可组合。
自动化:自动部署,自动重启,自动复制,自动仲缩/扩展。
Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。
Pod是一组(一个或多个) 容器; 这些容器共享存储、网络、以及怎样运行这些容器的规约。 Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。 Pod 所建模的是特定于应用的“逻辑主机”,其中包含一个或多个应用容器, 这些容器相对紧密地耦合在一起。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于在同一逻辑主机上运行的云应用。
Pod 遵循一个预定义的生命周期,起始于 Pending 阶段,如果至少其中有一个主要容器正常启动,则进入 Running,之后取决于 Pod 中是否有容器以失败状态结束而进入Succeeded 或者 Failed 阶段。但有时集群节点之间出现网络故障,无法获取Pod状态时,就会出现Unknown状态。
在 Kubernetes 中,控制器通过监控集群的公共状态,并致力于将当前状态转变为期望的状态。作为设计原则之一,Kubernetes 使用了很多控制器,每个控制器管理集群状态的一个特定方面。 最常见的一个特定的控制器使用一种类型的资源作为它的期望状态, 控制器管理控制另外一种类型的资源向它的期望状态演化。
服务发现指的是让客户端(其他 Pod 或外部服务)能够自动找到并连接到目标服务的一组运行实例(Pod)的机制。服务发现通过不同组件的协同工作,实现了分布式系统中服务实例的动态管理与通信。从集群内的 DNS 解析到集群外的流量暴露,其机制覆盖了微服务架构的核心需求,为容器化应用的弹性扩展和高可用性提供了基础支撑。
Kubernetes 支持很多类型的卷。Pod 可以同时使用任意数目的卷类型。临时卷类型的生命周期与 Pod 相同,但持久卷可以比Pod 的存活期长。当Pod 不再存在时,Kubernetes 也会销毁临时卷;不过Kubernetes 不会销毁持久卷。对于给定Pod 中任何类型的卷,在容器重启期间数据都不会丢失。