幸福和富有的过一生

幸福和富有的过一生!


  • 首页

  • 归档

  • 关于我

  • 公益404

  • 搜索

Kubernetes Api Server详解

时间: 2022-11-27 分类: kubernetes   cloudnative   api-server   字数: 1690 字 阅读: 4分钟 阅读次数:

介绍

整个Kubernetes技术体系由声明式API以及Controller构成,而kube-apiserver是Kubernetes的声明式api server,并为其它组件交互提供了桥梁。因此kube-apiserve是Kubernetes体系中非常重要的组件之一,加深对其理解就显得至关重要。

kube-apiserver的核心功能是提供了Kubernetes各类资源对象(如Pod、RC、Service等)的增、删、改、查及Watch等HTTP Rest接口,成为集群内各个功能模块之间数据交互和通信的中心枢纽,是整个系统的数据总线和数据中心。其主要运行在master节点上。

kube-apiserver的功能:

  • 提供了集群管理的REST API接口(包括认证授权、数据校验以及集群状态变更)。
  • 提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd)。
  • 是资源配额控制的入口。
  • 拥有完备的集群安全机制。

架构

kube-apiserver从上到下可以分为四层:接口层,访问控制层,注册表层和数据库层。

01

API层

API层主要有三个Server组成

  1. Kube Core API Server 核心接口服务器

负责对请求的一些通用处理,认证、鉴权等,以及处理各个内建资源的 REST 服务。

  1. API Extensions Server 可扩展接口服务器

主要处理 CustomResourceDefinition(CRD)和 CustomResource(CR)的 REST 请求,也是 Delegation 的最后一环,如果对应 CR 不能被处理的话则会返回 404。

  1. Aggregator Server 聚合服务器

暴露的功能类似于一个七层负载均衡,将来自用户的请求拦截转发给其他服务器,并且负责整个 APIServer 的 Discovery 功能。

访问控制层

访问控制层对用户进行身份鉴权,然后根据配置的各种访问许可逻辑(Admission Controller),判断是否允许访问。当请求到达 kube-apiserver 时,kube-apiserver 首先会执行在 http filter chain 中注册的过滤器链,该过滤器对其执行一系列过滤操作,主要有认证、鉴权等检查操作。

注册表层

Kubernetes 把所有资源都保存在注册表(Registry)中,针对注册表中的各种资源对象,都定义了相应的资源对象类型,以及如何创建资源,转换不同版本的资源,编码解码资源。

Etcd层

通过KV持久化存储Kubernetes对象,API Server 就是利用Etcd的Watch特性实现了经典List-Watch机制。

与其他组件交互

kube-apiserver作为集群内各个功能模块之间数据交互和通信的中心枢纽,我们看一下与其他功能模块交互。

  1. 与kubelet交互

每个Node节点上的kubelet定期就会调用kube-apiserver的REST接口报告自身状态,kube-apiserver接收这些信息后,将节点状态信息更新到etcd中。kubelet也通过kube-apiserver的watch接口监听Pod信息,从而对Node机器上的Pod进行管理。

  1. 与kube-controller-manager交互

kube-controller-manager中的Node Controller模块通过kube-apiserver提供的watch接口,实时监控Node的信息,并做相应处理。

  1. 与kube-scheduler交互

kube-scheduler通过kube-apiserver的Watch接口监听到新建Pod副本的信息后,它会检索所有符合该Pod要求的Node列表,开始执行Pod调度逻辑。调度成功后将Pod绑定到目标节点上。

如上组件都通过其REST接口交互,接口大致分为如下几类:

02

访问

有多种方式可以访问kube-apiserver提供的 REST API:

  1. kubectl 命令行工具

  2. 支持多种语言的SDK

  • Go
  • Python
  • Javascript
  • Java
  • CSharp
  • 其他 OpenAPI  支持的语言,可以通过 gen  工具生成相应开发语言的client
  1. 直接调用REST API接口

    这个需要创建管理员用户,并授权以及获取token。

    # -k 允许curl使用非安全的ssl连接并且传输数据(证书不受信)
    $ curl -k --header "Authorization: Bearer $TOKEN"  https://192.168.0.113:6443/api
    

引用

  1. 一文读懂 Kubernetes APIServer 原理

  2. Kubernetes API | Kubernetes

  3. Kubernetes API Server 深入浅出

  4. Kubernetes 技术架构深度剖析

  5. Kubernetes API Server handler 注册过程分析 | 云原生社区

  6. Kubernetes 核心组件:API Server 概念/功能

#kubernetes# #cloudnative# #api-server#
QQ扫一扫交流

标题:Kubernetes Api Server详解

链接:/post/api-server-arch/

作者:lizj3624

声明: 本博客文章除特别声明外,均采用 CC BY-NC-SA 3.0许可协议,转载请注明出处!

创作实属不易,如有帮助,那就打赏博主些许茶钱吧 ^_^
WeChat Pay

微信打赏

Alipay

支付宝打赏

DPDK在四层LB中的应用
Cloudflare官方介绍
  • 文章目录
  • 站点概览
lizj3624

lizj3624

幸福和富有的过一生!

93 日志
90 分类
107 标签
GitHub 知乎
标签云
  • Cloudnative 13
  • 财报 11
  • Kubernetes 10
  • Nginx 9
  • Apisix 7
  • 美股 6
  • Video 5
  • 宏观经济 5
  • 投资 5
  • Linux 4
  • 介绍
  • 架构
    • API层
    • 访问控制层
    • 注册表层
    • Etcd层
  • 与其他组件交互
  • 访问
  • 引用
© 2010 - 2024 幸福和富有的过一生
Powered by - Hugo v0.124.1 / Theme by - NexT
/
Storage by /
0%