08 K8S 之资源对象介绍
作为一款“以应用为中心”的基础设施项目,Kubernetes 的核心目标是让应用变成基础设施中的核心,让基础设施围绕应用构建和发挥作用,而“声明式 API”与“控制器”提供了将底层基础设施能力和运维能力接入 Kubernetes 的重要手段。简单来说,Kubernetes API 主要由资源类型和控制器两部分组成,资源通常是声明为 JSON 或 YAML 格式并写入集群的对象,而控制器则在集群将资源存储完成后自动创建并启动。Kubernetes 把应用及辅助应用容器化和编排的各种组件均抽象成了 API 资源。
Kubernetes 系统的 API Server 基于 HTTP/HTTPS 协议接收并响应客户端的操作请求,它提供了一种“基于资源”的 RESTful 风格的编程接口,把集群各种组件都抽象成标准的 RESTful 资源,并支持通过标准的 HTTP 方法、以 JSON 为数据序列化方案进行资源管理操作。
以资源的主要功能作为分类标准,Kubernetes 的 API 对象大体可分为工作负载、发现与负载均衡、配置与存储、集群和元数据几个类别。它们基本都是围绕一个核心目的而设计:如何更好地运行和丰富 Pod 资源,从而为容器化应用提供更灵活和更完善的操作与管理组件。
应用程序分为无状态和有状态两种类型,无状态应用中的每个 Pod 实例均可被其他同类实例所取代,但有状态应用的每个 Pod 实例均有其独特性,必须单独标识和管理,因而它们分别由两种不同类型的 Pod 控制器进行管理。
Service 是 Kubernetes 标准的资源类型之一,用于为工作负载实例提供固定的访问入口及负载均衡服务,它把每个可用后端实例定义为 Endpoint 资源对象,通过 IP 地址和端口等属性映射至 Pod 实例或相应的服务端点。Ingress 资源则为工作负载提供 7 层(HTTP/HTTPS)代理及负载均衡功能。
Docker 容器分层联合挂载的方式决定了其系统文件无法在容器内部存储持久化数据,因而容器引擎引入外部存储卷的方式来解决此类问题,相应地,Kubernetes 支持在 Pod 级别附加 Volume 资源对象为容器添加可用的外部存储。Kubernetes 支持众多类型的存储设备或存储系统,例如 GlusterFS、Ceph RBD 和 Flocker 等,还可通过 FlexVolume 及 CSI(Container StorageInterface)存储接口扩展支持更多类型的存储系统。
一个应用通常需要多个资源的支撑,例如用 Deployment 资源编排应用实例(Pod)、用 ConfigMap 和 Secret 资源保存应用配置、用 Service 或 Ingress 资源暴露服务、用 Volume 资源提供持久化存储等。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/b02ee222507ecb43653798d2f】。文章转载请联系作者。
评论