Kubernetes 架构原则和对象设计

一. Kubernetes 简介

 1. 简介

        kubernetes是谷歌开源的容器集群管理系统,是google多年大规模容器管理技术Borg的开源版本,主要功能包括:

  • 基于容器的应用部署、维护和滚动升级    
  • 负载均衡和服务发现
  • 跨机器和跨地区的集群调度
  • 自动伸缩
  • 无状态服务和有状态服务
  • 插件机制保证扩展性   

Kubernetes 架构原则和对象设计_第1张图片

2. Kubernetes主节点(Master Node)

  • API Server: 这是Kubernetes控制面板中唯一带有用户可访问API以及用户可交互的组件。API服务器会暴露一个Restful的API并使用JSON清单文件(manifest files)
  • Cluster Data Store: etcd, 这是一个强大、稳定、高可用的键值存储,被Kubernetes用于长久存储所有的API对象
  • Controller Manager: 它运行着所有处理集群日常任务的控制器。包括了节点控制、副本控制器、端点控制器以及服务账户等
  • Scheduler: 调度器会监控新建pods(一组或者一个容器)并将其分配给节点

Kubernetes 架构原则和对象设计_第2张图片

  •  etcd

        etcd是CoreOS基于Raft开发的分布式key-value存储,用于服务发现、共享配置以及一致性保证(如数据库选主、分布式锁)

  • 基本的key-value存储
  • 监听机制
  • key的过期和续约机制,用于监控和服务发现
  • 原子CAS和CAD, 用于分布式锁和leader选举

Kubernetes 架构原则和对象设计_第3张图片

  • API server

        Kube-APIServer是Kubernetes最重要的核心组件之一,主要提供一下功能:

  • 提供集群管理的RESTFUL API接口:认证Authentication、授权Authentication、准入Admission(Mutating & Valiating)
  • 提供其他模块之间的数据交互和通讯枢纽(其他模块通过APIServer查询或者修改数据,只有APIServer才直接操作etcd)
  • APIServer提供etcd数据缓存减少集群对etcd的访问

Auditing: 记录审计日志

Kubernetes 架构原则和对象设计_第4张图片

  • Controller Manager

        controller Manager是集群的大脑,是确保整个集群动起来的关键。

        作用是确保kubernetes遵循声明式系统规范,确保系统的真实状态与用户定义的期望状态一致。

        controler Manager是多个控制器的组合,每个Controller事实都是一个control loop, 负责监听其管控的对象,当对象发生变更时完成配置。

        controller配置失败通常会出发自动重试,整个集群会在控制器不断重试的机制下确保最终一致性。

Kubernetes 架构原则和对象设计_第5张图片

  • Scheduler

        特殊的controller, 工作原理和其他控制器没有差别。

        Scheduler的特殊职责在于监控当前集群所有未调度的pod, 并且获取当前集群所有节点的健康状况和资源使用情况,为待调度pod选择最佳计算节点,完成调度。

        调度阶段分为: predict过滤不能满足业务需求的节点,如资源不足、端口冲突等;Priority按既定要素将满足调度需求的节点评分,选择最佳节点; Bind将计算阶段和pod绑定完成调度。

3. Kubelet

        Kubelet是kubernetes初始化系统,它主要负责对于当前节点的资源信息和健康状态上报;负责pod的健康检查和状态汇报; 从不同源获取不同pod清单(可以从本地目录,给的的HTTPServer或者API-Server等源头获取),并按需启动不同的pod组件,并且运行时会把网络和存储资源抽象成CRI/CNI/CSI【CRI(Container Runtime Interface):容器运行时接口,提供计算资源;CNI(Container Network Interface):容器网络接口,提供网络资源;CSI(Container Storage Interface):容器存储接口,提供存储资源】。

 Kubernetes 架构原则和对象设计_第6张图片
        
4. Kube-proxy

        监控集群中用户发布的服务,并完成负载均衡配置。节点之间的Kube-proxy都会配置相同的负载均衡策略,使得整个集群的服务发现建立在分布式负载均衡器上,服务调用无需经过额外的网络调转。

Kubernetes 架构原则和对象设计_第7张图片

5. 推荐的Add-ons

        • kube-dns:负责为整个集群提供 DNS 服务
        • Ingress Controller:为服务提供外网入口
        • MetricsServer:提供资源监控
        • Dashboard:提供 GUI
        • Federation:提供跨可用区的集群
        • Fluentd-Elasticsearch:提供集群日志采集、存储与查询

二. Kubernetes的架构

1. 整体架构

Kubernetes 架构原则和对象设计_第8张图片

 2. Master架构

Kubernetes 架构原则和对象设计_第9张图片

 3. Node架构

Kubernetes 架构原则和对象设计_第10张图片

 4. 分层架构

Kubernetes 架构原则和对象设计_第11张图片

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

你可能感兴趣的:(个人,kubernetes)