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

Kubeadm+Containerd部署k8s(v1.28.2)集群(非高可用版)

Kubeadm+Containerd部署k8s(v1.28.2)集群(非高可用版)

文章目录

  • Kubeadm+Containerd部署k8s(v1.28.2)集群(非高可用版)
      • 一.环境准备
        • 1.服务器准备
        • 2.环境配置
        • 3.设置主机名
        • 4.修改国内镜像源地址
        • 5.配置时间同步
        • 6.配置内核转发及网桥过滤
      • 二.容器运行时Containerd安装(所有节点)
        • 1.apt源安装
        • 2.二进制安装文件方法
        • 3.配置Containerd镜像加速等
      • **注意**:
      • 三.K8S集群部署
        • 1.集群软件的apt源准备
        • 2.K8S集群软件的安装
        • 3.K8S集群初始化
        • 4.K8S集群网络插件Calico部署
      • 四.部署应用测试集群是否安装成功

一.环境准备

1.服务器准备

服务器信息(此处为同一运营商的服务器,并且处于同一网络组中)如本地搭建的服务器则需要保证在同一内网中,且最好关闭防火墙。

角色主机名称IPKubernetes版本
masterk8s-master1192.168.0.2v1.28.2
node1k8s-node1192.168.0.3v1.28.2
node2k8s-node2192.168.0.4v1.28.2

为什么要用Containerd?
1.Docker Engine 没有实现 CRI, 而这是容器运行时在 Kubernetes 中工作所需要的。 为此,必须安装一个额外的服务 cri-dockerd。 cri-dockerd 是一个基于传统的内置 Docker 引擎支持的项目, 它在 1.24 版本从 kubelet 中移除。

2.不直接兼容 CRI:Docker 使用自己的运行时逻辑,与 Kubernetes的 CRI 不完全兼容。

3.性能和复杂性:Docker 包含许多 Kubernetes 不需要的额外功能(如镜像构建、CLI 工具),相比专注的运行时(如 CRI-O 或 Containerd)更重。
4.Containerd 是一个通用容器运行时,是 Docker 的核心组件之一,后来独立成为一个开源项目。它同样支持 Kubernetes,通过 CRI 插件(cri-Containerd)与 Kubernetes 集成.且被被广泛应用于生产环境(如 AWS EKS、Google GKE)

2.环境配置

确保每个节点上的MAC地址和product_uuid的唯一性,因为某些虚拟机的地址可能会重复。

#查看MAC地址命令
ip link
#校验product_uuid
sudo cat /sys/class/dmi/id/product_uuid

如图,eth0网卡下的,link/ether后面的就是Mac地址。

image-20241218171946878

此处输出的就是product_uuid

image-20241218172255562

3.设置主机名

根据机器的规划,分布设置三台主机名为k8s-master1、k8s-node1和k8s-node2。

#修改配置文件方式,
vi /etc/hostname
##文件内容为:k8s-master1或k8s-node1#命令行方式,临时修改
# 设置 master 主机名
hostnamectl set-hostname k8s-master1 && bash
# 设置 worker 主机名
hostnamectl set-hostname k8s-node1 && bash
hostnamectl set-hostname k8s-node2 && bash
4.修改国内镜像源地址

改为华为的镜像源为例子

  • 备份镜像源文件

    sudo cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
    
  • 修改sources.list文件,将http://archive.ubuntu.comhttp://security.ubuntu.com替换成http://repo.huaweicloud.com

    sudo sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
    sudo sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
    
5.配置时间同步

采用ntpdate命令进行时间校对,设置Crontab定时任务进行定时校对。

#设置时区
timedatectl set-timezone Asia/Shanghai
cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
#执行命令查看时区是否修改
timedatectl status
#安装工具
sudo apt install ntpdate
#配置Crontab定时任务
crontab -e
#添加如下内容: 0 */1 * * * ntpdate time1.aliyun.com

image-20241218173016645

6.配置内核转发及网桥过滤
  • 添加配置文件
cat << EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
  • 加载模块

    modprobe overlay
    modprobe br_netfilter
    
  • 添加网桥过滤及内核转发配置文件

    cat  <<EOF | tee /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-iptables  = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.ipv4.ip_forward                 = 1
    EOF#然后执行
    sysctl -p /etc/sysctl.d/k8s.conf
    

    如果上述配置执行之后,执行sysctl net.ipv4.ip_forward输出和下图不一致。则需手动执行sysctl -w net.ipv4.ip_forward=1

    image-20241218173952554

  • 安装Ipset及ipvsadm

    sudo apt -y install ipset ipvsadm
    
  • 配置ipvsadm模块,添加需要添加的模块

    cat  << EOF | tee /etc/modules-load.d/ipvs.conf
    ip_vs
    ip_vs_rr
    ip_vs_wrr
    ip_vs_sh
    nf_conntrack
    EOF
    
  • 加载模块脚本

    cat << EOF | tee ipvs.sh > /dev/null && chmod +x ipvs.sh
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack
    EOF./ipvs.sh
    
  • 关闭swap分区

    swapoff -a  #临时关闭
    

    编辑/etc/fstab,注释如下类似的内容,重启系统并验证。如果已经关闭那么该命令不会有输出。

    sudo swapon --show 
    

    image-20230403214910666

    image-20230403215315571

二.容器运行时Containerd安装(所有节点)

1.apt源安装
#更新系统源
apt update
#安装必须包
apt install -y apt-transport-https ca-certificates curl software-properties-common
#添加 Docker 官方的 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
#更新包的索引
sudo apt update
#查看可安装的Containerd版本
apt-cache madison containerd.io

image-20241218175613703

#默认下载最新版
apt-get install containerd.io
#下载指定版本
apt-get install containerd.io=1.7.24-1
#本次安装的是1.7.24-1

为了保证环境稳定,建议锁定containerd的版本

#锁定版本
apt-mark hold containerd.io
#后续升级的解锁命令
apt-mark unhold containerd.io

配置 containerd

mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
#启动和设置开机自启动
systemctl start containerd && systemctl enable containerd

验证安装

systemctl status containerd

image-20241218180254619

2.二进制安装文件方法

下载地址,获取Containerd的二进制版本。如下图:

image-20241218181955927

通过下面的命令进行解压

 tar -xf cri-containerd-1.7.12-linux-amd64.tar.gz  -C /

执行该命令后,这些文件和目录会被解压到根目录 / 下,并且解压后的文件会按原有的结构放置。

配置 containerd,通过以命令生成Containerd的配置文件

mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml
#启动和设置开机自启动
systemctl start containerd && systemctl enable containerd
3.配置Containerd镜像加速等

修改 /etc/containerd/config.toml

  • 第67行sandbox_image的内容,从原来的registry.k8s.io/pause:3.8修改成registry.aliyuncs.com/google_containers/pause:3.9
  • 第139行 SystemdCgroup的内容,从原来的false改成true
  • 第162行plugins."io.containerd.grpc.v1.cri".registry下方的config_path,修改为config_path = "/etc/containerd/certs.d"
  • 如图:image-20241218183546620
    image-20241218183622056

创建相应的目录并配置加速文件

#创建目录
mkdir /etc/containerd/certs.d/docker.io -pv
#配置加速文件
cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOF
server = "https://docker.io"
[host."https://x46sxvnb.mirror.aliyuncs.com"]capabilities = ["pull", "resolve"]
EOF#重启containerd
systemctl restart containerd.service

注意

# 所有节点都操作
cat <<EOF|tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
EOF

三.K8S集群部署

1.集群软件的apt源准备

此处使用使用阿里云镜像源:

#添加镜像源
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
#添加密钥
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
#更新源
apt-get update
2.K8S集群软件的安装

查看可以安装的软件列表

apt-cache madison kubeadm

image-20241218184305800

可以看到最新的版本是1.28.2,此处选择安装的版本是1.28.2,可自行选择。

apt-get install -y kubelet=1.28.2-00 kubeadm=1.28.2-00 kubectl=1.28.2-00

node节点上可以不用安装kubectl

apt-get install -y kubelet=1.28.2-00 kubeadm=1.28.2-00

启动kueblet,并设置开机自启动。

systemctl enable --now kubelet

为求稳定,通过以下命令进行锁定定版本。

apt-mark hold kubelet kubeadm kubectl 
3.K8S集群初始化
#创建文件夹
mkdir -p /home/k8s/init/
#生成默认配置文件
kubeadm config print init-defaults > /home/k8s/init/kubeadm-init.yaml

image-20241218184654259

修改文件的一些参数:

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 192.168.0.2 #master IP地址bindPort: 6443
nodeRegistration:criSocket: unix:///var/run/containerd/containerd.sockimagePullPolicy: IfNotPresentname: k8s-master1 #master节点主机名称taints: null
---
apiServer:certSANs:- 192.168.0.2- 101.126.148.74timeoutForControlPlane: 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.28.2 #修版本信息
networking:dnsDomain: cluster.localserviceSubnet: 10.244.0.0/12 #修改Service网段信息podSubnet: 10.96.0.0/16 #添加Pod网段信息
scheduler: {}

通过以下命令列举出需要拉取的镜像:

kubeadm config images list --config  /home/k8s/init/kubeadm-init.yaml

image-20241218185014902

通过下面命令进行拉取:

kubeadm config images pull --config  /home/k8s/init/kubeadm-init.yaml

然后通过以下命令进行初始化:

kubeadm init --config=/home/k8s/init/kubeadm-init.yaml  --v=6

出现如下信息则证明初始化成功:

Then you can join any number of worker nodes byrunning the following on each as root:
kubeadm join 192.168.0.2:6443 --token abcdef.69123456789abcdef

image-20241218185616909

然后按照上述的提示,进行如下的操作:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

执行完上述的命令,就可以通过kubectl进行查看k8s集群的状态信息。如下图:

image-20241218185712173

此处需注意,因为一开始没有安装Calico等网络插件,节点状态应该是STATUS: NotReady

新节点加入到集群中,在节点上通过如下命令,获取加入集群的token值:

kubeadm token create --print-join-command

image-20241218185947007

直接在node节点执行:

kubeadm join 192.168.0.2:6443 --token xqlsab.83s9nr4w0dfmls59 --discovery-token-ca-cert-hash sha256:dc1719de42513ce9f02ad8602932eff9fc0137261553a9d6209873df73b5352b

暂时未写如何添加另一个Master节点,此处涉及高可用配置。

执行后如图:

image-20241218190113896

image-20241218190133503

然后可以通过如下命令来排查节点插件的安装进程:

kubectl get pod -n kube-system -o wide | grep k8s-node1

image-20241218190226229

image-20241218190256750

如果一直未启动成功可以用如下命令来排查:

kubectl describe pod -n kube-system <PodID>
#或者
kubectl logs -f -n kube-system <PodID>

在节点上还可以通过crictl ps -a命令来排查是否有pod启动。同理,在初始化的时候也可以这样排查。

image-20241218190620121

crictlContainerd的命令行工具。

4.K8S集群网络插件Calico部署

​ 此处选用科学部署方式,拉取的镜像到自己的阿里云仓库。镜像地址如下:

registry.cn-hangzhou.aliyuncs.com/docker_image-ljx/calico-cni:v3.27.5
registry.cn-hangzhou.aliyuncs.com/docker_image-ljx/calico-node:v3.27.5
registry.cn-hangzhou.aliyuncs.com/docker_image-ljx/calico-kube-controllers:v3.27.5

分别替换name: upgrade-ipamname: install-cniname: "mount-bpffs"name: calico-nodename: calico-kube-controllers这几处的镜像地址,然后执行以下命令安装:

kubectl create -f calico.yml

calico文件地址如下calico/manifests/calico.yaml at release-v3.27 · projectcalico/calico

执行完上述的命令后,即可完成calico的部署。如下:

image-20241218191234111

可以看到每个节点都有Calico的插件,然后稍等一会,node节点就会变成Ready:

image-20241218191359047

四.部署应用测试集群是否安装成功

以部署一个Nginx应用为例,以下是一个简单的Nginx部署的yaml文件:

apiVersion: apps/v1     #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
kind: Deployment        #该配置的类型,我们使用的是 Deployment
metadata:               #译名为元数据,即 Deployment 的一些基本属性和信息name: nginx-deployment        #Deployment 的名称labels:           #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解app: nginx  #为该Deployment设置key为app,value为nginx的标签
spec:           #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用replicas: 1   #使用该Deployment创建一个应用程序实例selector:         #标签选择器,与上面的标签共同作用,目前不需要理解matchLabels: #选择包含标签app:nginx的资源app: nginxtemplate:         #这是选择或创建的Pod的模板metadata:   #Pod的元数据labels:   #Pod的标签,上面的selector即选择包含标签app:nginx的Podapp: nginxspec:           #期望Pod实现的功能(即在pod中部署)containers:       #生成container,与docker中的container是同一种- name: nginx     #container的名称image: registry.cn-hangzhou.aliyuncs.com/docker_image-ljx/nginx:1.26.0  #使用镜像nginx:1.26.0创建container,该container默认80端口可访问
---
apiVersion: v1
kind: Service
metadata:name: nginx-service #Service 的名称labels:       #Service 自己的标签app: nginx  #为该 Service 设置 key 为 app,value 为 nginx 的标签
spec:     #这是关于该 Service 的定义,描述了 Service 如何选择 Pod,如何被访问selector:     #标签选择器app: nginx  #选择包含标签 app:nginx 的 Podports:- name: nginx-port  #端口的名字protocol: TCP     #协议类型 TCP/UDPport: 80          #集群内的其他容器组可通过 80 端口访问 ServicenodePort: 32600   #通过任意节点的 32600 端口访问 ServicetargetPort: 80  #将请求转发到匹配 Pod 的 80 端口type: NodePort  #Serive的类型,ClusterIP/NodePort/LoaderBalancer

上述的资源清单创建了两种类型一个Deployment,一个Service,然后执行命令部署:

kubectl apply -f nginx.yaml

执行成功后,如下图:

image-20241218191743338

然后通过node节点IP+32600的方式进行访问:

此处是云服务器所以用的外网IP

image-20241218191914871

相关文章:

Kubeadm+Containerd部署k8s(v1.28.2)集群(非高可用版)

KubeadmContainerd部署k8s(v1.28.2)集群&#xff08;非高可用版&#xff09; 文章目录 KubeadmContainerd部署k8s(v1.28.2)集群&#xff08;非高可用版&#xff09;一.环境准备1.服务器准备2.环境配置3.设置主机名4.修改国内镜像源地址5.配置时间同步6.配置内核转发及网桥过滤 …...

重温设计模式--职责链模式

文章目录 职责链模式的详细介绍C 代码示例C示例代码2 职责链模式的详细介绍 定义与概念 职责链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它旨在将请求的发送者和多个接收者解耦&#xff0c;让多个对象都有机会处理请求&a…...

单点登录平台Casdoor搭建与使用,集成gitlab同步创建删除账号

一&#xff0c;简介 一般来说&#xff0c;公司有很多系统使用&#xff0c;为了实现统一的用户名管理和登录所有系统&#xff08;如 GitLab、Harbor 等&#xff09;&#xff0c;并在员工离职时只需删除一个主账号即可实现权限清除&#xff0c;可以采用 单点登录 (SSO) 和 集中式…...

【Rust自学】5.1. 定义并实例化struct

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 5.1.1. 什么是struct struct的中文意思为结构体&#xff0c;它是一种自定义的数据类型&#xff0c;它允许程序为相关联的值命名和打包&am…...

vue-cli 5接入模块联邦 module federation

vue-cli 5接入模块联邦 module federation 模块联邦概念实现思路配置遇到的问题: 模块联邦概念 模块联邦由webpack 5最先推出的,让应用加载远程的代码模块来实现不同的Web应用共享代码片段.模块联邦分为两个角色,一个是生产者,一个是消费者.生产者暴露代码供消费者消费 (用一个…...

[前端]mac安装nvm(node.js)多版本管理

NVM功能简介 NVM&#xff08;Node Version Manager&#xff09;是一个用于管理多个Node.js版本的命令行工具&#xff0c;它允许开发者在同一台机器上安装、切换和卸载不同版本的Node.js&#xff0c;从而解决版本不兼容的问题。以下是NVM的一些主要功能和用途&#xff1a; 安装和…...

thinkphp8+layui分页

前端 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>demo</title><link href"//unpkg.com/layui2.9.20/dist/css/layui.css" rel"stylesheet"> </head> <…...

【NLP高频面题 - Transformer篇】Transformer的位置编码是如何计算的?

【NLP高频面题 - Transformer篇】Transformer的位置编码是如何计算的&#xff1f; 重要性&#xff1a;★★★ NLP Github 项目&#xff1a; NLP 项目实践&#xff1a;fasterai/nlp-project-practice 介绍&#xff1a;该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用…...

VSCode搭建Java开发环境 2024保姆级安装教程(Java环境搭建+VSCode安装+运行测试+背景图设置)

名人说&#xff1a;一点浩然气&#xff0c;千里快哉风。—— 苏轼《水调歌头》 创作者&#xff1a;Code_流苏(CSDN) 目录 一、Java开发环境搭建二、VScode下载及安装三、VSCode配置Java环境四、运行测试五、背景图设置 很高兴你打开了这篇博客&#xff0c;更多详细的安装教程&…...

计算机网络压缩版

计算机网络到现在零零散散也算过了三遍&#xff0c;一些协议大概了解&#xff0c;但总是模模糊糊的印象&#xff0c;现在把自己的整体认识总结一下&#xff0c;&#xff08;本来想去起名叫《看这一篇就够了》&#xff0c;但是发现网上好的文章太多了&#xff0c;还是看这篇吧&a…...

大语言模型中的Agent;常见的Agent开发工具或框架

大语言模型中的Agent 大语言模型中的Agent是指以大语言模型为核心驱动,具有自主理解、感知、规划、记忆和使用工具等能力,能够自动化执行复杂任务的系统.以下是一些例子: AutoGPT:它相当于一个完整的工具包,可以为各种项目构建和运行自定义AI Agent。使用OpenAI的GPT-4和…...

设计模式-备忘录模式

背景 游戏角色恢复问题&#xff1a;角色有攻击力和防御力&#xff0c;在Boss站前保存攻击力和防御力&#xff0c;大战之后&#xff0c;攻击力和防御力下降&#xff0c;从备忘录恢复到大战前的状态。 传统思路&#xff1a; 一个游戏对象&#xff0c;对应一个保存状态对象。 …...

重温设计模式--状态模式

文章目录 状态模式&#xff08;State Pattern&#xff09;概述状态模式UML图作用&#xff1a;状态模式的结构环境&#xff08;Context&#xff09;类&#xff1a;抽象状态&#xff08;State&#xff09;类&#xff1a;具体状态&#xff08;Concrete State&#xff09;类&#x…...

道可云人工智能元宇宙每日资讯|2024(GIAC)智能视听大会在青岛举行

道可云元宇宙每日简报&#xff08;2024年12月23日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 2024&#xff08;GIAC&#xff09;智能视听大会在青岛举行 12月22日&#xff0c;2024&#xff08;GIAC&#xff09;智能视听大会在青岛举行。大会以“数字文化 智能…...

理解神经网络

神经网络是一种模拟人类大脑工作方式的计算模型&#xff0c;是深度学习和机器学习领域的基础。 基本原理 神经网络的基本原理是模拟人脑神经系统的功能&#xff0c;通过多个节点&#xff08;也叫神经元&#xff09;的连接和计算&#xff0c;实现非线性模型的组合和输出。每个…...

初学stm32 --- NVIC中断

目录 STM32 NVIC 中断优先级管理 NVIC_Type: ISER[8]&#xff1a; ICER[8]&#xff1a; ISPR[8]&#xff1a; ICPR[8]&#xff1a; IABR[8]&#xff1a; IP[240]&#xff1a; STM32 的中断分组&#xff1a; 中断优先级分组函数 NVIC_PriorityGroupConfig 中断初始化函…...

机器人角度参考方式

机器人的角度可以根据需求和系统设计来决定。通常情况下&#xff0c;机器人角度&#xff08;如航向角或偏航角&#xff09;有两种常见的参考方式&#xff1a; 参考开机时的 0&#xff1a;这是最常见的方式&#xff0c;机器人在开机时会将当前的方向作为 0&#xff08;即参考方向…...

不同路径

不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff…...

WPS工具栏灰色怎么办

WPS离线不登录&#xff0c;开启工具栏等相关功能 当你在使用WPS的过程中&#xff0c;若因网络问题或其他特殊原因&#xff0c;导致无法登录使用WPS时&#xff0c;可根据以下步骤开启离线兼容模式&#xff0c;开启此模式后&#xff0c;可在未登录的状态下&#xff0c;激活并使用…...

js的节流与防抖方法封装

简介 节流&#xff08;Throttling&#xff09;和 防抖&#xff08;Debouncing&#xff09; 是防止频繁触发函数执行的两种技术&#xff0c;它们的目标都是减少函数的执行次数。 区别 防抖&#xff08;Debouncing&#xff09; &#xff1a;当用户停止触发事件后&#xff0c;经…...

深信服企业级数据备份与恢复系统(整机裸机恢复)

概述 深信服企业级数据备份与恢复系统可实现无需搭建目标环境&#xff0c;目标机可以是没有操作系统的物理主机或虚拟机&#xff0c;实现异构环境下的裸机恢复。 深信服企业级数据备份与恢复系统支持的多种连接恢复方式&#xff1a; 1. PXE连接恢复&#xff1a;PXE连接需要做…...

uniapp 微信小程序 页面部分截图实现

uniapp 微信小程序 页面部分截图实现 ​ 原理都是将页面元素画成canvas 然后将canvas转化为图片&#xff0c;问题是我页面里边本来就有一个canvas&#xff0c;ucharts图画的canvas我无法画出这块。 ​ 想了一晚上&#xff0c;既然canvas最后能转化为图片&#xff0c;那我直接…...

Sequelize ORM sql 语句工具

Sequelize ORM sql 语句工具 sequelize orm中文网 视频学习长乐未央 初始化配置 Sequelize orm 配置文章落日沉溺于海 在命令行中全局安装 npm i -g sequelize-clisequelize 执行需要匹配 mysql2 对应的依赖&#xff08;安装 mysql2&#xff09; npm i sequelize mysql2初始化…...

搭建Nacos注册中心

Nacos介绍 目前开源的注册中心框架有很多&#xff0c;国内比较常见的有&#xff1a; Eureka&#xff1a;Netflix公司出品&#xff0c;目前被集成在SpringCloud当中&#xff0c;一般用于Java应用 Nacos&#xff1a;Alibaba公司出品&#xff0c;目前被集成在SpringCloudAlibaba中…...

Linux 下SVN新手操作手册

下面来介绍Linux 下 SVN操作方法&#xff1a; 1、SVN的安装 Centos 7 安装Subversion sudo yum -y install subversion Ubuntu 安装Subversion sudo apt-get install subversion 自定义安装&#xff0c;官方地址&#xff1a;https://subversion.apache.org/ 2、SVN的使用…...

解释下什么是面向对象?面向对象和面向过程的区别?

看着很基础是吧&#xff0c;你还真不一定会 4-Java 中创建对象的几种方式&#xff1f; 1、使用new关键字&#xff0c;最常见的创建方式&#xff0c;通过调用类的构造方法&#xff08;构造器&#xff09;来创建对象。 2、使用反射&#xff0c;通过java的反射API可以动态的创建对…...

【CDN】快速了解CDN是什么?以及工作原理和应用场景

快速了解CDN是什么&#xff1f;以及工作原理和应用场景 一、什么是CDN&#xff1f;CDN相关的术语解释 二、CDN工作原理三、CDN与传统网站的区别四、CDN的作用和意义五、CDN的应用场景 一、什么是CDN&#xff1f; CDN英文全称Content Delivery Network&#xff0c;中文翻译即为内…...

【计算机视觉基础CV-图像分类】05 - 深入解析ResNet与GoogLeNet:从基础理论到实际应用

引言 在上一篇文章中&#xff0c;我们详细介绍了ResNet与GoogLeNet的网络结构、设计理念及其在图像分类中的应用。本文将继续深入探讨如何在实际项目中应用这些模型&#xff0c;特别是如何保存训练好的模型、加载模型以及使用模型进行新图像的预测。通过这些步骤&#xff0c;读…...

WPF+MVVM案例实战与特效(四十五)- 打造优雅交互:ListBox 的高级定制与行为触发(侧边菜单交互面板)

文章目录 1、引言2、案例效果3、案例实现1、依赖安装2、文件创建3、代码实现1、依赖引用与上下文2、个性化视觉效果:自定义 ItemContainerStyle3、页面样式与布局完整代码4、ViewModel 逻辑实现5、子界面代码:3、实现效果4、源代码获取5、总结1、引言 在WPF应用程序开发中,…...

Git进阶:本地或远程仓库如何回滚到之前的某个commit

在Git的使用过程中&#xff0c;我们经常会遇到需要回滚到之前某个commit的情况。无论是为了修复错误、撤销更改&#xff0c;还是为了重新组织代码&#xff0c;回滚到特定commit都是一个非常有用的技能。本文将介绍几种常用的回滚方法&#xff0c;帮助读者更好地掌握Git版本控制…...

Django 后端数据传给前端

Step 1 创建一个数据库 Step 2 在Django中点击数据库连接 Step 3 连接成功 Step 4 settings中找DATABASES Step 5 将数据库挂上面 将数据库引擎和数据库名改成自己的 Step 6 在_init_.py中加上数据库的支持语句 import pymysql pymysql.install_as_MySQLdb()Step7 简单创建两列…...

Docker 技术系列之安装多版本Mysql5.6和Mysql5.7

image 大家好&#xff0c;后面的就不是关于MAC专有的内容&#xff0c;基本是跟Java环境&#xff0c;基础技术方面有关。所以这个教程对于在linux系统还是macOS都是通用的&#xff0c;不用担心。 上一篇&#xff0c;我们安装好对应的Docker之后&#xff0c;感受到了它的便利。接…...

C# 范围判断函数

封装范围函数 public static class CommonUtil {/// <summary>/// 范围判断函数&#xff0c;检查给定的值是否在指定的最小值和最大值之间。/// 例如&#xff0c;可以用来判断当前日期是否在开始日期和结束日期之间。/// 该方法适用于任何实现了 IComparable 接口的类型…...

技术速递|使用 Dependabot 管理 .NET SDK 更新

作者&#xff1a;Jamie Magee - 高级软件工程师 排版&#xff1a;Alan Wang 保持 .NET SDK 版本的更新对于维护安全高效的应用程序至关重要。现在 Dependabot 可以在 global.json 中更新 .NET SDK 版本&#xff0c;这使您可以比以往更轻松地确保自己的应用程序始终运行最新的安…...

笔记本通过HDMI转VGA线连接戴尔显示器,wifi不可用或网速变慢

早上开开心心的来使用我的分屏显示器&#xff0c;结果winP开拓展&#xff0c;我的wifi就断掉了&#xff0c;琢磨了好一阵我以为是wifi的问题&#xff0c;发现不进行拓展&#xff0c;网络又好了&#xff0c;一上午就研究这个了&#xff0c;说是hdmi信号干扰了wifi信号啥的额&…...

Excel中match()函数

函数功能概述 MATCH 函数是 Excel 中用于在指定区域中查找特定值的位置的函数。它返回指定数值在指定数组区域中的位置。这个位置是相对于查找区域的相对位置&#xff0c;而不是绝对的单元格位置。语法结构 MATCH(lookup_value, lookup_array, match_type)lookup_value&#xf…...

ACl访问控制列表

ACL的原理 ACL也称为访问控制列表&#xff0c;主要有包过滤的功能&#xff0c;同时也是包过滤防火前的本质 其方式主要是定立规则&#xff0c;这些规则控制着数据包的允许或者通过 ACL的场景 如下图&#xff0c;在全网互通的情况下&#xff0c;控制特定的数据包走向 例如控…...

android 用户空间切换流程

在Android开发中,创建和切换用户是一个重要的功能,特别是在需要多用户支持的应用中,下面讲述一下用户切换的流程。 一、CarUserManager.java 准备创建新用户,可以减少真正创建用户的时间 @RequiresPermission(anyOf = {Manifest.permission.MANAGE_USERS,Manifest.permis…...

突破续航瓶颈:数字样机技术引领新能源汽车复合制动新方向

随着我国经济快速发展和人民生活水平不断提升&#xff0c;汽车保有量截至2023年9月底就已达到了3.3亿&#xff0c;同比增长6.32%。庞大的汽车保有量对我国的环境和能源都产生了巨大的压力&#xff0c;具备节能环保优势的新能源汽车对于有效解决环境恶化和能源危机问题具有重要意…...

51单片机仿真摇号抽奖机源程序 12864液晶显示

资料下载地址&#xff1a;51单片机仿真摇号抽奖机源程序12864液晶显示仿真程序 一、功能介绍 单片机连接12864&#xff08;st7920&#xff09;液晶显示器和1个按键接INT0&#xff0c;模拟一个抽奖机。 实现效果&#xff1a; 1、液晶初始显示“祝你好运&#xff01;”&#xff…...

路由器的原理

✍作者&#xff1a;柒烨带你飞 &#x1f4aa;格言&#xff1a;生活的情况越艰难&#xff0c;我越感到自己更坚强&#xff1b;我这个人走得很慢&#xff0c;但我从不后退。 &#x1f4dc;系列专栏&#xff1a;网路安全入门系列 目录 路由器的原理一&#xff0c;路由器基础及相关…...

Vue(四)

1.Vuex 1.1 Vuex是什么 Vuex 是一个插件&#xff0c;可以帮我们管理 Vue 通用的数据。例如&#xff1a;购物车数据、个人信息数据。 1.2 vuex的使用 1.安装 vuex 安装 vuex 与 vue-router 类似&#xff0c;vuex 是一个独立存在的插件&#xff0c;如果脚手架初始化没有选 v…...

今日总结 2024-12-23

项目初始化 拉取代码与环境配置&#xff1a; 难点&#xff1a;Git 命令不熟悉&#xff0c;依赖文件定位不准&#xff0c;启动脚本含义不明。解决办法&#xff1a;系统学习 Git 基础操作&#xff0c;如通过官方文档、优质的 Git 教程视频&#xff0c;反复练习克隆、分支切换等常…...

Vue常用指令

1. 插值表达式 {{}} <script setup> let msg="hello vue!" </script> <template> <h1>{{ msg }}--{{ 1+1 }}--{{ msg+sb }}</h1> </template> 2. Vue 常用指令 (以v- 开头) 2.1 v-html 替换标签元素内容,包含标签…...

欢乐力扣1-10

文章目录 前言1、合并两个有序数组1.1.描述 2、移除元素2.1.描述2.2.思路 3、删除有序数组中的重复元素3.1.描述3.2.思路 4、输出有序数组中的重复项二4.1.描述4.2.思路 5、多数元素5.1.描述5.2.思路 6、轮转数组6.1.描述6.2.思路 7、买卖股票最佳时机一7.1.思路 8、买卖股票最…...

[创业之路-204]:《华为战略管理法-DSTE实战体系》- 5-平衡记分卡绩效管理

目录 一、平衡计分卡概述 1、平衡计分卡的基本概念 2、平衡计分卡的发展阶段 3、平衡计分卡在华为的应用 4、平衡计分卡的优缺点 五、财务&#xff08;股东&#xff09;、顾客&#xff08;用户&#xff09;、内部运营&#xff08;内部&#xff09;及学习与发展&#xff0…...

算法设计期末复习

文章目录 1. 什么是算法&#xff0c;算法有哪些特征&#xff0c;算法设计的基本步骤&#xff0c;算法的时间复杂度的确定2. 什么是算法分析&#xff0c;算法分析的主要内容是什么&#xff1f;怎么确定算法的时间复杂度&#xff1f;3. 什么是分治算法&#xff0c;分治算法通常用…...

芝法酱学习笔记(2.2)——sql性能优化2

一、前言 在上一节中&#xff0c;我们使用实验的方式&#xff0c;验证了销售单报表的一些sql性能优化的猜想。但实验结果出乎我们的意料&#xff0c;首先是时间查询使用char和datetime相比&#xff0c;char可能更快&#xff0c;使用bigint&#xff08;转为秒&#xff09;和cha…...

Linux 安装 nvm

Linux 安装 nvm 网上用curl命令安装的方式都下载不成功&#xff0c;直接使用压缩包安装 ####### wget https://github.com/nvm-sh/nvm/archive/refs/tags/v0.39.1.tar.gz mkdir -p /root/.nvm tar xvf nvm-0.39.1.tar.gz -C /root/.nvm#######vi ~/.bashrc,在~/.bashrc的末尾…...

图像处理基础 | 查看两张图像的亮度差异,Y通道相减

两张图像的Y通道相减通常用于图像差异分析或比较&#xff0c;尤其是在亮度方面。具体来说&#xff0c;这一操作是基于YCbCr颜色空间中的Y通道进行的&#xff0c;其中Y通道代表图像的亮度信息&#xff08;亮度成分&#xff09;&#xff0c;而Cb和Cr通道分别代表色度成分&#xf…...