K8s —基础指南(K8s - Basic Guide)
K8s —基础指南
K8s 是云上部署容器化应用的事实标准。它作为容器的强大编排器,管理容器重启、负载均衡等任务。
理解 Kubernetes 架构
Kubernetes 的关键功能之一是为访问 Pod 提供稳定的端点,尽管 Pod 本身是短暂的。Kubernetes 服务有效地弥补了这一差距。
在 Docker Desktop 中启用 Kubernetes,等待其启动。
要检查 kubectl
正在与哪个集群交互,请使用:
kubectl config current-context
为什么使用 Pod?
Pod 是 Kubernetes 的基本对象,允许你充分利用 Kubernetes 的潜力。Pod 封装一个或多个容器,并为它们提供统一的环境。
Pod 定义示例
apiVersion: v1
kind:Pod
metadata:
name:geeky
labels:app.kubernetes.io/name:geeky # 标准,最广泛的标签app.kubernetes.io/component:frontend# 指定角色app.kubernetes.io/instance:frontend # 细粒度控制
spec:
containers:
-name:geekyimage:<Image>env:-name:SERVICE_HOSTvalue:expected-url# 通过集群 IP 服务实现前后端通信resources:requests: # 最小资源分配memory:"128Mi" # 内存,单位 Mebibytescpu:"200m" # CPU,单位 millicoreslimits: # 资源上限memory:"128Mi"ports:-containerPort:3000
关键 kubectl
命令
-
应用 Pod 配置:
kubectl apply -f pod_config_name.yaml
-
列出 Pod:
kubectl get pods
-
描述 Pod 详情:
kubectl describe pod pod_name
-
查看日志:
kubectl logs pod_name
-
实时日志流:
kubectl logs -f pod_name
-
端口转发以本地访问:
kubectl port-forward pod_name 8080:3000
# 访问地址:localhost:8080
-
按标签或名称删除 Pod:
kubectl delete pod -l "app.kubernetes.io/name=geeky" kubectl delete pod geeky
-
删除所有 Pod:
kubectl delete pods --all
网络隔离与通信
当你有多个 Pod 时,Kubernetes 使用 网络命名空间 确保网络级隔离,逻辑上分离资源。为了实现 Pod 之间的通信,Kubernetes 使用 服务。这允许无缝交互,同时在需要时保持严格的隔离。
服务:持久端点
Kubernetes 服务为应用程序提供持久端点。它们通过提供稳定的虚拟 IP 地址来解决短暂 Pod 带来的挑战。主要有两种类型的服务:NodePort 和 ClusterIP。
NodePort 服务
NodePort 服务将应用程序暴露在集群中每个节点的 IP 地址的特定端口上。虽然对原型开发有用,但不适合生产环境,因为暴露机器端口可能存在安全风险。NodePort 范围从 30000 到 32767。
NodePort 服务定义示例:
apiVersion: v1
kind:Service
metadata:
name:geeky
spec:
type:NodePort
selector:app.kubernetes.io/instance:frontend
ports:
-port:3000targetPort:3000nodePort:32000
-
应用服务配置:
kubectl apply -f service-definition.yaml
-
这将在
localhost:32000
上本地暴露应用程序,将请求转发到标记为frontend
的 Pod。
ClusterIP 服务
ClusterIP 服务为集群内的应用程序提供稳定的内部 IP 地址和端口。这非常适合 Pod 之间的内部通信。
ClusterIP 服务定义示例:
apiVersion: v1
kind:Service
metadata:
name:geeky
spec:
selector:app.kubernetes.io/component:frontend
ports:
-port:3000targetPort:3000
-
该服务将所有流量转发到匹配标签
frontend
的任何 Pod。当流量到达 Pod 时,它确保 Pod 内的目标端口可访问且响应。 -
列出服务:
kubectl get services
命名空间:资源组织
Kubernetes 中的命名空间允许你逻辑上分离和分组资源,便于管理和应用基于角色的访问控制(RBAC)。
关键 kubectl
命令
-
列出命名空间:
kubectl get namespaces
-
列出命名空间中的 Pod:
kubectl get pods -n default
-
删除命名空间中的所有 Pod:
kubectl delete pods --all -n default
-
创建命名空间:
kubectl create namespace geeky-app
-
将资源应用到命名空间:
kubectl apply -f . -n geeky-app
-
列出命名空间中的资源:
kubectl get pods,services -n geeky-app
在元数据中定义命名空间
在资源配置的元数据部分直接定义命名空间,确保资源在指定的命名空间中创建。这通常更方便,并防止在 kubectl
命令中手动指定命名空间。
Kubernetes 弹性:幕后机制
Kubernetes 通过其控制器确保弹性和自愈:
-
restartPolicy: 默认情况下,
restartPolicy
设置为Always
,确保 Pod 在失败时自动重启。 -
内存不足(OOM): 当 Pod 超出其内存限制时,它会被标记为
OOMKilled
。Kubernetes 会重启此类 Pod 以保持弹性。
Kubernetes 控制器
-
期望状态: 控制器比较 Pod 的当前状态与期望状态,采取行动以调和任何差异。
-
持续监控: Kubernetes 持续监控容器的健康状况,并在需要时采取纠正措施。
部署和 Pod 副本
Kubernetes 中的部署提供了一种声明式的方式来管理应用程序更新和扩展。当你创建部署时,它会自动创建一个 ReplicaSet,确保始终运行指定数量的 Pod 副本。
部署定义示例
apiVersion: apps/v1
kind:Deployment
metadata:
name:geeky
namespace:geeky-ns
spec:
replicas:3
selector:matchLabels:app.kubernetes.io/instance:geeky-api
template:metadata:labels:app.kubernetes.io/name:geekyapp.kubernetes.io/component:backendapp.kubernetes.io/instance:backendspec:containers:-name:geekyimage:<Image>resources:requests:memory:"128Mi"cpu:"200m"limits:memory:"128Mi"ports:-containerPort:3000
部署的关键点
-
通过部署管理你的 Pod,而不是独立的 Pod 原语。
-
列出命名空间中的部署:
kubectl get deployments -n geeky-ns
-
部署默认提供负载均衡,使用轮询方式。
幕后机制
-
部署控制器根据部署规范创建 ReplicaSet。
-
ReplicaSet 确保运行所需数量的 Pod 副本。
-
ReplicaSet 控制器监控 Pod 的状态,并在必要时重新创建它们。
-
部署控制器管理部署的整个生命周期,包括更新和回滚。
通过在部署对象中声明期望状态,Kubernetes 会处理其余部分,确保你的应用程序按指定运行和扩展。
滚动更新和回滚
Kubernetes 部署使你能够使用 最小停机时间 无缝更新应用程序,采用滚动更新策略。部署控制器逐步用新 Pod 替换旧 Pod,确保更新过程中的持续可用性。
滚动更新策略
你可以使用部署规范中的 strategy
字段控制更新过程。例如:
spec:strategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1 # 更新期间最大不可用 Pod 数量maxSurge: 1 # 更新期间最大额外创建的 Pod 数量
回滚更改
如果部署更新导致问题,你可以轻松回滚到之前的稳定状态。
-
回滚到之前的版本:
kubectl rollout undo deployment/<name> -n <namespace>
探针:确保应用程序健康
Kubernetes 提供 存活探针 和 就绪探针 来监控容器的健康和就绪状态。这些探针确保你的应用程序保持弹性和响应性。
存活探针
存活探针 检查容器是否正常运行。如果探针失败,Kubernetes 会重启容器。
就绪探针
就绪探针 确定容器是否准备好处理流量。如果探针失败,容器将从服务端点中排除。
探针配置示例
livenessProbe:httpGet:path:/healthzport:8080
initialDelaySeconds:25
periodSeconds:5
readinessProbe:
httpGet:path:/readyport:8080
periodSeconds:5
-
关键点:
-
使用 存活探针 检测并重启不健康的容器。
-
使用 就绪探针 确定容器何时准备好开始接受流量。
-
这些探针共同帮助维护应用程序的健康和可用性。
Kubernetes 中的存储编排
Kubernetes 使用 持久卷(PV) 和 持久卷声明(PVC) 简化了有状态应用程序的存储管理。
带存储的 StatefulSet 示例
StatefulSet 非常适合管理有状态应用程序,因为它们为每个 Pod 提供稳定的标识符和存储。
apiVersion: apps/v1
kind:StatefulSet
metadata:
name:database
namespace:database-ns
spec:
serviceName:db
replicas:2
selector:matchLabels:app.kubernetes.io/instance:db
template:metadata:labels:app.kubernetes.io/name:geekyapp.kubernetes.io/component:dbapp.kubernetes.io/instance:dbspec:containers:-name:databaseimage:registry.k8s.io/nginx-slim:0.8volumeMounts:-name:db-persistent-storagemountPath:/data/db
volumeClaimTemplates:
-metadata:name:db-persistent-storagespec:accessModes:["ReadWriteOnce"]resources:requests:storage:1Gi
关键组件
-
持久卷(PV): 表示实际的存储资源。
-
持久卷声明(PVC): Pod 对存储的请求。
-
卷声明模板: 自动为每个 StatefulSet Pod 生成 PVC。
存储编排的好处
-
自动配置和附加存储卷。
-
在 Pod 重启或重新调度时无缝保持数据持久性。
-
内置机制用于维护 Pod 身份和状态。
-
列出命名空间中的 PVC:
kubectl get pvc -n database-ns
配置管理
ConfigMap 和 Secret
ConfigMap: 存储非机密的纯文本数据。
ConfigMap 定义示例:
apiVersion: v1
kind:ConfigMap
metadata:
name:geeky-config
namespace:geeky-ns
data:
player_initial_lives:"3"
ui_properties_file_name:"user-interface.properties"
Secret: 安全地存储敏感数据,以 Base64 编码。
Secret 定义示例:
apiVersion: v1
kind:Secret
metadata:
name:geeky-secret
namespace:geeky-ns
type:Opaque
data:username:YWRtaW4=# base64 编码的 'admin'password:dDBwLVMzY3IzdA==# base64 编码的 't0p-S3cr3t'
水平 Pod 自动扩展
Kubernetes 支持根据观察到的指标(如 CPU 或内存使用率)自动扩展 Pod。
关键概念
-
Metrics Server: Kubernetes 通过 metrics-server 收集资源使用指标。
kubectl top pods -n geeky-ns
-
HorizontalPodAutoscaler 定义:
apiVersion: autoscaling/v2
kind:HorizontalPodAutoscaler
metadata:
name:geeky
namespace:geeky-ns
spec:
scaleTargetRef:apiVersion:apps/v1kind:Deploymentname:geeky
minReplicas:1
maxReplicas:10
metrics:
-type:Resourceresource:name:cputarget:type:UtilizationaverageUtilization:50
-
获取 HPA 状态:
kubectl get hpa -n geeky-ns
注意事项
-
水平 Pod 自动扩展器根据观察到的 CPU 使用率(最常见)自动调整部署中的 Pod 数量。
-
自动扩展行为: HPA 将增加或减少副本数以维持目标 CPU 使用率。
-
扩展范围: Pod 数量将根据 CPU 使用率在 1 到 10 之间调整。
-
资源指标: 虽然此示例使用 CPU,但 HPA 也可以使用内存或自定义指标。
-
目标使用率: 50% 的目标使用率是常见的起点,但可以根据应用程序需求进行调整。
-
命名空间范围: HPA 是命名空间特定的,允许在应用程序的不同部分应用隔离的扩展策略。
-
扩展算法: Kubernetes 使用控制循环定期根据观察到的指标调整副本数。
Kubernetes 中的 Ingress 控制器
Kubernetes 中的 Ingress 控制器充当反向代理,管理外部 HTTP(S) 流量并将其路由到正确的内部服务。与 NodePort 不同,NodePort 在每个节点上暴露服务,而 Ingress 控制器集中路由过程,使其更高效和可扩展。
设置 Ingress 控制器
要使用 Ingress,请在 Kubernetes 集群中下载并安装 Ingress 控制器(如 NGINX)。
基本 Ingress 配置示例:
-
以下 YAML 定义了一个基本的 Ingress 资源,指定了如何将传入流量路由到内部服务。
apiVersion: networking.k8s.io/v1
kind:Ingress
metadata:
name:geeky
labels:name:geekynamespace:geeky-ns
spec:
ingressClassName:nginx
rules:
-host:urlhttp:paths:-pathType:Prefixpath:"/"backend:service:name:frontendport:number:3000
-
此设置将针对
url
的 HTTP 请求路由到端口 3000 上的 "frontend" 服务。
查看可用的 Ingress 类:
-
要查看可用的 Ingress 类,请运行:
kubectl get ingressclass
生产环境中的流量限制
在开发环境中,配置通常是宽松的,但在生产环境中,你需要实施更严格的规则。
例如,购买域名后,你可以设置规则以限制流量到特定主机:
spec:rules:
-host:geeky.example.comhttp:paths:-path:"/"pathType:Prefixbackend:service:name:geekyport:number:3000
此设置确保只有来自 geeky.example.com
的流量可以访问服务,通过拒绝来自其他主机的请求提供额外的安全性。
Ingress 控制器和 AWS 中的负载均衡器
将 Ingress 控制器(如 NGINX)部署到 AWS 集群时,会自动配置负载均衡器以处理外部流量。
NGINX Ingress 控制器设置示例:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml
kubectl get services -n nginx
在生产环境中:
设置负载均衡器后,你可以通过指定主机创建更严格的 Ingress 规则。
Ingress 配置示例:
apiVersion: networking.k8s.io/v1
kind:Ingress
metadata:
name:geeky-ingress
namespace:geeky-ns
spec:
ingressClassName:nginx
rules:
-host:geeky.example.comhttp:paths:-pathType:Prefixpath:"/"backend:service:name:geekyport:number:3000
这将限制对服务的访问仅限于 geeky.example.com
。
Kubernetes 中的 Helm
Helm 是 Kubernetes 的强大包管理器,简化了应用程序的部署、管理和扩展。通过使用 Helm Chart,你可以将 Kubernetes 资源作为单个单元进行管理,简化部署、升级和回滚。
Helm 基础
-
Helm Chart: Helm Chart 是一组定义相关 Kubernetes 资源的文件。
-
Release: Release 是 Helm Chart 的部署。你可以使用 Helm 命令安装或卸载 Release。
典型的 Helm Chart 结构:
mychart/├── Chart.yaml # 包含 Chart 信息├── values.yaml # 默认配置值└── templates/ # 模板文件目录├── deployment.yaml├── service.yaml└── ingress.yaml
-
values.yaml
:存储模板的值(如deployment.yaml
或service.yaml
)。 -
Chart.yaml
:包含有关 Chart 的元数据。
安装和管理 Helm Chart
1. 安装 Helm Chart:
helm install geeky geeky-1.0.0.tgz
2. 卸载 Helm Release:
helm uninstall geeky
3. Helm 升级:
-
要升级 Release,请使用:
helm upgrade geeky geeky-1.0.2.tgz
-
或者,从当前目录升级:
helm upgrade geeky . -n geeky-ns
4. 回滚 Helm Release:
如果需要,你可以回滚 Release:
helm rollback geeky 2 -n geeky-ns
5. Helm 打包:
要打包 Helm Chart:
helm package .
6. 列出所有 Helm Release:
helm list -A
使用外部 Helm 仓库
Helm 支持外部仓库,如 Bitnami,它提供了 Elasticsearch 和 MySQL 等流行服务的 Chart。
1. 添加 Helm 仓库:
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
2. 使用自定义值安装 Chart:
helm install geeky bitnami/mongodb --version 1x.x.1x -f values.yaml -n geeky-ns
此命令使用自定义配置安装 MongoDB。
3. 移除 Helm 仓库:
helm repo remove bitnami
Kubernetes 中的 Operator
Kubernetes Operator 通过使用自定义资源管理复杂应用程序,扩展了 Kubernetes 的功能。这些资源不是 Kubernetes 默认的一部分,而是由 Operator 定义和控制。
核心概念
-
自定义资源(CR): Operator 引入了扩展 Kubernetes API 的新资源,针对特定应用程序定制。
-
自定义控制器: Operator 实现控制器,监控自定义资源并管理相应的 Kubernetes 资源(如 Pod、服务、ConfigMap)。
Operator 的工作原理
-
创建自定义资源: 当你创建自定义资源(如 PostgreSQL 集群)时,Operator 的控制器会检测到它并创建必要的 Kubernetes 资源。
-
监控资源: Operator 持续监控并调整资源以维持期望状态。
PostgreSQL 集群的自定义资源示例:
apiVersion: database.example.com/v1
kind:PostgresCluster
metadata:
name:my-db
spec:
version:"13"
instances:3
storage:size:1Gi
应用自定义资源:
kubectl apply -f postgres-cluster.yaml
监控自定义和原生资源:
kubectl get postgresclusters
kubectl get pods
常见的 Operator 和用例
Operator 可用于管理各种软件系统,包括:
-
数据库: PostgreSQL、MongoDB、MySQL、Elasticsearch
-
消息队列: Apache Kafka、RabbitMQ
-
监控: Prometheus
-
服务网格: Istio
使用 eksctl 部署到 AWS
使用 eksctl
将 Kubernetes 部署到 AWS 提供了管理多个工作节点集群的灵活性。
1. 安装 eksctl:
choco install -y eksctl eksctl version
2. 使用 eksctl 创建集群:
创建集群的示例命令:
eksctl create cluster \
--name my-cluster \
--region us-west-2 \
--node-type t3.medium \
--nodes 3
此命令创建一个包含 3 个工作节点的集群,并更新 kubectl
上下文以便轻松交互。
最终清理
完成 Kubernetes 集群和服务后,执行适当的清理以释放资源并确保一切清理干净。
1. 删除 Kubernetes 集群:
-
如果你使用 AWS 和
eksctl
管理集群,可以使用以下命令删除整个集群:
eksctl delete cluster --name my-cluster
-
这将删除与集群关联的所有资源,包括 EC2 实例、VPC 和其他托管服务。
2. Docker 清理:
-
使用 Docker 后,最好删除未使用的资源(镜像、容器、网络等)以释放空间。
-
要删除所有未使用的 Docker 对象,包括未与容器关联的镜像、容器、卷和网络:
docker system prune -a
-
此命令将在删除这些资源之前请求确认,因此请确保你不需要其中的任何资源。
3. 在本地机器上禁用 Kubernetes:
-
如果你在本地使用
kubectl
与 Kubernetes 集群交互,完成后你可能希望禁用它。 -
你可以简单地删除 Kubernetes 配置文件或使用以下命令重置:
kubectl config unset current-context
4. 从 Docker 中删除镜像和容器:
要手动从 Docker 中删除镜像和容器,可以使用以下命令:
-
删除所有停止的容器:
docker container prune
-
删除所有未使用的镜像:
docker image prune -a
通过遵循这些清理步骤,你可以确保没有不必要的资源被留下,优化你的本地机器和云环境。
相关文章:
K8s —基础指南(K8s - Basic Guide)
K8s —基础指南 K8s 是云上部署容器化应用的事实标准。它作为容器的强大编排器,管理容器重启、负载均衡等任务。 理解 Kubernetes 架构 Kubernetes 的关键功能之一是为访问 Pod 提供稳定的端点,尽管 Pod 本身是短暂的。Kubernetes 服务有效地弥补了这…...
ABAP开发中的前导零和末尾零
前导零和末尾零是指分别出现在数字序列中第一个非零数字之前和最后一个非零数字之后的任何零数字。 关于前导 0 在 SAP 系统中,大多数字母数字字段在数据库中存储时都带前导零,完全占用字段的定义长度。但是,当字段显示给最终用户时&#x…...

Baklib赋能数字内容体验个性化推荐提升用户体验的未来之路
内容概要 随着数字化时代的不断发展,用户对内容消费的需求日益多样化,个性化推荐成为提升用户体验的重要手段。Baklib以其先进的技术手段,在数字内容领域内积极推动个性化推荐的实施,从而满足用户在信息获取和内容消费中的独特需…...

关于Redis的持久化
目录 RDB 1.手动触发 2.自动触发 AOF aof的重写机制 Redis虽然是一个内存数据库,但是也是可以将数据存储到硬盘中的,也就是持久化。硬盘的数据是在Redis重启的时候,用来恢复内存中的数据的,即对数据做了一个备份。Redis实现持…...

【C语言标准库函数】指数与对数函数:exp(), log(), log10()
目录 一、头文件 二、函数简介 2.1. exp(double x) 2.2. log(double x) 2.3. log10(double x) 三、函数实现(概念性) 3.1. exp(double x) 的模拟实现 3.2. log(double x) 和 log10(double x) 的模拟实现 四、注意事项 4.1. exp(double x) 的注…...
2024美团春招硬件开发笔试真题及答案解析
目录 一、选择题 1、在 Linux,有一个名为 file 的文件,内容如下所示: 2、在 Linux 中,关于虚拟内存相关的说法正确的是() 3、AT89S52单片机中,在外部中断响应的期间,中断请求标志位查询占用了()。 4、下列关于8051单片机的结构与功能,说法不正确的是()? 5、…...
Python内置函数map(), list(), len(), iter(), hex(), hash()的详细解析,包括功能、语法、示例及注意事项
1. map(function, iterable, ...) 功能:对可迭代对象中的每个元素应用指定函数,返回一个迭代器。 参数: function:要执行的函数(可以是lambda表达式)。 iterable:一个或多个可迭代对象&#x…...

[LVGL] 在VC_MFC中移植LVGL
前言: 0. 在MFC中开发LVGL的优点是可以用多个Window界面做辅助扩展【类似GUIguider】 1.本文基于VC2022-MFC单文档框架移植lvgl8 2. gitee上下载lvgl8.3 源码,并将其文件夹改名为lvgl lvgl: LVGL 是一个开源图形库,提供您创建具有易于使用…...

MySQL视图索引操作
创建学生表; mysql> create table Student(-> Sno int primary key auto_increment,-> Sname varchar(30) not null unique,-> Ssex char(2) check (Ssex男 or Ssex女) not null,-> Sage int not null,-> Sdept varchar(10) default 计算机 not …...

一次奇怪的空指针问题分析:事务、死锁与隐式回滚
最近我们在排查一个诡异的 空指针异常,整个分析过程可以说是跌宕起伏,最终的结论也颇具隐蔽性。今天就把这个问题分享出来,希望对大家有所帮助。 问题现象 在系统中,我们有 单据 B,它通过一个 关联 ID 字段与 上级单…...

解决aspose将Excel转成PDF中文变成方框的乱码问题
原文网址:解决aspose将Excel转成PDF中文变成方框的乱码问题_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何解决aspose将Excel转成PDF中文变成方框的乱码问题。 问题描述 用aspose将word、excel等转成PDF后,英文展示正常,但中文全部变成了…...

.net8.0使用EF连接sqlite数据库及使用Gridify实现查询的简易实现
EF Core EF Core 是一个流行的对象关系映射(ORM)框架,它简化了与数据库的交互,提供了一个高效、灵活且易于使用的数据访问层。 Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技…...

2025.2.5——五、[网鼎杯 2020 青龙组]AreUSerialz
题目来源:BUUCTF [网鼎杯 2020 青龙组]AreUSerialz 一、打开靶机,整理信息 直接得到一串php代码,根据题目可以看到还有序列化 二、解题思路 step 1:代码审计 <?phpinclude("flag.php");highlight_file(__FILE__…...
电风扇各国检测认证详细介绍美国FCC+UL欧盟CE+ROHS日本PSE+METI备案+英国UKCA
美国 : FCC认证 :产品进入美洲市场的通行证,需通过FCC SDOC认证。 FCC第15部分B: 该标准适用于非故意辐射设备,如家用电器、电脑设备等。它规定了这些设备在电磁环境中不会产生过多的辐射。 射频标准: FCC第15部分C:该标准适…...
Flutter Isolate解决耗时任务导致卡死
先来对比一下在Flutter的ui主线程下直接计算一个耗时任务的情况: import package:flutter/material.dart;void main() {runApp(const MaterialApp(home: H(),)); }class H extends StatefulWidget {const H({super.key});overrideState<H> createState() >…...

使用deepseek快速创作ppt
目录 1.在DeekSeek生成PPT脚本2.打开Kimi3.最终效果 DeepSeek作为目前最强大模型,其推理能力炸裂,但是DeepSeek官方没有提供生成PPT功能,如果让DeepSeek做PPT呢? 有个途径:在DeepSeek让其深度思考做出PPT脚本…...

STM32的HAL库开发---高级定时器---输出比较模式实验
一、高级定时器输出比较模式实验原理 定时器的输出比较模式总共有8种,本文使用其中的翻转模式,当TIMXCCR1TIMXCNT时,翻转OC1REF的电平,OC1REF为输出参考信号,高电平有效,OC1REF信号连接到0C1上面ÿ…...
python Excel 表读取合并单元格以及清除空格符
读取合并单元格并保留合并信息 读取合并单元格并保留合并信息清除各单元格的空格和换行符,并去除列名中的空格和换行符 读取合并单元格并保留合并信息 当我们只是使用 pandas 的 read_excel 方法读取 Excel 文件时,我们可能会遇到一个很棘手的问题&…...

额外题目汇总2-链表
链表 1.24. 两两交换链表中的节点 力扣题目链接(opens new window) 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 思路 使用虚拟头结点会很方便ÿ…...

C#控件开发6—指示灯
按钮功能:手自动旋转,标签文本显示、点击二次弹框确认(源码在最后边); 【制作方法】 找到控件的中心坐标,画背景外环、内圆;再绘制矩形开关,进行角度旋转即可获得; 【关…...
数仓面试提问:在资源(计算、存储、人力)受限的情况下,如何优先处理需求并保证核心交付?
在资源受限的情况下高效处理需求并保证核心交付,是每个团队管理者都会面临的挑战。这种既要“少花钱多办事”又要确保关键任务不延误的压力,面对这种情况,我们需要一套系统化的方法来实现需求评估、优先级排序和有效沟通。以下是经过实践验证的策略和方法: 🛠️ 一、 保证…...

Chrome安装代理插件ZeroOmega(保姆级别)
目录 本文直接讲解一下怎么本地安装ZeroOmega一、下载文件在GitHub直接下ZeroOmega 的文件(下最新版即可) 二、安装插件打开 Chrome 浏览器,访问 chrome://extensions/ 页面(扩展程序管理页面),并打开开发者…...

SpringCloud学习笔记-3
声明:笔记来源于网络,如有侵权联系删除 1 openfeign 1)openfeign远程调用声明式实现 1.启动类中添加注解 EnableFeignClients EnableFeignClients SpringBootApplication public class OrderMainApplication {public static void main(St…...

Spring Boot + Prometheus 实现应用监控(基于 Actuator 和 Micrometer)
文章目录 Spring Boot Prometheus 实现应用监控(基于 Actuator 和 Micrometer)环境准备示例结构启动和验证验证 Spring Boot 应用Prometheus 抓取配置(静态方式)Grafana 面板配置总结 Spring Boot Prometheus 实现应用监控&…...
【前端】js如何处理计算精度问题
JavaScript 的精度问题源于其遵循 IEEE 754 标准的 64 位双精度浮点数表示法,导致 0.1 0.2 ! 0.3 等经典问题。以下是系统化的解决方案及适用场景: ⚙️ 一、整数转换法(适合简单运算) 将小数转换为整数运算后再还原࿰…...
《ERP原理与应用教程》第3版习题和答案
ERP原理与应用教程是一门系统介绍企业资源计划(Enterprise Resource Planning, ERP)系统核心理论、技术架构及实施应用的综合性课程。它主要面向管理类、信息类、工程类等专业学生及企业管理者,旨在培养对现代企业信息化管理的理解与实践能力。以下是该课程的详细解析: 一…...
Python使用clickhouse-local和MySQL表函数实现从MySQL到ClickHouse数据同步
下面是一个使用clickhouse-local和MySQL表函数实现从MySQL到ClickHouse数据同步的Python解决方案,包含全量同步、增量同步和测试用例。 此解决方案提供了生产级数据同步所需的核心功能,可根据具体场景扩展更多高级特性如:数据转换、字段映射…...

全球IP归属地查询接口如何用C#进行调用?
一、什么是全球IP归属地查询接口 在全球化互联网时代,IP地址作为网络世界的地理位置标识,扮演着至关重要的角色。全球IP归属地查询接口通过解析IP地址,提供包括国家、省、市、区县和运营商在内的详细信息。 二、应用场景 1. 访问识别 全球…...

2025年大模型平台落地实践研究报告|附75页PDF文件下载
本报告旨在为各行业企业在建设落地大模型平台的过程中,提供有效的参考和指引,助力大模型更高效更有价值地规模化落地。本报告系统性梳理了大模型平台的发展背景、历程和现状,结合大模型平台的特点提出了具体的落地策略与路径,同时…...
如何给windos11 扩大C盘容量
动不动C盘就慢了,苹果逼着用户换手机,三天两头更新系统,微软也是毫不手软。c盘 从10个G就够用,到100G 也不够,看来通货膨胀是部分行业的。 在 Windows 11 中扩大 C 盘容量,主要取决于磁盘分区布局和可用空…...