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 当前启动好的所有信息。
相关推荐
Patrick_Wilson5 小时前
写给前端的 K8s 入门:用一张图和一个例子搞懂 5 个核心概念
云原生·kubernetes·devops
云游牧者8 小时前
K8S-Helm包管理全解-从入门到Chart开发实战指南
云原生·容器·kubernetes·helm·chart模板
codeejun8 小时前
每日一Go-66、K8s 蓝绿发布 & 金丝雀发布实战:Service 切流量 + Ingress 灰度一次讲透
开发语言·golang·kubernetes
口喜口喜8 小时前
K3s 安装笔记(CentOS 7.9)
kubernetes
Cat_Rocky11 小时前
k8s 监控平台 Prometheus简单学习
学习·kubernetes·prometheus
杰克逊的日记12 小时前
k8s的两种网络转发规则及原理
网络·容器·kubernetes
仙柒41515 小时前
kubernetes 控制器 Dockerfile
运维·容器·kubernetes
liux35281 天前
K8s 排坑 02:Pod 一直 CrashLoopBackOff 怎么办?
云原生·容器·kubernetes
shinelord明1 天前
【云计算】k8sclient API 镜像操作 Java 类封装
java·kubernetes·云计算
liux35281 天前
K8s 排坑 01:Pod 一直 Pending 怎么办?
云原生·容器·kubernetes