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

实战Kubernetes之快速部署 K8s 集群 v1.28.0

文章目录

  • 一、前言
  • 二、主机准备
  • 三、系统配置
    • 3.1. 关闭防火墙及相关配置
    • 3.2. 修改主机名
    • 3.3. 主机名DNS解析
    • 3.4. 时间同步
    • 3.5. 配置网络
    • 3.6. 重启服务器
  • 四、安装软件
    • 4.1. 安装 Docker
    • 4.2. 安装 cri-dockerd
    • 4.3. 添加国内YUM源
    • 4.4. 安装 kubeadm、kubelet 和 kubectl
  • 五、Master 节点初始化 K8s
  • 六、Worker 节点加入 K8s 集群
  • 七、安装 K8s 网络插件
  • 八、小结

一、前言

K8s 集群部署有多种方式,kubeadm 是 K8s 官方提供的集群部署工具,这种方法最为常用,简单快速,适合初学者。本文就使用 kubeadm 搭建集群演示。

二、主机准备

本次我们搭建一套 3 个节点的 K8s 集群,服务器使用个某云厂商的 3 台服务器,配置不高,最小硬件配置:2 核 CPU、2G 内存、50G 硬盘,操作系统需要是 CentOS 7.6。服务器最好设置需要可以访问外网,有些镜像要从网上拉取。以下是我在本次演示中使用的服务器配置。

实例名主机名私网地址主机配置备注
s1k8s-master192.168.9.862核,2GiB,系统盘 40GiB控制节点
s2k8s-worker1192.168.14.1962核,2GiB,系统盘 40GiB工作节点
s3k8s-worker2192.168.8.782核,4GiB,系统盘 50GiB工作节点

控制台截图如下:
在这里插入图片描述

注意:这 3 台服务器需要在同一个内网环境,可以通过内网 IP 相互访问,在集群配置过程中会使用到内网 IP。如果要使用外网 IP 搭建集群,还需要单独配置虚拟网卡以及修改一些配置,可以参考网上相关文章。

三、系统配置

在所有 3 台主机上都完成以下准备工作,逐步执行以下命令。

3.1. 关闭防火墙及相关配置

关闭 Linux 操作系统的防火墙、安全服务和 swap 分区,如果有提示执行命令权限不够,可以切换到 root 用户或者在命令前增加 “sudo” 来提升执行命令的权限。

# 关闭和禁用防火墙
systemctl stop firewalld
systemctl disable firewalld# 关闭selinux,selinux 是 Linux 系统下的一个安全服务,需要关闭
setenforce 0  # 临时
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久# 关闭 Linux 的 swap 分区,提升 k8s 的性能
swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

3.2. 修改主机名

K8s 使用主机名进行节点的通信,所以需要按照表格中的主机名修改 3 台服务器的主机名。注意:K8s 要求主机名使用 “-” 或者 “.” 连接,不能使用下划线 “_”。

# 在 s1 这个机器上执行修改主机名命令
hostnamectl set-hostname k8s-master# 在s2 这个机器上执行修改主机名命令
hostnamectl set-hostname k8s-worker1# 在s3这个机器上执行修改主机名命令
hostnamectl set-hostname k8s-worker2

3.3. 主机名DNS解析

在每个服务器上都增加主机名和 IP 的对应关系,执行以下命令快速编辑 “/etc/hosts” 文件,增加解析配置。

 # 添加各个节点的解析,IP 地址需要替换为你自己服务器的内网 IP 地址。
cat >> /etc/hosts << EOF
192.168.9.86 k8s-master
192.168.14.196 k8s-worker1
192.168.8.78 k8s-worker2
EOF

3.4. 时间同步

K8s 要求集群中的所有服务器时间一致,使用 ntpdate(Network Time Protocol)从网络同步时间,执行以下命令安装 ntpdate,之后再执行同步命令。

# 安装ntp服务
yum install ntpdate -y# 安装完成后使用阿里云的时间服务同步时间 
ntpdate ntp1.aliyun.com

如果提示没有匹配到 ntpdate,则可以使用 wlnmp 的软件源安装 wntp。

rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
yum install wntp -y

3.5. 配置网络

为了让 K8s 能够转发网络流量,需要修改 iptables 的配置。执行以下命令快速编辑 “etc/sysctl.d/k8s.conf” 配置文件,增加 iptables 的配置。

# 修改 Linux 内核参数,添加网桥过滤和地址转发功能
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF# 使配置生效
sudo sysctl --system

3.6. 重启服务器

运行 “reboot” 命令,重启服务器,让以上配置生效。

reboot

四、安装软件

完成系统配置,我们继续在这 3 台主机上安装以下软件。

4.1. 安装 Docker

使用 Docker 作为运行容器的运行时组件,需要先安装 Docker。通过 wget 命令来下载 Docker 的安装包仓库,然后通过 yum 命令进行安装,安装完成之后再执行开启 Docker 服务命令。

# 通过 wget 命令获取 docker 软件仓库信息
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo# 安装 docker-ce
yum -y install docker-ce# 开启 docker 服务
systemctl enable docker && systemctl start docker

Docker 安装完成之后,配置阿里云提供的镜像库来加速镜像下载。

# 配置镜像下载加速器,国内使用阿里云镜像库会更快
cat > /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"}
}
EOF# 重启 docker 服务
systemctl restart docker

4.2. 安装 cri-dockerd

cri-dockerd 用于为 Docker 提供一个能够支持 K8s 容器运行时标准的工具,从而能够让 Docker 作为 K8s 容器引擎。通过 wget 下载 cri-dockerd 安装包,然后通过 rpm 命令进行安装。

# 通过 wget 命令获取 cri-dockerd软件
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.12/cri-dockerd-0.3.12-3.el7.x86_64.rpm# 通过 rpm 命令执行安装包
rpm -ivh cri-dockerd-0.3.12-3.el7.x86_64.rpm

如果官方地址下载太慢,可以使用本文提供的离线安装包(下载地址)。

安装完成后修改配置文件(/usr/lib/systemd/system/cri-docker.service),在 “ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd://” 这一行增加 “–pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9”。

# 打开 cri-docker.service 配置文件
vi /usr/lib/systemd/system/cri-docker.service# 修改对应的配置项
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

配置文件修改后,重新加载配置并开启 cri-dockerd 服务。

# 加载配置并开启服务
systemctl daemon-reload
systemctl enable cri-docker && systemctl start cri-docker

4.3. 添加国内YUM源

编辑 “/etc/yum.repos.d/kubernetes.repo” 配置文件,添加阿里云的镜像库。

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

注意:国内是无法访问 K8s 官方的镜像库,如果不增加YUM源配置,后续就无法安装相关工具。

4.4. 安装 kubeadm、kubelet 和 kubectl

所有K8S服务器上都需要安装 kubeadm、kubelet 和 kubectl 这三个工具。

  • kubeadm 用来初始化 K8s 集群;
  • kubelet 是每个节点的 K8s 管理员;
  • kubectl 是 K8s 的命令行交互工具。

由于版本更新比较快,这里指定安装的较新的版本1.28.0

# 指定了安装的版本是 1.28.0
yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0# 开机启动 kubelet 服务
systemctl enable kubelet

五、Master 节点初始化 K8s

所有准备工作都完成了,于可以进行 K8s 的初始化了,只需要在 Master 节点上执行以下初始化命令。

kubeadm init \--apiserver-advertise-address=192.168.9.86 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.28.0 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16 \--cri-socket=unix:///var/run/cri-dockerd.sock \--ignore-preflight-errors=all

注意:“apiserver-advertise-address” 参数需要替换成你的 Master 节点服务器的内网 IP。

相关参加解释:

  • apiserver-advertise-address:集群广播地址,用 master 节点的内网 IP。
  • image-repository:由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。
  • kubernetes-version: K8s 版本,与上面安装的软件版本一致。
  • service-cidr:集群 Service 网段。
  • pod-network-cidr:集群 Pod 网段。
  • cri-socket:指定 cri-socket 接口,我们这里使用 unix:///var/run/cri-dockerd.sock。

执行命令后耐心等待,直到安装完成,会出现以下内容。

[addons] Applied essential addon: kube-proxyYour Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/Then you can join any number of worker nodes by running the following on each as root:kubeadm join 192.168.9.86:6443 --token xxxxxx \--discovery-token-ca-cert-hash sha256:xxxxxx

其中,在以上返回结果中有 3 条命令需要立即执行,这是用来设置 kubectl 工具的管理员权限,执行之后就可以在 Master 节点上通过终端窗口使用 kubectl 命令。

# 在 Master 节点上执行以下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

在返回结果最后有 1 条 “kubeadm join” 命令,这个是用来加入工作节点的,需要在工作节点上执行。

六、Worker 节点加入 K8s 集群

K8s 初始化之后,就可以在其他 2 个工作节点上执行 “kubeadm join” 命令,因为我们使用了 cri-dockerd ,需要在命令加上 “–cri-socket=unix:///var/run/cri-dockerd.sock” 参数。

# 在两个工作节点上执行
kubeadm join 192.168.9.86:6443 --token xxxxxx \--discovery-token-ca-cert-hash sha256:xxxxxx \--cri-socket=unix:///var/run/cri-dockerd.sock

命令中 token 有效期为 24 小时,当 token 过期之后,执行 “kubeadm join” 命令就会报错。这时可以直接在 Master 节点上使用以下命令生成新的 token,然后再使用 “kubeadm join” 命令加入节点。

此时,我们的集群就部署成功了。你可以使用 “kubectl get node” 命令来查看集群节点状态。

[root@k8s-master ~]# kubectl get node
NAME           STATUS     ROLES           AGE   VERSION
k8s-master     NotReady   control-plane   84m   v1.28.0
k8s-worker1    NotReady   <none>          82m   v1.28.0
k8s-worker2    NotReady   <none>          47s   v1.28.0

注意到所有节点的状态都是 “NotReady”,这是由于集群还缺少网络插件,集群的内部网络还没有正常运作。

七、安装 K8s 网络插件

K8s 网络插件,也称为容器网络接口(CNI)插件,是实现 K8s 集群中容器间通信和网络连接的关键组件,否则 Pod 之间无法通信。Kubernetes 支持多种网络方案,这里我们使用 calico。

Calico 是通过执行一个 YAML 文件部署到 K8s 集群里的,所以我们首先需要通过 “wget” 命令下载这个 YAML 文件。

# 下载 Calico 插件部署文件
wget https://docs.projectcalico.org/manifests/calico.yaml

通过 vi 编辑器修改 “calico.yaml” 文件中的 “CALICO_IPV4POOL_CIDR” 参数,需要与前面 “kubeadm init” 命令中的 “–pod-network-cidr” 参数一样(10.244.0.0/16)。如果文件里的 “CALICO_IPV4POOL_CIDR” 参数前面有 “#”,表示被注释了,需要删除 “#”。

修改位置如下所示。(在 vi 中可以通过输入 “:set nu” 来查看行号,同时可以输入 “/CALICO_IPV4POOL_CIDR” 来快速定位到参数位置)

# 修改文件时注意格式对齐
4598 # The default IPv4 pool to create on startup if none exists. Pod IPs will be
4599 # chosen from this range. Changing this value after installation will have
4600 # no effect. This should fall within `--cluster-cidr`.
4601 - name: CALICO_IPV4POOL_CIDR
4602   value: "10.244.0.0/16"
4603 # Disable file logging so `kubectl logs` works.
4604 - name: CALICO_DISABLE_FILE_LOGGING
4605   value: "true"

最后,使用 “kubectl apply” 命令将 Calico 插件部署到集群里,部署 YAML 文件命令如下:

kubectl apply -f calico.yaml

Calico 部署会比较慢,大概等个几分钟,等待 Calico 部署完成后,再次通过命令 “kubectl get node” 查看节点状态,就可以看到所有节点已经准备就绪,此时集群正式搭建成功。

[root@k8s-master ~]# kubectl get node
NAME           STATUS   ROLES           AGE   VERSION
k8s-master     Ready    control-plane   12h   v1.28.0
k8s-worker1    Ready    <none>          12h   v1.28.0
k8s-worker2    Ready    <none>          10h   v1.28.0

注意:如果 Calico 无法安装成功,可能是由于 Calico 镜像无法拉取。本文提供了离线镜像包(下载地址),可以下载两个压缩文件,然后传输到集群中的所有 3 个节点上。

“calico-image-3.25.1.zip” 中是离线镜像文件,解压后在每个节点上执行导入命令。

ls *.tar |xargs -i docker load -i {}

“calico-yaml.zip” 中是部署文件,在 Master 节点上依次部署两个 YAML 文件。

# 先删除之前部署不成功的 Calico
kubectl delete -f calico.yaml# 依次部署两个 yaml 文件
kubectl apply -f tigera-operator.yaml --server-side
kubectl apply -f custom-resources.yaml

然后等待部署完成,就可以看到所有节点准备就绪。

八、小结

本文带你搭建了一套 3 台服务器的 K8s 集群。在搭建 K8s 集群的过程中,有几个方面主要注意:

  • 确保所有服务器的硬件和系统配置符合要求;
  • 在每个服务器安装了 Docker 和 cri-dockerd 作为容器引擎;
  • 安装 kubeadm、kubelet 和 kubectl 这三个工具。
  • 在 Master 节点上执行集群初始化,初始化完成后就可以加入工作节点。
  • 最后部署 Calico 网络插件,以确保集群内部的网络通信。

最后,你就成功搭建了一个 K8s 集群,

相关文章:

实战Kubernetes之快速部署 K8s 集群 v1.28.0

文章目录 一、前言二、主机准备三、系统配置3.1. 关闭防火墙及相关配置3.2. 修改主机名3.3. 主机名DNS解析3.4. 时间同步3.5. 配置网络3.6. 重启服务器 四、安装软件4.1. 安装 Docker4.2. 安装 cri-dockerd4.3. 添加国内YUM源4.4. 安装 kubeadm、kubelet 和 kubectl 五、Master…...

YOLO知识点总结:

分类&#xff1a; 即是将图像结构化为某一类别的信息&#xff0c;用事先确定好的类别(category)或实例ID来描述图片。这一任务是最简单、最基础的图像理解任务&#xff0c;也是深度学习模型最先取得突破和实现大规模应用的任务。其中&#xff0c;ImageNet是最权威的评测集&…...

合宙LuatOS AIR700 IPV6 TCP 客户端向NodeRed发送数据

为了验证 AIR700 IPV6 &#xff0c;特别新建向NodeRed Tcp发送的工程。 Air700发送TCP数据源码如下&#xff1a; --[[ IPv6客户端演示, 仅EC618系列支持, 例如Air780E/Air600E/Air780UG/Air700E ]]-- LuaTools需要PROJECT和VERSION这两个信息 PROJECT "IPV6_SendDate_N…...

git 如何生成sshkey公钥

打开git客户端 输入 ssh-keygen -t rsa -b 4096 -C "xxxxxxexample.com" 然后根据提示按enter 或者y 直到出现下图所示 打开 c盘的路径下的文件&#xff0c;/c/Users/18159/.ssh/id_rsa.pub 将id_rsa.pub中的公钥贴到git 网站上的SSH keys即可...

python从入门到精通:函数

目录 1、函数介绍 2、函数的定义 3、函数的传入参数 4、函数的返回值 5、函数说明文档 6、函数的嵌套调用 7、变量的作用域 1、函数介绍 函数是组织好的&#xff0c;可重复使用的&#xff0c;用来实现特定功能的代码段。 name "zhangsan"; length len(nam…...

【Android性能篇】如何分析 dumpsys meminfo 信息

一、dumpsys meminfo是什么 dumpsys meminfo 是一个用于分析Android设备内存使用情况的强大命令。 二、dumpsys meminfo的关键信息 要分析其输出信息&#xff0c;我们需要注意以下几个关键点&#xff1a; Total PSS by OOM adjustment&#xff1a;这个值表示每个进程的总比…...

c++进阶——继承的定义,复杂的菱形继承及菱形虚拟继承

目录 前言&#xff1a; 1.继承的概念及定义 1.1继承的概念 1.2 继承定义 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 5.继承与友元 6. 继承与静态成员 7.复杂的菱形继承及菱…...

计算机网络:DNS、子网掩码、网关

参考&#xff1a; https://blog.csdn.net/weixin_55255438/article/details/123074896 https://zhuanlan.zhihu.com/p/65226634 在计算机网络中&#xff0c;DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;、子网掩码&#xff08;Subnet Mask&#xff09;…...

程序员如何学习开源项目

程序员如何学习开源项目 豆包MarsCode使用豆包MarsCode学习开源项目步骤导入git上开源的项目 豆包MarsCode https://www.marscode.cn/home 使用豆包MarsCode学习开源项目 步骤 https://www.marscode.cn/dashboard 导入git上开源的项目 找到项目的README.md文件&#xff0c;使…...

探索数据结构:红黑树的分析与实现

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 红黑树的介绍 1.1. 红黑树的引入 我们前面学习了AVL树&#xff0c;…...

【设计模式】装饰器模式和适配模式

装饰器模式 装饰器模式能够很好的对已有功能进行拓展&#xff0c;这样不会更改原有的代码&#xff0c;对其他的业务产生影响&#xff0c;这方便我们在较少的改动下对软件功能进行拓展。 类似于 router 的前置守卫和后置守卫。 Function.prototype.before function (beforeFn)…...

Visual Studio VS 插件之 ReSharper

集成在VS2022上的ReSharper暂无找到汉化方式&#xff0c;如果有大神可以汉化&#xff0c;请指导下。 首先ReSharper 是IDE 下的插件 主要是基于C# 语句优化的这么一个插件。 使用ReSharper可以使开发效率大大提高&#xff0c;但是也是比较吃电脑的配置。所以说如果配置低的小…...

【二分查找】--- 进阶题目赏析

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey 本篇博客我们继续来了解一些有关二分查找算法的进阶题目。 &#x1f3e0; 寻找峰值 &#x1f4cc; 题目内容 162. 寻找峰值 - 力扣&#…...

CSS 对齐

CSS 对齐 在网页设计中&#xff0c;CSS&#xff08;层叠样式表&#xff09;对齐是一种基本而重要的技术&#xff0c;它决定了网页元素的位置和布局。CSS 提供了多种对齐方法&#xff0c;可以精确控制元素的水平、垂直对齐&#xff0c;以及相对于其父元素或整个页面的位置。本文…...

暑假算法刷题日记 Day 10

目录 重点整理 054、 拼数 题目描述 输入格式 输出格式 输入输出样例 核心思路 代码 055、 求第k小的数 题目描述 输入格式 输出格式 输入输出样例 核心思路 代码 总结 这几天我们主要刷了洛谷上排序算法对应的一些题目&#xff0c;相对来说比较简单 一共是13道…...

【Midjourney】AI作画提示词工程:精细化技巧与高效实践指南

文章目录 &#x1f4af;AI作画提示词基础结构1 图片链接1.1 上传流程 2 文字描述3 后置参数 &#x1f4af;AI作画提示词的文字描述结构1 主体主体细节描述2 环境背景2.1 环境2.2 光线2.3 色彩2.4 氛围 3 视角4 景别构图5 艺术风格6 图片制作方法7 作品质量万能词 &#x1f4af;…...

C语言——文件

文件操作 概念 文件是指存储在外存储器上&#xff08;一般代指磁盘&#xff0c;也可以是U盘&#xff0c;移动硬盘等&#xff09;的数据的集合。 文件操作体现在哪几个方面 1.文件内容的读取 2.文件内容的写入 数据的读取和写入可被视为针对文件进行输入和输出的操作&#xf…...

视频孪生技术在智慧水利(水务)场景中的典型应用展示

一、智慧水利建设规划 根据水利部编制《“十四五”智慧水利建设规划》&#xff0c;建设数字孪生流域、“2N”水利智能业务应用体系、安全可控水利网络安全防护体系、优化健全水利网信保障体系&#xff0c;建成七大江河数字孪生流域&#xff0c;推进水利工程智能化改造&#xf…...

使用kubekey快速搭建k8s集群

项目仓库地址 https://github.com/kubesphere/kubekey/ 支持的Kubernetes Versions https://github.com/kubesphere/kubekey/blob/master/docs/kubernetes-versions.md 安装 选择自己想要下载的版本 https://github.com/kubesphere/kubekey/releases 复制下载链接并下载 示…...

C++——入门基础(上)

目录 一、C参考文档 二、C在工作领域的应用 三、C学习书籍 四、C的第一个程序 五、命名空间 &#xff08;1&#xff09;namespace的定义 (2)命名空间的使用 六、C的输入和输出 七、缺省函数 八、函数重载 九、写在最后 一、C参考文档 &#xff08;1&#xff09;虽…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架&#xff0c;并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下&#xff0c;重新定义算法中的某些步骤。简单来说&#xff0c;就是在一个方法中定义了要执行的步骤顺序或算法框架&#xff0c;但允许子类…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

rm视觉学习1-自瞄部分

首先先感谢中南大学的开源&#xff0c;提供了很全面的思路&#xff0c;减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接&#xff1a;https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架&#xff1a; 代码框架结构&#xff1a;readme有…...