k8s的部署和安装

news2024/11/29 13:52:29

k8s的部署和安装

一、Kubernets简介及部署方法

1.1 应用部署方式演变

在部署应用程序的方式上,主要经历了三个阶段:

传统部署:互联网早期,会直接将应用程序部署在物理机上

  • 优点:简单,不需要其它技术的参与

  • 缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响

虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境

  • 优点:程序环境不会相互产生影响,提供了一定程度的安全性

  • 缺点:增加了操作系统,浪费了部分资源

容器化部署:与虚拟化类似,但是共享了操作系统

容器化部署方式给带来很多的便利,但是也会出现一些问题,比如说:

  • 一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器

  • 当并发访问量变大的时候,怎么样做到横向扩展容器数量

1.2Kubernets简介

  • 在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年

  • Borg系统运行管理着成千上万的容器应用。

  • Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。

  • Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交 给用户。

kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器 进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:

  1. 自我修复 :一旦某个容器崩溃,能够在1秒中迅速启动新的容器

  2. 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整

  3. 服务发现:服务可以通过自动发现的形式找到它所依赖的服务

  4. 负载均衡:如果一个服务启动了多个容器,能够自动实现请求的负载均衡

  5. 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本

  6. 存储编排:可以根据容器自身的需求自动创建存储卷

1.3k8s的设计架构

1.3.1 k8s各个组件的用途

一个kubernets集群主要是由控制节点(master)和工作节点(node)构成,每个节点上都会安装不同的组件

  1. master:集群的控制平面,负责集群的决策

    • ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、 API注册和发现等机制 . Scheduler : 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上

    • ControllerManager : 负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新 等

    • Etcd :负责存储集群中各种资源对象的信息

  2. node:集群的数据平面,负责为容器提供运行环境

  • kubelet:负责维护容器的生命周期,同时也负责Volume( CVI)和网络(CNI)的管理

  • Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)

  • kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡

1.3.2K8S各组件之间的调用关系

当我们要运行一个web服务时

  1. kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库中

  2. web服务的安装请求会首先被发送到master节点的apiServer组件

  3. apiServer组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上在此时,它会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知apiServer

  4. apiServer调用controller-manager去调度Node节点安装web服务

  5. kubelet接收到指令后,会通知docker,然后由docker来启动一个web服务的pod

  6. 如果需要访问web服务,就需要通过kube-proxy来对pod产生访问的代理

1.3.3K8S的常用名词概念
  • Master:集群控制节点,每个集群需要至少一个master节点负责集群的管控

  • Node:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的

  • Pod:kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器

  • Controller:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等

  • Service:pod对外服务的统一入口,下面可以维护者同一类的多个pod

  • Label:标签,用于对pod进行分类,同一类pod会拥有相同的标签

  • NameSpace:命名空间,用来隔离pod的运行环境

1.3.4K8S的分层架构

  • 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境

  • 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)

  • 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)

  • 接口层:kubectl命令行工具、客户端SDK以及集群联邦

  • 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴

  • Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等

  • Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等

二、K8S集群环境搭建

2.1K8S中容器的管理方式

K8S 集群创建方式有3种:

centainerd

默认情况下,K8S在创建集群时使用的方式

docker

Docker使用的普记录最高,虽然K8S在1.24版本后已经费力了kubelet对docker的支持,但时可以借助cri-docker方式来实现集群创建

cri-o

CRI-O的方式是Kubernetes创建容器最直接的一种方式,在创建集群的时候,需要借助于cri-o插件的方式来实现Kubernetes集群的创建

注意:docker 和cri-o 这两种方式要对kubelet程序的启动参数进行设置

2.2部署harbor仓库

K8S中文官网:Kubernetes

# 修改配置文件
[root@docker-hub ~]# cd /etc/yum.repos.d/
[root@docker-hub yum.repos.d]# vim docker.repo
[root@docker-hub yum.repos.d]# cat docker.repo
[docker]
name=docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/
gpgcheck=0
 
# 安装docker镜像
[root@docker-hub yum.repos.d]# yum install docker-ce -y
[root@docker-hub yum.repos.d]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock-
-iptables=true
 
# 启动docker
[root@docker-hub yum.repos.d]# systemctl enable --now docker.service
[root@docker-hub yum.repos.d]# docker info
 
# 从本地上传registry并导入
[root@docker-hub ~]# ls
公共  视频  文档  音乐  anaconda-ks.cfg  registry.tag.gz
模板  图片  下载  桌面  
[root@docker-hub ~]# docker load -i registry.tag.gz
ce7f800efff9: Loading layer  7.644MB/7.644MB
30609d4f10dd: Loading layer  792.6kB/792.6kB
3b6a51496c9d: Loading layer  17.55MB/17.55MB
e704e9e3e9dc: Loading layer  3.584kB/3.584kB
f019f591461d: Loading layer  2.048kB/2.048kB
Loaded image: registry:latest
[root@docker-hub ~]# mkdir certs
 
# 做解析
[root@docker-hub ~]# vim /etc/hosts
[root@docker-hub ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.250  harbor.timinglee.org  reg.timinglee.org
 
[root@docker-hub ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/yee.org.key -subjectAltName = DNS:reg.timinglee.org" -x509 -days 365 -out certs/timingee.org.crt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Shanxi
Locality Name (eg, city) [Default City]:XI'an
Organization Name (eg, company) [Default Company Ltd]:docker
Organizational Unit Name (eg, section) []:registry
Common Name (eg, your name or your server's hostname) []:reg.timinglee.org
Email Address []:admin@timinglee.org
# 上传本地harbor包并解压缩
[root@docker-hub ~]# tar zxf harbor-offline-installer-v2.5.4.tgz
[root@docker-hub ~]# ls
公共  文档  anaconda-ks.cfg                      registry.tag.gz
模板  下载  certs
视频  音乐  harbor
图片  桌面  harbor-offline-installer-v2.5.4.tgz
# 修改配置文件
[root@docker-hub ~]# cd harbor/
[root@docker-hub harbor]# cp harbor.yml.tmpl harbor.yml
[root@docker-hub harbor]# vim harbor.yml
hostname: reg.timinglee.org
certificate: /data/certs/timinglee.org.crt
private_key: /data/certs/timinglee.org.key
harbor_admin_password: 123
[root@docker-hub ~]# docker load -i nginx-latest.tar.gz
9853575bc4f9: Loading layer  77.83MB/77.83MB
72db5db515fd: Loading layer    114MB/114MB
8b87c0c66524: Loading layer  3.584kB/3.584kB
ec1a2ca4ac87: Loading layer  4.608kB/4.608kB
55e54df86207: Loading layer   2.56kB/2.56kB
f4f00eaedec7: Loading layer   5.12kB/5.12kB
5f0272c6e96d: Loading layer  7.168kB/7.168kB
Loaded image: nginx:latest
[root@docker-hub ~]# mkdir /data/
[root@docker-hub ~]# cd /data/
[root@docker-hub data]# cp /root/certs/ /data/ -r
[root@docker-hub data]# cd
[root@docker-hub ~]# cd harbor/
[root@docker-hub harbor]# ./install.sh --with-chartmuseum
[root@docker-hub harbor]# cd /root/certs/
[root@docker-hub certs]# ls
timinglee.org.crt  timinglee.org.key
[root@docker-hub certs]# cp /root/certs/timinglee.org.crt /etc/docker/certs.d/reg.timinglee.org/ca.crt  

2.3实验环境

所有节点禁用selinux和防火墙

所有节点同步时间和解析

所有节点安装docker-ce

所有节点禁用swap,注意注释掉/etc/fstab文件中的定义
禁用swap
[root@k8s-master ~]# systemctl list-unit-files | grep swap
 
#关闭系统中所有的交换空间
[root@k8s-master ~]# swapoff -a
[root@k8s-master ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Feb 19 17:38:40 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root   /                       xfs     defaults        0 0
UUID=ddb06c77-c9da-4e92-afd7-53cd76e6a94a /boot                   xfs     defaults        0 0
#/dev/mapper/rhel-swap   swap
 本地解析
[root@k8s-master ~]# vim /etc/hosts
172.25.250.100  k8s-master.timinglee.com
172.25.250.10   k8s-node1.timinglee.com
172.25.250.20   k8s-node2.timinglee.com
172.25.250.250  reg.timinglee.com
安装docker
[root@k8s-master ~]# tar zxf docker.tar.gz
[root@k8s-master ~]# ls
anaconda-ks.cfg
containerd.io-1.7.20-3.1.el9.x86_64.rpm
docker-buildx-plugin-0.16.2-1.el9.x86 64.rpm
docker-ce-27.1.2-1.el9.x86 64.rpm
docker-ce-cli-27.1.2-1.el9.x86_64.rpm
docker-ce-rootless-extras-27.1.2-1.el9.x86 64.rpm
docker-compose-plugin-2.29.1-1.el9.x86_64.rpm
docker.tar.gz
[root@k8s-master ~l# dnf install *.rpm -y
正在更新 Subscription Management 软件仓库。
无法读取客户身份
[root@k8s-master ~]# mkdir /etc/docker/certs.d/reg.timinglee.org/ -p
​
[root@reg ~]# scp /data/certs/timinglee.org.crtroot@172.25.254.100:/etc/docker/certs.d/reg.timinglee.org/ca.crt
[root@k8s-master ~]# vim /etc/docker/daemon.json
[root@k8s-master ~]# systemctl enable --now docker
​
[root@k8s-master ~]# docker info
​
[root@k8s-master ~]# docker pull timinglee/nginx:latest
 

node1,node2配置
[root@k8s-master ~]# scp *.rpm root@172.25.254.10:/mnt
[root@k8s-master ~]# scp *.rpm root@172.25.254.20:/mnt
 #在node1中查看,node2相同操作
[root@k8s-node1 ~]# cd /mnt/ 
[root@k8s-node1 mnt]# ls
containerd.io-1.7.20-3.1.el9.x86_64.rpm
docker-buildx-plugin-0.16.2-1.el9.x86_64.rpm
docker-ce-27.1.2-1.el9.x86_64.rpm
docker-ce-cli-27.1.2-1.el9.x86_64.rpm
docker-ce-rootless-extras-27.1.2-1.el9.x86_64.rpm
docker-compose-plugin-2.29.1-1.el9.x86_64.rpm
hgfs
#在node1,node2中安装
[root@k8s-node1 mnt]# dnf install *.rpm -y
[root@k8s-node2 mnt]# dnf install *.rpm -y
​
[root@k8s-master ~]# scp -r /etc/docker/ root@172.25.254.10:/etc/
root@172.25.254.10's password:
ca.crt                                                                      100% 2187     2.0MB/s   00:00
daemon.json                                                                 100%   55     5.1KB/s   00:00
[root@k8s-master ~]# scp -r /etc/docker/ root@172.25.254.20:/etc/
root@172.25.254.20's password:
ca.crt                                                                      100% 2187     2.0MB/s   00:00
daemon.json                                                                 100%   55     5.1KB/s   00:00
​
[root@k8s-node2 mnt]# cd /etc/docker/
[root@k8s-node2 docker]# ls
certs.d  daemon.json
[root@k8s-node2 docker]# cd certs.d/
[root@k8s-node2 certs.d]# ls
reg.timinglee.org
[root@k8s-node2 certs.d]# cd ..
[root@k8s-node2 docker]# cat daemon.json
{
  "registry-mirrors":["https://reg.timinglee.org"]
}
[root@k8s-node1 mnt]# systemctl enable --now docker.service
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@k8s-node2 mnt]# systemctl enable --now docker.service
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@k8s-node1 mnt]# docker info
k8s的安装
[root@k8s-master mnt]# ls
cri-dockerd-0.3.14-3.el8.x86_64.rpm  hgfs  libcgroup-0.41-19.el8.x86_64.rpm
[root@k8s-master mnt]# scp cri-dockerd-0.3.14-3.el8.x86_64.rpm libcgroup-0.41-19.el8.x86_64.rpm  root@172.25.254.10:/opt/
[root@k8s-master mnt]# scp cri-dockerd-0.3.14-3.el8.x86_64.rpm libcgroup-0.41-19.el8.x86_64.rpm  root@172.25.254.20:/opt/                                      
[root@k8s-node1 ~]# dnf install /opt/*.rpm -y
[root@k8s-node2 ~]# dnf install /opt/*.rpm -y
​
[root@k8s-node1 ~]# systemctl enable --now cri-docker.service
[root@k8s-node2 ~]# systemctl enable --now cri-docker.service
​
[root@k8s-master ~]# cd /etc/yum.repos.d/
[root@k8s-master yum.repos.d]# ls
redhat.repo  rhel9.repo
[root@k8s-master yum.repos.d]# vim k8s.repo
[k8s]
name=k8s
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm
gpgcheck=0
​
[root@k8s-master yum.repos.d]# dnf install kubelet-1.30.0 kubeadm-1.30.0 --downloadonly --downloaddir=/mnt
​
[root@k8s-master yum.repos.d]# scp /etc/yum.repos.d/k8s.repo  root@172.25.254.20:/etc/yum.repos.d/
[root@k8s-master yum.repos.d]# scp /etc/yum.repos.d/k8s.repo  root@172.25.254.10:/etc/yum.repos.d/
[root@k8s-node1 mnt]# dnf install kubectl-1.30.0 -y
[root@k8s-node2 mnt]# dnf install kubectl-1.30.0 -y
​
设置补齐功能
[root@k8s-master ~]# dnf install bash-completion -y
[root@k8s-master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
[root@k8s-master ~]# source ~/.bashrc

拉取k8s集群所需要的镜像
 

[root@k8s-master ~]# kubeadm config images pull \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.30.0 \
--cri-socket=unix:///var/run/cri-dockerd.sock

上传镜像到harbor仓库
 

[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' \
| awk -F "/" '{system("docker tag "$0" reg.timinglee.org/k8s/"$3)}'
[root@k8s-master ~]# docker images | awk '/k8s/{system("docker push "$1":"$2)}'
集群初始化
#启动kubelet服务
[root@k8s-master ~]# systemctl status kubelet.service
[root@k8s-master docker]# systemctl start kubelet.service 
 

执行初始化命令

[root@k8s-master ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 \
--image-repository=reg.exam.com/k8s \
--kubernetes-version v1.30.0 \
--cri-socket=unix:///var/run/cri-dockerd.sock


 指定集群配置文件变量

[root@k8s-master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
[root@k8s-master ~]# source ~/.bash_profile

当前节点没有就绪,因为还没有安装网络插件,容器没有运行

[root@k8s-master ~]# kubectl get nodes
NAME                       STATUS     ROLES           AGE     VERSION
k8s-master.timinglee.org   NotReady   control-plane   4m25s   v1.30.0
[root@k8s-master ~]# kubectl get pod -A
NAMESPACE     NAME                                               READY   STATUS   
RESTARTS   AGE
kube-system   coredns-647dc95897-2sgn8                           0/1     Pending 
  0         6m13s
kube-system   coredns-647dc95897-bvtxb                           0/1     Pending 
  0         6m13s
kube-system   etcd-k8s-master.timinglee.org                      1/1     Running 
  0         6m29s
kube-system   kube-apiserver-k8s-master.timinglee.org            1/1     Running 
  0         6m30s
kube-system   kube-controller-manager-k8s-master.timinglee.org   1/1     Running 
  0         6m29sNote 
安装flannel网络插件
#下载flannel的yaml部署文件
[root@k8s-master ~]# wget https://github.com/flannelio/flannel/releases/latest/download/kube-flannel.yml

下载镜像:

[root@k8s-master
 ~]# docker pull docker.io/flannel/flannel:v0.25.5
[root@k8s-master ~]# docekr docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel1

上传镜像到仓库

[root@k8s-master ~]# docker tag flannel/flannel:v0.25.5 \
reg.timinglee.org/flannel/flannel:v0.25.5
[root@k8s-master ~]# docker push reg.timinglee.org/flannel/flannel:v0.25.5
[root@k8s-master ~]# docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1 \
reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1
[root@k8s-master ~]# docker push reg.timinglee.org/flannel/flannel-cniplugin:v1.5.1-flannel1

#编辑kube-flannel.yml修改镜像下载位置

[root@k8s-master ~]# vim kube-flannel.yml
#需要修改以下几行
[root@k8s-master ~]# grep -n image kube-flannel.yml
146:       image: reg.timinglee.org/flannel/flannel:v0.25.5
173:       image: reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1
184:       image: reg.timinglee.org/flannel/flannel:v0.25.5

安装flannel网络插件

[root@k8s-master ~]# kubectl apply -f kube-flannel.yml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2215781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【去哪儿-注册安全分析报告-缺少轨迹的滑动条】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

查看SQL执行计划 explain

查看SQL执行计划 explain explain使用方式 alter session set current_schematest; explain plan for sql语句; --并不会实际执行&#xff0c;因此生成的执行计划也是预估的 select * from table(dbms_xplan.display); explain使用场景 1.内存中没有谓词信息了&#xff0…

网站仿制的五大要素

网站仿制的五大要素 在数字化快速发展的今天&#xff0c;仿制一个网站不仅是技术上的挑战&#xff0c;更是对创意与灵感的考验。无论是为了学习设计理念&#xff0c;还是为企业进行市场竞争&#xff0c;以下五大要素是网站仿制时必不可少的。 **1. 目标分析** 在仿制网站之前…

1. ESP32简介

ESP32是什么&#xff1a;它是乐鑫科技研发和设计的一种无线系统级芯片优点&#xff1a; 强大的处理能力无线通信功能广泛的外设接口低功耗特性 为什么选择ESP-IDF开发&#xff1a; 基于C/C开发官方主推实际项目需求 常见的ESP32型号&#xff1a;

Docker 环境下 GPU 监控实战:使用 Prometheus 实现 DCGM Exporter 部署与 GPU 性能监控

Docker 环境下 GPU 监控实战&#xff1a;使用 Prometheus 实现 DCGM Exporter 部署与 GPU 性能监控 文章目录 Docker 环境下 GPU 监控实战&#xff1a;使用 Prometheus 实现 DCGM Exporter 部署与 GPU 性能监控一 查看当前 GPU 信息二 dcgm-exporter 部署1&#xff09;Docker r…

电脑端微信图片文件视频的缓存目录

C:\Users\aaa30\Documents\WeChat Files\wxid_n6b8j77iqho412\FileStorage\Video\2024-10

冠层体散射反射对称性协方差矩阵的模型,在多种分解中都适用

把这个矩阵对应到观测协方差矩阵中&#xff0c;看占比多少&#xff0c;然年后得到体散射功率&#xff0c;时前面的系数乘对角线的和

51单片机快速入门之左移右移流水灯 2024年10/15

51单片机快速入门之左移右移流水灯 左移操作: <<1 每次往左移动一位假设一个八位数为0000 1111 当这个数左移一次之后 0 0001 1110当这个数左移两次之后 00 0011 1100 注意观察 橙色 数字 Python代码如下: 0b表示这是一个二进制 注意这里前置0被省略了 …

数据结构——树和森林

目录 树的存储结构 1、双亲表示法 2、孩子链表 3、孩子兄弟表示法 树与二叉树的转换 将树转换为二叉树 将二叉树转换为树 森林与二叉树的转化 森林转换成二叉树 二叉树转换为森林 树和森林的遍历 1、 树的遍历&#xff08;三种方式&#xff09; 2、森林的遍历 树的存…

DVWA之File Inclusion(文件包含)

DVWA之File Inclusion&#xff08;文件包含&#xff09; 1、定义&#xff1a;服务器通过php的特性&#xff08;函数的特性&#xff09;去包含任意文件时&#xff0c;由于对包含的文件来源没有过滤或过滤不严&#xff0c;从而可去包含一个恶意的文件。文件包含包括&#xff1a;…

【从零开始的LeetCode-算法】3200. 三角形的最大高度

给你两个整数 red 和 blue&#xff0c;分别表示红色球和蓝色球的数量。你需要使用这些球来组成一个三角形&#xff0c;满足第 1 行有 1 个球&#xff0c;第 2 行有 2 个球&#xff0c;第 3 行有 3 个球&#xff0c;依此类推。 每一行的球必须是 相同 颜色&#xff0c;且相邻行…

AdaTAD(CVPR 2024)视频动作检测方法详解

前言 论文&#xff1a;End-to-End Temporal Action Detection with 1B Parameters Across 1000 Frames 代码&#xff1a;AdaTAD 从论文标题可以看出&#xff0c;AdaTAD 可以在 1B 参数且输入视频在 1000 帧的情况下实现端到端的训练&#xff0c;核心创新点是引入 Temporal-Inf…

STM32传感器模块编程实践(六) 1.8寸液晶屏TFT LCD彩屏简介及驱动源码

文章目录 一.概要二.TFT彩屏主要参数三.TFT彩屏参考原理图四.TFT彩屏模块接线说明五.模块SPI通讯协议介绍六.TFT彩屏模块显示1.显示英文字符串2.显示数字3.显示中文 七.TFT彩屏实现图片显示八.STM32单片机1.8寸 TFT LCD显示实验1.硬件准备2.软件工程3.软件主要代码4.实验效果 九…

【C++】——list 容器的解析与极致实现

人的一切痛苦&#xff0c;本质上都是对自己的无能的愤怒。 —— 王小波 目录 1、list 介绍 2、list的使用 2.1 list 的构造 2.2 iterator 的使用 2.3 list 的修改 2.4一些特殊接口 2.5 迭代器失效问题 3、实现list 3.1底层结构 结点类 list类 迭代器类 3.2功能接…

VLOG视频制作解决方案,开发者可自行定制包装模板

无论是旅行见闻、美食探店&#xff0c;还是日常琐事、创意挑战&#xff0c;每一个镜头背后都蕴含着创作者无限的热情和创意。然而&#xff0c;面对纷繁复杂的视频编辑工具&#xff0c;美摄科技凭借其前沿的视频制作技术和创新的解决方案&#xff0c;为每一位视频创作者提供了开…

服务端负载均衡和客户端负载

负载均衡分为服务端负载均衡和客户端负载均衡&#xff0c;图解&#xff1a; 客户端的负载均衡还需要从注册中心获取集群部署的服务地址&#xff0c;其中客户的负载均衡器定时读取注册中心的IP和端口&#xff0c;然后缓存起来&#xff0c;这样以后可以先判断缓存IP和端口是否可用…

矩阵基础知识

矩阵定义 矩阵的定义 1.矩阵是由一组数按照矩形排列而成的数表。矩阵通常用大写字母表示&#xff0c;例如 AA、BB 等。矩阵中的每个数称为矩阵的元素或元。 一个 mn的矩阵 AA 可以表示为&#xff1a; 其中 aij表示矩阵 A中第i行第j列的元素。 矩阵的维度 1.矩阵的维度由它…

城市形态计算方法

1、天空可视率&#xff08;Sky view factor sky&#xff09; &#xff08;1&#xff09;准备地形数据、带高度的建筑矢量数据 &#xff08;2&#xff09;将建筑矢量数据投影栅格&#xff0c;利用栅格计算器和镶嵌至新栅格得到带有建筑高度数据的地形数据 &#xff08;3&…

[Windows] 屏幕截图工具Snipaste 开发过程更轻松

前言 老大&#xff1a;你去把用户登录代码写完。 老大&#xff1a;你把这周的周报发一下 老大&#xff1a;你把生产的数据清理一下。 结果… 今天刚把登录代码写完&#xff0c;下班&#xff0c;明天就处理别的事情去了&#xff01;&#xff01;&#xff01; 之后我就… 直接…

MATLAB智能算法 - AntColonyOptimization蚁群算法

AntColonyOptimization蚁群算法 智能算法是路线规划、深度学习等等一系列领域所使用的优化算法&#xff0c;是算法进阶之路的必备之路。 前言&#xff1a;本文主要围绕解决TSP旅行商问题展开&#xff0c;对于机器人的路线规划以及非线性方程求解的问题等解决方案 对于一些其他优…