k8s 集群的组成和原理

  • 集群

集群是一组节点,这些节点可以是物理服务器也可以是虚拟机,在它们中安装了k8s的环境。

  • 集群的组成

k8s 集群由 worker 节点和 node 节点组成,其中worker节点由Controller Manager(控制管理器)、etcd(键值数据库)、scheduler(调度器)、api-server(api服务器);node节点主要由kubelet(监工)、kube-proxy(代理网络组成)。

worker节点各部分的作用

master 负责管理集群,master 协调集群中的所有活动,例如调度应用程序、维护应用程序的所需状态、扩展应用程序和滚动更新。

  • kube-apiserver

集群控制的入口,提供 HTTP REST 服务。

  • etcd

一致且高可用的键值存储,用作 Kubernetes 所有集群数据的后台数据库。

  • kube-scheduler

负责 Pod 的调度

  • kube-controller-manager

Kubernetes 集群中所有资源对象的自动化控制中心

node节点各部分作用

节点是k8s 中的工作节点,负责维护运行的Pod 并提供k8s的环境。

  • kubelet

负责 pod 的创建、启动、监控、重启、销毁等工作,同时与Master节点协作,实现集群管理的基本功能。

  • kube-proxy

实现k8s的通信与负载均衡功能。


  • 归纳

k8s 的核心组件

复制代码
apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;
etcd 保存了整个集群的状态,就是一个数据库;
controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
kubelet 负责维护容器的生命周期,同时也负责 Volume(CSI)和网络(CNI)的管理;
Container runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI);
kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡;
  • k8s 部署一个应用的交互流程
  1. 程序员使用命令行工具: kubectl ; kubectl create deploy tomcat --image=tomcat8(告诉 master 让集群使用 tomcat8 镜像,部署一个 tomcat 应用)。
  2. kubectl 命令行内容发给 api-server,api-server 保存此次创建信息到 etcd 。
  3. etcd 给 api-server 上报事件,说刚才有人给我里面保存一个信息。(部署Tomcat[deploy])
  4. controller-manager 监听到 api-server 的事件,是 (部署Tomcat[deploy])。
  5. controller-manager 处理这个 (部署Tomcat[deploy])的事件。controller-manager 会生成 Pod 的部署信息【pod信息】。
  6. controller-manager 把 Pod 的信息交给 api-server ,再保存到 etcd
  7. etcd 上报事件【pod信息】给 api-server 。
  8. scheduler 专门监听 【pod信息】 ,拿到 【pod信息】的内容,计算,看哪个节点合适部署这个 Pod【pod 调度过后的信息(node: node-02)】。
  9. scheduler 把 【pod 调度过后的信息(node: node-02)】交给 api-server 保存给 etcd 。
  10. etcd 上报事件【pod调度过后的信息(node: node-02)】,给 api-server 。
  11. 其他节点的 kubelet 专门监听 【pod 调度过后的信息(node: node-02)】 事件,集群所有节点 kubelet 从 api-server 就拿到了 【pod调度过后的信息(node: node-02)】 事件。
  12. 每个节点的 kubelet 判断是否属于自己的事情;node-02 的 kubelet 发现是他的事情
  13. node-02 的 kubelet 启动这个 pod。汇报给 master 当前启动好的所有信息。
相关推荐
小毅&Nora9 分钟前
【云计算】【Kubernetes】 ⑥ K8S Pod优雅下线全解析:从preStop到Eureka下线实战
kubernetes·云计算·优雅下线
会飞的小蛮猪23 分钟前
K8s-1.29.2二进制安装-第三章(Master组件安装)
云原生·容器·kubernetes
百锦再37 分钟前
Kubernetes与开发语言:重新定义.NET Core与Java的云原生未来
开发语言·云原生·kubernetes
ascarl201014 小时前
Kubernetes 环境 NFS 卡死问题排查与解决纪要
云原生·容器·kubernetes
谷隐凡二16 小时前
etcd在Kubernetes中的作用简单介绍
数据库·kubernetes·etcd
m0_5695310117 小时前
《K8s 网络入门到进阶:Service 与 Ingress 原理、部署方案及核心区别对比》
网络·容器·kubernetes
新手小白*19 小时前
K8s 中的 CoreDNS 组件
云原生·容器·kubernetes
一周困⁸天.20 小时前
K8S-CoreDNS组件
网络·kubernetes
隐语SecretFlow1 天前
【隐语Secretflow】一文速通基于可信执行环境 (TEE) 的零信任计算系统
云原生·kubernetes·开源
Dobby_051 天前
【k8s】集群安全机制(一):认证
运维·安全·kubernetes