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

k8s基础架构介绍

k8s基础架构介绍

k8s 是对容器进行编排的一种工具。通过k8s可以实现对容器的编排、部署、更新等

学习k8s之前,先了解相关的一些使用和配置k8s的一些工具。

k8s的常用工具

在 kubernetes 中,主要有三个日常使用的工具,这些工具使用 kube 前缀命名,这三个工具如下:

kubeadm

用来初始化集群的指令,能够创建集群,并且添加新的节点。可用其它部署工具替代。

具体功能有:

  1. 初始化集群:在控制平面节点(Master 节点)上运行 kubeadm init,自动生成集群所需的证书、配置文件和核心组件(如 API Server、Controller Manager、Scheduler 等)。

  2. ​加入节点:生成 kubeadm join 命令,将工作节点(Worker 节点)添加到集群。

  3. 升级集群:支持 Kubernetes 版本的升级(如 kubeadm upgrade)。

  4. 重置集群:通过 kubeadm reset 清理集群状态。

kubelet:

​运行在每个节点(Master 和 Worker)上的代理,直接与容器运行时(如 Docker、containerd)交互,负责与API-server通信,管理节点上的 Pod 和容器生命周期。具体功能包括

  1. ​启动/停止容器:根据 Kubernetes API Server 的指令,创建或终止 Pod 中的容器。

  2. 监控容器的运行状态,并向 API Server 报告节点和 Pod 的健康状态。

  3. 挂载存储卷:按需挂载 Pod 所需的存储卷(如 Persistent Volume)。

  4. ​执行探针:运行 livenessProbereadinessProbe 检查容器状态。

kubectl

kubectl:用k8s中的命令行工具,与 kubernetes API-Server 通讯,是我们操作集群的客户端。具体功能有

  1. 创建、删除、更新、查看集群中的资源(如 kubectl create, kubectl delete

  2. ​调试集群:查看 Pod 日志(kubectl logs)、进入容器终端(kubectl exec)、检查资源状态(kubectl describe)。

  3. 通过 YAML 文件声明式管理资源(如 kubectl apply -f deployment.yaml)。

那么我们操纵集群中的节点是怎么办到的呢,其实就是用户通过 kubectl 向 API Server 发送指令,API Server 再将指令传递给 kubelet 执行。

讲完常用的工具,接下来,我们就可以一起看一下k8s的架构了。

k8s 架构

一个 kubernetes 集群是由一组被称为节点的机器或虚拟机组成,节点有 master、worker 两种类型。一个集群中至少有一个 master 节点,在没有 worker 节点的情况下, Pod 也可以部署到 master 节点上。如果集群中的节点数量非常多,则可考虑扩展 master 节点,使用多个 master 节点控制集群。

k8s中的master节点组成了控制平面,worker节点组成了数据平面。

控制平面

控制平面由master节点组成。一个maser节点中通常由5个组件,包括

  1. ​kube-apiserver:集群的“入口”,提供 REST API,接收用户请求(如 kubectl 命令)。

  2. etcd:分布式键值存储数据库,保存集群的所有配置和状态数据。

  3. kube-scheduler:调度 Pod 到合适的节点上运行。

  4. kube-controller-manager:运行各种控制器(如 Deployment、Node 控制器),确保集群处于期望状态。

  5. ​cloud-controller-manager​(可选):与云平台(如 AWS、GCP)交互,实现云原生功能。

数据平面

数据平面是 Kubernetes 集群中实际承载工作负载的核心层,由一组 ​工作节点(Worker Node)​ 构成,负责运行用户应用(Pod)并处理计算、存储、网络等实际任务。

每个worker节点中,都必须有:

kubelet:节点代理,管理本节点上 Pod 的生命周期(创建、终止、重启容器)、监控容器状态(如 CPU/内存使用率),并向控制平面报告节点和 Pod 的健康状态、挂载存储卷(Volume)、执行容器探针(Liveness/Readiness Probe)等。

kube-proxy:节点网络代理,维护 Kubernetes 服务的网络规则,确保 Pod 跨节点通信时,流量能正确转发到目标端点(Endpoint)、实现 Service 的负载均衡和网络流量路由(通过 iptables 或 IPVS 规则)。

k8s部署一个pod的完整流程

当用户通过 kubectl createkubectl apply 提交资源声明(如 Deployment、Pod)时,集群会按以下步骤协调资源:

  1. 用户提交指令

    kubectl 将 YAML 文件内容转换为 API 请求,发送至 ​API Server。

  2. ​API Server 处理请求

    API Server 对请求进行身份认证(Authentication)、权限校验(Authorization)并将资源定义(如 Pod 规格)持久化到 ​etcd 数据库。

  3. ​调度决策(Scheduler)

    调度器监听 API Server 的未调度 Pod 事件,执行以下逻辑:
    过滤满足 Pod 资源需求的节点(如 CPU/内存/GPU)。
    根据策略(亲和性、污点容忍、拓扑分布等)为 Pod 选择最优节点。

  4. 节点执行(kubelet)

    目标节点的 ​kubelet 检测到新 Pod 调度到本节点后:

    • 从镜像仓库拉取容器镜像(若本地不存在)。
    • 调用容器运行时创建容器,挂载存储卷。
    • 启动容器并执行探针检查。
    • 持续监控容器状态,并上报至 API Server。
  5. ​状态反馈与协调(Controller Manager)​

    ​控制器(如 Deployment Controller)​ 持续监听 Pod 状态,若Pod 异常终止,触发重启或重建(根据重启策略),若期望副本数与实际不符,触发扩缩容操作。


http://www.kler.cn/a/585517.html

相关文章:

  • 一般机器学习有哪些算法?
  • 共享内存的通信
  • 境内深度合成服务算法备案通过名单分析报告
  • 西游记英文版108天社里学练活动总结与感言
  • .NET Core 中如何实现缓存的预热?
  • 卷积神经网络 - 基本概念
  • 用Maven创建只有POM文件的项目
  • clickhouse网络安全日志 网络安全日志保存时间
  • Linux下学【MySQL】中如何实现:多表查询(配sql+实操图+案例巩固 通俗易懂版~)
  • pytorch中的基础数据集
  • 深搜专题8:N皇后
  • 最节省服务器,手搓电子证书查询系统
  • Navicat安装流程
  • 鸿蒙 @ohos.arkui.dragController (DragController)
  • 深度学习中学习率调整策略
  • NetLink内核套接字案例分析
  • 程序化广告行业(13/89):DSP的深入解析与运营要点
  • CH340 模块的作用及其与 JTAG、串口下载和 TTL 电平的关系
  • 【春招笔试】2025.03.13-蚂蚁春招笔试题
  • VisionPro中IPO工具详解