KubernetesBorg解决3大问题

113 阅读3分钟

Kubernetes 源于希腊语,意为 “舵手” 或 “飞行员”。Google 在 2014 年开源了 Kubernetes 项目。Kubernetes 建立在 Borg 的基础上,结合了社区中最好的想法和实践。

Borg解决3大问题

  1. 隐藏资源管理和错误处理的细节,让业务同学专注于开发应用
  2. 高运维可靠性和可用性
  3. 在海量机器上部署应用

架构图

名词

Pod运行所在的工作主机,包含容器运行时(docker),kubelet 和 kube proxy。

  • Kubelet

    • 通过 API Server 接收到所需要 Pod 运行的状态,去完成Node内对Pod的管理。
  • Kube proxy

    • 监听 API server 中 service 和 endpoint 的变化情况,并通过 iptables 等来为服务配置负载均衡(仅支持 TCP 和 UDP)。
  • Pause Pod

作为Pod的根容器,它的存活状态代表容器组的状态,业务容器共享根容器的Volumn。

部署、水平扩展和制作副本的最小单元。一个Pod只能在一个Node上,Pod内的所有容器共享存 储和网络。

同Docker容器相同含义,应用程序一次打包,多处部署。

  • Master / Control Plane 控制面

    • Scheduler 调度器

      • Scheduler 会实时监测 Kubernetes 集群中未分发和已分发的所有运行的 Pod。
      • Scheduler 会实时监测 Node 节点信息,由于会频繁查找 Node 节点,Scheduler 同时会缓存一份最新的信息在本地。
      • Scheduler 在分发 Pod 到指定的 Node 节点后,会把 Pod 相关的信息 Binding 写回 API Server,以方便其它组件使用。
    • API Server

      • 提供HTTP Rest 接口的服务进程,是集群控制的入口进程。
    • Controller 控制器

      • Replication Controller / ReplicaSet

        • Input: Pod期待副本数N,Label 选择器,Pod创建模板。
        • Perform: 定期检查并调整当前存活的Pod数为N。
        • 可实现TCE/水平扩缩容
      • Deployment

        • 底层会操作ReplicaSet完成升级、回滚。
        • 可实现TCE/创建服务、服务升级、服务回滚。
      • Job

        • 一次性任务,可部署到多个Pod上。
      • Cron Job

        • 定时任务,周期执行Job。
      • DaemonSet

        • 指定标签的Node上各部署一个Pod的副本,如监控、日志收集等Agent。
      • Horizontal Pod AutoScaler

        • 根据CPU或自定义指标动态Pod扩缩容。
        • 可实现TCE/自动扩容
  • Namespace

    • Kubernetes支持在相同物理集群上创建多个虚拟集群,这些虚拟集群称为Namespace。
  • Label 标签

    • 键值对,用来和对象绑定,使用标签来区分同一Namespace内的资源。
  • Service

    • 指定标签的Pod作为服务后端,获得一个虚拟的Cluster IP和端口,并创建同名Endpoints对象。

    • 服务发现

      • 环境变量:后启动的Pod,环境变量会包含之前创建的服务的cluster ip:port。
      • DNS:不受Pod启动先后的影响,随时可以获取到新老服务的cluster ip:port。
  • Volumes

    • 用来声明在 Pod 中的容器可以访问文件目录。
    • 生命周期和Pod相同,Container重启数据仍保留。