Master

K8s 里的Master指的是集群控制节点,每个K8s集群都至少有一个Master负责整个集群的管理和控制,
由它接受和执行所有命令.

  • Master上运行的以下关键进程
    • Kubernetes API Server(kube-apiserver):提供了HttpRest接口的关键服务进程,是所有资源增删改查等操作的唯一入口,也是集群控制的入口进程.
    • Kubernetes Controller Manager(kube-controller-manager):K8s里所有资源对象的自动化控制中心.
    • Kubernetes Scheduler(kube-scheduler):负责资源调度(Pod调度)的进程.
    • etcd服务:K8s里所有资源对象的数据都保存在etcd中.

Node

除了Master,K8s集群中的其他机器被称为Node,是主要的工作负载节点.

  • 每个Node上都运行着以下关键进程.
    • kubelet:负责Pod对的容器的创建、启停等任务,同时与Master密切协作,实现集群的管理的基本功能.
    • kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件.
    • Docker Engine:Docker引擎,负载本机的容器创建和管理工作.

整体架构图

Pod

Pod是K8s最重要的基本概念,如图,每个pod都含有一个特殊的被成为“根容器”的Pause容器,每个Pod也包含一个或多个紧密相关用户业务的容器.

  • Pause作用
    • 用Pause判断整个Pod的存活状态
    • Pod里多个业务容器共享Pause容器的IP及挂载的Volume,解决了网络通信问题及文件共享

K8s要求底层网络支持集群内任意两个Pod之间的TCP/IP直接通信,这通常采用虚拟二层网络技术实现.

  • Pod类型
    • 普通的Pod:数据保存在etcd中,Master可调度
    • 静态的Pod:数据存放在某个Node节点上

Label

一个Label是一个key=value的键值对,其中key与value由用户自己指定.

Replication Controller

RC是K8s系统中的核心概念,它定义了一个期望场景,即声明某种Pod的副本数量在任意时刻都符合某个预期值.

  • RC的定义
    • Pod期待的副本数量
    • 用于筛选目标的Pod的Label Selector
    • 当Pod的副本数量小于预期数量时,用于创建新Pod的Pod模板

Replica Set

’下一代的RC‘,主要特性

  • 通过定义RC实现Pod的创建及副本数量控制
  • 通过改变RC里副本数量,实现扩容及缩容
  • 通过改变RC模板,实现滚动升级

Deployment

Deployment是K8s在1.2版本引入的新概念,用于更好的解决Pod的编排问题.
它为我们提供了随时知道当前Pod部署的进度

Horizontal Pod Autoscaler

HPA实现自动化、智能化扩容和缩容.

StatefulSet

定义有状态的服务.StatefulSet除了要与PV卷捆绑使用以存储Pod状态数据,还要与Headless Service配合使用。

Service

K8s里的每个Service其实就是我们经常提起的微服务架构中的一个"微服务".Service定义了一个服务的访问入口地址,前端的应用(Pod)
通过这个入口地址访问其背后的一组由Pod副本组成的集群实例,Service与其后端Pod副本之间则是通过Label Selector来实现"无缝对接"的.
而RC的作用实际上是保证Service的服务能力和服务质量始终处于预期的标准.Service一旦创建,K8s就会自动为它分配一个可用的Cluster IP,
而且在Service的整个生命周期内,它的Cluster IP不会发生改变.

  • 服务发现机制
    • Service都有一个唯一的Cluster IP以及唯一的名字.通过Add-On增值包的方式引入了DNS系统,把服务名作为DNS域名.
  • 外部系统访问Service的问题
    • NodePort实现需要在每个Node上为需要的外部访问的Service开启一个对应TCP监听端口
    • Service类型:ClusterIp、NodePort、LoadBalancer、ExternalName

服务发现

Job

批处理任务通常并行(或者串行)启动多个计算进程去处理一批工作项,在处理完成后,整个批处理任务结束.

  • 特点
    • Job所控制的副本是短暂运行的,可以将其视为一组Docker容器,其中每个容器Docker都仅仅只运行一次
    • Job所控制的Pod副本的工作模式能够多实例并行计算,

Volume

Volume是Pod中能够被多个容器访问的共享目录.

  • K8s提供Volume类型
    • emptyDir
      • 临时空间,例如用于某些应用程序运行时所需要的临时目录,且无须永久保留
      • 长时间任务的中间过程CheckPoint的临时保存目录
      • 一个容器需要从另一个容器中获取数据的目录(多容器共享目录)
    • hostPath
      • 容器用用程序生成的日志文件需要永久保存时,可以使用宿主机的高速文件系统进行存储
      • 需要访问宿主机上Docker引擎内部数据结构的容器应用时,可以通过定义hostPath为宿主机/var/lib/docker目录,使容器内部应用可以直接访问Docker的文件系统
    • gcePersistentDisk
    • awsElasticBlockStore
    • NFS

Persistent Volume

Persistent Volume(简称PV),PV可以理解成K8s集群中的某个网络存储中对应的一块存储.

  • 特点
    • PV只能是网络存储,不属于任何Node,但可以在每个Node上访问
    • PV并不是定义在Pod上的,而是独立于Pod之外定义的
    • 目前只有:GCE Persistent Disks、NFS、RBD、iSCSCI、AWS ElasticBlockStore、GlusterFS等

Namespace(命名空间)

Namespace在很多情况下实现多租户的资源隔离.Namespace通过将集群内部的资源对象“分配”到不同的Namespace中,
形成逻辑上分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理.

Annotation(注解)

Annotation与Label类似,也使用key/value键值对的形式定义.
Annotation是用户任意定义的"附加"信息,以便于外部工具进行查找.

  • 常用方式
    • build信息、release信息、Docker镜像信息等,例如时间戳、release id号、PR号、镜像hash值、docker registry地址等
    • 日志库、监控库、分析库等资源库的地址信息
    • 程序调试工具信息,例如工具名称、版本号等
    • 团队的联系信息,例如电话号码、负责人名称、网址等

ConfigMap

为了解决不能在Docker容器启动后在修改容器里的配置文件,然后用新的配置文件重启容器里的用户主进程.

Logo

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

更多推荐