Kubernetes架构介绍
实验环境

安装好k8s集群
一、kubernetes组件构成
1、架构图

2、组件介绍
使用以下命令查看相关资源
kubectl get nodes 查看群集节点
kubectl get ns 查看名称空间
kubectl get pod -A 查看所有命名空间中的pod
kubectl get pod -n kube-system 查看kube-system名称空间中的pod
kubectl get pod -n calico-system 查看calico-system名称空间中的pod
systemctl status kubelet 查看kubelet服务的状态
Kubernetes群集分为Master 和node 节点,master 是调度分配任务的,node 是接受master 调度进行工作的。
主要几个组件的作用以及架构工作流程:
kubectl发送部署请求到API server。
APIserver通知Controller Manager 创建一个控制资源(如Deployment任务)。
Scheduler执行调度任务,将副本Pod创建任务分发到node上。
node上的kubelet在各自节点上创建并运行Pod。
用户通过kube-proxy访问到服务资源。
(1)kubectl
k8s是命令行端,用来发送用户的操作指令。
(2)API server
是k8s 集群的前端接口,各种客户端工具以及k8s的其他组件可以通过它管理k8s集群的各种资源。是所有服务访问的统一入口。
(3)Scheduler
负责决定将Pod放在哪个Node上运行。在调度时,会充分考虑集群的拓扑结构,当前各个节点的负载情况,以及应对高可用、性能、数据亲和性和需求。
负责接收任务,选择合适的节点进行分配任务。
(4)Controller Manager
负责管理集群的各种资源,保证资源处于预期的状态,用来维持副本期望数量。
它由多种Controller 组成,包括Replication Controller维护副本数量即期望值,创建删除pod、Endpoints Controller、Namespace Controller、Serviceaccounts Controller等等。
(5)Etcd
键值对数据库 ,存储k8s集群所有重要信息(持久化),负责保存k8s集群的配置信息和各种资源的状态信息。当数据发生变化时,etcd会快速的通知k8s相关组件。
第三方组件,它有可替换方案 Consul、zookeeper。
(6)Kubelet
它是Node上的agent(代理),接受调度,管理pod。当Scheduler确定某个Node上运行Pod之后,会将Pod的具体配置信息发送给该节点的kubelet,kubelet会根据这些信息创建和运行容器,并向Master报告运行状态。
管理(增删改查)Pod
(7)kube-proxy
服务发现和负载均衡,负责将访问service的TCP/UDP数据流转发到后端的容器(转发数据流,反向代理,多个pod副本,就会实现负载均衡)
(8)COREDNS
可以为集群中的SVC创建一个域名IP的对应关系解析
(9)DASEBORD
给k8s提供一个B/S结构的UI界面(仪表盘)。
(10)INGRESS Crontroller
官方只能实现4层负载均衡,它可以实现7层负载均衡。
(11)Pod
k8s集群的最小组成单位。一个Pod内,可以运行一个或多个容器,通常关系紧密的几个容器部署在同一个pod中。
大多数情况下,一个Pod内只有一个Container容器。
如需在运行的Pod中生成新的容器,可在pod定义文件中修改,端口不能相同.
(12)Flannel/Calico
是k8s集群网络方案,可以保证Pod的跨主机通信。第三方解决方案,也有替换方案。
二、区分Pod与Deployment
运行例子区分Pod与Deployment
1、创建一个名为 test-web 的 Pod,使用 nginx:1.20 镜像
kubectl run test-web --image=nginx:1.20
![]()
将 test-web Pod 暴露为一个 Service,端口为 80,类型为 NodePort
该 Service 会将 Pod 的 80 端口暴露到集群节点的某个端口(随机分配)
kubectl expose pod test-web --port=80 --type=NodePort
![]()
获取当前命名空间下的 Deployment、Pod 和 Service 的详细信息
kubectl get deployment,pod,svc -o wide

-o wide:显示更详细的信息
2、创建一个名为 nginx 的 Deployment,使用 nginx:1.20 镜像
kubectl create deployment nginx --image=nginx:1.20
![]()
将 nginx Deployment 暴露为一个 Service,端口为 80,类型为 NodePort
kubectl expose deployment nginx --port=80 --type=NodePort

将 nginx Deployment 的 Pod 副本数扩展到 4 个
kubectl scale deployment nginx --replicas=4
![]()
获取当前命名空间下的 Deployment、Pod、Service 和 ReplicaSet 的详细信息
kubectl get deployment,pod,svc,rs -o wide

3、删除名为 test-web 的Pod
kubectl delete pod test-web
![]()
查看集群中所有Pod的详细信息
kubectl get pod -o wide

如果该 Pod 不是由 Deployment 或 ReplicaSet 管理的,则不会被自动重建
4、删除nginx服务的一个pod
kubectl delete pod nginx-5cfbb5c9f4-h4bks
![]()
如果该 Pod 是由 Deployment 或 ReplicaSet 管理的,Kubernetes 会自动创建一个新的 Pod 来替换被删除的 Pod
5、删除名为 nginx 的 Deployment
kubectl delete deployment nginx
![]()
查看集群中所有Deployment的详细信息
kubectl get deployment -o wide

由该 Deployment 管理的所有 Pod 和 ReplicaSet 也会被自动删除
6、删除名为 nginx 和test-web的 Service(删除 Service 会清除相关的网络配置)
kubectl delete service nginx
![]()
kubectl delete service test-web
![]()
查看集群中所有Service的详细信息
kubectl get svc -o wide

总结:
1、Deployment是Pod资源管理器,负责控制Pod预期副本数量
2、Pod是集群中的最小管理单元,负责管理容器,可以受资源管理器控制,也可以单独运行
3、Service是对pod的代理,pod可能会发生变化,但service是不变的,service负责跟踪pod的变化
三、常见的Pod控制器类型
1、ReplicationController
RC用于确保每个Pod副本在任意时刻都能满足目标数量,简单点来说,它用于保证每个容器或容器组总是运行并且可以访问的:老一代无状态的Pod应用控制器。
2、ReplicaSet
RS新一代的无状态的Pod应用控制器,它与RC的不同之处在于支持的标签选择器不同,RC只支持等值选择器,RS还额外支持基于集合的选择器。
3、Deployment
为Pod和Replicaset提供了一个声明式定义(declarative)方法,
Deployment是通过调用ReplicaSet来实现对pod管理的。
典型的应用场景:
定义Deployment来创建ReplicaSet和Pod
滚动升级和回滚应用
扩容和缩容
4、DaemonSet
用于确保每一个节点都运行了某个Pod的一个副本,新增的节点一样会被添加此类Pod,在节点移除时,此类Pod会被回收。
典型的应用场景:
在node上运行日志收集
在node上运行监控
5、StatefulSet
用于管理有状态的持久化应用,如database服务程序,它与Deployment不同之处在于,它会为每一个Pod创建一个独有的持久性标识符,并确保每个Pod之间的顺序性。
典型的应用场景:
稳定的持久化存储
稳定的网络标志
有序部署,有序扩展
有序收缩,有序删除
补充:服务分类
有状态服务:DBMS数据库管理系统(MYSQL)从pod中剔除后,再恢复就会造成数据丢失。
无状态服务:LVS APACHE NGINX
6、Job
用于管理运行完成后即可终止的应用,例如批量处理作业任务,保证一次性任务pod成功结束。
7、Cronjob
管理基于时间的job,即:
在给定的时间点只运行一次
周期性地在给定时间点运行
8、Horizontal Pod Autoscaling
应用的资源使用率通常都有高峰和低谷,削峰填谷,提高集群的整体资源利用率,让service的pod个数自动调整,使pod水平自动缩放。
总结:
无状态应用:使用 Deployment。
有状态应用:使用 StatefulSet。
节点级别任务:使用 DaemonSet。
一次性任务:使用 Job。
周期性任务:使用 CronJob。
四、k8s集群中的个ip、端口区分
1、Master节点群集初始化参数解析
kubeadm init --kubernetes-version=v1.28.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.10.11 --cri-socket unix:///var/run/cri-dockerd.sock
--pod-network-cidr=10.244.0.0/16 指定 Pod 网络的 CIDR 范围(10.244.0.0/16)(即pod/容器的IP 地址,群集内访问使用)
--apiserver-advertise-address=192.168.10.11 指定主节点的 IP 地址,其他节点将通过这个地址访问 API Server(即物理网卡的 IP 地址,外部访问使用)
--service-cidr=10.96.0.0/12 指定集群中 Service 的 IP 地址范围(CIDR)(即Service 的 IP 地址,此为虚拟 IP 地址,群集内访问使用)
port
port是k8s集群内部访问service的端口,即通过clusterIP: port可以从Pod所在的Node上访问到service。
nodePort
nodePort是外部访问k8s集群中service的端口,通过nodeIP: nodePort 可以从外部访问到某个service。
targetPort
targetPort是Pod的端口,从port或nodePort来的流量经过kube-proxy 反向代理负载均衡转发到后端Pod的targetPort上,最后进入容器。
containerPort
containerPort是Pod内部容器的端口,targetPort 映射到containerPort
结论:port和nodePort都是service的端口,port暴露给k8s集群内部服务访问,nodePort暴露给k8s集群外部流量访问;
从port和nodePort两个端口过来的数据都需要经过反向代理kube-proxy,流入后端pod的targetPort上,最后到达pod内的容器端口
创建Pod资源
kubectl create deployment nginx3 --image=nginx:1.20
![]()
kubectl expose deployment nginx3 --port=80 --type=NodePort

获取当前命名空间下的 Deployment、Pod、Service 的详细信息
kubectl get deploy,pod,svc -o wide

输出字段说明:
Deployment
NAME:Deployment 的名称。
READY:当前 Ready 的 Pod 数量 / 期望的 Pod 数量。
UP-TO-DATE:已更新到最新版本的 Pod 数量。
AVAILABLE:当前可用的 Pod 数量。
AGE:Deployment 的创建时间。
CONTAINERS:Deployment 中容器的名称。
IMAGES:容器使用的镜像。
SELECTOR:用于选择 Pod 的标签。
Pod
NAME:Pod 的名称。
READY:Pod 中 Ready 的容器数量 / 总容器数量。
STATUS:Pod 的当前状态(如 Running、Pending、Failed 等)。
RESTARTS:容器重启的次数。
AGE:Pod 的创建时间。
IP:Pod 的 IP 地址。
NODE:Pod 所在的节点名称。
Service
NAME:Service 的名称。
TYPE:Service 的类型(如 ClusterIP、NodePort、LoadBalancer)。
CLUSTER-IP:Service 的 ClusterIP 地址。
EXTERNAL-IP:Service 的外部 IP 地址(如果有)。
PORT(S):Service 暴露的端口。
AGE:Service 的创建时间。
SELECTOR:用于选择 Pod 的标签。
查看名为 nginx3 的 Service 的详细信息
kubectl describe service nginx3

使用浏览器访问
192.168.10.11:31714
端口为对外暴露端口

相关文章:
Kubernetes架构介绍
实验环境 安装好k8s集群 一、kubernetes组件构成 1、架构图 2、组件介绍 使用以下命令查看相关资源 kubectl get nodes 查看群集节点 kubectl get ns 查看名称空间 kubectl get pod -A …...
远程服务器的mysql连接不上,问题出在哪里
使用本地ideal测试连接报错记录 排查 检查mysql服务是否正常,输入命令systemctl status mysql查看 检查端口netstat -plnt | grep mysql 最后检查服务器的防火墙设置 我以为在服务器厂商的控制面板设置放行规则就行,导致一直无法排查出问题,最后才发现由…...
Java高频面试之并发编程-04
hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:调用 start()方法时会执行 run()方法,那为什么不直接调用 run()方法? 多线程中调用 start() 方法…...
【第16届蓝桥杯软件赛】CB组第一次省赛
个人主页:Guiat 归属专栏:算法竞赛 文章目录 A. 移动距离(5分填空题)B. 客流量上限(5分填空题)C. 可分解的正整数D. 产值调整E. 画展布置F. 水质检测G. 生产车间H. 装修报价 正文 总共10道题。 A. 移动距离…...
云原生--基础篇-2--云计算概述(云计算是云原生的基础,IaaS、PaaS和SaaS服务模型)
1、云计算概念 云计算是一种通过互联网提供计算资源(包括服务器、存储、数据库、网络、软件等)和服务的技术模式。用户无需拥有和维护物理硬件,而是可以根据需要租用这些资源,并按使用量付费。 2、云计算特点 (1&am…...
uniapp云打包针对谷歌视频图片权限的解决方案
谷歌在24年底推出把图片和视频细分为两个权限,uniapp使用uni.chooseImage云打包默认图片视频为一个权限,不符合谷歌要求会被下架 解决方法,在项目根目录下新建AndroidManifest.xml移除不必要的权限 <?xml version"1.0" encoding"utf…...
vllm+vllm-ascend本地部署QwQ-32B
1 模型下载 可按照此处方法下载预热后的模型,速度较快(推荐artget方式) https://mirrors.tools.huawei.com/mirrorDetail/67b75986118b030fb5934fc7?mirrorNamehuggingface&catalogllms或者从hugging face官方下载。 2 vllm-ascend安…...
栈和队列--数据结构初阶(2)(C/C++)
文章目录 前言理论部分栈的模拟实现STL中的栈容器队列的模拟实现STL中的队列容器 作业部分 前言 这期的话会给大家讲解栈和队列的模拟实现和在STL中栈和队列怎么用的一些知识和习题部分(这部分侧重于理论知识,习题倒还是不难) 理论部分 栈的模拟实现 typedef int…...
C++常用函数合集
万能头文件:#include<bits/stdc.h> 1. 输入输出流(I/O)函数 1.1cin 用于从标准输入流读取数据。 1.2cout 用于向标准输出流写入数据。 // 输入输出流(I/O)函数 #include <iostream> using namespace…...
OpenGL shader开发实战学习笔记:第十二章 深入光照
1. 深入光照 1.1. 平行光 我们在前面的章节中,已经介绍了平行光的基本原理和实现步骤 平行光的基本原理是,所有的光都从同一个方向照射到物体上,这个方向就是平行光的方向。 1.2. 点光源 点光源的基本原理是,所有的光都从一个…...
CentOS7系统安装Docker教程
一、安装前准备 1、检查系统环境:Docker 要求系统为 64 位,且内核版本 3.10 以上。通过uname -r命令查看当前系统内核版本 。比如执行uname -r后,显示3.10.0-1160.el7.x86_64 ,说明满足内核版本要求。 2、卸载旧版本(…...
获取电脑信息(登录电脑的进程、C盘文件信息、浏览器信息、IP)
电脑的进程信息 // 获取登录电脑的进程信息String os System.getProperty("os.name").toLowerCase();String command;if (os.contains("win")) {command "tasklist";} else {command "ps -ef";}try {Process process new ProcessB…...
PCB 射频天线设计和版图创建技巧
本文要点 射频天线有多种形式,从整合在芯片中的扁平天线,到直接印制在PCB上的铜质天线。 创建带有一个或多个天线的版图时,需要确保在PCB不同电路模块之间彼此隔离。 在设计一个射频天线时,应该使用CAD工具,此类…...
uniapp-商城-29-vuex 关于系统状态的管理
按照我们前面讲的,vuex,的使用方式: 步骤如下: 1 先创建store 文件夹 2 在 store 中 创建一个 index.js 3、 在 store 中,创建一个modules文件夹 4、在store中,创建一个getters.js 5、在modules文件…...
小迪安全-112-yii反序列化链,某达oa,某商场,影响分析
yii是和tp一样的框架 入口文件 web目录下 相对tp比较简单一些,对比tp找一下他的url结构 对应的位置结构 这个contorllers文件的actionindex就是触发的方法 控制器,指向的index文件,就可以去视图模块看index文件 这就是前端展示的文件 自…...
区间选点详解
步骤 operator< 的作用在 C 中, operator< 是一个运算符重载函数,它定义了如何比较两个对象的大小。在 std::sort 函数中,它会用到这个比较函数来决定排序的顺序。 在 sort 中,默认会使用 < 运算符来比较两个对象…...
如何在白平衡标定种构建不同类型的白平衡色温坐标系
目录 一、预备知识: 二、常见的白平衡色温坐标系 三、白平衡色温坐标系的理解 1)横纵坐标轴分别代表什么含义? 2)色温坐标系中原点表示什么含义? 3)某M/某H的色温坐标为什么是长成这样呢?…...
Oracle RMAN同步数据库Active database duplicate
Active database duplicate,不需要先把目标数据库进行rman备份,只要目标数据库处于归档模式下即可直接通过网络对数据库进行copy,且copy完成后自动open数据库。这对于大数据特别是T级别的数据库来说优点非常明显,复制前不需要进行…...
Spring MVC 一个简单的多文件上传
原始代码逐行解释 PostMapping("/uploads") // ① 声明处理POST请求,路径为"/uploads" ResponseBody // ② 直接返回数据到响应体,不进行视图解析 public String uploads(MultipartFile[] files, // …...
基于DeepSeek/AI的资产测绘与威胁图谱构建
引言: 在网络安全攻防实践中,资产测绘是红队作战与蓝队安全运营的第一步,其本质都是通过系统性信息采集实现攻击面管理。 当前普遍存在的痛点在于,当企业级资产规模呈指数级增长时,传统基于规则引擎的低效批量处理方式…...
构建自动翻译工作流:技术与实践
一、引言 制药行业客户迫切需要一种翻译解决方案,以解决公司内部多样化的翻译难题。他们需要的不仅是提升翻译效率和准确性的工具,更希望能够保持文档的原始格式。我们观察到客户的需求广泛,包括多语言办公文件、研究文档和药品报批文件等&a…...
【Linux】中的网络管理
目录 1.ipv4原理,网关与DNS定义 2ip图形化配置--nm 2.1图形化平台配置 2.2无图形化平台配置 3.常用的网络命令--ping,wget,curl ping wget curl 4.ip命令临时配置---ifconfig,ip a ifconfig ip address 5.ip命令永久配…...
前端面试每日三题 - Day 10
这是我为准备前端/全栈开发工程师面试整理的第十天每日三题练习,涵盖: JavaScript 中 this 的指向详解与常见陷阱Vue 生命周期钩子的执行顺序与场景实践(Vue2 vs Vue3)系统设计实战:内容推荐系统的核心架构设计 ✅ 题…...
《深度学习》课程之卷积神经网络原理与实践教学设计方案
《深度学习》课程之卷积神经网络原理与实践教学设计方案 一、教学目标设计 (一)知识目标 学生能够准确描述卷积神经网络(CNN)的基本定义,包括其核心组成部分(如卷积层、池化层、全连接层等)及…...
elasticsearch中文分词器插件下载教程
一、下载原因: 我们的业务中通常使⽤的是中⽂分词,es的中⽂分词默认会将中⽂词每个字看成⼀个词⽐如:“我想吃⾁夹馍”会被分为”我”,”想”,”吃”,”⾁” ,”夹”,”馍” 这显然是…...
门面模式与适配器模式
一、门面模式 门面模式:提供统一接口访问子系统接口 1、包含角色 外观系统对外的统一接口子系统类的集合;并不知道外观角色的存在,需要为了配合外观角色而做特殊处理或修改 2、举例 原本开关灯要分别操作各个房间的灯,现在设置总…...
QSS【QT】
文章目录 QSSid选择器 & 类型选择器伪类选择器盒子模型 QSS 设置样式的时候,是可以指定某个控件来设置的。 指定控件之后,此时的样式就会针对这个指定的控件,也会针对子控件生效 ui->pushButton_2->setStyleSheet("QPushButt…...
第十六节:高频开放题-React与Vue设计哲学差异
响应式原理(Proxy vs 虚拟DOM) 组合式API vs Hooks React 与 Vue 设计哲学差异深度解析 一、响应式原理的底层实现差异 1. Vue 的响应式模型(Proxy/数据劫持) Vue 的响应式系统通过 数据劫持 实现自动依赖追踪: • …...
css 中float属性及clear的释疑
float属性可以让元素脱离文档流,父元素中的子元素设置为float,则会导致父元素的高度塌陷。 <style type"text/css"> .father{ /*没有给父元素定义高度*/background:#ccc; border:1px dashed #999; } .box01,.box02,.box0…...
缓存 --- 内存缓存 or 分布式缓存
缓存 --- 内存缓存 or 分布式缓存 内存缓存(In-Memory Cache)分布式缓存(Distributed Cache)内存缓存 vs 分布式缓存 内存缓存和分布式缓存是两种常见的缓存策略,它们在存储位置、访问速度和适用场景上有所不同。下面分…...
