Kubeadm快速安装 Kubernetes集群
1. Kubernetes简介
Kubernetes(k8s)是谷歌开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它具有以下特点:
- 开源
- 容器化
- 自动部署
- 扩展
- 高可用
2. Kubernetes架构
Kubernetes遵循主从式架构设计,主要分为工作节点(Node)组件和控制平面组件。
2.1 控制平面组件
- Kubernetes Master:集群的主要控制单元,用于管理工作负载并指导整个系统的通信。
- Kube-APIServer:提供集群网关,是整个集群的控制中枢。
- Scheduler:负责资源调度,将Pod调度到对应的主机上。
- Controller Manager:负责维护集群的状态,如故障检测、内存垃圾回收等。
- etcd:用于可靠的存储集群的配置数据,是一种持久性、轻量型、分布式的键值数据存储组件。
2.2 工作节点组件
- Kubelet:在Node节点上运行,负责维护Pod的生命周期。
- Kube-Proxy:负责为服务提供集群内部的服务发现和应用的负载均衡。
- 容器运行时:如Docker,负责镜像管理和Pod和容器的真正运行。
3. 为什么需要Kubernetes
随着容器化项目的增多,管理容器变得越来越复杂,Kubernetes提供了以下优势:
- 自动化部署和回滚
- 扩缩容
- 服务发现和负载均衡
- 隔离环境
- 统一配置管理
4. Kubeadm快速安装Kubernetes集群
Kubeadm是Kubernetes官方提供的集群安装工具,可以快速安装和初始化Kubernetes集群。
1.实验环境
| 主机名 | IP地址 | 操作系统 | 主要软件 |
| k8s-master | 192.168.10.101 | CentOS 7.9 | Docker CE, Kube-apiserver, Kube-controllermanager, Kubescheduler, Kubelet ,Etcd, Kube-proxy |
| k8s-node01 | 192.168.10.102 | CentOS 7.9 | Docker CE, Kubectl, Kube-proxy, Calico |
| k8s-node02 | 192.168.10.103 | CentOS 7.9 | Docker CE, Kubectl, Kube-proxy Calico |
2.基础环境准备(三台主机都需要执行)
升级内核
# 删除现有的yum仓库配置文件
rm -rf /etc/yum.repos.d/*# 添加CentOS Base仓库
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo# 添加EPEL仓库
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo# 清除yum缓存
yum clean all# 更新系统
yum -y update# 升级系统
yum -y upgrade# 导入elrepo的GPG密钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org# 安装elrepo仓库
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm# 启用elrepo仓库并安装最新的Linux内核
yum --enablerepo=elrepo-kernel install -y kernel-ml-devel kernel-ml# 设置默认内核启动顺序
grub2-set-default 0# 重启系统
reboot
3:部署docker环境(三台主机都需要)
可以去看这个文章01 Docker概念和部署-CSDN博客
https://blog.csdn.net/qq_51678989/article/details/142024581?spm=1001.2014.3001.5501
4:部署Kubernetes集群
(1)配置三台主机的主机名
主机一
hostnamectl set-hostname k8s-master
bash
主机二
hostnamectl set-hostname k8s-node01
bash
主机三
hostnamectl set-hostname k8s-node02
bash
(2) 在三台主机上绑定hosts
cat <<EOF>>/etc/hosts
192.168.10.101 k8s-master
192.168.10.102 k8s-node01
192.168.10.103 k8s-node02
EOF
(3) 关闭交换分区
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
(4) 在三台主机上安装常用软件
yum -y install vim wget net-tools lrzsz
(5) 配置kubarnetes的YUM源三台主机都要配置
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpgrrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.al
EOF
(6)安装kubelet,kubeadm,kubectl
yum -y install kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
(8)生产初始化配置文件(只在mater节点修改)
[root@k8s-master ~]# kubeadm config print init-defaults > init-config.yaml
[root@k8s-master ~]# vim init-config.yaml apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 192.168.10.101 //端口bindPort: 6443
nodeRegistration:criSocket: /var/run/dockershim.sockimagePullPolicy: IfNotPresentname: k8s-master //名字taints: null
---
apiServer:timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:local:dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.23.0
networking:dnsDomain: cluster.localserviceSubnet: 10.96.0.0/12podSubnet: 10.244.0.0/16 //增加访问地址
scheduler: {}
(9)导入镜像
链接: 百度网盘 请输入提取码 提取码: rmgq 复制这段内容后打开百度网盘手机App,操作更方便哦
(10)初始化
[root@k8s-master ~]# kubeadm init --config=init-config.yaml
kubeadm join 192.168.10.101:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:ec16f88acf12c7186e5fa237ab03615b3b2bedd212080aee087ddea1933b6942
看见这个算初始化成功
(11) 让其他节点加入
node1
[root@k8s-node01 ~]# kubeadm join 192.168.10.101:6443 --token abcdef.0123456789abcdef \
> --discovery-token-ca-cert-hash sha256:ec16f88acf12c7186e5fa237ab03615b3b2bedd212080aee087ddea1933b6942node2
[root@k8s-node02 ~]# kubeadm join 192.168.10.101:6443 --token abcdef.0123456789abcdef \
> --discovery-token-ca-cert-hash sha256:ec16f88acf12c7186e5fa237ab03615b3b2bedd212080aee087ddea1933b6942
(12)配置环境
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8s-master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
(13)导入calico.yaml包
已经下载好的
链接: 百度网盘 请输入提取码 提取码: 7a67 复制这段内容后打开百度网盘手机App,操作更方便哦
官网获取
wget https://docs.projectcalico.org/manifests/calico.yaml
(14) 部署 Calico 网络
[root@k8s-master ~]# kubectl apply -f calico.yaml
[root@k8s-master ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-64cc74d646-l2d94 1/1 Running 0 28s
kube-system calico-node-697r4 1/1 Running 0 28s
kube-system calico-node-cl4n9 1/1 Running 0 28s
kube-system calico-node-xzgjr 1/1 Running 0 28s
kube-system coredns-6d8c4cb4d-9fsq7 1/1 Running 0 11m
kube-system coredns-6d8c4cb4d-l8wr4 1/1 Running 0 11m
kube-system etcd-k8s-master 1/1 Running 0 11m
kube-system kube-apiserver-k8s-master 1/1 Running 0 11m
kube-system kube-controller-manager-k8s-master 1/1 Running 0 11m
kube-system kube-proxy-97rxx 1/1 Running 0 9m24s
kube-system kube-proxy-kd5fz 1/1 Running 0 10m
kube-system kube-proxy-t75pz 1/1 Running 0 11m
kube-system kube-scheduler-k8s-master 1/1 Running 0 11m
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 12m v1.23.0
k8s-node01 Ready <none> 11m v1.23.0
k8s-node02 Ready <none> 9m53s v1.23.0
[root@k8s-master ~]#
(15)查看利用情况
[root@k8s-master ~]# kubectl top node
error: Metrics API not available
#发现没有
(16)获取Kubernetes 的命令行工具包
链接: 百度网盘 请输入提取码 提取码: mdwc 复制这段内容后打开百度网盘手机App,操作更方便哦
(17)查询利用率
[root@k8s-master ~]# kubectl create -f components.yaml
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
[root@k8s-master ~]# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-master 118m 5% 1443Mi 38%
k8s-node01 65m 3% 799Mi 21%
k8s-node02 78m 3% 1988Mi 52%
[root@k8s-master ~]#
(17)图形化界面
该链接提供了图形化
链接: 百度网盘 请输入提取码 提取码: vcih 复制这段内容后打开百度网盘手机App,操作更方便哦
[root@k8s-master ~]# mkdir -p /opt/k8s/dashboard //创建一个目录
[root@k8s-master ~]# cd /opt/k8s/dashboard/
[root@k8s-master dashboard]# rz -E //把链接的包拉出来
rz waiting to receive.
[root@k8s-master dashboard]# kubectl create -f .
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
[root@k8s-master ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-64cc74d646-7npbs 1/1 Running 0 4m2s
kube-system calico-node-7z94t 1/1 Running 0 4m2s
kube-system calico-node-b65zv 1/1 Running 0 4m2s
kube-system calico-node-hsgvn 1/1 Running 0 4m2s
kube-system coredns-6d8c4cb4d-nhttz 1/1 Running 0 7m13s
kube-system coredns-6d8c4cb4d-twbxs 1/1 Running 0 7m13s
kube-system etcd-k8s-master 1/1 Running 0 7m28s
kube-system kube-apiserver-k8s-master 1/1 Running 0 7m28s
kube-system kube-controller-manager-k8s-master 1/1 Running 0 7m28s
kube-system kube-proxy-8qnjf 1/1 Running 0 7m13s
kube-system kube-proxy-m8426 1/1 Running 0 5m41s
kube-system kube-proxy-xjb6k 1/1 Running 0 5m45s
kube-system kube-scheduler-k8s-master 1/1 Running 0 7m28s
kube-system metrics-server-66bdc46d86-nht4z 1/1 Running 0 3m21s
kubernetes-dashboard dashboard-metrics-scraper-7fcdff5f4c-mnnrl 1/1 Running 0 2m21s
kubernetes-dashboard kubernetes-dashboard-df74f58f9-zjnj8 1/1 Running 0 2m21s
(18)获取token
[root@k8s-master ~]# kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard //修改一下端口改成31245
[root@k8s-master ~]# kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.103.197.81 <none> 8000/TCP 7m5s
kubernetes-dashboard NodePort 10.110.1.207 <none> 443:31245/TCP 7m5s[root@k8s-master ~]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin -user | awk '{print $1}')token: eyJhbGciOiJSUzI1NiIsImtpZCI6IjlmeExvcUp6ZFBZaUQwZXE4cXQ3U3JOZzcwU2RfVFlDVWZXN3lzWVVPMzgifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJ0dGwtY29udHJvbGxlci10b2tlbi13eDI0OCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJ0dGwtY29udHJvbGxlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjcwODQ4ZGU2LTY1NjMtNGMwZi1iYWNhLWRlN2JmMzU4N2Q2ZCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTp0dGwtY29udHJvbGxlciJ9.akwFAPPwWS18Jb7NtyL9C7mXl6gHJWEzT_EqyND5BFJdGnP56kXJKO68MHy0KEoJboAtQE-vVlFQTBkFsNPEYJ2L-AQ6UjQObgiMPUfFTuWAu2KsqjAwQDv-THT72KTwx0N0F9KRpWZ9OHbvTsHztMrGfWMrZAHRBKEv6IBPAsL0C0OQujqE3Tx6Z7Fno8iHt5cYaanwsZV9DXw5-6WVhejMUjQMGcAMGIjiLRLqhgjC3LRguhPyakt0bgp57oa77FOK71T_b3D1kDtAOqjghbji4BagloA48odsCFBHEzl6xv3UH9glQsf9cAFCkFHr9TRQ9IYx8jIC4L7DjPZI2g
--test-type --ignore-certificate-errors在谷歌属性添加

复制token输入浏览器中

相关文章:
Kubeadm快速安装 Kubernetes集群
1. Kubernetes简介 Kubernetes(k8s)是谷歌开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它具有以下特点: 开源容器化自动部署扩展高可用 2. Kubernetes架构 Kubernetes遵循主从式架构设计,主要分…...
OpenJudge | 八皇后问题
总时间限制: 10000ms 内存限制: 65536kB 描述 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。 输入 无输入。 输出 按给定顺序和格式输出所有八皇后问题的解(见Sample Output)。 样例输入 (null)样例输出 No. 1 …...
C#往压缩包Zip文件的文件追加数据
C#往压缩包Zip文件的文件追加数据 往一个已经压缩好的压缩包里追加数据,一般就有两种方式,一种是前面已经学习过的,就是追加一个新的文件, 另外一种就是往已经存在的文件追加数据。 往已经存在的文件追加数据,需要先找到文件索引。 在压缩包里声明的名称,与外面的文件路…...
局域网共享文件夹:您没有权限访问,请与网络管理员联系
局域网共享文件夹:您没有权限访问,请与网络管理员联系 win10 1909 专业版背景 我有两个电脑,还有两块外挂硬盘,较大的一块放在老电脑上,为了方便用垃圾百度网盘在里边下载东西,又不污染新电脑的环境。 如…...
科技修复记忆:轻松几步,旧照变清晰
在时间的长河中,旧照片承载着无数珍贵的记忆与故事。然而,随着岁月的流逝,这些照片往往变得模糊不清,色彩黯淡,令人惋惜。 幸运的是,随着科技的发展,我们有了多种方法来修复这些旧照片的画质&a…...
java -versionbash:/usr/lib/jvm/jdk1.8.0_162/bin/java:无法执行二进制文件:可执行文件格式错误
实验环境:Apple M1在VMwareFusion使用Utubun Jdk文件错误  尝试: 1、重新在网盘下载java1.8 2、在终端通过命令下载 3、确保 JDK 正确安装在系统中,可以通过 echo $JAVA_HOME 检查 JAVA_HOME 环境变量是否设置正确。 ࿿…...
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解
点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...
Django-cookie和session
文章目录 前言CookieSession 一、Django 中 Cookie二、Django 中 Session三.区别 前言 Cookie Cookie 是由服务器发送到用户浏览器的小文件,用于存储用户的相关信息。每次用户访问网站时,浏览器会将这些 cookie 发送回服务器 特点: 1. 数据存储在客户…...
前端进阶,使用Node.js做中间层,实现接口转发和服务器渲染
在Web开发中,Node.js经常被用作中间层(也称为后端或服务器端),用于处理各种任务,包括接口转发(API Gateway)、服务器渲染(Server-Side Rendering, SSR)等。下面我将分别解…...
iPhone 16系列:熟悉的味道,全新的体验
来看看iPhone 16和Plus这两个新成员,实话说,它们和之前曝光的样子几乎完全一致。下面我们就一起来细数一下这次的几大变化吧。 外观设计:焕然一新 首先,最显眼的变化就是后置镜头模组的布局调整为了垂直排列。这一改变使得整个背…...
改进拖放PDF转换为图片在转换为TXT文件的程序
前段时间我写了Python识别拖放的PDF文件再转成文本文件-CSDN博客 最近有2点更新,一是有一些pdf文件转换出来的图片是横的,这样也可以识别文字,但是可能会影响效果,另一个是发现有一些文字识别不出来,看了关于提高Padd…...
在 Flutter 开发中如何选择状态管理:Provider 和 GetX 比较
在 Flutter 开发中,状态管理是一个至关重要的部分。正确的状态管理方案能够提高应用的可维护性和可扩展性。在众多状态管理方案中,Provider 和 GetX 是两种非常流行的选择。本文将对这两者进行比较,并提供代码示例,以帮助开发者选…...
python中ocr图片文字识别样例(二)
一、说明 本次解决图片相关出现中文乱码问题,属于上篇文章的优化,前提条件依赖上篇文章的包,当然ocr的具体应用场景很多,根据自身需求进行调整 二、具体实现 2.1 代码实现: # -*- coding: utf-8 -*- import easyoc…...
2024 新手指南:轻松掌握 Win10 的录屏操作
之前为了节约成本我们公司都采用录制软件操作都方式来为异地的同事进行远程操作培训的。所以我们尝试了不少的录屏工具,这里我就分享下win10怎么录屏的操作过程。 1.福昕录屏大师 链接:www.foxitsoftware.cn/REC/ 这款录屏工具是初学者的理想之选&…...
无人机黑飞打击技术详解
随着无人机技术的普及,无人机“黑飞”(未经授权或违反规定的飞行)现象日益严重,对公共安全、隐私保护及重要设施安全构成了严重威胁。为有效应对这一挑战,各国政府和安全机构纷纷研发并部署了一系列无人机黑飞打击技术…...
GoFly快速开发框架/Go语言封装的图像相似性比较插件使用说明
说明 图像相似性搜索应用广泛、除了使用搜索引擎搜索类似图片外,像淘宝可以让顾客直接拍照搜索类似的商品信息、应用在商品购物上,也可以应用物体识别比如拍图识花等领域。还有在调研图片鉴权的方案,通过一张图片和图片库中的图片进行比对&a…...
【牛客】小白赛101-B--tb的字符串问题
题目传送门 思路:括号匹配板子 反思:我用了模拟打标记的方式但是还是wa了 ac代码 用了栈维护 当栈里面个数到达1个以上的时候就可以判断栈顶是否匹配然后重复出入栈操作 #include<bits/stdc.h> using namespace std; const int N1e63; string…...
企业专用智能云盘 | 帮助企业便捷管控企业文档 | 天锐绿盘云文档安全管理系统
由于当前多数企业内部的办公文件普遍散落于各员工电脑中,导致存在诸多潜在的文档使用风险。为优化团队协作效率,天 锐 绿盘是一款集文档统一管理、高效协同于一体的企业云盘,帮助企业解决文档管理中的诸多难题。 【地址:点击了解天…...
软件工程专业未来发展方向
1. 前端开发(Front-end Development) 简介: 前端开发者专注于网站和应用程序的用户界面和用户体验设计。他们使用HTML、CSS、JavaScript等基本技术,以及React、Angular、Vue.js等前端框架,来创建互动性强、响应迅速的…...
【204】C++的vector删除重复元素
有些场景下 vector 中会有重复元素,而业务要求 vector 中避免出现重复元素。 我的算法如下: 获取当前 vector 的元素数量,并保存到一个 int 类型变量中。开启一个外部循环,把 vector 从后向前循环,循环范围是最后一个…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
