《 Kubernetes进阶实战》一2.1Kubernetes快速入门
第2章
Kubernetes快速入门
Kubernetes集群将所有节点上的资源都整合到一个大的虚拟资源池里,以代替一个个单独的服务器,而后开放诸如CPU、内存和I/O这些基本资源用于运行其基本单元—Pod资源对象。Pod的容器中运行着隔离的任务单元,它们以Pod为原子单位,并根据其资源需求从虚拟资源池中为其动态分配资源。若可以将整个集群类比为一台传统的服务器,那么Kubernetes(Master)就好比是操作系统内核,其主要职责在于抽象资源并调度任务,而Pod资源对象就是那些运行于用户空间中的进程。于是,传统意义上的向单节点或集群直接部署、配置应用的模型日渐式微,取而代之的是向Kubernetes的API Server提交运行Pod对象。
API Server是负责接收并响应客户端提交任务的接口,用户可使用诸如CLI工具(如kubectl)、UI工具(如Dashboard)或程序代码(客户端开发库)发起请求,其中,kubectl是最为常用的交互式命令行工具。快速了解Kubernetes的办法之一就是部署一个测试集群,并尝试测试使用它的各项基本功能。本章在简单介绍核心资源对象后将尝试使用kubectl创建Deployment和Service资源部署并暴露一个Web应用,以便读者快速了解如何在Kubernetes系统上运行应用程序的核心任务。
2.1 Kubernetes的核心对象
API Server提供了RESTful风格的编程接口,其管理的资源是Kubernetes API中的端点,用于存储某种API对象的集合,例如,内置Pod资源是包含了所有Pod对象的集合。资源对象是用于表现集群状态的实体,常用于描述应于哪个节点进行容器化应用、需要为其配置什么资源以及应用程序的管理策略等,例如,重启、升级及容错机制。另外,一个对象也是一种“意向记录”—一旦创建,Kubernetes就需要一直确保对象始终存在。Pod、Deployment和Service等都是最常用的核心对象。
2.1.1 Pod资源对象
Pod资源对象是一种集合了一到多个应用容器、存储资源、专用IP及支撑容器运行的其他选项的逻辑组件,如图2-1所示。换言之,Pod代表着Kubernetes的部署单元及原子运行单元,即一个应用程序的单一运行实例,它通常由共享资源且关系紧密的一个或多个应用容器组成。
Kubernetes的网络模型要求其各Pod对象的IP地址位于同一网络平面内(同一IP网段),各Pod之间可使用其IP地址直接进行通信,无论它们运行于集群内的哪个工作节点之上,这些Pod对象都像是运行于同一局域网中的多个主机。
读者可以将每个Pod对象想象成一个逻辑主机,它类似于现实世界中的物理主机或VM(Virtual Machine),运行于同一个Pod对象中的多个进程也类似于物理机或VM上独立运行的进程。不过,Pod对象中的各进程均运行于彼此隔离的容器中,并于各容器间共享两种关键资源:网络和存储卷。
★ 网络(networking):每个Pod对象都会被分配一个集群内专用的IP地址,也称为Pod IP,同一Pod内部的所有容器共享Pod对象的Network和UTS名称空间,其中包括主机名、IP地址和端口等。因此,这些容器间的通信可以基于本地回环接口lo进行,而与Pod外的其他组件的通信则需要使用Service资源对象的ClusterIP及其相应的端口完成。
★ 存储卷(volume):用户可以为Pod对象配置一组“存储卷”资源,这些资源可以共享给其内部的所有容器使用,从而完成容器间数据的共享。存储卷还可以确保在容器终止后被重启,甚至是被删除后也能确保数据不会丢失,从而保证了生命周期内的Pod对象数据的持久化存储。
一个Pod对象代表某个应用程序的一个特定实例,如果需要扩展应用程序,则意味着为此应用程序同时创建多个Pod实例,每个实例均代表应用程序的一个运行的“副本”(replica)。这些副本化的Pod对象的创建和管理通常由另一组称之为“控制器”(Controller)的对象实现,例如,Deployment控制器对象。
创建Pod时,还可以使用Pod Preset对象为Pod注入特定的信息,如Conf?igMap、Secret、存储卷、卷挂载和环境变量等。有了Pod Preset对象,Pod模板的创建者就无须为每个模板显式提供所有信息,因此,也就无须事先了解需要配置的每个应用的细节即可完成模板定义。这些内容将在后面的章节中予以介绍。
基于期望的目标状态和各节点的资源可用性,Master会将Pod对象调度至某选定的工作节点运行,工作节点于指向的镜像仓库(image registry)下载镜像,并于本地的容器运行时环境中启动容器。Master会将整个集群的状态保存于etcd中,并通过API Server共享给集群的各组件及客户端。
- 点赞
- 收藏
- 关注作者
评论(0)