API对象是Kubernetes集群中的管理操作单元。集群中的众多技术概念分别对应着API对象,每个API对象都有3大类属性

  1. metadata(元数据):用来标识API对象,包含namespace、name、uid等。
  2. spec (规范):描述用户期望达到的理想状态,所有的操作都是声明式(Declarative)的而不是命令式(Imperative),在分布式系统中的好处是稳定,不怕丢操作或运行多次。比如设置期望3个运行Nginx的pod,运行多次也还是一个结果,而给副本数加1的操作就不是声明式的,运行多次结果就错了(所以实验中可以使用命令式,但是生产上极少使用命令式)。
  3. status(状态):描述系统当前实际达到的状态,比如期望3个pod,现在实际创建好了2个。
     

        Pod是kubernetes中最重要的也是最基础的最小部署单元。Pod可以由一个或者多个容器组成,这些容器共享存储、网络和配置项。

        Kubernetes中的业务类型可以分为长期伺服型(long-running)、批处理型(batch)、节点后台支撑型(node-daemon)和有状态应用型(stateful application)这四种类型,而这四种类型的业务又可以由不同类型的Pod控制器来完成,分别为:Deployment、Job、DaemonSet和StatefulSet。

  • Deployment: 复制控制器(Replication Controller,RC)是集群中最早的保证Pod高可用的API对象,副本集(Replica Set,RS)是它的升级,能支持更多种类的匹配模式。部署(Deployment)又是比RS应用模式更广的API对象,以Kubernetes的发展方向,未来对所有长期伺服型的的业务的管理,都会通过Deployment来管理。
  • Service: Deployment保证了Pod的数量,但是没有解决如何访问Pod的问题,一个Pod只是一个运行服务的实例,随时可能在一个节点上停止,在另一个节点以一个新的IP启动一个新的Pod,因此不能以确定的IP和端口号提供服务。因此集群需要稳定地提供服务需要服务发现和负载均衡能力,Service可以稳定为用户提供服务
  • Job: 用来控制批处理型任务,Job管理的Pod根据用户的设置把任务成功完成就自动退出了
  • DaemonSet: 后台支撑型服务的核心关注点在集群中的Node,要保证每个Node上都有一个此类Pod运行。比如用来收集日志的Pod。
  • StatefulSet: 不同于RC和RS,StatefulSet主要提供有状态的服务,StatefulSet中Pod的名字都是事先确定的,不能更改,每个Pod挂载自己独立的存储,如果一个Pod出现故障,从其他节点启动一个同样名字的Pod,要挂载上原来Pod的存储继续以它的状态提供服务,以防止服务的数据丢失,主要用于数据为主的服务。比如数据库服务MySQL,我们不希望一个Pod故障后,MySQL中的数据即丢失。

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐