Kubernetes 单节点集群搭建
Kubernetes 单节点集群搭建教程
本人尝试基于Ubuntu搭建一个单节点K8S集群,其中遇到各种问题,最大的问题就是网络,各种镜像源下载不下来,特此记录!注意:文中使用了几个镜像,将看来可能失效导致安装失败,但安装的逻辑不变可以自行寻找可以用的镜像。文末附上一个无脑脚本,保存为 xx.sh 直接bash 执行即可。
前置条件
- 操作系统:Ubuntu 20.04 或更高版本。
- 硬件要求:
- 至少 2 核 CPU 和 10GB 内存。
- 网络环境:确保服务器可以访问互联网。
- 权限:以
root
用户或使用sudo
运行以下命令。
步骤 1:更新系统并安装必要工具
# 更新系统包
apt-get update && apt-get upgrade -y# 安装必要的工具
apt-get install -y curl apt-transport-https ca-certificates software-properties-common
步骤 2:安装和配置 containerd
apt-get install -y containerd
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
systemctl restart containerd
步骤 3:安装 crictl 工具
CRITCL_VERSION="v1.28.0"
curl -L https://github.moeyy.xyz/https://github.com/kubernetes-sigs/cri-tools/releases/download/$CRITCL_VERSION/crictl-${CRITCL_VERSION}-linux-amd64.tar.gz --output crictl-${CRITCL_VERSION}-linux-amd64.tar.gz
tar -xzvf crictl-${CRITCL_VERSION}-linux-amd64.tar.gz -C /usr/local/bin
rm -f crictl-${CRITCL_VERSION}-linux-amd64.tar.gz
cat <<EOF | tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
步骤 4:配置 containerd 使用阿里云沙箱镜像
if ! grep -q "sandbox_image = \"registry.aliyuncs.com/google_containers/pause:3.9\"" /etc/containerd/config.toml; thensed -i 's|sandbox_image = .*|sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"|' /etc/containerd/config.toml
fi
systemctl restart containerd
步骤 5:清理现有 Kubernetes 集群(如果存在)
systemctl stop kubelet || true
systemctl disable kubelet || true
kubeadm reset -f
rm -rf /etc/kubernetes/* /var/lib/kubelet/* /etc/cni/net.d/*
crictl ps -q | xargs -r crictl rm -f || true
crictl images -q | xargs -r crictl rmi -f || true
步骤 6:加载内核模块并启用 IP 转发
modprobe br_netfilter
echo "br_netfilter" | tee -a /etc/modules-load.d/modules.conf
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward=1" | tee -a /etc/sysctl.conf
sysctl -p
步骤 7:添加 Kubernetes 国内镜像源并安装组件
cat <<EOF | tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
apt-get update
apt-get install -y kubelet=1.28.0-00 kubeadm=1.28.0-00 kubectl=1.28.0-00
apt-mark hold kubelet kubeadm kubectl
步骤 8:关闭 swap 分区
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
步骤 9:初始化 Kubernetes 集群
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
步骤 10:安装 Flannel 网络插件
MIRROR_SOURCE="ghcr.monlor.com"
crictl pull ${MIRROR_SOURCE}/flannel-io/flannel:v0.26.4
ctr -n k8s.io images tag ${MIRROR_SOURCE}/flannel-io/flannel:v0.26.4 ghcr.io/flannel-io/flannel:v0.26.4
crictl pull ${MIRROR_SOURCE}/flannel-io/flannel-cni-plugin:v1.6.2-flannel1
ctr -n k8s.io images tag ${MIRROR_SOURCE}/flannel-io/flannel-cni-plugin:v1.6.2-flannel1 ghcr.io/flannel-io/flannel-cni-plugin:v1.6.2-flannel1
FLANNEL_YAML="https://github.moeyy.xyz/https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml"
curl -L $FLANNEL_YAML | kubectl apply -f -
步骤 11:验证集群状态
kubectl get nodes
kubectl get pods --all-namespaces
大功告成!
单节点调度需去除污点
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
无脑脚本
#!/bin/bash# 设置脚本退出条件:任何命令失败则退出
set -e# 定义颜色变量,方便输出日志
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color# 打印信息函数
log_info() {echo -e "${GREEN}[INFO] $1${NC}"
}log_warn() {echo -e "${YELLOW}[WARN] $1${NC}"
}log_error() {echo -e "${RED}[ERROR] $1${NC}"exit 1
}# 检查是否以 root 用户运行
if [ "$EUID" -ne 0 ]; thenlog_error "请以 root 用户或使用 sudo 运行此脚本。"
fi# 更新系统包(仅在未更新时执行)
if ! grep -q "Last update" /var/log/apt/history.log 2>/dev/null || [ $(($(date +%s) - $(stat -c %Y /var/log/apt/history.log))) -gt 86400 ]; thenlog_info "更新系统包..."apt-get update && apt-get upgrade -y
elselog_warn "系统包已更新,跳过此步骤。"
fi# 安装必要的工具(仅在未安装时执行)
if ! dpkg -l | grep -q "curl"; thenlog_info "安装必要的工具(curl、apt-transport-https等)..."apt-get install -y curl apt-transport-https ca-certificates software-properties-common
elselog_warn "必要的工具已安装,跳过此步骤。"
fi# 安装 containerd(仅在未安装时执行)
if ! dpkg -l | grep -q "containerd"; thenlog_info "安装 containerd..."apt-get install -y containerd
elselog_warn "containerd 已安装,跳过此步骤。"
fi# 配置 containerd(仅在未配置时执行)
if [ ! -f /etc/containerd/config.toml ]; thenlog_info "配置 containerd..."mkdir -p /etc/containerdcontainerd config default > /etc/containerd/config.tomlsed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.tomlsystemctl restart containerd
elselog_warn "containerd 已配置,跳过此步骤。"
fi# 定义 crictl 下载 URL
CRITCL_VERSION="v1.28.0"
ACCELERATED_CRITCL_URL="https://github.moeyy.xyz/https://github.com/kubernetes-sigs/cri-tools/releases/download/$CRITCL_VERSION/crictl-${CRITCL_VERSION}-linux-amd64.tar.gz"# 安装 crictl 工具(仅在未安装时执行)
if ! command -v crictl &> /dev/null; thenlog_info "安装 crictl 工具..."# 尝试从加速镜像源下载if ! curl -L $ACCELERATED_CRITCL_URL --output crictl-${CRITCL_VERSION}-linux-amd64.tar.gz; thenlog_error "无法从加速镜像源下载 crictl,请检查网络或手动下载并安装。"fi# 解压并安装 crictltar -xzvf crictl-${CRITCL_VERSION}-linux-amd64.tar.gz -C /usr/local/binrm -f crictl-${CRITCL_VERSION}-linux-amd64.tar.gz
elselog_warn "crictl 已安装,跳过此步骤。"
fi# 配置 crictl(仅在未配置时执行)
if [ ! -f /etc/crictl.yaml ]; thenlog_info "配置 crictl..."cat <<EOF | tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
elselog_warn "crictl 已配置,跳过此步骤。"
fi# 配置 containerd 使用阿里云的沙箱镜像
log_info "配置 containerd 使用阿里云的沙箱镜像..."# 修改 containerd 配置文件
if ! grep -q "sandbox_image = \"registry.aliyuncs.com/google_containers/pause:3.9\"" /etc/containerd/config.toml; then# 备份原始配置文件cp /etc/containerd/config.toml /etc/containerd/config.toml.bak# 修改配置文件,设置 sandbox_imagesed -i 's|sandbox_image = .*|sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"|' /etc/containerd/config.toml# 如果配置文件中不存在 sandbox_image,则直接添加if ! grep -q "sandbox_image" /etc/containerd/config.toml; thenecho 'sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"' >> /etc/containerd/config.tomlfilog_info "已配置 containerd 使用阿里云的沙箱镜像。"
elselog_warn "containerd 已配置为使用阿里云的沙箱镜像,跳过此步骤。"
fi# 重启 containerd 服务以应用更改
systemctl restart containerd## 检测是否需要清理现有集群
if [ -f /etc/kubernetes/admin.conf ] || systemctl is-active --quiet kubelet; thenlog_info "检测到已存在的 Kubernetes 集群,开始清理..."# 停止并禁用 kubelet 服务log_info "停止并禁用 kubelet 服务..."systemctl stop kubelet || truesystemctl disable kubelet || true# 重置 kubeadm 集群log_info "重置 kubeadm 集群..."kubeadm reset -f# 清理所有 Kubernetes 相关进程log_info "清理所有 Kubernetes 相关进程..."pkill -f kube-apiserver || truepkill -f kube-controller-manager || truepkill -f kube-scheduler || truepkill -f etcd || truepkill -f kubelet || true# 删除 /etc/kubernetes 目录log_info "删除 /etc/kubernetes 目录..."rm -rf /etc/kubernetes/*# 删除 /var/lib/kubelet 目录log_info "删除 /var/lib/kubelet 目录..."rm -rf /var/lib/kubelet/*# 清理 CNI 配置文件log_info "清理 CNI 配置文件..."rm -rf /etc/cni/net.d/*# 清理 containerd 中的残留容器和镜像log_info "清理所有容器..."crictl ps -q | xargs -r crictl rm -f || truelog_info "清理所有镜像..."crictl images -q | xargs -r crictl rmi -f || truelog_info "Kubernetes 集群清理完成,准备重新初始化。"
elselog_warn "未检测到已存在的 Kubernetes 集群,无需清理。"
fi# 加载 br_netfilter 内核模块并启用 IP 转发
log_info "加载 br_netfilter 内核模块并启用 IP 转发..."# 加载 br_netfilter 模块
if ! lsmod | grep -q "br_netfilter"; thenmodprobe br_netfilterlog_info "已加载 br_netfilter 模块。"
elselog_warn "br_netfilter 模块已加载,跳过此步骤。"
fi# 确保 br_netfilter 模块在系统启动时自动加载
if ! grep -q "br_netfilter" /etc/modules-load.d/modules.conf; thenecho "br_netfilter" | tee -a /etc/modules-load.d/modules.conflog_info "已配置 br_netfilter 模块开机自动加载。"
elselog_warn "br_netfilter 模块已配置为开机自动加载,跳过此步骤。"
fi# 启用 IPv4 转发
if [ "$(cat /proc/sys/net/ipv4/ip_forward)" != "1" ]; thenecho "1" > /proc/sys/net/ipv4/ip_forwardlog_info "已启用 IPv4 转发。"
elselog_warn "IPv4 转发已启用,跳过此步骤。"
fi# 确保 IPv4 转发配置在系统重启后仍然生效
if ! grep -q "net.ipv4.ip_forward=1" /etc/sysctl.conf; thenecho "net.ipv4.ip_forward=1" | tee -a /etc/sysctl.conflog_info "已配置 IPv4 转发开机生效。"
elselog_warn "IPv4 转发已配置为开机生效,跳过此步骤。"
fi# 应用 sysctl 配置
sysctl -p# 添加 Kubernetes 国内镜像源(仅在未添加时执行)
if [ ! -f /etc/apt/sources.list.d/kubernetes.list ]; thenlog_info "添加 Kubernetes 阿里云镜像源..."cat <<EOF | tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOFcurl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -apt-get update
elselog_warn "Kubernetes 镜像源已添加,跳过此步骤。"
fi# 安装 kubeadm、kubelet 和 kubectl(仅在未安装时执行)
if ! dpkg -l | grep -q "kubeadm"; thenlog_info "安装 Kubernetes 1.28..."apt-get install -y kubelet=1.28.0-00 kubeadm=1.28.0-00 kubectl=1.28.0-00apt-mark hold kubelet kubeadm kubectl
elselog_warn "Kubernetes 组件已安装,跳过此步骤。"
fi# 关闭 swap 分区(仅在未关闭时执行)
if swapon --show | grep -q "/dev/"; thenlog_info "关闭 swap 分区..."swapoff -ased -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
elselog_warn "swap 分区已关闭,跳过此步骤。"
fi# 配置 kubelet 使用国内镜像源(仅在未配置时执行)
if ! grep -q "registry.aliyuncs.com/google_containers" /etc/systemd/system/kubelet.service.d/20-aliyun.conf 2>/dev/null; thenlog_info "配置 kubelet 使用国内镜像源..."cat <<EOF | tee /etc/systemd/system/kubelet.service.d/20-aliyun.conf
[Service]
Environment="KUBELET_EXTRA_ARGS=--cgroup-driver=systemd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9"
EOFsystemctl daemon-reloadsystemctl restart kubelet
elselog_warn "kubelet 已配置为使用国内镜像源,跳过此步骤。"
fi# 初始化 Kubernetes 集群(仅在未初始化时执行)
if ! kubectl get nodes 2>/dev/null | grep -q "Ready"; thenlog_info "初始化 Kubernetes 集群..."# 清理现有集群log_info "清理现有 Kubernetes 集群..."kubeadm reset -frm -rf /etc/kubernetes/*rm -rf /var/lib/kubelet/*rm -rf /etc/cni/net.d/*crictl ps -q | xargs -r crictl rm -f || truecrictl images -q | xargs -r crictl rmi -f || true# 删除用户的 kubeconfig 文件if [ -f $HOME/.kube/config ]; thenlog_info "删除用户的 kubeconfig 文件..."rm -f $HOME/.kube/configfikubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers# 配置 kubectllog_info "配置 kubectl..."mkdir -p $HOME/.kubecp -i /etc/kubernetes/admin.conf $HOME/.kube/configchown $(id -u):$(id -g) $HOME/.kube/config
elselog_warn "Kubernetes 集群已初始化,跳过此步骤。"
fi# 设置镜像源变量
MIRROR_SOURCE="ghcr.monlor.com"# 提前拉取并标记 Flannel 镜像
log_info "提前拉取并标记 Flannel 镜像..."# 拉取 Flannel 主镜像
if ! crictl images | grep -q "${MIRROR_SOURCE}/flannel-io/flannel"; thenlog_info "拉取 Flannel 主镜像..."crictl pull ${MIRROR_SOURCE}/flannel-io/flannel:v0.26.4
elselog_warn "Flannel 主镜像已存在,跳过此步骤。"
fi# 重新标记 Flannel 主镜像
if ! ctr -n k8s.io images list | grep -q "ghcr.io/flannel-io/flannel:v0.26.4"; thenlog_info "重新标记 Flannel 主镜像..."ctr -n k8s.io images tag ${MIRROR_SOURCE}/flannel-io/flannel:v0.26.4 ghcr.io/flannel-io/flannel:v0.26.4
elselog_warn "Flannel 主镜像已标记,跳过此步骤。"
fi# 拉取 Flannel CNI 插件镜像
if ! crictl images | grep -q "${MIRROR_SOURCE}/flannel-io/flannel-cni-plugin"; thenlog_info "拉取 Flannel CNI 插件镜像..."crictl pull ${MIRROR_SOURCE}/flannel-io/flannel-cni-plugin:v1.6.2-flannel1
elselog_warn "Flannel CNI 插件镜像已存在,跳过此步骤。"
fi# 重新标记 Flannel CNI 插件镜像
if ! ctr -n k8s.io images list | grep -q "ghcr.io/flannel-io/flannel-cni-plugin:v1.6.2-flannel1"; thenlog_info "重新标记 Flannel CNI 插件镜像..."ctr -n k8s.io images tag ${MIRROR_SOURCE}/flannel-io/flannel-cni-plugin:v1.6.2-flannel1 ghcr.io/flannel-io/flannel-cni-plugin:v1.6.2-flannel1
elselog_warn "Flannel CNI 插件镜像已标记,跳过此步骤。"
fi# 安装 Flannel 网络插件(仅在未安装时执行)
if ! kubectl get pods -n kube-system | grep -q "kube-flannel"; thenlog_info "安装 Flannel 网络插件..."# 使用原始地址下载 Flannel 配置文件FLANNEL_YAML="https://github.moeyy.xyz/https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml"# 下载并应用配置文件curl -L $FLANNEL_YAML | kubectl apply -f -
elselog_warn "Flannel 网络插件已安装,跳过此步骤。"
fi# 等待所有系统 Pod 启动
log_info "等待所有系统 Pod 启动..."
sleep 10# 检查节点状态
log_info "检查节点状态..."
kubectl get nodes# 检查 Pod 状态
log_info "检查 Pod 状态..."
kubectl get pods --all-namespaceslog_info "Kubernetes 单节点集群已成功搭建!"把上面的脚本按照步骤拆分出来,编写一个md的教程 尽可能的简单
相关文章:
Kubernetes 单节点集群搭建
Kubernetes 单节点集群搭建教程 本人尝试基于Ubuntu搭建一个单节点K8S集群,其中遇到各种问题,最大的问题就是网络,各种镜像源下载不下来,特此记录!注意:文中使用了几个镜像,将看来可能失效导致安…...
windows安装两个或多个JDK,并实现自由切换
我用两个JDK来做演示,分别是JDK8和JDK17(本人已安装JDK8,所以这里只演示JDK17的安装)。 1、下载JDK17安装 Java Downloads | Oracle 2、安装JDK17,这里忽略。直接双击软件,点击下一步就可以。 3、配置环境变量 在系统变量中新建一个CLASSP…...
如何打包数据库mysql数据,并上传到虚拟机上进行部署?
1.连接数据库,使得我们能看到数据库信息,才能进行打包上传 2. 3. 导出结果如下,是xml文件 4.可以查询每个xml文件的属性,确保有大小,这样才是真实导出 5跟着黑马,新建文件夹,并且把对应的东西放…...
fastapi +angular迷宫求解可跨域
说明:我计划使用fastapi angular,实现迷宫路径生成与求解 后端功能包括: 1.FastAPI搭建RESTful接口。写两个接口, 1.1生成迷宫, 1.2求解路径 前端功能包括 1.根据给定的长宽值,生成迷宫 2.点击按钮&…...
CobaltStrike详细使用及Linux上线
1、工具准备 cs工具 将teamserver.zip放进服务端给必要文件增加可执行文件( 执行时会有提示 )服务端启动服务监听 sudo ./teamserver <IP地址> <密码> [c2配置文件]客户端直接连接即可端口默认:50050主机:服务端ip地址2、基础配置 启动监听…...
WSL2 Ubuntu安装GCC不同版本
WSL2 Ubuntu安装GCC不同版本 介绍安装gcc 7.1方法 1:通过源码编译安装 GCC 7.1步骤 1:安装编译依赖步骤 2:下载 GCC 7.1 源码步骤 3:配置和编译步骤 4:配置环境变量步骤 5:验证安装 方法 2:通过…...
WPF CommunityToolkit.MVVM库的简单使用
CommunityToolkit.MVVM 是 .NET 社区工具包中的一部分,它为实现 MVVM(Model-View-ViewModel)模式提供了一系列实用的特性和工具,能帮助开发者更高效地构建 WPF、UWP、MAUI 等应用程序。以下是关于它的详细使用介绍: 1…...
4个 Vue 路由实现的过程
大家好,我是大澈!一个喜欢结交朋友、喜欢编程技术和科技前沿的老程序员👨🏻💻,关注我,科技未来或许我能帮到你! Vue 路由相信朋友们用的都很熟了,但是你知道 Vue 路由…...
Compose 实践与探索十 —— 其他预先处理的 Modifier
1、PointerInputModifier PointerInputModifier 用于定制触摸(包括手指、鼠标、悬浮)反馈算法,实现手势识别。 1.1 基本用法 最简单的使用方式就是通过 Modifier.clickable() 响应点击事件: Box(Modifier.size(40.dp).backgro…...
基于Python的天气预报数据可视化分析系统-Flask+html
开发语言:Python框架:flaskPython版本:python3.8数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 系统登录 可视化界面 天气地图 天气分析 历史天气 用户管理 摘要 本文介绍了基于大数据…...
“消失的中断“
“消失的中断” 1. 前言 在嵌入式开发过程中,中断必不可少。道友们想必也经常因为中断问题头疼不已,今天来说说一个很常见的问题,“消失的中断”。最近项目在使用第三方MCAL的时候,就遇到了I2C中断丢失的问题,排查起…...
对C++面向对象的理解
C的面向对象编程(OOP)是其核心特性之一,通过类(Class)和对象(Object)实现数据和行为的封装,支持继承、多态和抽象等核心概念。以下是关键点解析: 1. 类(Class…...
代码随想录-训练营-day52
97. 小明逛公园 (kamacoder.com) #include<iostream> #include<vector> using namespace std; int main(){int n,m,u,v,w;cin>>n>>m;vector<vector<vector<int>>> grid(n1,vector<vector<int>>(n1,vector<int>(n1…...
Java File 类详解
1. 概述 File 类是 Java 提供的用于文件和目录路径名的抽象表示。它能够用于创建、删除、查询文件和目录的信息,但不用于读写文件内容。如果需要对文件进行读写,可以结合 FileReader、FileWriter、BufferedReader 等类来完成。 2. File 类的构造方法 …...
JS实现省份地级市的选择
JS实现省份地级市的选择 效果展示: 代码实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><ti…...
【鸿蒙开发】Hi3861学习笔记-Visual Studio Code安装(New)
00. 目录 文章目录 00. 目录01. Visual Studio Code概述02. Visual Studio Code下载03. Visual Studio Code安装04. Visual Studio Code插件05. 附录 01. Visual Studio Code概述 vscode是一种简化且高效的代码编辑器,同时支持诸如调试,任务执行和版本管…...
记录致远OA服务器硬盘升级过程
前言 日常使用中OA系统突然卡死,刷新访问进不去系统,ping服务器地址正常,立马登录服务器检查,一看磁盘爆了。 我大脑直接萎缩了,谁家OA系统配400G的空间啊,过我手的服务器没有50也是30台,还是…...
计算机网络-网络规划与设计
基本流程 需求分析—》通信规范分析—》逻辑网络设计—》物理网络设计—》实施阶段 需求分析: 确定需求,包括:业务需求、用户需求、应用需求、计算机平台需求、网络通信需求等。 产物:需求规范 通信规范分析: 现有…...
C#opencv 遍历图像中所有点 不在圆范围内的点变为黑色,在圆范围内的保持原色
C#opencv 遍历图像中所有点 不在圆范围内的点变为黑色,在圆范围内的保持原色 安装 Install-Package OpenCvSharp4 Install-Package OpenCvSharp4.Windows 普通实现 using System; using System.Collections.Generic; using System.Linq; using OpenCvSharp; // 添加OpenCV引用…...
精通游戏测试笔记(持续更新)
第一章、游戏测试的两条规则 不要恐慌 不要将这次发布当作最后一次发布 不要相信任何人 把每次发布当作最后一次发布 第二章:成为一名游戏测试工程师...
Linux内核,mmap_pgoff在mmap.c的实现
1. mmap_pgoff的系统调用实现如下 SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len,unsigned long, prot, unsigned long, flags,unsigned long, fd, unsigned long, pgoff) {return ksys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); }2. ksys_mma…...
深度揭秘:蓝耘 Maas 平台如何重塑深度学习格局
目录 前言 深度学习:技术基石与发展脉络 蓝耘 Maas 平台:深度学习的强大助推器 1. 高性能算力支撑 2. 丰富的模型支持 3. 便捷的开发体验 4. 完善的安全保障 代码示例:蓝耘 Maas 平台上的深度学习实践 1. 注册与登录 2. 代码实现 …...
深入解析操作系统进程控制:从地址空间到实战应用
引言 想象这样一个场景: 你的游戏本同时运行着《赛博朋克2077》、Chrome浏览器和Discord语音 突然游戏崩溃,但其他应用依然正常运行 此时你打开任务管理器,发现游戏进程已经消失,但内存占用却未完全释放 这背后涉及的关键机制…...
网络空间安全(33)MSF漏洞利用
前言 Metasploit Framework(简称MSF)是一款功能强大的开源安全漏洞利用和测试工具,广泛应用于渗透测试中。MSF提供了丰富的漏洞利用模块,允许安全研究人员和渗透测试人员利用目标系统中的已知漏洞进行攻击。 一、漏洞利用模块&…...
《Electron 学习之旅:从入门到实践》
前言 Electron 简介 Electron 是由 GitHub 开发的一个开源框架,基于 Chromium 和 Node.js。 它允许开发者使用 Web 技术(HTML、CSS、JavaScript)构建跨平台的桌面应用程序。 Electron 的优势 跨平台:支持 Windows、macOS 和 Linux…...
通达信软件+条件选股+code
在通达信软件中,你的选股公式需要放在 "公式管理器" 的 "条件选股公式" 分类中。以下是详细操作步骤: 一、打开公式管理器 打开通达信软件,按快捷键 Ctrl + F (或点击顶部菜单栏:"公式" → "公式管理器") 二、创建新公式 选择分…...
【2025】基于springboot+vue的汽车销售试驾平台(源码、万字文档、图文修改、调试答疑)
基于 Spring Boot Vue 的汽车销售试驾平台通过整合前后端技术,实现了汽车销售和试驾预约的信息化和智能化。系统为管理员和用户提供了丰富的功能,提升了客户体验和销售效率,增强了数据分析能力,为汽车销售行业的发展提供了新的途…...
Spring Web MVC入门
一、什么是SpringMVC 首先,MVC是一种架构设计模式,也是一种思想,而SpringMVC是对MVC思想的具体实现,除此之外,SpringMVC还是一个Web框架。 总的来说,SpringMVC就是一个实现MVC模式的Web框架。 而MVC可以…...
5G核心网实训室搭建方案:轻量化部署与虚拟化实践
5G核心网实训室 随着5G技术的广泛应用,行业对于5G核心网人才的需求日益增长。高校、科研机构和企业纷纷建立5G实训室,以促进人才培养、技术创新和行业应用研究。IPLOOK凭借其在5G核心网领域的深厚积累,提供了一套高效、灵活的5G实训室搭建方…...
IMX6ULL学习整理篇——Linux驱动开发的基础2 老框架的一次实战:LED驱动
IMX6ULL学习整理篇——Linux驱动开发的基础2 老框架的一次实战:LED驱动 在上一篇博客中,我们实现了从0开始搭建的字符设备驱动框架,但是这个框架还是空中楼阁,没有应用,很难说明我们框架的正确性。这里,…...
网络空间安全(32)Kali MSF基本介绍
前言 Metasploit Framework(简称MSF)是一款功能强大的开源安全漏洞检测工具,被广泛应用于渗透测试中。它内置了数千个已知的软件漏洞,并持续更新以应对新兴的安全威胁。MSF不仅限于漏洞利用,还包括信息收集、漏洞探测和…...
零基础上手Python数据分析 (3):Python核心语法快速入门 (下) - 程序流程控制、函数与模块
写在前面 还记得上周我们学习的 Python 基本数据类型、运算符和变量吗? 掌握了这些基础知识,我们已经能够进行一些简单的数据操作了。 但是,在实际的数据分析工作中,仅仅掌握基本语法是远远不够的。 我们需要让程序能够 根据条件做出判断,重复执行某些操作,组织和复用代…...
C++【类和对象】(超详细!!!)
C【类和对象】 1.运算符重载2.赋值运算符重载3.日期类的实现 1.运算符重载 (1).C规定类类型运算符使用时,必须转换成调用运算符重载。 (2).运算符重载是具有特殊名字的函数,名字等于operator加需要使用的运算符,具有返回类型和参数列表及函数…...
Windows-PyQt5安装+PyCharm配置QtDesigner + QtUIC
个人环境 Windows 11 pycharm 2024.2 Anaconda2024.6python 3.9 1)先使用pip命令在线安装 1)pip install PyQt5 2)pip install PyQt5-tools2)配置环境变量 1:安装成功后可以在python的安装目录Lib\site-packahes目录下看到安装包。比如我的路径是E:\anaconda3…...
qq音乐 webpack 补环境
网址: aHR0cHM6Ly95LnFxLmNvbS9uL3J5cXEvcGxheWVy 1.接口分析 接口:cgi-bin/musics.fcg 参数:sign是加密的 2.代码分析 进入调用栈 先在send位置打上断点,页面刷新 往上一个栈找 可以看到上面就有一个关键词sign是从…...
【蓝桥杯】省赛:神奇闹钟
思路 python做这题很简单,灵活用datetime库即可 code import os import sys# 请在此输入您的代码 import datetimestart datetime.datetime(1970,1,1,0,0,0) for _ in range(int(input())):ls input().split()end datetime.datetime.strptime(ls[0]ls[1],&quo…...
计算机的结构形式
微机的机构形式 台式个人微机 最开始的微机(计算机)都是台式的,到目前为止仍是个人微机的主要形式。台式机按照电脑机箱的放置形式,分为卧式和立式两种。台式机需要放在桌面上或者留有专门放置机箱位置,他的主机、键…...
C语言【内存函数】详解
目录: 1. memcpy使用和模拟实现 2. memmove使用和模拟实现 3. memset函数的使用 4. memcmp函数的使用 以上函数均包含在一个头文件<string.h>里面 一、memcpy的使用和模拟实现。 memcpy函数介绍: 函数原型: void * memcpy ( void…...
软考网络安全专业
随着信息技术的迅猛发展,网络安全问题日益凸显,成为社会各界普遍关注的焦点。在这样的背景下,软考网络安全专业应运而生,为培养高素质的网络安全人才提供了有力支撑。本文将对软考网络安全专业进行深入剖析,探讨其在信…...
Altium Designer——CHIP类元器件PCB封装绘制
文章目录 PCB封装组成元素:焊盘的属性 SS34肖特基二极管SMA(DO-214AC)封装绘制资料:步骤:1.绘制焊盘:用到的快捷键:资料: 2.绘制丝印:用到的快捷键:资料: PCB封装组成元素…...
C++ unordered_map unordered_set 模拟实现
1. 关于unordered_map 和 unordered_set 区别于C的另外两个容器map和set,map和set的底层是红黑树;而unordered_map和unordered_set的底层是哈希 因为unordered_map和unordered_set的底层是哈希,因此他们存储的数据是没有顺序unordered…...
Java使用自定义类加载器实现插件动态加载
虚拟机类加载子系统 Java虚拟机的⼀个重要子系统,主要负责将类的字节码加载到JVM内存的⽅法区,并将其转换为JVM内部的数据结构。 一个类从被加载到虚拟机开始,一直到卸载出内存为止,会经历七个阶段:加载,…...
【初级篇】如何使用DeepSeek和Dify构建高效的企业级智能客服系统
在当今数字化时代,企业面临着日益增长的客户服务需求。使用Dify创建智能客服不仅能够提升客户体验,还能显著提高企业的运营效率。关于DIfy的安装部署,大家可以参考之前的文章: 【入门级篇】Dify安装+DeepSeek模型配置保姆级教程_mindie dify deepseek-CSDN博客 AI智能客服…...
Java开发之数据库应用:记一次医疗系统数据库迁移引发的异常:从MySQL到PostgreSQL的“dual“表陷阱与突围之路
记一次医疗系统数据库迁移引发的异常:从MySQL到PostgreSQL的"dual"表陷阱与突围之路 一、惊魂时刻:数据库切换引发的系统雪崩 某医疗影像系统在进行国产化改造过程中,将原MySQL数据库迁移至PostgreSQL。迁移完成后,系…...
Langchian构建代理
文章目录 概要ReAct 代理 ReAct 使用ReAct基本用法提示词模板内存使用迭代使用返回执行每一步情况限制输出行数设置运行超时时间 不使用代理下LLM如何结合工具案例案例2 概要 单靠语言模型无法采取行动 - 它们只输出文本。 LangChain 的一个重要用例是创建 代理。 代理是使用大…...
Vim软件使用技巧
目录 Demo Vim怎么看一个文件的行号,不用打开文件的前提下?进入文件后怎么跳转到某一行? 不打开文件查看行号(查看文件的方法) 方法1、使用命令行工具统计行数 方法2、通过vim的 - 参数查看文件信息 进入文件后跳转到指定行…...
SQL与NoSQL的区别
以下是SQL与NoSQL数据库的详细对比,涵盖核心特性、适用场景及技术选型建议: 一、核心区别对比 特性SQL(关系型数据库)NoSQL(非关系型数据库)数据模型基于表格,严格预定义模式(Schem…...
1191:流感传染--BFS
这里写目录标题 题目 解析代码BFS代码 题目 解析 在同一天对一个病原体进行处理时,如果直接更改数组,将直接影响到后续的遍历 方法一:那么我们可以定义一个数组用来存储坐标:vectoir<pair<int,int>>,遍历…...
gfortran编译器调试功能选项
在使用 gfortran 编译器进行调试时,以下选项可以帮助你更好地定位和解决问题: 1. 生成调试信息 -g:生成调试信息,供调试器(如 gdb)使用。-ggdb:生成更详细的调试信息,优化 gdb 的使…...
小程序配置
注册小程序账号和安装开发工具 参考文档:注册小程序账号和安装开发工具https://blog.csdn.net/aystl_gss/article/details/127878658 HBuilder新建项目 填写项目名称,选择UNI-APP,修改路径,点击创建 manifest.json 配置 需要分别…...