《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…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
