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

k8s的二进制部署

k8s的二进制部署 

k8s的二进制部署的实验:

源码包部署

k8s的master01:192.168.233.91   

组件:kube-apiserver  kube-controller-manager  kube-scheduler  etcd

k8s的master02:192.168.233.92   

组件:kube-apiserver  kube-controller-manager  kube-scheduler

node节点01:192.168.233.93  kubelet  kube-proxy  etcd

node节点02:192.168.233.94  kubelet  kube-proxy  etcd

负载均衡:nginx+keepalived:master:192.168.233.95

                          backup:192.168.233.96

etcd:192.168.233.91

      192.168.233.93

      192.168.233.94

91、93、94主机:

清空iptables的所有策略

关闭交换分区

swapoff -a

k8s在设计时,为了提升性能,默认是不使用swap交换分区的,kubenetes在初始化时,会检测swap是否关闭

91:

93:

94:

91、93、94:

#开启网桥模式

net.bridge.brideg-nf-call-ip6tables=1

net.bridge.brideg-nf-call-iptables=1

#网桥的流量传给iptables链,实现地址映射

#关闭ipv6的流量(可关也可以不关)

net.ipv6.conf.all.disable_ipv6=1

#根据工作中的实际情况,自定

net.ipv4.ip_forward=1

时间同步

yum install ntpdate -y

ntpdate ntp.aliyun.com

date

部署 docker引擎

91、93、94:

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce docker-ce-cli containerd.io

systemctl start docker.service

systemctl enable docker.service

部署 etcd 集群

部署第一个组件,存储k8s的集群信息和用户配置组件

etcd是一个高可用----分布式的键值存储数据库,采用raft算法保证节点的信息一致性。etcd是go语言写的

etcd的端口:2379:api接口,对外为客户端提供通信

2380:内部服务的通信端口

etcd一般都是集群部署,etcd也有选举leader的机制,至少要三台,或者奇数台

k8s的内部通信依靠证书认证,密钥认证:证书的签发环境

91:

把三个证书拖进来

sfssl:证书签发的命令工具

cfssl-certinfo:查看证书信息的工具

cfssljson:把证书的格式转化成json格式,变成文件的承载式证书

移到bin目录下面

mv cfssl-certinfo cfssljson cfssl /usr/local/bin/

chmod 777 /usr/local/bin/cfssl*

cd到opt,然后创建一个mkdir k8s的目录

mkdir /opt/k8s

拖两个证书包到k8s

vim etcd-cert.sh

记得改文件里的IP地址

赋权

chmod 777 etcd-cert.sh etcd.sh

mkdir /opt/k8s/etcd-cert

mv etcd-cert.sh etcd-cert

cd etcd-cert/

./etcd-cert.sh

ca-config.json:配置了证书生成策略,定义了默认过期时间和一个名为 "www" 的配置模板

ca-csr.json:用于生成根证书和私钥的签名请求文件。包括了Common Name(CN),密钥算法和一些组织信息

ca.pem:根证书文件

server-csr:服务器证书签名请求文件

server-key.pem:生成etcd服务器证书和私钥

server.pem:etcd服务器的证书文件,用于加密和认证etcd节点之间的通信

tar zxvf etcd-v3.4.9-linux-amd64.tar.gz

cd /opt/k8s/etcd-cert/

cp *.pem /opt/etcd/ssl/

./etcd.sh etcd01 192.168.233.31 etcd02=https://192.168.233.33:2380,etcd03=https://192.168.233.34:2380

再开一台91的终端:

传参到93和94的主机

scp -r /opt/etcd/ root@192.168.233.93:/opt/

scp -r /opt/etcd/ root@192.168.233.94:/opt/

scp /usr/lib/systemd/system/etcd.service root@192.168.233.93:/usr/lib/systemd/system/

scp /usr/lib/systemd/system/etcd.service root@192.168.233.94:/usr/lib/systemd/system/

93:

94:

91、93、94:

(谁先启动谁是主)

91:

检查etcd群集状态

ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.233.91:2379,https://192.168.233.93:2379,https://192.168.233.94:2379" endpoint health --write-out=table

master节点的部署:

91:

上传 master.zip 和 k8s-cert.sh 到 /opt/k8s 目录中,解压 master.zip 压缩包

91是主节点

92是从节点

95和96是nginx的IP地址

unzip master.zip

vim controller-manager.sh

指向apiserver的ip地址

chmod 777 *.sh

mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

mkdir /opt/k8s/k8s-cert

mv /opt/k8s/k8s-cert.sh /opt/k8s/k8s-cert

cd /opt/k8s/k8s-cert/

./k8s-cert.sh

cp ca*pem apiserver*pem /opt/kubernetes/ssl/

cd /opt/k8s/

拖软件包

tar zxvf kubernetes-server-linux-amd64.tar.gz

cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/

ln -s /opt/kubernetes/bin/* /usr/local/bin/

#!/bin/bash

#获取随机数前16个字节内容,以十六进制格式输出,并删除其中空格

BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')

#生成 token.csv 文件,按照 Token序列号,用户名,UID,用户组 的格式生成

cat > /opt/kubernetes/cfg/token.csv <<EOF

${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"

EOF

chmod 777 token.sh

./token.sh

cat /opt/kubernetes/cfg/token.csv

二进制文件、token、证书都准备好后,开启 apiserver 服务

cd /opt/k8s/

./apiserver.sh 192.168.233.91 https://192.168.233.91:2379,https://192.168.233.93:2379,https://192.168.233.94:2379

netstat -antp | grep 6443

./scheduler.sh

./controller-manager.sh

./admin.sh

通过kubectl工具查看当前集群组件状态

kubectl get cs

node节点的部署:

93、94:

mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

拖软件包

unzip node.zip

91:

scp kubelet kube-proxy root@192.168.233.93:/opt/kubernetes/bin/

scp kubelet kube-proxy root@192.168.233.94:/opt/kubernetes/bin/

91:

拖软件包

chmod 777 kubeconfig.sh

scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.233.93:/opt/kubernetes/cfg/

scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.233.94:/opt/kubernetes/cfg/

93:

94:

91:

RBAC授权,生成和赋权用户,使用户 kubelet-bootstrap 能够有权限发起 CSR 请求证书

kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap

若执行失败,可先给kubectl绑定默认cluster-admin管理员集群角色,授权对整个集群的管理员权限

kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

93:

chmod 777 kubelet.sh

./kubelet.sh 192.168.233.93

91:

94:

91:

kube-proxy节点上的网络代理部署:

93:

cd /opt

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

chmod 777 proxy.sh

./proxy.sh 192.168.233.93

ps aux | grep kube-proxy

94:

cd /opt

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

安装flannel:

93、94:

把软件包拖到opt目录

91:

cd /opt/k8s

传 kube-flannel.yml 文件到 /opt/k8s 目录中,部署 CNI 网络

93、94:

ifconfig查看一下有没有flannel.1

部署 CoreDNS

CoreDNS:可以为集群中的 service 资源创建一个域名与 IP 的对应关系解析。

service是对外提供访问的地址,现在我们加入DNS机制之后,可以直接访问服务名

在所有 node 节点上操作

93、94:

#上传 coredns.tar 到 /opt 目录中

cd /opt

docker load -i coredns.tar

//在 master01 节点上操作

91:

#上传 coredns.yaml 文件到 /opt/k8s 目录中,部署 CoreDNS

cd /opt/k8s

kubectl apply -f coredns.yaml

kubectl get pods -n kube-system

#DNS 解析测试

kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

kubectl run -it --rm dns-test --image=busybox:1.28.4 sh

/ # nslookup kubernetes

Server:    10.0.0.2

Address 1: 10.0.0.2 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes

Address 1: 10.0.0.1 kubernetes.default.svc.cluster.local

exit

master02 节点部署

92:

iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

#在master添加hosts

cat >> /etc/hosts << EOF

192.168.233.91 master01

192.168.233.93 node01

192.168.233.94 node02

EOF

91:

92:

93:

如上同步

94:

如上同步

91、92、93、94同步操作:

91:

从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点

scp -r /opt/etcd/ root@192.168.233.92:/opt/

scp -r /opt/kubernetes/ root@192.168.233.92:/opt

scp -r /root/.kube root@192.168.233.92:/root

scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.233.92:/usr/lib/systemd/system/

92:

修改配置文件kube-apiserver中的IP

vim /opt/kubernetes/cfg/kube-apiserver

KUBE_APISERVER_OPTS="--logtostderr=true \

--v=4 \

--etcd-servers=https://192.168.233.91:2379,https://192.168.233.93:2379,https://192.168.233.94:2379 \

--bind-address=192.168.233.92 \ #修改

--secure-port=6443 \

--advertise-address=192.168.233.92 \ #修改

在 master02 节点上启动各服务并设置开机自启

systemctl start kube-apiserver.service

systemctl enable kube-apiserver.service

systemctl start kube-controller-manager.service

systemctl enable kube-controller-manager.service

systemctl start kube-scheduler.service

systemctl enable kube-scheduler.service

查看node节点状态

ln -s /opt/kubernetes/bin/* /usr/local/bin/

kubectl get nodes

弄完之后查看一下node状态 以及pod

负载均衡部署

35、36同步操作:

配置nginx的官方在线yum源,配置本地nginx的yum源

cat > /etc/yum.repos.d/nginx.repo << 'EOF'

[nginx]

name=nginx repo

baseurl=http://nginx.org/packages/centos/7/$basearch/

gpgcheck=0

EOF

yum install nginx -y

修改nginx配置文件,配置四层反向代理负载均衡,指定k8s群集2台master的节点ip和6443端口

vim /etc/nginx/nginx.conf

以下内容可以直接把配置文件里的东西全部删掉,然后使用

user  nginx;

worker_processes  auto;

error_log  /var/log/nginx/error.log notice;

pid        /var/run/nginx.pid;

events {

    worker_connections  1024;

}

#添加

stream {

    log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';

#日志记录格式

#$remote_addr: 客户端的 IP 地址。

#$upstream_addr: 上游服务器的地址。

#[$time_local]: 访问时间,使用本地时间。

#$status: HTTP 响应状态码。

#$upstream_bytes_sent: 从上游服务器发送到客户端的字节数。

        access_log  /var/log/nginx/k8s-access.log  main;

    upstream k8s-apiserver {

        server 192.168.233.31:6443;

        server 192.168.233.32:6443;

    }

    server {

        listen 6443;

        proxy_pass k8s-apiserver;

    }

}

http {

    include       /etc/nginx/mime.types;

    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

}

重启和开启自启nginx

部署keepalived服务

yum install keepalived -y

! Configuration File for keepalived

global_defs {

   # 接收邮件地址

   notification_email {

     acassen@firewall.loc

     failover@firewall.loc

     sysadmin@firewall.loc

   }

   # 邮件发送地址

   notification_email_from Alexandre.Cassen@firewall.loc

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id NGINX_MASTER

#lb01节点的为 NGINX_MASTER,lb02节点的为 NGINX_BACKUP

   #vrrp_strict  #注释掉

}  

   

#添加一个周期性执行的脚本

vrrp_script check_nginx {

    script "/etc/nginx/check_nginx.sh"  

#指定检查nginx存活的脚本路径

}

    

vrrp_instance VI_1 {

    state MASTER                        

#lb01节点的为 MASTER,lb02节点的为 BACKUP

    interface ens33                     

#指定网卡名称 ens33

    virtual_router_id 51

#指定vrid,两个节点要一致

    priority 100

#lb01节点的为 100,lb02节点的为 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.233.100/24      #指定 VIP

    }

    track_script {

        check_nginx                     #指定vrrp_script配置的脚本

    }

}

创建nginx状态检查脚本

vim /etc/nginx/check_nginx.sh

#!/bin/bash                                                        

/usr/bin/curl -I http://localhost &>/dev/null    

if [ $? -ne 0 ];then                                            

#    /etc/init.d/keepalived stop

    systemctl stop keepalived

fi

chmod +x /etc/nginx/check_nginx.sh

先启动nginx,再启动keepalived

ip a查看虚拟ip地址

可以停主的nginx 看看ip有没有飘到备上

93、94同步操作:

修改node节点上的bootstrap.kubeconfig,kubelet.kubeconfig配置文件为VIP

cd /opt/kubernetes/cfg/

vim bootstrap.kubeconfig

                      

vim kubelet.kubeconfig

server: https://192.168.233.100:6443

                        

vim kube-proxy.kubeconfig

server: https://192.168.233.100:6443

重启kubelet和kube-proxy服务

systemctl restart kubelet.service

systemctl restart kube-proxy.service

然后用主的有虚拟ip的主机查看端口号6443

##### 在 master01 节点上操作 #####

//测试创建pod

kubectl run nginx --image=nginx

//查看Pod的状态信息

kubectl get pods

部署 Dashboard

Dashboard:仪表盘,kubernetes的可视化界面,在这个可视化界面上,可以对k8s集群进行管理

91:

在 master01 节点上操作

#上传 recommended.yaml 文件到 /opt/k8s 目录中

kubectl apply -f recommended.yaml

创建service account并绑定默认cluster-admin管理员集群角色

kubectl create serviceaccount dashboard-admin -n kube-system

kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

获取token值

kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

然后用浏览器登录 (有的浏览器用不了)

点击高级

这一步的密码就是上面几步中获取token值的密码

进入到这里算完成创建

补齐的命令部署:

在最后一行​​​​​​​

相关文章:

k8s的二进制部署

k8s的二进制部署 k8s的二进制部署的实验&#xff1a; 源码包部署 k8s的master01&#xff1a;192.168.233.91 组件&#xff1a;kube-apiserver kube-controller-manager kube-scheduler etcd k8s的master02&#xff1a;192.168.233.92 组件&#xff1a;kube-api…...

Python基础语法总结

1.每条语句结束不需要分号(也可以加上), 直接换行, 注意: 如果两行代码写一行, 则必须加分号. 2.定义变量不需要指定类型(如果需要写类型, 需要在变量名后面加": 类型, 这个写法只是方便读代码). 3.变量名大小写敏感. 4.查看变量类型: type(变量名). 5.Python中的int表…...

矩阵理论基本知识

1、矩阵范数、算子范数 矩阵无穷范数是非自相容范数&#xff0c;矩阵1-范数、矩阵2-范数是自相容范数矩阵2-范数&#xff1a;Frobenius范数&#xff0c;是向量2-范数的自然推广。 ∥ A ∥ m 2 ∥ A ∥ F ∑ a i j ∗ a i j \|A\|_{m2}\|A\|_{F}\sqrt{\sum a_{ij}^*a_{ij}} ∥…...

《深入理解Java虚拟机(第三版)》读书笔记:Java内存区域与内存溢出异常、垃圾收集器与内存分配策略

下文是阅读《深入理解Java虚拟机&#xff08;第3版&#xff09;》这本书的读书笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 第2章 Java内存区域与内存溢出异常2.2 运行时数据区域2.3 HotSpot虚拟机对象探秘 第3章 垃圾收集器与内存分配策略3.2 对象已死&…...

android 手机主界面侧滑退出app问题

最近重新搭了个app&#xff0c;发现手机显示APP主界面时&#xff0c;沿着手机右边向左滑&#xff0c;会直接关闭应用&#xff0c;所以想搞个第一次提示&#xff0c;第二次退出app的效果。 结果搞出个复杂的东西&#xff0c;下面是两段代码。1: 1:GestureDetector扩展函数。其…...

spring boot 配置全局日期和时间格式

spring boot 为项目配置 全局日期和时间格式化yyyy-MM-dd HH:mm:ss 方式一&#xff1a;代码配置全局日期和时间格式化 /*** author hua*/ Configuration public class WebConfiguration implements WebMvcConfigurer {/*** 项目全局时间格式化*/ Bean public ObjectMapper get…...

GoLang学习之路,对Elasticsearch的使用,一文足以(包括泛型使用思想)(二)

书写上回&#xff0c;上回讲到&#xff0c;Elasticsearch的使用前提即&#xff1a;语法&#xff0c;表结构&#xff0c;使用类型结构等。要学这个必须要看前面这个&#xff1a;GoLang学习之路&#xff0c;对Elasticsearch的使用&#xff0c;一文足以&#xff08;包括泛型使用思…...

鸿蒙APP的代码规范

鸿蒙APP的代码规范是为了确保代码质量、可读性和可维护性而定义的一系列规则和标准。以下是一些建议的鸿蒙APP代码规范&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 代码风格&#xff1a; 采用…...

蓝桥杯-每日刷题-027

出租汽车计费器 一、题目要求 题目描述 有一个城市出租汽车的计费规则是3公里内&#xff08;含3公里&#xff09;基本费6元&#xff0c;超过3公里&#xff0c;每一公里1.4元。 现在对于输入具体的公里数x&#xff08;0<x<1000&#xff09;&#xff0c;编程计算x公里所需…...

安装Node修改Node镜像地址搭建Vue脚手架创建Vue项目

1、安装VSCode和Node 下载VSCode Visual Studio Code - Code Editing. Redefined 下载Node Node.js (nodejs.org) 检验是否安装成功&#xff0c;WinR,输入cmd命令&#xff0c;使用node -v可以查看到其版本号 2、修改镜像地址 安装好node之后&#xff0c;开始修改镜像地址 …...

git 学习 之一个规范的 commit 如何写

最好的话做一件完整的事情就提交一次...

2023 年人工智能研究与技术排名前 10 的国家

人工智能研究是一项全球性的工作。虽然美国和中国因其对人工智能的贡献而备受关注&#xff0c;但事实是&#xff0c;世界各国都在涉足这项技术&#xff0c;尝试新的突破&#xff0c;并吸引投资者的关注。 斯坦福大学的《2023年人工智能报告》估计&#xff0c;到 2022 年&#…...

留言板(Mybatis连接数据库版)

目录 1.添加Mybatis和SQL的依赖 2.建立数据库和需要的表 3.对应表中的字段&#xff0c;补充Java对象 4.对代码进行逻辑分层 5.后端逻辑代码 之前的项目实例【基于Spring MVC的前后端交互案例及应用分层的实现】https://blog.csdn.net/weixin_67793092/article/details/134…...

第十二章 Sleuth分布式请求链路跟踪

Sleuth分布式请求链路跟踪 gitee:springcloud_study: springcloud&#xff1a;服务集群、注册中心、配置中心&#xff08;热更新&#xff09;、服务网关&#xff08;校验、路由、负载均衡&#xff09;、分布式缓存、分布式搜索、消息队列&#xff08;异步通信&#xff09;、数…...

EasyExcel多线程批量导出数据,动态表头,静态资源访问

1.导入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency>2.建立实体 Data public class ActResultLogVO implements Serializable {private static…...

树莓派界面改成中文

安装完树莓派系统(Raspberry Pi OS with Desktop)&#xff0c;第一次启动时&#xff0c;时会有如下面二个图所示&#xff0c;让你选择区域时区和语言。 树莓派默认的语言为英文&#xff0c;如果你在安装时没有选择的话&#xff0c;默认的区域为英国&#xff0c;语言为英国英文&…...

软件工程期末复习

● 用例&#xff1a;借书 ●参与者&#xff1a;管理员,借阅者 ●操作流&#xff1a; ① 管理员进入图书借阅界面&#xff0c;用例开始。 ② 系统要求输入借阅者的借书证编码。 ③系统检验借书证编码,如果正确,则显示借阅者的信息。 A1&#xff1a;借书证编码有错。 A2: 如果该借…...

【linux】select实现定时器

/*秒级定时器*/ void seconds_sleep(unsigned long seconds) {if(seconds 0) return;struct timeval tv;tv.tv_secseconds;tv.tv_usec0;int err;do{errselect(0,NULL,NULL,NULL,&tv);}while(err<0 && errnoEINTR); }/*毫秒定时器*/void milliseconds_slee…...

Android 13 - Media框架(28)- MediaCodec(三)

上一节我们了解到 ACodec 执行完 start 流程后&#xff0c;会把所有的 input buffer 都提交给 MediaCodec 层&#xff0c;MediaCodec 是如何处理传上来的 buffer 呢&#xff1f;这一节我们就来了解一下这部分内容。 1、ACodecBufferChannel::fillThisBuffer ACodec 通过调用 A…...

Azure 学习总结

文章目录 1. Azure Function1.1 Azure Function 概念1.2 Azure Function 实现原理1.3 Azure Function 本地调试1.4 Azure Function 云部署 2. Azure API Managment 概念 以及使用2.1 Azure API 概念2.2 Azure API 基本使用 3. Service Bus 应用场景及相关特性3.1 Service Bus 基…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...