k8s架构原理

k8s节点介绍

分为master节点和node节点,master节点负责整个集群的调度,node节点负责应用容器的运行。

k8s组件介绍

kubectl

  kubectl 是一个客户端的管理工具,它会监听apiserver,比如有创建pod的事件时,会执行pod创建的相关操作,也会执行探针检测。

kube scheduler

  负责资源调度,会根据用户的调度规则分配一个最佳节点来创建pod。

kube-proxy

  负责集群外访问集群内pod,管理Cluster IP和endpoint的映射关系,其工作模式有iptables、ipvs、userspace三种方式。

kube-apiserver

  所有组件之间通信都需要通过这个组件来实现。

core-dns

  用于将svc解析为Cluster IP。

CNI

  容器网络接口,通常的实现方式有flannel、calico。

ETCD

  k8s所有的数据都保存在etcd中,由apiserver提供统一的访问入口。

Pod创建流程

  1. 客户端调用apiserver将创建配置清单写入etcd。

  2. kube-schedule监听到创建事件时,进行预选和优选选择一个最佳的node节点,同时将调度结果通过apiserver写回到etcd。

  3. kubectl监听到写入事件后,如果发现是自己的节点要创建pod时,

    3.1 调用/etc/cni/net.d目录下的网络插件配置,由网络插件实现地址分配、接口创建、网络创建等功能 。

    3.2 调用容器引擎(通常是docker)创建pod。

Pod关闭流程

  1. 调用apiserver将Pod 状态置为Terminating。同时将metadata.annotations.deletionTimestamp置为当前时间。
  2. 与此同时,kube-proxy 会将 Pod 从对应的 service 上摘除。
  3. 与此同时,针对有 PreStop Hook 的容器,kubelet 会调用每个容器的 PreStop Hook,假如 PreStop Hook 的运行时间超出了 grace period,kubelet 会发送 SIGTERM 并再等 2 秒,如果2s后还未关闭,则发送SIGKILL信号。
  4. 与此同时,针对没有 PreStop Hook 的容器,kubelet 发送 SIGTERM。如果 达到grace period之后,容器还未终止,则kubelet 发送 SIGKILL 干掉尚未退出的容器。
posted @   独揽风月  阅读(213)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示