当前位置: 首页 > news >正文

【k8s面试题2025】2、练气初期

在练气初期,灵气还比较稀薄,只能勉强在体内运转几个周天。

文章目录

  • 简述k8s静态pod
  • 为 Kubernetes 集群移除新节点:
  • 为 K8s 集群添加新节点
  • Kubernetes 中 Pod 的调度流程

简述k8s静态pod

  1. 定义

    • 静态Pod是一种特殊类型的Pod,它是由kubelet直接管理的,不需要通过Kubernetes的控制平面(如API Server)进行创建和调度。这意味着它的生命周期独立于Kubernetes的常规Pod管理机制。通常情况下,它是通过在节点上的特定目录(配置文件路径)中定义配置文件来创建的,kubelet会定期检查这个目录,一旦发现有新的Pod配置文件或者配置文件发生变化,就会根据这些文件来创建、更新或者删除静态Pod。
  2. 配置方式

    • 文件路径:在Kubernetes集群中,kubelet会在特定的目录下查找静态Pod的配置文件,这个目录通常是/etc/kubernetes/manifests(具体路径可以在kubelet的配置参数中修改)。例如,如果你想在一个节点上创建一个静态Pod,你可以将Pod的YAML配置文件放置在这个目录下。
    • 配置文件内容:静态Pod的配置文件格式与普通Pod的YAML配置文件格式相同。它包含了Pod的基本信息,如apiVersionkindmetadata(包括Pod的名称、标签等)和spec(包括容器的相关信息,如容器的名称、镜像、端口等)。例如:
    apiVersion: v1
    kind: Pod
    metadata:name: static - pod - examplelabels:app: static - pod - app
    spec:containers:- name: static - pod - containerimage: my - imageports:- containerPort: 8080
    
  3. 与普通Pod的区别

    • 管理方式
      • 普通Pod:由Kubernetes的控制平面(主要是API Server、Scheduler和Controller Manager等组件)进行管理。当你通过kubectl create -f pod - yaml这样的命令创建一个普通Pod时,请求会发送到API Server,然后经过Scheduler调度到合适的节点上,Controller Manager会监控Pod的状态并确保其符合期望状态。
      • 静态Pod:由kubelet直接管理。它绕过了Kubernetes的调度器和其他控制平面组件,直接在所在节点创建和运行。例如,在一些特殊场景下,如需要在节点上运行一个对Kubernetes控制平面有依赖的工具容器,使用静态Pod可以确保它在节点上稳定运行,不受控制平面组件故障的影响。
    • 生命周期
      • 普通Pod:其生命周期受Kubernetes的多种控制器(如Deployment、ReplicationController等)的影响。例如,当你删除一个Deployment时,它所管理的所有Pod也会被删除;当通过Deployment进行Pod的滚动更新时,旧版本的Pod会被逐步替换。
      • 静态Pod:生命周期相对简单,主要由kubelet和其配置文件决定。如果配置文件被删除,对应的静态Pod也会被删除;如果配置文件内容发生变化,kubelet会根据新的配置更新静态Pod。
  4. 使用场景

    • 运行系统级组件:用于在Kubernetes集群的节点上运行一些系统级的关键组件,如kube - proxy、kube - DNS等。这些组件对于集群的正常运行非常重要,使用静态Pod可以确保它们在节点上可靠地启动和运行,不受集群控制平面可能出现的故障影响。
    • 特殊的监控或管理工具:当需要在节点上运行一些特殊的监控工具或者管理工具容器时,静态Pod是一个很好的选择。例如,一个用于收集节点硬件信息的监控容器,将其作为静态Pod运行可以保证它在节点上持续运行,并且可以通过自定义的配置文件来灵活调整其运行参数。

为 Kubernetes 集群移除新节点:

一、准备工作

  1. 节点状态确认
    • 在移除节点之前,需要确保该节点的当前状态。可以使用 kubectl get nodes 命令查看节点的状态。
    • 确认节点是否处于 Ready 状态或其他状态,例如,如果节点处于 NotReady 状态,可能需要先解决该节点的问题或确保该状态不会影响节点的移除操作。
    • 同时,检查该节点上是否有正在运行的重要 Pod,因为移除节点可能会影响这些 Pod 的运行。例如,如果该节点上运行着一些关键业务的 Pod,需要考虑将这些 Pod 迁移到其他节点,以避免服务中断。

二、驱逐节点上的 Pod

  1. 使用 kubectl drain 命令
    • 为了确保节点上的 Pod 被安全地迁移到其他节点,可以使用 kubectl drain <node-name> 命令。
    • 该命令会将节点标记为不可调度(unschedulable),并将节点上的 Pod 驱逐到其他可用节点上。
    • 例如:
    kubectl drain node1
    
    • 这个命令会尝试将 node1 上的所有 Pod 驱逐,同时会遵循 Pod 的 PodDisruptionBudgets(如果有的话),确保服务的可用性和可靠性。
    • 注意:如果节点上存在一些 DaemonSet 管理的 Pod 或者一些无法驱逐的 Pod(例如,被本地存储卷绑定的 Pod),命令会给出相应的警告或错误信息。对于这些情况,可能需要手动处理,如手动删除 DaemonSet 或处理本地存储卷的绑定问题。

三、节点移除操作

  1. 使用 kubectl delete node 命令

    • 一旦节点上的 Pod 被安全驱逐,就可以使用 kubectl delete node <node-name> 命令从集群中删除该节点。
    • 例如:
    kubectl delete node node1
    
    • 此命令会将节点从 Kubernetes 的 API 服务器中删除,但不会对节点的物理机器或虚拟机进行任何操作,只是从集群的管理层面移除节点信息。
    • 该命令会删除节点的元数据、标签、注解等信息,使其不再出现在 kubectl get nodes 的列表中。
  2. 在节点上清理 K8s 组件(可选)

    • 从集群中删除节点后,可以选择在节点上清理 K8s 组件,包括 kubelet、kube-proxy 等。
    • 对于使用 kubeadm 安装的节点,可以使用 kubeadm reset 命令来清理节点上的 K8s 配置和状态。例如:
    kubeadm reset
    
    • 此命令会移除 kubelet 的配置文件、证书、存储在节点上的 etcd 数据(如果有),并停止 kubelet 和 kube-proxy 服务,将节点恢复到未加入集群的状态。
    • 对于使用其他安装工具或手动安装的节点,需要手动停止相应的服务,如 systemctl stop kubeletsystemctl stop kube-proxy,并删除相应的配置文件和数据目录。

四、验证和后续处理

  1. 验证节点移除结果
    • 再次使用 kubectl get nodes 命令,确认节点已不在节点列表中。
    • 同时,可以检查其他节点上是否成功接纳了从移除节点迁移过来的 Pod,使用 kubectl get pods -o wide 查看 Pod 的分布情况,确保没有 Pod 处于异常状态。
    • 例如,如果节点 node1 被移除,检查其他节点上的 Pod 数量是否增加,以及它们的状态是否正常。
  2. 网络和存储清理(可能需要)
    • 对于使用网络插件(如 Calico、Flannel 等)的集群,可能需要清理节点在网络方面的残留信息,以避免网络异常。
    • 对于使用了持久卷(PV)和持久卷声明(PVC)且与移除节点相关的情况,需要检查存储的使用情况,确保存储资源的合理分配和重新利用。
    • 例如,如果节点上的 Pod 使用了 NFS 存储,需要确保 NFS 服务器端的存储资源没有被异常占用或锁定。

在移除 K8s 集群中的节点时,要遵循安全、有序的步骤,确保对节点上的 Pod 进行合理的处理,避免对业务造成不必要的影响,同时要进行后续的清理和验证工作,以保证集群的正常运行和资源的合理利用。

请注意,在执行这些操作时,务必谨慎操作,根据实际的集群环境和业务需求调整操作步骤,避免因误操作导致服务中断或数据丢失等问题。


为 K8s 集群添加新节点

一、前置条件检查

  1. 硬件和软件要求
    • 硬件资源
      • 确保新节点具备足够的 CPU、内存和存储资源,以满足容器和应用程序的运行需求。一般来说,需要根据集群中预期运行的工作负载来评估,避免资源不足影响性能或稳定性。
      • 例如,对于运行多个微服务的集群,新节点至少应具有 2 核 CPU、4GB 内存和一定的磁盘空间,并且要考虑后续的扩容需求。
    • 操作系统兼容性
      • 新节点应运行支持的操作系统,通常是主流的 Linux 发行版,如 Ubuntu、CentOS、Debian 等。同时,要确保操作系统版本在 K8s 支持的范围内。
      • 比如,对于某些 K8s 版本,可能要求使用 Ubuntu 18.04 或更高版本,以避免因操作系统不兼容导致的问题。
    • 网络连通性
      • 新节点必须能够与现有集群节点进行网络通信,包括 TCP/IP 通信和 UDP 通信(部分组件可能需要)。
      • 确保没有防火墙或网络策略阻止 K8s 组件之间的通信,如 API Server 的 6443 端口、etcd 的 2379 端口等。

二、容器运行时安装与配置

  1. 选择容器运行时
    • 常见容器运行时
      • Docker:曾经是最常用的容器运行时,但在较新的 K8s 版本中,K8s 更推荐使用 containerd 或 CRI-O。不过 Docker 仍然可用。
      • containerd:轻量级容器运行时,是 Docker 的核心组件,可独立使用。在 K8s 中使用 containerd 可以提高性能和资源利用率。
      • CRI-O:专门为 K8s 设计的容器运行时,遵循 CRI(Container Runtime Interface)规范,提供更精简的容器运行环境。
    • 安装步骤示例(containerd)
      • 首先添加容器运行时的软件源,对于 Ubuntu 可以使用 apt 或对于 CentOS 可以使用 yum 进行添加。
      • 然后使用相应的包管理工具安装 containerd 包,如 sudo apt-get install containerd
      • 配置 containerd,通常需要修改 /etc/containerd/config.toml 文件,设置镜像仓库、存储驱动等。例如,配置镜像仓库为 Docker Hub 或其他私有仓库,设置存储驱动为 overlayfs 等。

三、K8s 组件安装与配置

  1. kubelet 安装与配置

    • 安装 kubelet
      • 从 K8s 官方的软件源下载 kubelet 包,根据操作系统使用相应的包管理工具进行安装。
      • 例如,对于 Ubuntu 可以使用 sudo apt-get install kubelet 进行安装。
    • 配置 kubelet
      • 设置 kubelet 的启动参数,主要包括 --kubeconfig(指定 K8s 集群的配置文件路径)、--node-ip(新节点的 IP 地址)等。
      • 配置文件通常位于 /var/lib/kubelet/config.yaml,可设置资源预留、容器日志目录、Pod 目录等信息。
      • 例如,设置资源预留参数,确保系统有足够的资源留给 K8s 组件和操作系统本身,避免资源竞争。
  2. kube-proxy 安装与配置

    • 安装 kube-proxy
      • 与 kubelet 类似,从官方软件源安装 kube-proxy 包,如 sudo apt-get install kube-proxy
      • kube-proxy 负责将服务请求转发到相应的 Pod,是实现服务发现和负载均衡的重要组件。
    • 配置 kube-proxy
      • 可以使用配置文件(如 /var/lib/kube-proxy/config.conf)设置模式(如 iptables 或 ipvs)、集群的 CIDR 等。
      • 不同的模式有不同的性能和特点,可根据集群规模和性能需求选择,如在大规模集群中,ipvs 模式可能性能更优。

四、加入集群

  1. 生成加入命令
    • 在现有集群的主节点上,使用 kubeadm token create --print-join-command 生成新节点加入集群的命令。
    • 此命令包含认证信息(如 token)、CA 证书哈希和 API Server 的地址,确保新节点能安全加入集群。
    • 例如,生成的命令可能是 kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash <hash>
  2. 执行加入命令
    • 在新节点上执行上述生成的加入命令,将新节点添加到集群。
    • 执行过程中,新节点会与主节点通信,下载集群信息、证书和配置文件,进行身份验证,并注册自己为集群的一部分。
    • 例如,通过 sudo sh -c '<join_command>' 执行加入命令。

五、验证与调试

  1. 节点状态检查
    • 在主节点上使用 kubectl get nodes 查看新节点是否已成功加入。
    • 新节点的状态开始可能是 NotReady,等待一段时间后应变为 Ready,表明新节点已准备好接收和运行 Pod。
    • 例如,运行 kubectl get nodes 会显示节点列表,其中包括新节点的信息和状态。
  2. 日志检查
    • 若新节点未正常变为 Ready,可查看 kubeletkube-proxy 的日志,找出问题所在。
    • 可以使用 journalctl -u kubeletjournalctl -u kube-proxy 查看相应的日志信息。
    • 日志可以显示错误信息,如证书验证失败、网络连接问题、资源不足等,根据日志内容进行相应的修复。
  3. 功能测试
    • 在新节点上部署一个简单的测试 Pod,检查是否能正常运行。
    • 例如,使用 kubectl run test-pod --image=nginx --restart=Never 创建一个临时的 Nginx 容器,然后使用 kubectl describe pod test-pod 查看其运行状态,确保它能正常启动和运行。

添加新节点是扩展 K8s 集群规模和提高集群性能的重要操作,需要全面考虑硬件、软件、网络等多个方面的因素,确保每个步骤正确执行,并通过检查和测试保证新节点能正常融入集群,为集群的整体运行贡献力量。

在这里插入图片描述

Kubernetes 中 Pod 的调度流程

一、Pod 调度的基本流程概述

当用户通过 kubectl create 或通过 API 创建一个 Pod 时,Kubernetes 会触发调度流程,以确定将 Pod 分配到哪个节点上运行。这个过程涉及多个组件的协同工作,主要包括 API Server、Scheduler 和 Kubelet,它们共同确保 Pod 在合适的节点上启动和运行。

二、调度流程详细步骤

  1. Pod 创建和 API Server 接收

    • 当用户创建一个 Pod 时,无论是通过 YAML 文件还是其他方式,请求会被发送到 API Server。
    • API Server 是 Kubernetes 集群的控制平面组件,它会验证 Pod 的配置是否合法,并将其存储在 etcd 中。
    • 总结:API Server 作为入口,负责接收和验证 Pod 请求,将 Pod 信息存储到 etcd 中,为后续的调度和管理提供数据基础。
  2. 调度器监听 Pod 事件

    • Scheduler 会持续监听 API Server 上的 Pod 事件。一旦发现有新的未调度的 Pod(即没有指定 nodeName 属性的 Pod),它会将该 Pod 纳入调度队列。
    • Scheduler 会根据一系列的调度算法和策略来为 Pod 选择合适的节点。这些算法和策略考虑了多种因素,包括节点的资源(如 CPU、内存)、节点的标签、节点的亲和性/反亲和性、污点和容忍度等。
    • 总结:Scheduler 不断监控 API Server 中未调度的 Pod,根据多种因素来为它们寻找合适的节点,其核心任务是做出最优的节点选择。
  3. 节点筛选和评分

    • 筛选阶段
      • Scheduler 首先会根据 Pod 的要求和节点的属性进行筛选。例如,如果 Pod 要求一定的 CPU 和内存资源,那些资源不足的节点会被排除。同时,它会考虑节点的标签、污点和容忍度等因素。
      • 节点的亲和性/反亲和性也会影响筛选过程,例如,如果 Pod 要求运行在有特定标签的节点上,只有满足这些标签的节点会被保留。
      • 总结:通过对节点的各项属性进行筛选,排除不符合 Pod 要求的节点,缩小选择范围。
    • 评分阶段
      • 对于通过筛选的节点,Scheduler 会根据一些指标对它们进行评分。这些指标可以包括节点的资源可用性、资源分配的均匀性、节点上已有的负载等。
      • 不同的调度算法可能会采用不同的评分方式,例如,有些算法会优先考虑负载均衡,有些会优先考虑资源使用效率等。
      • 总结:对通过筛选的节点进行评分,以便选出最适合 Pod 运行的节点,不同的调度算法有不同的评分依据。
  4. 最终决策和绑定

    • Scheduler 根据评分结果,选择得分最高的节点作为最终的目标节点。
    • 然后,Scheduler 会将 Pod 与选定的节点进行绑定,通过更新 Pod 的 nodeName 属性将这一信息存储在 API Server 中,最终通过 API Server 持久化到 etcd 中。
    • 总结:根据评分选出最佳节点,将 Pod 与该节点绑定,更新信息并存储,完成调度的核心决策。
  5. Kubelet 启动 Pod

    • Kubelet 是运行在每个节点上的组件,它会持续监控 API Server 中分配到本节点的 Pod。
    • 当 Kubelet 发现有新的 Pod 被调度到自己所在的节点时,它会根据 Pod 的配置信息来启动容器。这包括拉取容器镜像、创建容器所需的存储卷、设置网络等操作。
    • 总结:Kubelet 负责接收分配到本节点的 Pod 任务,并执行实际的容器启动操作,将调度决策转化为实际的容器运行。

三、重要的调度策略和机制

  1. 资源请求和限制

    • 在 Pod 的配置中,可以指定资源请求(requests)和资源限制(limits)。
    • 资源请求会影响调度决策,确保节点有足够的资源来满足 Pod 的基本运行需求;资源限制则是对容器使用资源的上限约束,防止过度使用资源。
    • 总结:资源请求和限制是调度的重要依据,影响节点筛选和评分,同时保证了资源的合理分配和使用。
  2. 亲和性和反亲和性

    • 节点亲和性允许用户将 Pod 调度到满足特定条件的节点,如具有特定标签的节点。
    • 反亲和性可以防止 Pod 过于集中在某些节点,实现分布的均衡或满足高可用需求。
    • 总结:亲和性和反亲和性是灵活的调度工具,可实现精确的节点选择和负载均衡,提高集群的可靠性和性能。
  3. 污点和容忍度

    • 节点可以设置污点,以排斥某些 Pod。
    • Pod 可以设置容忍度,容忍特定的污点,从而能够在有污点的节点上运行。
    • 总结:污点和容忍度机制允许对节点的使用进行精细化管理,控制哪些 Pod 可以在哪些节点上运行,提高集群资源的调配灵活性。
  4. 调度器扩展

    • 用户可以编写自定义的调度算法,实现更复杂的调度需求。
    • 通过实现 Scheduler Extender 接口,可以将自定义算法集成到 Scheduler 中。
    • 总结:支持调度器扩展,以满足特殊的业务或性能要求,增加了调度的灵活性和定制性。

Kubernetes 的 Pod 调度是一个复杂而精细的过程,涉及多个组件和多种策略,从 Pod 的创建、API Server 的接收,到 Scheduler 的筛选、评分和决策,再到 Kubelet 的执行,以及重要的调度策略和机制的协同工作,确保了 Pod 在集群中高效、合理地分配和运行。这些机制相互配合,保证了集群资源的优化利用和服务的稳定运行。

一本遗失的秘籍


相关文章:

【k8s面试题2025】2、练气初期

在练气初期&#xff0c;灵气还比较稀薄&#xff0c;只能勉强在体内运转几个周天。 文章目录 简述k8s静态pod为 Kubernetes 集群移除新节点&#xff1a;为 K8s 集群添加新节点Kubernetes 中 Pod 的调度流程 简述k8s静态pod 定义 静态Pod是一种特殊类型的Pod&#xff0c;它是由ku…...

栈溢出原理

文章目录 前言一、基本示例二、分析栈1. 先不考虑gets函数的栈情况2. 分析gets函数的栈区情况 三、利用栈1. 构造字符串2. 利用漏洞 前言 栈溢出指的是程序向栈中某个变量中写入的字节数超过了这个变量本身所申请的字节数&#xff0c;因而导致与其相邻的栈中的变量的值被改变。…...

Jmeter如何进行多服务器远程测试

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 JMeter是Apache软件基金会的开源项目&#xff0c;主要来做功能和性能测试&#xff0c;用Java编写。 我们一般都会用JMeter在本地进行测试&#xff0c;但是受到单…...

2.slf4j入口

文章目录 一、故事引入二、原理探究三、SLF4JServiceProvider四、总结 一、故事引入 故事要从下面这段代码说起 public class App {private static final Logger logger LoggerFactory.getLogger(App.class);public static void main( String[] args ) throws Exception {lo…...

初学stm32 --- CAN

目录 CAN介绍 CAN总线拓扑图 CAN总线特点 CAN应用场景 CAN物理层 CAN收发器芯片介绍 CAN协议层 数据帧介绍 CAN位时序介绍 数据同步过程 硬件同步 再同步 CAN总线仲裁 STM32 CAN控制器介绍 CAN控制器模式 CAN控制器模式 CAN控制器框图 发送处理 接收处理 接收过…...

软件测试—接口测试面试题及jmeter面试题

一&#xff0c;接口面试题 1.接口的作用 实现前后端的交互&#xff0c;实现数据的传输 2.什么是接口测试 接口测试就是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换、传递和控制管理过程&#xff0c;以及相互逻辑关系 3.接口测试必要性 1.可以发现很…...

图论的起点——七桥问题

普瑞格尔河从古堡哥尼斯堡市中心流过&#xff0c;河中有小岛两座&#xff0c;筑有7座古桥&#xff0c;哥尼斯堡人杰地灵&#xff0c;市民普遍爱好数学。1736年&#xff0c;该市一名市民向大数学家Euler提出如下的所谓“七桥问题”&#xff1a; 从家里出发&#xff0c;7座桥每桥…...

嵌入式开发通讯协议大全(在写中)

目录 modbus RTU通讯协议&#xff1a; pmbus通讯协议&#xff1a; modbus RTU通讯协议&#xff1a; 主要应用功能&#xff1a; 规范了软件变量&#xff0c;访问功能码&#xff0c;给不同工程师开发的不同产品有统一的通讯标准 帧结构简单&#xff0c;占用带宽少&#xff0c…...

webpack 4 升级 webpack 5

升级至最新的 webpack 和 webpack-cli npm run build 报错&#xff0c; unknown option -p 解决方案&#xff1a; 改成 --mode production npm run build 报错 unknown option --hide-modules 解决方案&#xff1a;直接移除 npm run build 报错&#xff1a;TypeError: Cannot a…...

oneplus3t-lineageos-16.1编译-android9, oneplus3t-lineage-14编译-android7

oneplus3t-lineage-14编译-android7 1 清华linageos镜像 x lineage-14.1-20180223-nightly-oneplus3-signed.zip ntfs分区挂载为普通用户目录 , ext4分区挂载为普通用户目录 bfsu/lineageOS镜像 ts/lingeageOS镜像 oneplus3/lineage-build-simple-manual.md, manifest-p…...

HTML中最基本的东西

本文内容的标签&#xff0c;将是看懂HTML的最基本之基本 &#xff0c;是跟您在写文章时候一样内容。一般想掌握极其容易&#xff0c;但是也要懂得如何使用&#xff0c;过目不忘&#xff0c;为手熟尔。才是我们学习的最终目的。其实边看边敲都行&#xff0c;或者是边看边复制粘贴…...

<OS 有关>Ubuntu 24 安装 openssh-server, tailscale+ssh 慢增加

更新日志&#xff1a; Created on 14Jan.2025 by Dave , added openssh-server, tailescape Updated on 15Jan.2025, added "tailescape - tailscape ssh" 前期准备&#xff1a; 1. 更新可用软件包的数据库 2. 升级系统中所有已安装的软件包到最新版本 3. 安装 cur…...

神经网络常见操作(卷积)输入输出

卷积 dimd的tensor可以进行torch.nn.Convnd(in_channels,out_channels),其中nd-1,d-2对于torch.nn.Convnd(in_channels,out_channels)&#xff0c;改变的是tensor的倒数n1维的大小 全连接 使用torch.nn.Linear(in_features,out_features,bias)实现YXWT b,其中X 的形状为 (ba…...

25/1/16 嵌入式笔记 STM32F108

输入捕获 TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct; TIM_TimeBaseStruct.TIM_Period 0xFFFF; // 自动重装载值 TIM_TimeBaseStruct.TIM_Prescaler 71; // 预分频值 TIM_TimeBaseStruct.TIM_ClockDivision 0; TIM_TimeBaseStruct.TIM_CounterMode TIM_CounterMode_Up…...

mac 安装 node

brew versions node // 安装 node brew versions node14 // 安装指定版本 卸载node: sudo npm uninstall npm -g sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.* sudo rm -rf /usr/local/include/node /Users/$USER/.npm su…...

mysql常用运维命令

mysql常用运维命令 查看当前所有连接 -- 查看当前所有连接 SHOW FULL PROCESSLIST;说明&#xff1a; 关注State状态列&#xff0c;是否有锁。如果大量状态是waiting for handler commit检查磁盘是否占满关注Time耗时列&#xff0c;是否有慢查询关注Command列&#xff0c;如果…...

正则表达式学习网站

网上亲测好用的网站&#xff1a; Regexlearn 这个网站可以从0开始教会正则表达式的使用。 mklab 包含常用表达式&#xff0c;车次&#xff0c;超链接&#xff0c;号码等提取。...

gradle,adb命令行编译备忘

追踪依赖(为了解决duplicateClass…错误) gradlew.bat app:dependencies > dep-tree.txt # 分析dep-tree.txt的依赖结构&#xff0c;找到对应的包&#xff0c;可能需要做exclude控制,或者查看库issueverbose编译(我一直需要verbose) gradlew.bat assembleDebug -Dhttps.pr…...

C++:工具VSCode的编译和调试文件内容:

ubuntu24.04&#xff0c; vscode 配置文件 C 的环境 下载的gcc&#xff0c;使用命令为 sudo aptitude update sudo aptitude install build-essential -f- sudo: 以超级用户权限运行命令。 - aptitude: 包管理工具&#xff0c;用于安装、更新和删除软件包。 - install: 安装指…...

SpringMVC Idea 搭建 部署war

1.创建 Idea项目 使用Maven模板 创建 webApp模板项目 2.导入依赖 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://ma…...

YOLOv10-1.1部分代码阅读笔记-loaders.py

loaders.py ultralytics\data\loaders.py 目录 loaders.py 1.所需的库和模块 2.class SourceTypes: 3.class LoadStreams: 4.class LoadScreenshots: 5.class LoadImagesAndVideos: 6.class LoadPilAndNumpy: 7.class LoadTensor: 8.def autocast_list(source…...

Windows的Redis查看自己设置的密码并更改设置密码

查看密码 由于我的Redis安装很久了&#xff0c;所以忘记是否有设置密码&#xff0c;查看步骤如下&#xff1a; 启动redis&#xff0c;启动流程可以看这篇文章&#xff1a;https://blog.csdn.net/changyana/article/details/127679871 在redis安装目录下打开redis-cli.exe&…...

【Linux】sed编辑器二

一、处理多行命令 sed编辑器有3种可用于处理多行文本的特殊命令。 N&#xff1a;加入数据流中的下一行&#xff0c;创建一个多行组进行处理&#xff1b;D&#xff1a;删除多行组中的一行&#xff1b;P&#xff1a;打印多行组中的一行。 1、next命令&#xff1a;N 单行next命…...

docker 部署 Kafka 单机和集群

一、准备工作 安装 Docker 确保本机已安装 Docker。可以通过以下命令检查 Docker 是否已安装&#xff1a;docker --version如果未安装&#xff0c;可以访问 Docker 官网下载并安装 Docker Desktop&#xff08;Windows 和 Mac&#xff09;或使用包管理器安装&#xff08;Linux&…...

PHP语言的软件开发工具

PHP语言的软件开发工具 在当今数字化的时代&#xff0c;软件开发已经成为一种常见的职业。无论是企业级应用、网站开发还是移动应用&#xff0c;开发者们都需要用到各种各样的工具。PHP作为一种广泛使用的服务器端脚本语言&#xff0c;因其简单、灵活与强大的功能&#xff0c;…...

前端【3】--CSS布局,CSS实现横向布局,盒子模型

盒子分类 1、块级盒子 2、内联级盒子 3、内联块级盒子 4、弹性盒子 5、盒子内部分区 方法一&#xff1a;使用 float 普通盒子实现横向布局 方法二&#xff1a;使用 display: inline-block 内联块级元素实现横向布局 方法三&#xff1a;使用弹性盒子 flexbox&#xff0…...

SQL语句IN和OR的区别

在SQL中&#xff0c;IN和OR都用于筛选条件&#xff0c;但它们的用途和性能上有一些区别。以下是两者的对比&#xff1a; 1. 语法 IN SELECT * FROM table_name WHERE column_name IN (value1, value2, value3);IN用于检查某列的值是否在一个给定的值列表中。 OR SELECT * FRO…...

OCP使用中的常见问题与解决方法

OCP的常见问题 页面卡顿&#xff1a; 遇到页面卡顿的问题时&#xff0c;首先需要区分是全局性的卡顿&#xff0c;即所有页面都出现延迟或响应缓慢&#xff0c;还是仅限于特定的监控页面。 监控数据看不到: 需要明确是全部数据都无法查看&#xff0c;还是仅限于特定集群的数…...

Git 版本控制:.gitignore 文件完全指南

.gitignore 文件是 Git 版本控制系统中的一个重要配置文件&#xff0c;用于告诉 Git 哪些文件和目录应该被忽略&#xff0c;不需要纳入版本控制。以下是关于 .gitignore 的完整笔记。 基本概念 .gitignore 文件可以放在项目的任何目录下&#xff0c;其作用范围包括所在目录及…...

STM32 FreeRTOS 介绍

目录 什么是裸机开发 什么是操作系统 通用操作系统 实时操作系统 FreeRTOS简介 FreeRTOS发展历史 FreeRTOS优势 FreeRTOS特点 什么是裸机开发 裸机开发指的是在没有操作系统&#xff08;OS&#xff09;或者其他高级软件支持的情况下&#xff0c;直接在裸机硬件上进行软…...