当前位置: 首页 > news >正文

Kubernetes控制平面组件:高可用 APIServer

云原生学习路线导航页(持续更新中)

  • kubernetes学习系列快捷链接
    • Kubernetes架构原则和对象设计(一)
    • Kubernetes架构原则和对象设计(二)
    • Kubernetes架构原则和对象设计(三)
    • Kubernetes控制平面组件:etcd(一)
    • Kubernetes控制平面组件:etcd(二)
    • Kubernetes控制平面组件:etcd常用配置参数
    • Kubernetes控制平面组件:etcd高可用集群搭建
    • Kubernetes控制平面组件:etcd高可用解决方案
    • Kubernetes控制平面组件:Kubernetes如何使用etcd
    • Kubernetes控制平面组件:API Server详解(一)

本文主要对kubernetes的控制面组件API Server 的高可用集群搭建进行介绍,涵盖API Server高可用搭建的注意事项,产线API Server最佳使用实践,以及API Server如何在内部进行负载均衡

  • 希望大家多多 点赞 关注 评论 收藏,作者会更有动力继续编写技术文章

1.高可用的多副本API Server

1.1.什么是高可用?

  • 所谓高可用,就是将应用部署为多个副本,然后通过负载均衡提供统一入口。
    • 应用角度:多个副本,有部分发生异常时,依旧有正常副本能提供服务,保证服务一直在线。
    • 用户角度:用户始终通过统一入口使用应用,不关心入口后面到底是哪个副本在处理请求,只要入口不变,后面的服务副本数量、服务行为就都不被感知

1.2.API Server如何配置高可用?

在这里插入图片描述

  • 简单来说,API Server配置高可用主要分两步:
    • 第一,启动多个实例
      • 多个实例,需要使用同一个CA签发证书
      • API Server本身是无状态的,方便多副本伸缩
    • 第二,为多个副本配置负载均衡
      • 根据不同厂商,可以采取不同手段。比如HA Proxy、硬件负载均衡F5等

1.3.产线上API Server最佳使用实践?

1.3.1.API Server启动方法

  • 可以选择 二进制启动、静态Pod启动 等方法
  • 不过更推荐使用 kubelet 拉起 静态Pod的方式
    • kubelet 本身具有保证应用高可用的能力,应用死了 kubelet 会主动重启。
    • 相比systemd,kubelet 多出了liveness探活等机制,探活失败也会重启pod

1.3.2.预留充足的CPU和内存资源

在这里插入图片描述

1.3.3.善用速率限制(RateLimit)

在这里插入图片描述

1.3.4.设置合适的缓存大小

在这里插入图片描述

  • apiserver cache是个循环 range buffer,满了之后,新数据会覆盖最老的数据

1.3.5.客户端尽量使用长连接

在这里插入图片描述

  • list的时候,即使通过labelFilter过滤,这个过滤动作也是在apiserver做的,尽量用watch代替list
  • 如果使用 list(labelFilter过滤) + 没有设置resourceVersion,那么请求就会呗透传到etcd,apiserver首先会从etcd拉取全量数据,然后在apiserver中进行过滤,再返回数据,这个过程可能造成etcd、apiserver压力都很大

2.如何访问API Server

2.1.集群内部组件访问apiserver

2.1.1.default ns 下 svc kubernetes

  • 在default ns下有个svc kubernetes,即为kube-apiserver的 svc,类型为ClusterIP,是所有集群内部组件 访问apiserver 的入口
  • Kubernetes 的 DNS 服务(如 CoreDNS)会自动解析以下格式的域名:
    ​​<service-name>.<namespace>.svc.cluster.local
  • 所以 svc kubernetes 的DNS域名为:kubernetes.default.svc.cluster.local
  • 可以验证一下,随便找一个pod,在pod内部解析下域名:
    在这里插入图片描述
  • curl一下这个域名解析出的ip,会发现请求其实是打到了apiserver,但是我没有添加证书,所以响应为401
    在这里插入图片描述

2.1.2.注意事项

  • 配置高可用集群,可以有对内、对外多个负载均衡访问入口,但是对于apiserver组件来说,最好有统一的访问入口,以防不同组件在不同负载均衡位置看到的apiserver状态不一致
  • 假如有多个负载均衡入口,有的出了问题,就可能出现问题:不同组件在不同负载均衡位置看到的apiserver状态不一致。统一入口可以避免这种情况
  • 这也是云原生带来的一些限制,系统太过于动态了,很多状态和配置都需要不停的监听,组件之间的相互配合如果出现一点问题,影响面都很广

2.2.集群外部访问apiserver

  • 通过配置外部负载均衡器,用于外部访问apiserver。但是要保证负载均衡器的高可用性
    在这里插入图片描述

3.API Server启动参数

  • 完整启动参数详解:https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-apiserver/
  • apiserver pod启动参数示例
    在这里插入图片描述

相关文章:

  • 详解反射型 XSS 的后续利用方式:从基础窃取到高级组合拳攻击链
  • 定制一款国密浏览器(10):移植SM2算法前,解决错误码的定义问题
  • 【Linux】软件管理机制和软件安装
  • 软件测试--自动化测试1
  • 【操作系统原理02】进程的描述与控制
  • 基于机器学习 LSTM 算法的豆瓣评论情感分析系统
  • matlab论文图一的地形区域图的球形展示Version_1
  • 【Matlab】中国东海阴影立体感地图
  • 梅施CPQ + AI:开启智能AI与报价软件的新潮流
  • 大模型Rag - 文本分块
  • libevent的bufferevent测试用例和使用方法(附带源码)
  • 腾讯wxg企业微信 后端开发一面
  • 基于Ubuntu2504部署OpenStack E版
  • uv:重新定义Python开发效率的下一代工具链
  • GNU,GDB,GCC,G++是什么?与其他编译器又有什么关系?
  • Android TTY设备调用流程和简单分析
  • Vue3 本地打包启动白屏解决思路!! !
  • Springboot+vue3开发项目——热点事件
  • YOLO拓展-NMS算法
  • Dijkstra 算法
  • 碎片化时代如何阅读?巴金图书馆推出世界读书日系列活动
  • 河南一季度GDP为14945.58亿元,同比增长5.9%
  • 牛市早报|李强:在一些关键的时间窗口,推动各方面政策措施早出手、快出手
  • 硅基世界的“缘分”——系统与人工智能携手进化
  • 中华人民共和国和马来西亚关于构建高水平战略性中马命运共同体的联合声明
  • “努力稳住外贸基本盘”,浙江省委书记、省长接连调研外贸