k8s用于管理集群中多个主机上的容器化应用,k8s的目标是部署容器化的应用简单并且高效,k8s提供了应用部署、规划、更新、维护的一种机制。
k8s集群由两种类型的资源组成:
- 控制平台协调集群: 控制平台负责管理集群, 协调集群中的所有活动。例如调度应用程序、维护应用程序的应有状态、扩展应用程序和更新应用程序
- 运行应用程序的工人Nodes: node是在k8s集群中充当工作机器的虚拟机或物理机。每个节点都有一个Kubelet负责管理节点并与k8s控制平台通信。
在k8s上部署应用程序时,告诉控制平台启动应用程序容器。控制平台调度容器在集群节点上运行。节点使用控制平台共开的k8s API 与控制平台通信。最终用户可以直接使用k8s API与集群进行交互
k8s核心组件:
- etcd 节点间服务发现和配置共享
- apiserver 以REST API服务形式提供资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
- controller-manager 负责维护集群状态
- scheduler 负责资源的调度,看招预定的调度策略将Pod调度到相应的机器上
- kubelet 负责维护容器的生命周期
- proxy 负责Pod网络代理
k8s 核心技术概念和API对象
API对象是K8集群中的管理操作单元,每个API对象都有3大类属性:元数据metadata,规范spec和状态status。元数据使用来表示API对象的。规范描述了用户期望K8s及群众的分布式系统达到的理想状态。status描述了系统当前的状态
- Pod
Pod是在K8s中运行部署应用或服务的最小单元,支持多容器。Pod的设计理念是支持多个容器在一个Pod中共享网络地址和文件系统。 - Replication Controller RC
通过监控运行中的Pod来保证集群中运行指定书目的Pod副本。 - Replica Set RS
RS是新一代RC,提供同样的高可用能力,区别主要在于RS能支持更多种类的匹配模式。 - Deployment
表示用户对K8s集群的一次更新操作。 - Service
稳定的提供服务需要的服务发现和负载均衡能力。每个Service会对应一个集群内部有效的虚拟IP,集群内部通过虚拟IP访问一个服务。 - Job
用于控制批处理型任务的API对象 - DaemonSet
存储、日志和监控等在每个节点上支持K8s集群运行的服务 - PetSet 有状态服务器集
RC和RS主要控制提供无状态服务的,除了Pod数量,其他都不重要。而PetSet用来控制有状态服务,每个Pod的名字都是事先确定的。
适合PetSet的业务包括数据库服务,集群化管理服务Zookeeper、etcd等 - Federation
K8s的设计定位是单一集群在同一个地域内,因为同一个地区的网络性能才能满足K8s的调度和计算存储链接要求。而联合集群服务就是为提供跨地区服务商K8s集群服务2而设计的。
Federation会在所有注册的子K8s Cluster都创建一份对应的API对象。在提供业务请求服务时,K8s Federation会先在自己的各个子Cluster之间做负载均衡,对于发送到某个具体K8s Cluster的业务请求,会按照公开接口调度。 - Volume
K8s中存储卷的生命周期和作用范围是一个Pod。每个Pod中生命的存储卷有Pod中的所有容器共享 - Persistent Volume 和 Persistent Volume Claim
PV和PVC使得K8s集群具备了存储的逻辑抽象能力,使得在配置Pod的逻辑里可以忽略对实际后台存储技术的配置。PV和Node是资源的提供者,根据集群的基础设施变化而变化,由K8s集群管理员配置;而PVC和Pod是资源的使用者,根据业务服务的需求变化而变化。 - Node
K8s及群众的计算能力由Node提供,Node是所有Pod运行所在的工作主机。上面要运行kubelet管理节点上运行的容器 - Sercet
用来保存和传递密码、密钥、认证凭证。 - User Account 和 Service Account
用户账户为人提供账户标识,服务账户为计算机进程和K8s及群众运行的Pod提供账户标识。 - Namespace
为K8s集群提供虚拟的隔离作用,K8s集群处事有两个namespace,分别是default和kube-system - RBAC Role-Based Access Control
基于角色的访问控制的授权模式,RBAC引入了角色和角色绑定的抽象概念。在ABAC(attribute-based Access Control)中,K8s集群中的访问策略只能跟用户直接关联;儿在RBAC中,访问策略可以跟某个角色关联,具体的用户在跟一个或多个角色相关联