Kubernetes 架构

bridge
2020-11-19 / 0 评论 / 4 点赞 / 562 阅读 / 1,944 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-01-19,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Kubernetes 简介

Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes 的目标旨在消除编排物理/虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上进行自助运营。Kubernetes 也提供稳定、兼容的基础(平台),用于构建定制化的workflows 和更高级的自动化任务。
Kubernetes 具备完善的集群管理能力,包括多层次的安全防护和准入机制多租户应用支撑能力、透明的服务注册服务发现机制内建负载均衡器故障发现自我修复能力、服务滚动升级在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力。
Kubernetes 还提供完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。

Borg 简介

Borg是谷歌内部的大规模集群管理系统,负责对谷歌内部很多核心服务的调度和管理。Borg的目的是让用户能够不必操心资源管理的问题,让他们专注于自己的核心业务,并且做到跨多个数据中心的资源利用率最大化。

Borg主要由BorgMaster、Borglet、borgcfg和Scheduler组成,如下图所示:
image

  • BorgMaster是整个集群的大脑,负责维护整个集群的状态,并将数据持久化到Paxos存储中;
  • Scheduer负责任务的调度,根据应用的特点将其调度到具体的机器上去;
  • Borglet负责真正运行任务(在容器中);
  • borgcfg是Borg的命令行工具,用于跟Borg系统交互,一般通过一个配置文件来提交任务。

Kubernetes 架构

Kubernetes借鉴了Borg的设计理念,比如Pod、Service、Labels和单Pod单IP等。Kubernetes的整体架构跟Borg非常像,如下图所示:
image

Kubernetes主要由以下几个核心组件组成:

  • etcd: 保存了整个集群的状态(键值对数据库,储存K8S集群所有重要信息(持久化));
  • apiserver: 提供了所有资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • controller manager: 负责维护集群的状态,比如故障检测、自动扩展、滚动更新、维持副本期望数目等;
  • scheduler: 负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
  • kubelet: 负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
  • Container runtime: 负责镜像管理以及Pod和容器的真正运行(CRI);
  • kube-proxy: 负责为Service提供cluster内部的服务发现和负载均衡(负责写入规则至 IPTABLES、IPVS 实现服务映射访问的);

除了核心组件,还有一些推荐的Add-ons:

  • kube-dns:负责为整个集群提供DNS服务(可以为集群中的svc创建一个域名ip的对应关系解析)
  • Ingress Controller:为服务提供外网入口(官方只能实现四层代理,ingress 可以实现七层代理)
  • Heapster:提供资源监控
  • prometheus:提供k8s集群的监控能力
  • Dashboard:提供GUI(提供web ui 管理系统)
  • Federation:提供跨可用区的集群(提供一个可以跨集群中心多k8s统一管理功能)
  • Fluentd-elasticsearch:提供集群日志采集、存储与查询

image

image

分层架构

Kubernetes设计理念和功能其实就是一个类似Linux的分层架构,如下图所示
image

  • 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴
    • Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等
    • Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理
  • 接口层:kubectl命令行工具、客户端SDK以及集群联邦
  • 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
  • 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)
    • 有状态服务:DBMS (需要持久化数据的,比如数据库)
    • 无状态服务:LVS APACHE (无需持久化数据,类似tomcat,naginx)
  • 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境

高可用集群副本数据最好是 >= 3 奇数个 原因:需要一个master节点,和2,4,6,7...个node节点,起到负载均衡效果的最佳

0

评论区