目录

第一章:初始化容器(InitContainer)—— 应用启动前的 “准备军”

1.1 InitContainer 的基本概念与核心特性

1.2 InitContainer 与普通容器的关键区别

1.3 InitContainer 的实战场景与示例解析

1.3.1 示例 1:延迟启动 —— 控制应用启动时机

1.3.2 示例 2:权限操作 —— 修改内核参数

1.3.3 示例 3:依赖管理 —— 等待关联服务就绪

1.4 InitContainer 的设计优势与生产实践建议

第二章:Pause 容器 ——Pod 网络的 “基石”

2.1 Pause 容器的核心作用

2.2 Pause 容器的实现原理与优势

2.3 实战验证:如何观察 Pod 中的 Pause 容器

第三章:临时容器(Ephemeral Containers)—— 在线调试的 “急救包”

3.1 临时容器的设计初衷与核心特性

3.2 临时容器与普通容器的差异

3.3 实战案例:使用临时容器调试 Tomcat 应用

3.4 临时容器的适用场景与局限性

第四章:自动扩缩容(HPA)—— 应对流量波动的 “智能调节器”

4.1 HPA 的基本概念与工作原理

4.2 HPA 的核心工作流程

4.3 实战案例:基于 CPU 利用率的 Nginx 自动扩缩容

4.4 HPA 的应用场景与资源优化价值

总结:Kubernetes 高级调度特性的协同价值


第一章:初始化容器(InitContainer)—— 应用启动前的 “准备军”

在应用部署过程中,我们常面临这样的场景:应用启动前需要等待数据库就绪、修改系统配置或下载配置文件,但这些操作若嵌入业务镜像,会导致镜像体积膨胀、权限失控等问题。Kubernetes 的 InitContainer 正是为解决这类问题而生。

1.1 InitContainer 的基本概念与核心特性

InitContainer 是一种特殊容器,在 Pod 内应用容器启动前运行,主要用于执行初始化任务。它可以包含业务镜像中不存在的工具(如curlsysctl),完成一次性操作后退出,为应用容器的启动扫清障碍。

其核心特性包括:

  • 顺序执行:多个 InitContainer 按定义顺序依次运行,前一个完成后才启动下一个;
  • 必达性:若 InitContainer 失败,Kubernetes 会重启 Pod(除非restartPolicy设为Never);
  • 生命周期独立:与应用容器共享存储和网络命名空间,但拥有独立的镜像和启动逻辑;
  • 权限灵活性:可以 root 身份运行,执行高权限操作(如修改内核参数),且操作完成后即退出,不影响业务容器安全性。

1.2 InitContainer 与普通容器的关键区别

虽然 InitContainer 与普通容器在配置格式上相似,但在设计目标和功能上存在本质差异:

特性InitContainer普通容器
启动时机应用容器启动前所有 InitContainer 完成后启动
运行目标完成初始化任务后退出持续运行业务逻辑
重启策略失败后重启(受restartPolicy影响)restartPolicy和健康检查决定
支持的字段lifecycle、健康检查等字段支持lifecycle、健康检查等
资源处理资源请求会影响调度,但执行时优先占用资源按配置的资源限制运行

例如,InitContainer 不支持livenessProbe(存活探针),因为它必须在 Pod 就绪前完成任务;而普通容器依赖健康检查确保业务持续可用。

1.3 InitContainer 的实战场景与示例解析

1.3.1 示例 1:延迟启动 —— 控制应用启动时机

在分布式系统中,部分应用需要等待依赖服务初始化完成后再启动(如前端服务等待后端 API 就绪)。此时可通过 InitContainer 的sleep命令实现延迟。

YAML 配置(init01.yaml)

yaml

apiVersion: v1
kind: Pod
metadata:name: initc01labels:run: initc01
spec:terminationGracePeriodSeconds: 0containers:- name: n1image: nginx:1.7.9imagePullPolicy: IfNotPresentinitContainers:- name: initc01image: nginx:1.7.9command: ["sh", "-c", "sleep 15"]  # 延迟15秒dnsPolicy: ClusterFirstrestartPolicy: Never

执行与验证

  1. 创建 Pod:kubectl create -f init01.yaml
  2. 观察状态:连续执行kubectl get pod,前 15 秒 Pod 状态为Init:0/1(初始化中),15 秒后变为Running

原理:InitContainer 执行sleep 15后退出,Kubernetes 才启动应用容器(Nginx),确保应用在延迟后启动。

1.3.2 示例 2:权限操作 —— 修改内核参数

容器默认运行在非特权模式,无法修改内核参数(如vm.swappiness)。但 InitContainer 可通过securityContext获取特权,完成系统级配置。

YAML 配置(init02.yaml)

yaml

apiVersion: v1
kind: Pod
metadata:name: initc02labels:run: initc02
spec:containers:- name: n1image: nginx:1.7.9initContainers:- name: initc02image: alpinecommand: ["sh", "-c", "/sbin/sysctl -w vm.swappiness=0"]  # 禁用swapsecurityContext:privileged: true  # 开启特权模式restartPolicy: Never

执行与验证

  1. 应用配置:kubectl apply -f init02.yaml
  2. 查看节点内核参数:登录 Pod 所在节点(如k8s-node01),执行cat /proc/sys/vm/swappiness,结果为0,证明修改生效。

注意privileged: true会赋予容器主机级权限,生产环境需谨慎使用,仅在必要时为 InitContainer 配置。

1.3.3 示例 3:依赖管理 —— 等待关联服务就绪

后端应用常依赖数据库、缓存等服务,需确保依赖服务可用后再启动。可通过 InitContainer 的nslookup检测服务 DNS 是否就绪。

步骤 1:创建依赖服务检测的应用 Pod(myapp.yaml)

yaml

apiVersion: v1
kind: Pod
metadata:name: nginx
spec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 86initContainers:- name: init-redisimage: busybox:1.28command: ['sh', '-c', 'until nslookup redis-service; do echo waiting for redis; sleep 2; done;']- name: init-mysqlimage: busybox:1.28command: ['sh', '-c', 'until nslookup mysql-server; do echo waiting for mysql; sleep 2; done;']

步骤 2:创建 Redis 服务

yaml

# redis-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: redis
spec:replicas: 1selector:matchLabels:app: redistemplate:metadata:labels:app: redisspec:containers:- name: redisimage: redis:5.0
---
apiVersion: v1
kind: Service
metadata:name: redis-service
spec:ports:- port: 6379targetPort: 6379selector:app: redistype: NodePort

步骤 3:创建 MySQL 服务

yaml

# mysql-deployment.yaml(精简版)
apiVersion: apps/v1
kind: Deployment
metadata:name: mysql
spec:replicas: 1selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql:8.0env:- name: MYSQL_ROOT_PASSWORDvalue: 'moonfdd'
---
apiVersion: v1
kind: Service
metadata:name: mysql-service
spec:ports:- port: 3306targetPort: 3306selector:app: mysqltype: NodePort

执行与验证

  1. 创建应用 Pod:kubectl create -f myapp.yaml,此时 Pod 状态为Init:0/2(等待两个 InitContainer 完成)。
  2. 依次创建 Redis 和 MySQL 服务:kubectl create -f redis-deployment.yamlkubectl create -f mysql-deployment.yaml
  3. 观察应用 Pod 状态:当两个服务的 DNS 可解析后,InitContainer 退出,应用 Pod 状态变为Running

原理until nslookup命令循环检测服务 DNS,直到成功解析(服务就绪)才退出,确保应用容器启动时依赖已可用。

1.4 InitContainer 的设计优势与生产实践建议

InitContainer 的核心价值在于 “分离关注点”:将初始化逻辑与业务逻辑解耦,带来三大优势:

  • 安全性:避免在业务镜像中安装curlsysctl等高危工具,降低攻击面;
  • 轻量化:业务镜像仅包含核心功能,减少体积和构建时间;
  • 灵活性:通过独立镜像管理初始化逻辑,无需修改业务代码即可调整启动流程。

生产实践建议

  • 限制 InitContainer 的资源占用:设置resources.limits避免资源耗尽;
  • 避免长时间运行:初始化任务应在分钟级内完成,防止 Pod 启动超时;
  • 日志记录:在 InitContainer 中输出关键操作日志(如echo "修改swappiness完成"),便于问题排查;
  • 权限最小化:仅在必要时使用privileged: true,完成后立即释放权限。

第二章:Pause 容器 ——Pod 网络的 “基石”

在 Kubernetes 中,每个 Pod 都包含一个特殊的 “Pause 容器”,它并非用于暂停运行,而是作为 Pod 网络命名空间的 “基石”。理解 Pause 容器是掌握 Kubernetes 网络模型的关键。

2.1 Pause 容器的核心作用

Pause 容器是 Pod 中第一个启动的容器,其核心功能是为 Pod 内所有容器提供共享的网络命名空间,具体作用包括:

  • 网络命名空间共享:Pod 内所有容器(包括 InitContainer、应用容器)共享 Pause 容器的 IP 地址和端口空间,可通过localhost直接通信;
  • 网络接口管理:Pause 容器负责初始化 Pod 的网络接口(如虚拟网卡),使 Pod 能访问外部网络;
  • 生命周期锚点:即使 Pod 内所有应用容器停止,Pause 容器仍保持运行,确保 Pod 的网络配置不丢失,直到 Pod 被彻底删除;
  • 稳定性保障:Pause 容器仅运行/pause命令(一个无限循环),无业务逻辑,几乎不会崩溃,为 Pod 网络提供稳定支撑。

2.2 Pause 容器的实现原理与优势

Kubernetes 通过 “基础设施容器(Infra Container)” 实现 Pod 网络共享,而 Pause 容器正是 Infra 容器的具体实现。其工作原理如下:

  1. 当创建 Pod 时,Kubernetes 首先启动 Pause 容器,初始化网络命名空间;
  2. 后续所有容器通过 “Join Namespace” 机制加入 Pause 容器的网络命名空间;
  3. 所有容器共享同一套网络配置(IP、路由、防火墙规则等)。

优势

  • 简化网络配置:无需为每个容器单独配置网络,降低管理复杂度;
  • 一致性保障:Pod 内容器网络视图完全一致,避免通信混乱;
  • 轻量高效:Pause 镜像体积仅约 700KB,几乎不占用资源。

2.3 实战验证:如何观察 Pod 中的 Pause 容器

通过以下步骤可验证 Pause 容器的存在及其作用:

  1. 查看 Pod 所在节点

    bash

    kubectl get pod nginx -o wide
    # 输出示例:
    # NAME    READY   STATUS    IP           NODE        AGE
    # nginx   1/1     Running   10.244.85.286 k8s-node01  23m
    
  2. 登录节点查看容器

    bash

    # 在节点k8s-node01上执行
    docker ps | grep nginx
    
  3. 输出解析

    plaintext

    # 应用容器(Nginx)
    8feed68c83d1 ... "nginx -g 'daemon off;'" ... k8s_nginx_nginx_default_...
    # Pause容器
    9ee9ad88890b ... "/pause" ... k8s_POD_nginx_default_...
    
     

    可见,Pod 中存在两个容器:应用容器(Nginx)和 Pause 容器(名称以k8s_POD开头)。

  4. 验证网络共享
    在应用容器中执行ip addr,其 IP 与 Pause 容器的 IP 完全一致,证明网络命名空间共享。

第三章:临时容器(Ephemeral Containers)—— 在线调试的 “急救包”

在生产环境中,为减少攻击面,业务镜像通常不包含curlnetstat等调试工具,导致容器故障时难以排查。Kubernetes 1.16 + 引入的 “临时容器” 解决了这一痛点。

3.1 临时容器的设计初衷与核心特性

临时容器是一种临时添加到 Pod 中的容器,专为在线调试设计,其核心特性包括:

  • 临时性:手动添加到运行中的 Pod,Pod 重启后自动消失,不影响 Pod 的原始定义;
  • 调试导向:可使用包含完整工具集的镜像(如busyboxdebian),快速获取psnetstat等工具;
  • 无状态影响:不包含portslivenessProbe等字段,其状态不影响 Pod 的就绪性;
  • 创建方式特殊:通过kubectl debug命令创建,而非直接修改pod.spec,无法通过kubectl edit添加。

3.2 临时容器与普通容器的差异

特性临时容器普通容器
生命周期临时存在,Pod 重启后消失随 Pod 定义长期存在
配置字段ports、健康检查、资源限制等字段支持完整字段
创建方式kubectl debug命令定义在pod.spec.containers
作用在线调试运行业务逻辑
重启策略从不重启restartPolicy配置

3.3 实战案例:使用临时容器调试 Tomcat 应用

假设我们部署了一个 Tomcat 应用,但容器内无ps命令,无法查看进程状态,此时可通过临时容器调试。

步骤 1:创建 Tomcat Pod

yaml

# pod-tomcat.yaml
apiVersion: v1
kind: Pod
metadata:name: tomcat-test
spec:containers:- name: tomcat-javaimage: kubeguide/tomcat-app:v1ports:- containerPort: 8080

执行:kubectl apply -f pod-tomcat.yaml

步骤 2:添加临时容器
使用kubectl debug命令添加一个包含ps工具的busybox容器:

bash

kubectl debug -it tomcat-test --image=busybox:1.28 --target=tomcat-java

  • -it:开启交互模式;
  • --target=tomcat-java:指定临时容器加入目标容器的进程命名空间,可查看其进程。

步骤 3:调试操作
在临时容器的交互终端中执行:

bash

ps -ef | grep tomcat  # 查看Tomcat进程
netstat -tlnp         # 查看端口占用(需busybox支持)

输出示例:

plaintext

1 root ... org.apache.catalina.startup.Bootstrap start  # Tomcat主进程
41 root ... grep tomcat

步骤 4:验证临时容器状态

bash

kubectl describe pod tomcat-test

在输出的 “Ephemeral Containers” 部分可看到添加的临时容器信息,包括镜像、启动时间等。

3.4 临时容器的适用场景与局限性

适用场景

  • 无工具镜像调试:当业务镜像基于distroless(无 shell)构建时,临时容器是唯一调试途径;
  • 紧急故障排查:无需重启 Pod 即可添加调试工具,避免影响服务;
  • 进程级诊断:通过--target参数进入目标容器的进程空间,查看线程、文件句柄等细节。

局限性

  • 权限限制:若 Pod 启用了PodSecurityPolicySeccomp,可能限制临时容器的权限;
  • 集群版本要求:需 Kubernetes 1.16+,且 API 服务器启用EphemeralContainers特性;
  • 状态不持久:Pod 重启后临时容器消失,需重新添加。

第四章:自动扩缩容(HPA)—— 应对流量波动的 “智能调节器”

在流量波动频繁的业务场景中,手动调整 Pod 副本数既低效又容易出错。Kubernetes 的 HPA(Horizontal Pod Autoscaler)可根据指标自动扩缩容,平衡服务质量与资源成本。

4.1 HPA 的基本概念与工作原理

HPA 通过监控 Pod 的 CPU、内存使用率或自定义指标(如请求数、队列长度),自动调整副本数,其核心特性包括:

  • 水平扩缩容:仅调整 Pod 副本数,不改变单个 Pod 的资源配置(与垂直扩缩容 VPA 区分);
  • 指标驱动:基于 Metrics Server 采集的实时指标决策;
  • 边界控制:可设置最小(minReplicas)和最大(maxReplicas)副本数,避免资源浪费或过载;
  • 适用对象:支持 Deployment、ReplicaSet、StatefulSet 等,不支持 DaemonSet(每个节点仅一个 Pod)。

工作原理

  1. Metrics Server 定期采集 Pod 的指标数据(如 CPU 使用率);
  2. HPA 控制器对比当前指标与目标值(如 CPU 使用率 80%);
  3. 若当前指标高于目标值,增加副本数;反之则减少(在minReplicasmaxReplicas之间);
  4. 调整频率默认每 15 秒一次,可通过--horizontal-pod-autoscaler-sync-period修改。

4.2 HPA 的核心工作流程

HPA 的完整工作流程可分为四步:

  1. 配置 HPA:通过kubectl autoscale命令或 YAML 文件定义扩缩容规则,例如:

    bash

    kubectl autoscale deployment nginx-server --cpu-percent=10 --min=1 --max=10
    
     

    表示当平均 CPU 使用率超过 10% 时扩容,副本数在 1-10 之间调整。

  2. 指标采集:Metrics Server 从 Kubelet 获取 Pod 的 CPU、内存使用数据,并通过 API 提供给 HPA 控制器。

  3. 伸缩决策:HPA 控制器计算当前指标平均值,与目标值对比:

    • 若当前 CPU 使用率 = 50%,目标值 = 10%,则需要扩容(50% / 10% = 5 倍,副本数乘以 5);
    • 若当前 CPU 使用率 = 5%,则缩容(5% / 10% = 0.5 倍,副本数乘以 0.5)。
      (注:实际计算会包含平滑因子,避免频繁波动)
  4. 执行扩缩容:HPA 控制器更新 Deployment 的replicas字段,Kubernetes 根据新值创建或删除 Pod。

4.3 实战案例:基于 CPU 利用率的 Nginx 自动扩缩容

步骤 1:部署带资源请求的 Nginx Deployment
HPA 依赖 Pod 的resources.requests作为指标计算基准,需提前配置:

yaml

# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-server
spec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 80resources:requests:cpu: 10m  # 基准CPU请求(1/100核心)

执行:kubectl create -f nginx-deployment.yaml

步骤 2:创建 Service 暴露服务

bash

kubectl expose deployment nginx-server --port=80

步骤 3:创建 HPA

bash

kubectl autoscale deployment nginx-server --cpu-percent=10 --min=1 --max=10

参数说明:

  • --cpu-percent=10:目标 CPU 使用率为 10%(基于requests.cpu);
  • --min=1:最小副本数 1;
  • --max=10:最大副本数 10。

步骤 4:观察初始状态

bash

kubectl get hpa
# 输出示例(未加负载时):
# NAME           REFERENCE                 TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
# nginx-server   Deployment/nginx-server   0%/10%    1         10        2          3m

步骤 5:模拟流量压力
在新终端执行无限循环请求,增加 CPU 负载:

bash

while true; do wget -q -O- http://<nginx-service-ip> > /dev/null; done

<nginx-service-ip>可通过kubectl get svc nginx-server获取)

步骤 6:观察扩容过程
1 分钟后再次查看 HPA:

bash

kubectl get hpa
# 输出示例(负载升高后):
# NAME           REFERENCE                 TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
# nginx-server   Deployment/nginx-server   55%/10%   1         10        10         5m

此时副本数已扩容至 10(达到maxReplicas)。

步骤 7:停止压力测试并观察缩容
Ctrl+C终止循环请求,1-2 分钟后查看:

bash

kubectl get hpa
# 输出示例(负载降低后):
# NAME           REFERENCE                 TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
# nginx-server   Deployment/nginx-server   0%/10%    1         10        1          10m

副本数缩容至 1(达到minReplicas)。

4.4 HPA 的应用场景与资源优化价值

典型应用场景

  • 电商促销:应对秒杀、大促期间的流量峰值;
  • API 服务:根据请求 QPS 自动调整副本数;
  • 批处理任务:根据队列长度扩容计算节点。

资源优化价值

  • 降本增效:流量低谷时减少副本数,避免资源闲置;
  • 高可用保障:流量高峰时自动扩容,防止服务过载;
  • 运维减负:无需人工干预,24 小时响应流量变化。

进阶配置建议

  • 结合自定义指标:使用 Prometheus Adapter 扩展 HPA,支持基于requests_per_second等业务指标扩缩容;
  • 调整扩缩容策略:通过behavior字段配置扩容 / 缩容速度(如scaleUp.stabilizationWindowSeconds避免频繁扩容);
  • 监控 HPA 状态:通过 Grafana 等工具监控 HPA 决策过程,优化目标指标阈值。

总结:Kubernetes 高级调度特性的协同价值

Kubernetes 的高级调度特性并非孤立存在,而是相互协同构建稳定、高效的应用运行环境:

  • InitContainer确保应用启动前的依赖就绪、配置正确,是 “前置保障”;
  • Pause 容器为 Pod 网络提供底层支撑,是 “通信基石”;
  • Ephemeral Containers解决在线调试难题,是 “故障诊断工具”;
  • HPA动态调整资源分配,是 “弹性伸缩引擎”。

这些特性共同实现了 “启动可靠、运行稳定、调试便捷、资源可控” 的云原生应用目标。在实际生产中,需根据业务场景灵活组合使用 —— 例如,为依赖数据库的微服务配置 InitContainer 等待初始化,通过 HPA 应对流量波动,同时用临时容器快速排查偶发故障。

随着 Kubernetes 的持续发展,高级调度特性将更加智能(如结合 AI 预测流量)、更加安全(如细粒度权限控制)。掌握这些特性,是构建下一代云原生应用的必备技能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91102.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91102.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/91102.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LSV负载均衡

什么是访问压力&#xff1f;--负载 两个客户同时访问一个服务器&#xff0c;会导致服务器崩溃调度---Cluster集群&#xff08;为了解决一个特定问题&#xff0c;多台服务器组合使用形成的一个系统&#xff09;LSV 1、集群Cluster LB&#xff1a;负载均衡&#xff0c;有多个主机…

复习笔记 38

绪论 其实没有一种安稳快乐&#xff0c;永远也不差 专题 2 知识点 继续学数学强化吧&#xff1f;可以。还有概率论要学。还有高数后半部分的数一专项要学。还有政治要学。要学的内容确实还是挺多的啊。加油。下载了一个阅读的软件&#xff0c;可以做一做真题的阅读理解。政治英…

GaussDB like 的用法

1 like 作用在 where 子句中使用 like 运算符来搜索列中的指定模式。 有两个通配符与 like 运算符一起使用&#xff1a;&#xff05; - 百分号表示零个&#xff0c;一个或多个字符 _ - 下划线表示单个字符注&#xff1a;也同时支持正则表达式。2 like 语法select column1, colu…

单例模式:确保全局唯一实例

单例模式确保一个类只有一个实例&#xff0c;并提供全局访问点。适用于需要全局唯一对象的场景&#xff08;如配置管理器、数据库连接池&#xff09;。代码示例&#xff1a;import java.util.stream.IntStream;public class ConfigManager {public static void main(String[] a…

深入理解 QSettings:Qt 中的应用程序配置管理

在开发 Qt 应用程序时&#xff0c;管理应用程序的配置信息是一个常见的需求。无论是保存用户的偏好设置、窗口大小&#xff0c;还是应用程序的运行时配置&#xff0c;都需要一种高效且灵活的方式来存储和检索这些信息。Qt 提供了一个强大的工具——QSettings&#xff0c;它能够…

基于SpringBoot+Vue的体育馆预约管理系统(支付宝沙盒支付、腾讯地图API、协同过滤算法、可视化配置、可视化预约)

“ &#x1f388;系统亮点&#xff1a;支付宝沙盒支付、腾讯地图API、协同过滤算法、可视化配置、可视化预约”01系统开发工具与环境搭建—前后端分离架构 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17前端&#xff1a; 技术&#xff1a;框架Vue.js&am…

<script>标签对HTML文件解析过程的影响以及async和defer属性的应用

在前端开发中&#xff0c;<script> 标签的 async 和 defer 属性会显著影响 JavaScript 脚本的加载和执行时机。下面结合示例代码&#xff0c;详细解析它们之间的区别&#xff1a; 1. 默认情况&#xff08;无 async/defer&#xff09; <script src"script.js"…

Vue.js:从 Web 到桌面的跨端实践与技术选型指南

一、Vue.js 的核心能力边界 作为渐进式 JavaScript 框架,Vue.js 的核心价值在于构建现代 Web 用户界面: ✅ 前端核心场景:单页应用(SPA)、动态交互界面、可复用组件开发 ❌ 架构限制:无法直接改造 B/S(浏览器/服务器)为 C/S(客户端/服务器)架构 关键差异:B/S 依赖浏…

SSRF11 各种限制绕过之DNS rebinding 绕过内网 ip 限制

ssrf漏洞在厂商的处理下可能进行一些特殊处理导致我们无法直接利用漏洞 有以下四种&#xff1a; 1.ip地址限制绕过 2.域名限制绕过 3.30x跳转绕过域名限制 4.DNS rebinding绕过内网ip限制 本章我们讲DNS rebinding 绕过内网 ip 限制 DNS rebinding 绕过内网 ip 限制 假…

FreeRTOS之链表操作相关接口

FreeRTOS之链表操作相关接口1 FreeRTOS源码下载地址2 任务控制块TCB2.1 任务控制块TCB2.1.1 任务控制块的关键成员2.1.2 TCB 的核心作用2.2 ListItem_t2.3 List_t3 函数接口3.1 vListInitialise3.2 vListInitialiseItem1 FreeRTOS源码下载地址 https://www.freertos.org/ 2 …

项目一第一天

目录 总结MySQL&#xff1a; 最终还是得按照SQL的语法来实施。 1、MySQL的数据类型&#xff1a;指业务数据按照什么格式存储在数据库中的。 任何数据类型最常见的三种&#xff1a;字符串、整型和小数型。 如&#xff1a;宝贝计划这种存在视频的项目&#xff0c;你们的视频是存放…

STM32第二十天 ESP8266-01S和电脑实现串口通信(3)

1&#xff1a;透传透传&#xff08;又称透明传输&#xff09;是一种通信模式&#xff0c;其核心特点是&#xff1a;通信设备对传输的数据不做任何解析或处理&#xff0c;仅作为“管道”原封不动地转发数据&#xff0c;仿佛数据“透明”地穿过设备。透传的本质关键特征说明无协议…

微服务引擎 MSE 及云原生 API 网关 2025 年 3 月产品动态

点击此处&#xff0c;了解微服务引擎 MSE 产品详情。

在 Docker 上安装和配置 Kafka、选择用于部署 Kafka 的操作系统

消息代理是一种软件&#xff0c;充当在不同应用程序之间发送消息的中介。它的功能类似于服务器&#xff0c;从一个应用程序&#xff08;称为生产者&#xff09;接收消息&#xff0c;并将其路由到一个或多个其他应用程序&#xff08;称为消费者&#xff09;。消息代理的主要目的…

2D下的几何变换(C#实现,持续更新)

&#xff08;1&#xff09;已知2D下&#xff0c;新坐标系的原点、X轴方向向量、Y轴方向向量在原始坐标系下的表示&#xff0c;求原始坐标系中直线&#xff0c;在新坐标系下的直线方程&#xff1b;&#xff08;2&#xff09;求直线与2D包围盒的交点&#xff0c;可能有0、1或2个交…

Pandas-特征工程详解

Pandas-特征工程详解一、特征工程的核心目标二、数据类型与基础转换1. 数值型特征&#xff1a;类型优化与异常处理2. 分类型特征&#xff1a;编码与规范化&#xff08;1&#xff09;标签编码&#xff08;Label Encoding&#xff09;&#xff08;2&#xff09;独热编码&#xff…

pip install torch各种版本的命令及地址

一、遇到的问题&#xff1a;cuda和torch编译时的版本不一致 在安装mmcv时遇到error MMCV_WITH_OPS1 python setup.py develo RuntimeError: The detected CUDA version (11.3) mismatches the version that was used to compile PyTorch (10.2). Please make sure to use th…

【spring boot】三种日志系统对比:ELK、Loki+Grafana、Docker API

文章目录**方案 1&#xff1a;使用 ELK&#xff08;Elasticsearch Logstash Kibana&#xff09;****适用场景****搭建步骤****1. 修改 Spring Boot 日志输出****2. 创建 Docker Compose 文件****3. 配置 Logstash****4. 启动服务****方案 2&#xff1a;使用 Loki Grafana***…

Cesium加载3DTiles模型并且重新设置3DTiles模型的高度

代码&#xff1a; 使用的时候&#xff0c;直接调用 load3DTiles() 方法既可。 // 加载3Dtiles const load3DTiles async () > {let tiles_url "/3DTiles2/Production_1.json";let tileset await Cesium.Cesium3DTileset.fromUrl(tiles_url, {enableCollision: …

Matlab批量转换1km降水数据为tiff格式

1km降水数据处理- 制作数据裁剪掩膜 0 引言1 示例程序2 结语0 引言 本篇介绍用Matlab工具将中国1km分辨率逐月降水量数据集(1901-2024)批量转为tiff格式的过程。下面为具体内容: 1 示例程序 下载得到的nc数据(如pre_2001.nc)包含4个字段,其中降水数据的第1个维度为1-12,…