kubernetes架构

news/2024/12/22 13:57:13/
  1. kubernetes cluster由master和node组成,节点上运行着若干kubernetes服务
  2. Master节点:
    1. master是kubernetes cluster的大脑,运行着的Daemon服务包括kube-apiserver,kube-scheduler,kube-controller-manager,etcd和Pod网络(如flannel)
    2. API Service(kube-apiserver):api server提供了HTTP/HTTPS RESTful API。即kubernetes API。API Server是kubernetes cluster的前端接口,各种客户端工具(cli或者ui)以及kubernetes其他组件可以通过他管理cluster的各种资源
    3. Scheduler(kube-scheduler):scheduler负责决定将pod放在哪个Node上运行,scheduler在调度时会充分考虑cluster的拓扑结构,当前各个节点的负载,以及应用对高可用,性能,数据亲和性的需求
    4. Controller Manager(kube-controller-manager):controller manager负责管理cluster各种资源,保证资源处于预期的状态,controller manager由多种controller组成,包括replication controller,endpoints controller,namespce controller,serviceaccounts controller等,不同的controller管理不同的资源,比如:replication controller管理Deployment,StatefulSet,DaemonSet的生命周期。namespace controller管理Namespace资源。
    5. etcd:etcd负责保存kubernetes cluster的配置信息和各种资源的状态信息,当数据发生变化时,etcd会快速地通知kubernetes相关组件
    6. Pod网络:Pod要能够相互通信,kubernetes cluster必须部署Pod网络,flannel是其中一个可选方案
  3. Node节点:
    1. Node是pod运行的地方,kubernetes支持Docker,rkt(Rocket)等容器运行时工具,Node上运行的kubernetes组件有kubelet,kube-poxy和pod网络(如:flannel)

    2. kubelet:kubelet是Node的agent,当Scheduler确定在某个Node上运行Pod后,会将Pod的具体的配置信息(image,volume等)发送给该节点的kubelet,kubelet根据这些信息创建和运行容器,并向Master报告运行状态

    3. kube-proxy:service在逻辑上代表了后端的多个pod,外界通过service访问pod,kube-proxy把service接收到的请求转发到Pod上。每个Node都会运行kube-proxy服务,他负责将访问service的TCP/UDP数据流转发到后端的容器,如果有多个副本,kube-proxy会实现负载均衡

    4. Pod网络:Pod要能够相互通信,kubernetes cluster必须部署Pod网络,如:flannel,Calico在这里插入图片描述

    5. master上的kubelet和kube-proxy是因为:master上也可以运行应用,即master同时也是一个Node,几乎所有的kubernetes组件本身也运行在pod中,

    6. kubernetes的系统组件都被放到kube-system namespace中,kubelet是唯一没有以容器形式运行的kubernetes组件,他通过systemd服务运行,可以通过sudo systemctl status kubelet.service查看kubelet的状态

  4. 举例:
    1. 执行命令部署应用:kubectl run httpd-app --image=httpd --replicas=2:会看到deployment “httpd-app” created

    2. kubernetes部署了deployment httpd-app,有两个副本pod,分别运行在k8s-node1和k8s-node2

    3. 通过命令kubectl get deployment查看部署的应用,通过kubectl get pod -o wide查看具体的pod信息在这里插入图片描述

    4. 部署流程:

      1. kubectl发送部署请求到API Server
      2. API Server通知controller manager创建一个deployment资源
      3. Scheduler执行调度任务,将两个副本Pod分发到k8s-node1和k8s-node2
      4. k8s-node1和k8s-node2上的kubectl在各自的节点上创建并运行pod
      5. 补充:1:应用的配置和当前状态信息保存在etcd中,执行kubectl get pod时API Server会从etcd中读取这些资源,2:flannel会为每个pod都分配IP,因为没有创建service,所以目前流程kube-proxy没有参与

http://www.ppmy.cn/news/1527425.html

相关文章

Docker基本概念详解及优势分析

Docker作为现代开发环境中不可或缺的工具,极大地简化了应用程序的开发、测试和部署流程。本篇文章将介绍Docker的基本概念,包括其架构、优势及常用命令,帮助您快速入门。 Docker是一个基于Go语言开发的开源应用容器引擎,遵循Apach…

预测日前电价:回顾最先进的算法、最佳实践和公开基准——阅读笔记

Forecasting day-ahead electricity prices: A review of state-of-the-art algorithms, best practices and an open-access benchmark 预测日前电价:回顾最先进的算法、最佳实践和公开基准 Applied Energy (2021) 摘要:电价预测在过去二十年间已经得到…

国产化中间件正在侵蚀开源中间件

开源中间件的发展趋势表明,它们将继续在技术创新和生态建设中发挥重要作用,尤其是在云计算、大数据等新兴技术领域。开源中间件如Apache Kafka、RabbitMQ、ActiveMQ和RocketMQ等在市场上有着广泛的应用。它们在技术社区中得到了良好的支持,并…

【数据结构OJ】DS线性表—多项式相加

题目描述 对于一元多项式p(x)p0p1xp2x2…pnxn,每个项都有系数和指数两部分,例如p2x2的系数为p2,指数为2。 编程实现两个多项式的相加。 例如5x2x23x3,-5-x6x24x4,两者相加结果:8x23x34x4 其中系数5和-5都是x的0次方…

2-91基于matlab的LQR倒立摆控制仿真

基于matlab的LQR倒立摆控制仿真。对于xAxBu 和yCxdu标准方程,文件qiuk中用LQR函数求解控制数组K,将K值带入fangzhen文件中(文件中已代入),得到倒立摆稳定曲线。程序已调通,可直接运行。 下载源程序请点链接…

Android Studio下载Gradle失败问题解决

问题说明 使用 Android Studio 构建程序报错如下 Could not install Gradle distribution from https://services.gradle.org/distributions/gradle-7.5.1-bin.zip. Reason: java.net.SocketTimeoutException: Connect timed out问题解决 下载对应版本的压缩包 gradle-7.5.1…

MySQL基于GTID同步模式搭建主从复制

系列文章目录 rpmbuild构建mysql5.7.42版本的rpm包 文章目录 系列文章目录一、mysql-5.7.42RPM包构建二、同步模式分类介绍1.异步同步模式2.半同步模式2.1.实现半同步操作流程2.2.半同步问题总结2.3.半同步一致性2.4.异步与半同步对比 3.GTID同步 三、GTID同步介绍1.gtid介绍2…

JS常用内置对象

1. String 对象 创建对象 let str1 "Hello, World!"; let str2 JavaScript is great!;常用 API: length: 获取字符串长度toUpperCase(): 将字符串转换为大写toLowerCase(): 将字符串转换为小写slice(start, end): 截取子字符串indexOf(value): 查找字…