概述

Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。
Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。
官网地址https://Kubernetes.io
中文社区 https://www.kubernetes.org.cn/docs
Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes一个核心特点就是能够自主的管理容器来保
证云平台中的容器按照用户的期望运行。以下是Kubernetes相关特性:

  1. 自动包装 根据资源需求和其他约束自动放置容器,同时不会牺牲可用性,混合关键和最大努力的工作负载,以提高资源利用率并节省更多资源
  2. 横向缩放 使用简单的命令或 UI,或者根据 CPU 的使用情况自动调整应用程序副本数。
  3. 自动部署和回滚 Kubernetes 逐渐部署对应用程序或其配置的更改,同时监视应用程序运行状况,以确保它不会同时终止所有 实例。 如果出现问题,Kubernetes会为您恢复更改,利用日益增长的部署解决方案的生态系统。
  4. 存储编排 自动安装您所选择的存储系统,无论是本地存储,如公有云提供商 GCP 或 AWS, 还是网络存储系统 NFS, iSCSI, Gluster, Ceph, Cinder, 或 Flocker。
  5. 自我修复 重新启动失败的容器,在节点不可用时,替换和重新编排节点上的容器,终止不对用户定义的健康检查做出 响应的容器,并且不会在客户端准备投放之前将其通告给客户端。
  6. 服务发现和负载均衡 不需要修改您的应用程序来使用不熟悉的服务发现机制,Kubernetes 为容器提供了自己的 IP 地址和一组容 器的单个 DNS 名称,并可以在它们之间进行负载均衡。
  7. 密钥和配置管理 部署和更新密钥和应用程序配置,不会重新编译您的镜像,不会在堆栈配置中暴露密钥(secrets)。
  8. 批处理 除了服务之外,Kubernetes还可以管理您的批处理和 CI 工作负载,如果需要,替换出现故障的容器。

k8s架构概述

Kubernetes——架构 - 图1
Kubernetes 项目的架构,跟它的原型项目 Borg 非常类似,都由 Master 和 Node 两种节点组成,而这两种角色分别对应着控制节点和计算节点。

  • master 是集群的”大脑”,负责管理整个集群:像应用的调度、更新、扩缩容等。
  • Node 就是具体”干活”的,一个Node一般是一个虚拟机或物理机,它上面事先运行着 docker 服务和 kubelet 服务( Kubernetes 的一个组件),当接收到 master 下发的”任务”后,Node 就要去完成任务(用 docker 运行一个指定的应用)

Kubernetes——架构 - 图2

Master控制节点

Kubernetes——架构 - 图3
Master是Kubernetes Cluster的大脑,运行着的服务包括apiserver、scheduler、controller、etcd

kube-apiserver

API Server 是一个restapi服务器,所有对集群的操作都是通过这组API完成,包括客户端下达应用编排命令给 Kubernetes 集群;kubelet 上报集群资源使用情况;以及各个组件之间的交互都是通过这套 API 完成的。api服务器将状态信息保存在etcd 中。

etcd存储

etcd负责保存Kubernetes Cluster的配置信息和各种资源的状态信息。当数据发生变化时,etcd会快速地通知Kubernetes相关组件。为了保证冗余性,通常由三个或五个etcd实例组成一个集群。

kube-scheduler(调度器)

调度器负责 Kubernetes 集群的具体调度工作,接收来自于controller-manager 触发的调度操作请求,然后根据请求规格、调度约束、整体资源情况进行调度计算,最后将任务发送到目标节点由的kubelet组件执行。

ControllerManager(控制管理器)

Controller Manager(kube-controller-manager) 所有资源对象的自动化控制中心。Controller Manager负责管理Cluster各种资源,保证资源处于预期的状态。Controller Manager有多种,如replication controller、endpoints controller、namespace controller、serviceaccounts controller等。 不同的controller管理不同的资源
节点控制器(node controller):负责在节点出现故障时进行通知和响应。·
副本控制器(replication controller):确保每个副本集(replica set)或副本控制器(replication controller)对象中有正确数量的Pod。
端点控制器(endpoints controller):为每个服务分配一个列出该服务的Pod的端点对象。
服务账户(service account)和令牌控制器(token controller):它们使用默认服务账户和相应的API访问令牌对新的命名空间进行初始化。

Node计算节点

image.png
除了Master,Kubernetes集群中的其它机器被称为Node节点。Node职责是运行容器应用,Node由Master管
理,Node负责监控并汇报容器的状态,同时根据Master的要求管理容器的生命周期。Node也运行在Linux系统,
可以是物理机或虚拟机。
每个Node节点上都运行着以下一组关键进程

kubelet

  1. kubelet 是 Node 节点上核心组件,负责与 docker daemon 进行交互运行 docker 容器;配置网络和数据卷;监控并上报节点资源使用情况

    kube-proxy

    实现Kubernetes Service的通信与负载均衡机制的重要组件,kube proxy负责节点的网络连接,它充当服务的本地前端,并且可以转发TCP和UDP数据包。它通过DNS或环境变量来发现服务的IP地址。

    Container Runtime

    负责本机的容器创建和管理工作