《Kubernetes部署篇:Ubuntu20.04基于containerd部署kubernetes1.24.12单master集群》
一、架构图
如下图所示:

二、环境信息
| 主机名 | K8S版本 | 系统版本 | 内核版本 | IP地址 | 备注 |
|---|---|---|---|---|---|
| k8s-master-62 | 1.24.12 | Ubuntu 20.04.5 LTS | 5.15.0-69-generic | 192.168.1.62 | master节点 |
| k8s-worker-63 | 1.24.12 | Ubuntu 20.04.5 LTS | 5.15.0-69-generic | 192.168.1.63 | worker节点 |
| k8s-worker-64 | 1.24.12 | Ubuntu 20.04.5 LTS | 5.15.0-69-generic | 192.168.1.64 | worker节点 |
三、安装和配置先决条件
3.1、主机名设置
说明:分别在对应的节点IP上设置主机名。
root@lolaage-virtual-machine:~# hostnamectl set-hostname k8s-master-62
root@lolaage-virtual-machine:~# hostnamectl set-hostname k8s-worker-63
root@lolaage-virtual-machine:~# hostnamectl set-hostname k8s-worker-64
3.2、配置主机hosts
说明:以下操作无论是master节点和worker节点均需要执行。
root@k8s-master-62:~# vim /etc/hosts
192.168.1.62 k8s-master-62
192.168.1.63 k8s-worker-63
192.168.1.64 k8s-worker-64
3.3、关闭防火墙
说明:以下操作无论是master节点和worker节点均需要执行。
root@k8s-master-62:~# ufw status
root@k8s-master-62:~# ufw disable
3.4、关闭selinux
说明:以下操作无论是master节点和worker节点均需要执行。
root@k8s-master-62:~# apt install selinux-utils
root@k8s-master-62:~# apt install policycoreutils
root@k8s-master-62:~# sed -i 's#SELINUX=permissive#SELINUX=disabled#g' /etc/selinux/config
root@k8s-master-62:~# sestatus -v
说明:如果selinux默认关闭则无需修改。
3.5、关闭swap分区
说明:以下操作无论是master节点和worker节点均需要执行。
root@k8s-master-62:~# swapoff -a
root@k8s-master-62:~# sed -i 's/^\/swapfile\(.*\)$/#\/swapfile \1/g' /etc/fstab
3.6、时间时区同步
说明:以下操作无论是master节点和worker节点均需要执行。
1、设置时区为Asia/Shanghai,如果已经是则请忽略
root@k8s-master-62:~# timedatectlLocal time: 五 2023-03-31 14:11:36 CSTUniversal time: 五 2023-03-31 06:11:36 UTCRTC time: 五 2023-03-31 06:11:36 Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes NTP service: active RTC in local TZ: no
2、使用chrony同步时间
root@k8s-master-62:~# apt install chrony -y
root@k8s-master-62:~# vim /etc/chrony/chrony.conf
server ntp.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst
#pool ntp.ubuntu.com iburst maxsources 4
#pool 0.ubuntu.pool.ntp.org iburst maxsources 1
#pool 1.ubuntu.pool.ntp.org iburst maxsources 1
#pool 2.ubuntu.pool.ntp.org iburst maxsources 2root@k8s-master-62:~# systemctl enable chronyd.service
root@k8s-master-62:~# systemctl restart chronyd.service
root@k8s-master-62:~# systemctl status chronyd.service
阿里云NTP服务器地址列表,状态检测如下所示:

然后就是chrony客户端上的一些常用命令:
#查看可用的时间同步源
chronyc sources -v#查看时间同步源的状态
chronyc sourcestats -v#对客户端系统时间进行强制同步
chronyc -a makestep
3.7、修改内核参数
说明:以下操作无论是master节点和worker节点均需要执行。
说明:有一些ipv4的流量不能走iptables链,因为linux内核的一个过滤器,每个流量都会经过他,然后再匹配是否可进入当前应用进程去处理,所以会导致流量丢失。配置k8s.conf文件,如下所示:
root@k8s-master-62:~# cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOFroot@k8s-master-62:~# modprobe overlay
root@k8s-master-62:~# modprobe br_netfilter# 设置所需的sysctl参数,参数在重新启动后保持不变
root@k8s-master-62:~# cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF# 应用sysctl参数而不重新启动
root@k8s-master-62:~# sysctl --system
3.8、启用IPVS模式
说明:以下操作无论是master节点和worker节点均需要执行。
说明:ube-proxy开启ipvs的前提需要加载以下的内核模块
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4
注意:如果出现modprobe: FATAL: Module nf_conntrack_ipv4 not found in directory /lib/modules/5.15.0-69-generic错误,这是因为使用了高内核,当前内核版本为5.15.0-69-generic,在高版本内核已经把nf_conntrack_ipv4替换为nf_conntrack了。
# 1、安装ipvs
root@k8s-master-62:~# apt -y install ipvsadm ipset sysstat conntrack# 2、加载内核模块脚本
root@k8s-master-62:~# cat > /etc/profile.d/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
chmod 755 /etc/profile.d/ipvs.modules#3、执行加载模块脚本
bash /etc/profile.d/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
四、安装containerd
说明:以下操作无论是master节点和worker节点均需要执行。
kubernetes 1.24.x以后版本默认CRI为containerd,cri称之为容器运行时插件。
方式一、二进制安装
方式二、apt工具安装
1、安装软件包
root@k8s-master-62:~# apt install containerd -y
2、生成默认配置文件
root@k8s-master-62:~# mkdir -p /etc/containerd&& containerd config default > /etc/containerd/config.toml
3、配置systemd cgroup驱动
root@k8s-master-62:~# sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml
4、重载沙箱(pause)镜像
root@k8s-master-62:~# sed -i 's#sandbox_image = "registry.k8s.io/pause:3.6"#sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7"#g' /etc/containerd/config.toml
5、重启containerd服务并设置开机自启
root@k8s-master-62:~# systemctl restart containerd && systemctl enable containerd
说明:由于网络问题,无法下载国外的K8S镜像,所以这里使用阿里云的镜像仓库地址registry.cn-hangzhou.aliyuncs.com/google_containers代替。如果你有阿里云的账号,可以对 containerd配置镜像加速地址来实现快速下载镜像。
五、安装kubelet、kubeadm和kubectl
说明:以下操作无论是master节点和worker节点均需要执行。
1、安装使用Kubernetes apt仓库所需要的包
root@k8s-master-62:~# apt-get install -y apt-transport-https ca-certificates curl
2、编辑镜像源文件,加入阿里云k8s镜像源配置
root@k8s-master-62:~# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
3、编辑镜像源文件,加入阿里云k8s镜像源配置
root@k8s-master-62:~# curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add
4、更新源
root@k8s-master-62:~# apt-get update
5、安装指定版本kubeadm、kubelet、kubectl
root@k8s-master-62:~# apt-get install -y kubelet=1.24.12-00 kubeadm=1.24.12-00 kubectl=1.24.12-00
六、k8s镜像下载
说明:以下操作无论是master节点和worker节点均需要执行。
1、查看需要下载的镜像
registry.k8s.io/kube-apiserver:v1.24.12
registry.k8s.io/kube-controller-manager:v1.24.12
registry.k8s.io/kube-scheduler:v1.24.12
registry.k8s.io/kube-proxy:v1.24.12
registry.k8s.io/pause:3.7
registry.k8s.io/etcd:3.5.6-0
registry.k8s.io/coredns/coredns:v1.8.6
2、下载相关镜像
#!/bin/bash
k8s_version=v1.24.12
pause_version=3.7
etcd_version=3.5.6-0
coredns_version=v1.8.6
registry_address=registry.cn-hangzhou.aliyuncs.com/google_containers
ctr image pull --all-platforms ${registry_address}/kube-apiserver:${k8s_version}
ctr image pull --all-platforms ${registry_address}/kube-controller-manager:${k8s_version}
ctr image pull --all-platforms ${registry_address}/kube-scheduler:${k8s_version}
ctr image pull --all-platforms ${registry_address}/kube-proxy:${k8s_version}
ctr image pull --all-platforms ${registry_address}/pause:${pause_version}
ctr image pull --all-platforms ${registry_address}/etcd:${etcd_version}
ctr image pull --all-platforms ${registry_address}/coredns:${coredns_version}
3、将镜像并打包成tar.gz格式
#!/bin/bash
k8s_version=v1.24.12
pause_version=3.7
etcd_version=3.5.6-0
coredns_version=v1.8.6
registry_address=registry.cn-hangzhou.aliyuncs.com/google_containers
ctr image export --all-platforms kube-apiserver-${k8s_version}.tar.gz ${registry_address}/kube-apiserver:${k8s_version}
ctr image export --all-platforms kube-controller-manager-${k8s_version}.tar.gz ${registry_address}/kube-controller-manager:${k8s_version}
ctr image export --all-platforms kube-scheduler-${k8s_version}.tar.gz \${registry_address}/kube-scheduler:${k8s_version}
ctr image export --all-platforms kube-proxy-${k8s_version}.tar.gz ${registry_address}/kube-proxy:${k8s_version}
ctr image export --all-platforms pause-${pause_version}.tar.gz ${registry_address}/pause:${pause_version}
ctr image export --all-platforms etcd-${etcd_version}.tar.gz ${registry_address}/etcd:${etcd_version}
ctr image export --all-platforms coredns-${coredns_version}.tar.gz ${registry_address}/coredns:${coredns_version}
说明:由于网络问题,无法访问registry.k8s.io镜像仓库地址,这里使用国内阿里云的镜像仓库来下载k8s镜像。如果你的是专网环境,请找一台能访问阿里云镜像仓库的服务器下载然后打包成tar.gz格式,上传到要部署的专网服务器,通过ctr image import命令导入镜像即可。
七、calico镜像及yml文件下载
calico 3.25版本对应K8S版本,如下图所示:
1、支持系统
RedHat Linux 7
CentOS 7
CoreOS Container Linux stable
Ubuntu 16.04
Debian 82、支持k8s版本
v1.23
v1.24
v1.25
v1.26
1、calico.yml文件下载
说明:以下操作只需要在master节点执行。
root@k8s-master-62:~# wget https://docs.tigera.io/archive/v3.25/manifests/calico.yaml
root@k8s-master-62:~# grep "image:" calico.yaml image: docker.io/calico/cni:v3.25.0image: docker.io/calico/cni:v3.25.0image: docker.io/calico/node:v3.25.0image: docker.io/calico/node:v3.25.0image: docker.io/calico/kube-controllers:v3.25.0
2、calico相关镜像下载
说明:以下操作无论是master节点和worker节点均需要执行。
#!/bin/bash
calico_version=v3.25.0
ctr image pull --all-platforms docker.io/calico/cni:${calico_version}
ctr image pull --all-platforms docker.io/calico/node:${calico_version}
ctr image pull --all-platforms docker.io/calico/kube-controllers:${calico_version}
ctr image export --all-platforms cni-${calico_version}.tar.gz \docker.io/calico/cni:${calico_version}
ctr image export --all-platforms node-${calico_version}.tar.gz \docker.io/calico/node:${calico_version}
ctr image export --all-platforms kube-controllers-${calico_version}.tar.gz \docker.io/calico/kube-controllers:${calico_version}
七、使用kubeadm init初始化集群
说明:以下操作仅在master节点执行。
1、生成默认kubeadm初始化config文件
root@k8s-master-62:~# kubeadm config print init-defaults > kubeadm.yaml
2、修改kubeadm默认config文件
root@k8s-master-92:~# vim kubeadm.yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
controlPlaneEndpoint: "192.168.1.92:6443"
apiServer:extraArgs:service-node-port-range: 30000-36000
imageRepository: "registry.cn-hangzhou.aliyuncs.com/google_containers"
kubernetesVersion: 1.24.12
networking:dnsDomain: cluster.localpodSubnet: 10.48.0.0/16serviceSubnet: 10.96.0.0/16
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
3、使用kubeadm init初始化集群
root@k8s-master-62:~# kubeadm init --config=kubeadm.yaml
如下图所示:

4、对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理
root@k8s-master-62:~# mkdir -p $HOME/.kube
root@k8s-master-62:~# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
root@k8s-master-62:~# chown $(id -u):$(id -g) $HOME/.kube/config
root@k8s-master-62:~# export KUBECONFIG=/etc/kubernetes/admin.conf
root@k8s-master-62:~# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
root@k8s-master-62:~# source /etc/profile
5、安装网络插件Calico
root@k8s-master-62:~# kubectl apply -f calico.yam
如下图所示:

6、设置kubelet开机自启
root@k8s-master-62:~# systemctl enable kubelet
八、将worker节点加入k8s集群
说明:以下操作仅在worker节点执行。
1、将worker节点加入k8s集群
#注意:kubeamd join命令的token只有24h,24h就过期,需要执行kubeadm token create --print-join-command重新生成。
root@k8s-worker-63:~# kubeadm join 192.168.1.62:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:4dc96a7ecd538256dd5116b8c0f7a1155e52874532a1e10f3c7d02a15922d0a9
如下图所示:

2、设置kubelet开机自启
root@k8s-master-62:~# systemctl enable kubelet
九、k8s集群测试
1、查看集群节点状态
root@k8s-master-62:~# kubectl get nodes
root@k8s-master-62:~# kubectl get cs
root@k8s-master-62:~# kubectl get pods -A
root@k8s-master-62:~# kubectl get svc -A
如下图所示:

2、验证k8s DNS是否可用和是否可以正常访问网络
root@k8s-master-62:~# kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh
If you don't see a command prompt, try pressing enter.
/ # nslookup kubernetes.default
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.localName: kubernetes.default
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
/ # ping www.baidu.com
PING www.baidu.com (14.119.104.254): 56 data bytes
64 bytes from 14.119.104.254: seq=0 ttl=53 time=7.779 ms
64 bytes from 14.119.104.254: seq=1 ttl=53 time=8.404 ms
如下图所示:

总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:企业级K8s集群运维实战
相关文章:
《Kubernetes部署篇:Ubuntu20.04基于containerd部署kubernetes1.24.12单master集群》
一、架构图 如下图所示: 二、环境信息 主机名K8S版本系统版本内核版本IP地址备注k8s-master-621.24.12Ubuntu 20.04.5 LTS5.15.0-69-generic192.168.1.62master节点k8s-worker-631.24.12Ubuntu 20.04.5 LTS5.15.0-69-generic192.168.1.63worker节点k8s-worker-641…...
MAZDA CX-50没现车怎么办?赶紧去VR看车啊!
爱车一族往往都有过这样的经历:听说某家品牌出了一款心仪的新车,于是一直心心念念想要先睹为快。然而这时候问题就来了:新车从发布到量产上市往往要经历一段过程。没有现车的日子里,就算每天去4S店蹲守也看不到新车。那种心里痒痒…...
结构体全解,适合初学者的一条龙深度讲解(附手绘图详解)
我们知道,C语言是允许我们自己来创造类型的,这些类型就叫做——自定义类型。 自定义类型又包括结构体类型,联合体类型还有枚举类型。 今天的文章,我们就着重讲解这其中的结构体类型。 目录 结构体的声明 1.1结构的基础知识 …...
什么是SD-WAN技术?企业网络优化的利器!
现今,企业网络架构已成为其发展不可或缺的组成部分。针对网络性能优化方面,SD-WAN是一种值得深思熟虑的选择,在企业网络中应用SD-WAN技术能够带来多重好处。 什么是SD-WAN技术以及它是如何工作的? SD-WAN是软件定义的广域网&…...
JAVA练习106- 生命游戏
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、题目-生命游戏 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示:这里可以添加本文要记录的大概内容: 4 月12日练习…...
【案例教程】基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作实践技术
【原文链接】: 基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作实践技术https://mp.weixin.qq.com/s?__bizMzU5NTkyMzcxNw&mid2247537049&idx3&sn31ef342c4808aed6fee6ac108b899a33&chksmfe6897f3c91f1ee5c4fa8e4eeea34…...
php7类型约束,严格模式
在PHP7之前,函数和类方法不需要声明变量类型 ,任何数据都可以被传递和返回,导致几乎大部分的调用操作都要判断返回的数据类型是否合格。 为了解决这个问题,PHP7引入了类型声明。 目前有两类变量可以声明类型: 形参&a…...
2023-04-11 无向图的匹配问题
无向图的匹配问题 之所以把无向图的这个匹配问题放到最后讲是因为匹配问题借鉴了有向图中一些算法的思想 1 最大匹配和完美匹配 二分图回顾 二分图:把一个图中的所有顶点分成两部分,如果每条边的两端分别属于不同部分,则这个图是二分图。更多…...
国家出手管人工智能AI了
我是卢松松,点点上面的头像,欢迎关注我哦! 全球都在封杀AI,国家也出手了,人工智能AI的强监管来了!这次反应速度算是很快了。国家出手,AI必须管。 国家网信办拟针对生成式人工智能服务出台管理办法&#…...
day24—选择题
文章目录1.将N条长度均为M的有序链表进行合并,合并以后的链表也保持有序,时间复杂度为(A)2.已知某个哈希表的n个关键字具有相同的哈希值,如果使用二次探测再散列法将这n个关键字存入哈希表,至少要进行&…...
自投递简历以来的第一次面试
投完简历之后HR小姐姐接着就安排了面试,原定时间是今天下午六点,我五点五十进的会议,结果等到六点二十(真的有点不耐烦了说实话)面试官打电话过来了说网络不是很好,所以改成电话面试了。 1、session信息保…...
【C++11】新特性 - 右值引用详解
文章目录STD容器使用右值引用场景移动语义在容器中的使用主要体现在两个方面:移动构造函数和移动赋值运算符。移动语义只对右值有效,对左值无效原因STD容器使用右值引用场景 移动语义在容器中的使用主要体现在两个方面:移动构造函数和移动赋…...
C++学习笔记
C学习笔记函数一般有返回值,构造函数有没有返回值?有返回值,返回一个对象,确定所以没写;在头文件中,防卫式声明,#ifndef…#define … #endif;pass by value或者 reference,传值是整包…...
项目1实现login登录功能方案设计第三版
需求优化点:MySQL表常用功能模块实现方案index页面home页面需求 实现一个登录功能 实现的功能 注册(邮箱注册)登录(邮箱密码)重置密码查看操作记录(登录, 注册, 重置密码, 登出. 都算操作)登出在第2版的基础上进行优化:\ 优化点: VerificationCode(验证码储存库): 增加时间字段…...
Node【七】初识Express框架
文章目录🌟前言🌟Express框架🌟1.什么是框架🌟2.express安装🌟3.创建web服务基本遵循之前的四个步骤:🌟4.路由🌟 由 :请求方式请求路径(1)get发送…...
Android 高通Camera2 Camera Device Close
1、很多人看到这个日志第一感觉可能觉得哪里没有合理释放,于是带着这个思路去进行百度探索 2、一开始我去寻找 ImageReader.OnImageAvailableListener 这个问题 var afterBitmap: Bitmap? null/**监听拍照的图片 */private val imageAvailableListener ImageRead…...
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:1~5
原文:Mobile Deep Learning with TensorFlow Lite, ML Kit and Flutter 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的…...
4、浅谈Makefile文件及其简单的使用知识
文章目录1、什么是Makefile?(1)makefile关系到了整个工程的编译规则。(2)makefile带来的好处就是——“自动化编译”(3)make是一个命令工具,是一个解释makefile中指令的命令工具2、为…...
5G/V2X赛道「重启」
在提升高阶智能驾驶安全性和感知冗余能力的道路上,除了激光雷达、高精度地图及定位,还有一项技术可能即将掀起一场新的风暴。 就在今年3月,作为全球通信领域的年度风向标 — 2023世界移动通信大会(MWC)上,…...
pytorch进阶学习(四):使用不同分类模型进行数据训练(alexnet、resnet、vgg等)
课程资源:5、帮各位写好了十多个分类模型,直接运行即可【小学生都会的Pytorch】_哔哩哔哩_bilibili 目录 一、项目介绍 1. 数据集准备 2. 运行CreateDataset.py 3. 运行TrainModal.py 4. 如何切换显卡型号 二、代码 1. CreateDataset.py 2.Train…...
农业气象监测系统—实时感知・远程管控・智能预警
在农业现代化向纵深推进的当下,气象数据已成为农业生产的 “核心指挥棒”。烟台中盾信息科技有限公司(下称 “烟台中盾科技”)紧扣农业农村发展需求,以物联网、大数据技术为基石,打造农业气象监测系统,构建…...
目标检测实战:从VOC XML到YOLO格式的自动化数据流水线
1. 为什么需要VOC转YOLO格式 在目标检测任务中,数据格式的统一性直接影响着模型训练的效率。VOC(PASCAL VOC)和YOLO是两种最常见的标注格式,但它们的存储方式截然不同。VOC采用XML文件记录目标的类别和边界框坐标,而YO…...
墨语灵犀在互联网产品设计中的应用:用户需求分析与PRD生成
墨语灵犀在互联网产品设计中的应用:用户需求分析与PRD生成 每次产品评审会前,你是不是也经历过这样的夜晚?面对一堆零散的用户反馈、模糊的市场数据和脑子里盘旋的初步想法,要在短短几天内把它们梳理成一份逻辑清晰、结构完整的产…...
MAX30102传感器总是不准?Arduino避坑指南:从焊接绝缘到手指摆放的5个关键细节
MAX30102传感器精度优化全攻略:从硬件调试到算法校准的完整解决方案 MAX30102作为一款高集成度生物传感器,在心率、血氧监测领域应用广泛,但许多开发者在Arduino平台上使用时常遇到数据不稳定、测量偏差大的问题。本文将系统性地剖析影响测量…...
3分钟打造macOS级桌面体验:开源光标主题全攻略
3分钟打造macOS级桌面体验:开源光标主题全攻略 【免费下载链接】apple_cursor Free & Open source macOS Cursors. 项目地址: https://gitcode.com/gh_mirrors/ap/apple_cursor 你知道吗?每天在电脑前工作8小时,你的鼠标指针会出现…...
Python 字典遍历全攻略:5 种常用方法 + 性能对比 + 实战优化技巧
在 Python 开发中,字典(dict) 是最常用的数据结构之一,以键值对形式存储数据,具备查询快、易操作的特点。而字典的遍历是日常开发中高频操作 —— 从简单的数据读取,到大规模数据处理、接口返回值解析&…...
STM32模拟Linux内核自动初始化机制实现
STM32模拟Linux内核自动初始化机制实现1. 项目概述1.1 技术背景在传统嵌入式开发中,程序通常按照顺序逻辑执行,当系统复杂度增加时会导致代码臃肿、模块耦合紧密。Linux内核通过initcall机制实现了模块化初始化,本项目在STM32平台上模拟实现了…...
使用Dependency Check命令行工具高效检测Java项目中的安全漏洞
1. 为什么Java开发者需要关注依赖库安全? 如果你是一名Java开发者,可能经常遇到这样的情况:项目运行得好好的,突然某天系统被入侵了,排查半天才发现是某个第三方库存在安全漏洞。这种情况在现实开发中并不少见…...
保姆级教程:用命令行实时监控瑞芯微RK3588的CPU/GPU/NPU负载与温度
嵌入式开发实战:构建RK3588芯片全维度性能监控系统 在边缘计算和AI推理场景中,RK3588作为一款高性能SoC,其复杂的多核架构(包括6核CPU、Mali-G610 GPU和6TOPS NPU)对系统监控提出了更高要求。本文将手把手教你搭建一个…...
终极指南:如何在Foobar2000中安装和配置ESLyric逐字歌词源
终极指南:如何在Foobar2000中安装和配置ESLyric逐字歌词源 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 想要在Foobar2000中享受精准的逐字…...
