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

kubeadm部署k8s及高可用

目录

CNI 网络组件

1、flannel的功能

2、flannel的三种模式

3、flannel的UDP模式工作原理

4、flannel的VXLAN模式工作原理

5、Calico主要组成部分

6、calico的IPIP模式工作原理

7、calico的BGP模式工作原理

8、flannel 和 calico 的区别

Kubeadm部署k8s及高可用

1、环境准备

2、所有节点安装docker

3、所有节点安装kubeadm,kubelet和kubectl

4、所有master主机部署haproxy和keepalived实现高可用

5、部署K8S集群

6、部署网络插件flannel


续上一篇文章

CNI 网络组件

网络部署插件有fannel、calico、cilium等

主要介绍flannel和calico

flannel方案

需要在每个节点上把发向容器的数据包进行封装后,再用隧道将封装后的数据包发送到运行着目标Pod的node节点上。目标node节点再负责去掉封装,将去除封装的数据包发送到目标Pod上。数据通信性能则大受影响。

calico方案

Calico不使用隧道或NAT来实现转发,而是把Host当作Internet中的路由器,使用BGP同步路由,并使用iptables来做安全访问策略,完成跨Host转发来。

1、flannel的功能

让集群中的不同节点主机创建的 Docker 容器都具有全集群唯一的虚拟 IP 地址。

2、flannel的三种模式

  • UDP        出现最早的模式,但是性能较差,基于flanneld应用程序实现数据包的封装/解封
  • VXLAN      默认模式,是推荐使用的模式,性能比UDP模式更好,基于内核实现数据帧的封装/解封装,配置简单使用方便
  • HOST-GW    性能最好的模式,但是配置复杂,且不能跨网段

3、flannel的UDP模式工作原理

        1)原始数据包从源主机的Pod容器经过cni0网桥转发到flannel0虚拟接口

        2)flanneld进程负责监听flannel0接口收到的数据,并将源数据包封装到UDP报文中

        3)然后flanneld进程通过查询etcd中维护的路由表,找到目标Pod所在的node节点的nodeIP,然后将nodeIP封装在UDP报文外,最后通过物理网卡发送到目标node节点

        4)数据报文通过8285端口送到目标node节点的flanneld进程进行解封装,再由flannel0虚接口经过cni0网桥转发到目标Pod容器

4、flannel的VXLAN模式工作原理

        1)原始数据帧从源主机的Pod容器经过cni0网桥接口转发到flannel.1虚接口

        2)flannel.1虚接口收到数据帧后添加VXLAN头部,并在内核将原始数据帧封装到UDP报文中

        3)flanneld进程根据etcd中维护的路由表经过物理网卡发送到目标Pod所在的node节点

        4)数据报文通过8472端口发送到目标node节点的flannel.1虚接口,在由flannel.1虚接口经过cni0网桥发送到目标Pod容器

5、Calico主要组成部分

  • Felix:负责维护宿主机上的路由规则、FIB转发信息库等。
  • BIRD:负责分发路由规则,类似路由器。
  • Confd:配置管理组件。

Calico CNI插件:主要负责与kubernetes对接,供kubelet调用使用。

6、calico的IPIP模式工作原理

        1)原始数据包源主机的Pod容器发送到tunl0接口,然后在内核的IPIP驱动封装到节点网络的IP报文中

        2)再由tunl0接口的路由经过物理网卡发送到目标node节点

        3)IP数据报文到达目标node节点后,再通过内核的IPIP驱动解包得到原始的IP数据包

        4)最后根据本地的路由规则经过veth pair设备送达目标Pod容器

7、calico的BGP模式工作原理

本质就是通过路由规则来维护Pod之间的通信,Felix负责维护路由规则和网络接口管理,BIRD负责分发路由信息给其它节点

        1)源主机的Pod容器发出的原始IP数据包会通过veth pair设备送达到节点网络空间

        2)然后会根据原始IP数据包中的目标IP和节点的路由规则找到目标node节点的IP,再经过物理网卡发送到目标node节点

        3)IP数据包到达目标node节点后,会根据本地的路由规则经过veth pair设备送达到目标Pod容器

8、flannel 和 calico 的区别

1)flannel的网络模式有UDP、VXLAN、HOST-GW

2)calico的网络模式有IPIP、BGP、混合模式

3)flannel的默认网段是10.244.0.0/16,而calico的默认网段是192.168.0.0/16

4)flannel适合用于小型架构和架构不复杂的场合,而calico适合用于大型架构和架构复杂的场合

Kubeadm部署k8s及高可用

部署环境
master01192.168.3.100docker、kubeadm,kubelet、kubectl、haproxy和keepalived
master02192.168.3.101docker、kubeadm,kubelet、kubectl、haproxy和keepalived
master03192.168.3.102docker、kubeadm,kubelet、kubectl、haproxy和keepalived
node01192.168.3.103docker、kubeadm,kubelet和kubectl
node02192.168.3.104docker、kubeadm,kubelet和kubectl

1、环境准备

//所有节点,关闭防火墙规则,关闭selinux,关闭swap交换
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

//分别修改主机名
hostnamectl set-hostname master01
hostnamectl set-hostname master02
hostnamectl set-hostname master03
hostnamectl set-hostname node01
hostnamectl set-hostname node02

//所有节点修改hosts文件
vim /etc/hosts
192.168.3.100 master01
192.168.3.101 master02
192.168.3.102 master03
192.168.3.103 node01
192.168.3.104 node02

//所有节点时间同步
yum -y install ntpdate
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' >/etc/timezone
ntpdate time2.aliyun.com
//设置周期性任务做时间同步
systemctl enable --now crond
crontab -e
*/30 * * * * /usr/sbin/ntpdate time2.aliyun.com

//所有节点实现Linux的资源限制
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 65535
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited

//调整内核参数
cat > /etc/sysctl.d/k8s.conf <<EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.netfilter.nf_conntrack_max=2310720net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384
EOF#生效参数
sysctl --system  

//加载 ip_vs 模块
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done

2、所有节点安装docker

//下载依赖环境
yum install -y yum-utils device-mapper-persistent-data lvm2 
//下载docker的repo源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
//下载docker
yum install -y docker-ce docker-ce-cli containerd.io

//设置docker加速拉取镜像
cat > /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://6na95ym4.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "500m", "max-file": "3"}
}
EOF
//重载systemd管理文件
systemctl daemon-reload
//设置开启自启docker服务,并立即开启docker
systemctl enable --now docker.service 

3、所有节点安装kubeadm,kubelet和kubectl

//定义kubernetes源
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
//下载
yum install -y kubelet-1.20.15 kubeadm-1.20.15 kubectl-1.20.15

//配置Kubelet使用阿里云的pause镜像
cat > /etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.2"
EOF//开机自启kubelet
systemctl enable --now kubelet
//此时会发现kubelet启动不成功
systemctl status kubelet

4、所有master主机部署haproxy和keepalived实现高可用

//所有 master 节点部署 Haproxy
yum -y install haproxy keepalivedcat > /etc/haproxy/haproxy.cfg << EOF
globallog         127.0.0.1 local0 infolog         127.0.0.1 local1 warningchroot      /var/lib/haproxypidfile     /var/run/haproxy.pidmaxconn     4000user        haproxygroup       haproxydaemonstats socket /var/lib/haproxy/statsdefaultsmode                    tcplog                     globaloption                  tcplogoption                  dontlognulloption                  redispatchretries                 3timeout queue           1mtimeout connect         10stimeout client          1mtimeout server          1mtimeout check           10smaxconn                 3000frontend monitor-inbind *:33305mode httpoption httplogmonitor-uri /monitorfrontend k8s-masterbind *:6444mode tcpoption tcplogdefault_backend k8s-masterbackend k8s-mastermode tcpoption tcplogoption tcp-checkbalance roundrobinserver k8s-master1 192.168.3.100:6443  check inter 10000 fall 2 rise 2 weight 1server k8s-master2 192.168.3.101:6443  check inter 10000 fall 2 rise 2 weight 1server k8s-master3 192.168.3.102:6443  check inter 10000 fall 2 rise 2 weight 1
EOF

//所有 master 节点部署 keepalived
yum -y install keepalivedcd /etc/keepalived/vim keepalived.conf
! Configuration File for keepalived
global_defs {router_id LVS_HA1			#路由标识符,每个节点配置不同
}vrrp_script chk_haproxy {script "/etc/keepalived/check_haproxy.sh"interval 2weight 2
}vrrp_instance VI_1 {state MASTER				#master01上设置MASTER、master02和master03上设置BACKUPinterface ens33virtual_router_id 51priority 100				#本机初始权重,备机设置小于主机的值advert_int 1virtual_ipaddress {192.168.3.254          #设置VIP地址}track_script {chk_haproxy}
}

//编写haproxy的健康检查脚本
vim check_haproxy.sh
#!/bin/bash
if ! killall -0 haproxy; thensystemctl stop keepalived
fi//并给脚本执行权限
chmod +x chk_haproxy.sh//开机自启haproxy和keepalived
systemctl enable --now haproxy
systemctl enable --now keepalived

5、部署K8S集群

//在 master01 节点上设置集群初始化配置文件
kubeadm config print init-defaults > /opt/kubeadm-config.yamlcd /opt/
vim kubeadm-config.yaml
......
11 localAPIEndpoint:
12   advertiseAddress: 192.168.3.100		#指定当前master节点的IP地址
13   bindPort: 644321 apiServer:
22   certSANs:								#在apiServer属性下面添加一个certsSANs的列表,添加所有master节点的IP地址和集群VIP地址
23   - 192.168.3.254
24   - 192.168.3.100
25   - 192.168.3.101
26   - 192.168.3.10230 clusterName: kubernetes
31 controlPlaneEndpoint: "192.168.3.100:6444"		#指定集群VIP地址
32 controllerManager: {}38 imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers			#指定镜像下载地址
39 kind: ClusterConfiguration
40 kubernetesVersion: v1.20.15				#指定kubernetes版本号
41 networking:
42   dnsDomain: cluster.local
43   podSubnet: "10.244.0.0/16"				#指定pod网段,10.244.0.0/16用于匹配flannel默认网段
44   serviceSubnet: 10.96.0.0/16			#指定service网段
45 scheduler: {}
#末尾再添加以下内容
--- 
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs									#把默认的kube-proxy调度方式改为ipvs模式

#更新集群初始化配置文件
kubeadm config migrate --old-config kubeadm-config.yaml --new-config new.yaml

#拷贝yaml配置文件给其他主机,通过配置文件进行拉取镜像
for i in master02 master03 node01 node02; do scp /opt/new.yaml $i:/opt/; done

//拉取镜像
kubeadm config images pull --config /opt/new.yaml

//master01 节点进行初始化
kubeadm init --config new.yaml --upload-certs | tee kubeadm-init.log

//master01 节点进行环境配置
#配置 kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config//然后重启kubelet服务
systemctl restart kubelet

//所有节点加入集群
#master 节点加入集群
kubeadm join 192.168.3.254:6444 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:e1434974e3b947739e650c13b94f9a2e864f6c444b9a6e891efb4d8e1c4a05b7 \--control-plane --certificate-key fff2215a35a1b54f9b39882a36644b19300b7053429c43a1a713e4ed791076c4//然后在每个master节点也会提示接下来需要做什么
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

//node 节点加入集群
kubeadm join 192.168.3.254:6444 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:e1434974e3b947739e650c13b94f9a2e864f6c444b9a6e891efb4d8e1c4a05b7

//在 master01 查看集群信息
kubectl get nodes

6、部署网络插件flannel

所有节点上传 flannel 镜像 flannel.tar 和网络插件 cni-plugins-linux-amd64-v0.8.6.tgz 到 /opt 目录,master节点上传 kube-flannel.yml 文件
cd /opt
docker load < flannel.tarmv /opt/cni /opt/cni_bak
mkdir -p /opt/cni/bin
tar zxvf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/binkubectl apply -f kube-flannel.yml 

再次查看集群信息

//在 master01 查看集群信息
kubectl get nodes

最后验证一下

kubectl get pod -n kube-system 

相关文章:

kubeadm部署k8s及高可用

目录 CNI 网络组件 1、flannel的功能 2、flannel的三种模式 3、flannel的UDP模式工作原理 4、flannel的VXLAN模式工作原理 5、Calico主要组成部分 6、calico的IPIP模式工作原理 7、calico的BGP模式工作原理 8、flannel 和 calico 的区别 Kubeadm部署k8s及高可用 1、…...

GEE:将鼠标变成十字指针,点击获取影像值,显示值到UI中

作者:CSDN @ _养乐多_ 本文记录了在 Google Earth Engine(GEE)开发中,将鼠标变成十字指针,点击获取影像值,显示值到UI中的代码片段。这段代码复制过去修改变量名就可以用了。 效果如下图所示, 文章目录 一、代码片段一、代码片段 使用的时候将 YLDImage 变量换成你屏…...

SpringBoot 项目公共字段填充

[公共字段自动填充] 核心&#xff1a;在切面类中捕获需要填充公共字段的 Mapper 方法&#xff0c;方法上使用注解加以标识&#xff0c;通过反射拿到需要填充的字段赋值方法&#xff0c;进行赋值操作 1、自定义注解 AutoFill Target(ElementType.METHOD) Retention(RetentionPo…...

分布式搜索引擎ES

文章目录 初识elasticsearch了解ES倒排索引正向索引倒排索引正向和倒排 es的一些概念文档和字段索引和映射mysql与elasticsearch 安装ES部署kibana安装IK分词器扩展词词典停用词词典 索引库操作mapping映射属性索引库的CRUD创建索引库和映射查询索引库修改索引库删除索引库 文档…...

2023年05月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 下列程序段的运行结果是?( ) def s(n):if n==0:return 1else:...

@KafkaListener注解详解(一)| 常用参数详解

KafkaListener 注解提供了许多可配置的参数&#xff0c;以便更灵活地定制 Kafka 消息监听器的行为。 topics&#xff1a; 描述&#xff1a; 指定监听的 Kafka 主题&#xff0c;可以是一个字符串数组。这是最基本的参数&#xff0c;它定义了监听器将从哪个或哪些主题接收消息。…...

蓝桥杯算法双周赛心得——被替换的身份证(分类讨论)

大家好&#xff0c;我是晴天学长&#xff0c;分类讨论一定要细节啊&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .被替换的身份证 2) .算法思路 假设一方获胜 1.接受数据 2.假设潜梦醒 无非就是&am…...

实验一:人工智能之启发式搜索算法(含源码+实验报告)

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :hfut实验课设 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。能力再大,你不行动,只能看别人成功!没有人会关心你付出过多少…...

C++学习 --类和对象之封装

目录 1&#xff0c; 什么是封装 2&#xff0c; 创建类 3&#xff0c; 权限控制 3-1&#xff0c; public权限 3-2&#xff0c; private权限 3-3&#xff0c; protected权限 3-4&#xff0c; 类外访问私有属性 4&#xff0c; 构造函数 4-2&#xff0c;创建构造函数 4-2…...

在Spring Boot中使用JTA实现对多数据源的事务管理

了解事务的都知道&#xff0c;在我们日常开发中单单靠事务管理就可以解决绝大多数问题了&#xff0c;但是为啥还要提出JTA这个玩意呢&#xff0c;到底JTA是什么呢&#xff1f;他又是具体来解决啥问题的呢&#xff1f; JTA JTA&#xff08;Java Transaction API&#xff09;是…...

介绍YOLO-NAS Pose:姿势估计的技术

YOLO-NAS 姿势 YOLO-NAS Pose models是对 Pose Estimation 领域的最新贡献。今年早些时候,Deci 因其突破性的目标检测基础模型 YOLO-NAS 获得了广泛认可。在 YOLO-NAS 成功的基础上,该公司现在推出了 YOLO-NAS Pose 作为其姿势估计的对应产品。该姿势模型在延迟和准确性之间…...

计算机毕业设计 基于SpringBoot的实训管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

Python开发运维:Python3.7使用QQ邮箱发送不同类型邮件

目录 一、理论 1.邮件发送 二、实验 1.Python3.7使用QQ邮箱发送普通邮件 2.Python3.7使用QQ邮箱发送包含图片与附件的邮件 三、问题 1.Pycharm中如何放大和缩小代码界面 一、理论 1.邮件发送 &#xff08;1&#xff09;概念 SMTP&#xff08;Simple Mail Transfer Pro…...

二十三种设计模式全面解析-解密迭代器模式:探索遍历之道

在软件开发中&#xff0c;遍历数据集合是一个非常常见的需求。但是&#xff0c;如何以一种优雅、灵活的方式遍历集合&#xff0c;并且能够适应各种不同的数据结构和迭代方式&#xff0c;一直是开发者们面临的挑战。今天&#xff0c;我将带你深入探索迭代器模式&#xff08;Iter…...

kubernetes istio

目录 一、部署 二、部署示例应用 三、部署遥测组件 四、流量管理 五、熔断 官网&#xff1a;https://istio.io/latest/zh/about/service-mesh/ 一、部署 提前准备好文件 tar zxf 15t10-1.19.3-linux-amd64.tar.gz cd 15t10-1.19.3/ export PATH$PWD/bin:$PATHistioctl install …...

25期代码随想录算法训练营第十四天 | 二叉树 | 递归遍历、迭代遍历

目录 递归遍历前序遍历中序遍历后序遍历 迭代遍历前序遍历中序遍历后序遍历 递归遍历 前序遍历 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # …...

常用布局以及其优缺点

当涉及到设计和排版时&#xff0c;有许多不同的布局方式可供选择。以下是几种常见的布局方式以及它们的优缺点&#xff1a; 流式布局&#xff08;Fluid Layout&#xff09;&#xff1a; 优点&#xff1a;能够根据屏幕大小自动调整内容&#xff0c;适应不同设备。灵活性高&#…...

海康工业相机如何提高相机帧率

影响帧率的因素 相机参数 帧率限制使能 像素格式 曝光时间 数据包大小&#xff08;网口&#xff09; 相机默认参数 ADC位深 系统环境设置...

Linux之IPC通信共享内存(一次拷贝)与消息队列、管道、信号量、socket(两次拷贝)总结(六十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…...

【多线程 - 01、概述】

进程 几乎所有的操作系统都支持进程概念&#xff0c;进程是处于运行过程中的程序&#xff0c;进程是操作系统中进行资源分配的基本单位。 三个基本特征 独立性&#xff1a;指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。而对于未建立任何进程的程序&…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&&#xff1a;逻辑与 ||&#xff1a;逻辑或 &#xff01;&#xff1a;逻辑非 短路求值 位运算符 按位与&&#xff1a; 按位或 | 按位取反~ …...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

算法—栈系列

一&#xff1a;删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...