首页  

k8s容器编排基础概念     所属分类 k8s 浏览量 83
用 K8S API 对象 来描述集群的 预期状态(desired state)
包括你需要运行的应用或者负载,使用的镜像、副本数,以及所需网络和磁盘资源等

使用命令行工具 kubectl 调用  k8s API 创建对象,通过所创建的这些对象来配置预期状态
可以直接调用 k8s API 和 集群进行交互,设置或者修改预期状态

控制面(control plane) 通过 Pod 生命周期事件生成器( PLEG ),促成集群的当前状态符合其预期状态
k8s 自动执行各类任务,比如运行或者重启容器、调整应用的副本数等

控制面由一组运行在集群上的进程组成


Master(管理节点) 
  负责维护集群的目标状态 
   命令行工具 kubectl  与 master 节点通信
   master 指管理集群状态的一组进程的集合 ,
   通常这些进程都跑在集群中一个单独的节点上,这个节点被称为 master 节点
   master 节点 可以扩展副本数, 获取更好的可用性及冗余 

Master 包含三个进程 

kube-apiserver
API Server会验证和配置api对象的数据,这些对象包括容器,服务,复本控制器等

kube-controller-manager
核心控制循环 ,在机器人技术和自动化应用中,控制回路是一个非终止回路,用于调节系统状态
控制器是一个控制循环,通过apiserver监视集群的共享状态,并进行更改以尝试将当前状态移向所需状态
包括复本控制器,端点控制器,名称空间控制器和service accounts控制器
用来执行整个系统的后台任务,包括节点状态状况、Pod个数、Pods 和 Service 的关联等

kube-scheduler
负责节点资源管理,接受来自 kube-apiserver 创建 Pods 任务,并分配到某个节点
调度策略丰富,可感知拓扑,特定于工作负载的功能,会显着影响可用性,性能和容量
调度程序需要考虑单个和集体资源需求,服务质量需求,硬件/软件/策略约束,亲和力和反亲和力规范,数据本地性,工作间干扰,期限等
特定于工作负载的需求将在必要时通过API公开


Node(工作节点)  
  执行请求和分配任务的计算机,由 k8s master 负责对节点进行控制
  集群中的每个非 master 节点都运行两个进程

kubelet,和 master 节点进行通信
kube-proxy,一种网络代理,将 k8s 的网络服务代理到每个节点上




k8s 对象 包含若干抽象用来表示系统状态 k8s API 对象 Pod(容器集) 部署在单个节点上的,且包含一个或多个容器的容器组,Pod 可以被创建,调度,最小部署单元, 同一容器集中的所有容器共享同一个 IP 地址、IPC、主机名称及其它资源 容器集会将网络和存储从底层容器中抽象出来 Service(服务) 服务为一组 Pod 提供单一稳定的名称和地址,服务可将工作定义与容器集分离 k8s服务代理自动将服务请求分配到正确的容器集 Label(标签) 标签用于组织和选择基于键值对的对象组,被用于每一个 k8s 组件 Volume pod中能够被多个容器访问的共享目录 概念 用途和目的 与docker的vlume相似但不等价 Namespace(命名空间) Namespace 是对一组资源和对象的抽象集合 用来将系统内部的对象划分为不同的项目组或用户组 常见的 pods, services, replication controllers 和 deployments 等都是属于某一个 namespace (默认 default) 而 node, persistentVolumes 等则不属于任何 namespace k8s 包含大量被称作控制器(controllers) 的高级抽象 控制器基于基本对象构建并提供额外的功能和方便使用的特性 Replication Controller 管理 Pod 生命周期,保证Pod数量 创建或删除 Pod ReplicaSet 一种副本控制器,使pod副本的数量始终维持在预设的个数 Deployment 新一代用于 Pod 管理的对象,与 Replication Controller 相比,提供了更加完善的功能,使用起来更加简单方便 StatefulSet 管理有状态应用的负载管理控制器,在Pods管理的基础上,保证Pods的顺序和一致性 与Deployment一样,StatefulSet也是使用容器的Spec来创建Pod, 与之不同StatefulSet创建的Pods在生命周期中会保持持久的标记(例如Pod Name) DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本 当有 Node 加入集群时,会为他们新增一个 Pod 当有 Node 从集群移除时,这些 Pod 也会被回收 删除 DaemonSet 将会删除它创建的所有 Pod Job 通常用于运行那些仅需要执行一次的任务(例如数据库迁移,批处理脚本) 通过Job对象创建运行的Pod具有高可靠性,因为Job Controller会自动重启运行失败的Pod(例如Pod所在Node重启或宕机)
k8s 组件 kubectl 客户端命令行工具,将接受的命令格式化后发送给 kube-apiserver,作为整个系统的操作入口 kube-apiserver 作为整个系统的控制入口,提供 REST API 接口 kube-controller-manager 用来执行整个系统中的后台任务,包括节点状态状况、Pod 个数、Pods 和 Service 的关联等 kube-scheduler 将 Pod 调度到 Node 上 负责节点资源管理,接受来自 kube-apiserver 创建 Pods 任务,并分配到某个节点 etcd 分布式存储 负责节点间的服务发现和配置共享 kube-proxy 负责 Pod 网络代理 ,定时从 etcd 获取 Service 信息来做相应的策略 kubelet 运行在每个计算节点上,作为 agent,接受分配该节点的 Pods 任务及管理容器 周期性获取容器状态,反馈给 kube-apiserver DNS 一个可选的DNS服务,用于为每个 Service 对象创建 DNS 记录,所有的 Pod 可以通过 DNS 访问服务 flannel Flannel 是 CoreOS 团队针对 k8s 设计的一个覆盖网络(Overlay Network)工具,需要另外下载部署 启动 Docker 后会有一个用于和容器进行交互的 IP 地址, 如果不去管理的话 ,可能这个 IP 地址在各个机器上是一样的,并且仅限于在本机上进行通信 无法访问到其他机器上的 Docker 容器 Flannel 的目的就是为集群中的所有节点重新规划 IP 地址的使用规则, 从而使得不同节点上的容器能够获得同属一个内网且不重复的 IP 地址, 并让属于不同节点上的容器能够直接通过内网 IP 通信

上一篇     下一篇
基金所持停牌股票估值调整案例

k8s的本质

1929年美国大萧条时期的若干现象

服务网格 Service Mesh 背景和概念

istio服务网格快速入门

centos7 离线安装 docker