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

2024年k8s最新版本安装教程

k8s安装教程

    • 1 k8s介绍
    • 2 环境搭建
      • 2.1 主机准备
      • 2.2 主机初始化
        • 2.2.1 安装wget
        • 2.2.2 更换yum源
        • 2.2.3 常用软件安装
        • 2.2.4 关闭防火墙
        • 2.2.5 关闭selinux
        • 2.2.6 关闭 swap
        • 2.2.7 同步时间
        • 2.2.8 修改Linux内核参数
        • 2.2.9 配置ipvs功能
      • 2.3 容器安装
        • 2.3.1 设置软件yum源
        • 2.3.2 安装docker软件
        • 2.3.3 配置加速器
      • 2.4 cri环境搭建
        • 2.4.1 软件下载
        • 2.4.2 安装配置
      • 2.5 k8s环境安装
        • 2.5.1 指定k8s源
        • 2.5.2 安装kubeadm kubelet kubectl
        • 2.5.3 在master节点检查镜像文件列表
        • 2.5.4 在master节点上获取镜像文件
        • 2.5.5 在master节点初始化
        • 2.5.6 在node节点加入master节点
        • 2.5.7 网络插件安装

1 k8s介绍

kubernetes,k和s直接是8个字母,简称k8s。是采用Go语言开发的。于2014年9月发布第一个版本,2015年7月发布第一个正式版本。

官网:https://kubernetes.io

代码仓库:https://github.com/kubernetes/kubernetes

在这里插入图片描述

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

  • 自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器
  • 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整
  • 服务发现:服务可以通过自动发现的形式找到它所依赖的服务
  • 负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡
  • 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本
  • 存储编排:可以根据容器自身的需求自动创建存储卷

在这里插入图片描述

2 环境搭建

这里配一个一主两从的示意图

2.1 主机准备

序号主机IP配置备注
1192.168.123.92CPU:4核,内存:4G,硬盘:40GBk8s-master
2192.168.123.93CPU:2核,内存:4G,硬盘:40GBk8s-node1
3192.168.123.94CPU:2核,内存:4G,硬盘:40GBk8s-node2
# 序号1主机终端操作,操作完毕断开重连
hostnamectl set-hostname k8s-master# 序号2主机终端操作,操作完毕断开重连
hostnamectl set-hostname k8s-node1# 序号3主机终端操作,操作完毕断开重连
hostnamectl set-hostname k8s-node2# 三台主机都需要操作:hosts解析
# vim /etc/hosts192.168.123.92 k8s-master
192.168.123.93 k8s-node1
192.168.123.94 k8s-node2

2.2 主机初始化

2.2.1 安装wget
yum -y install wget
2.2.2 更换yum源

这里是CentOS7操作系统,更换成阿里yum源

# 备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak# 下载镜像源
wget -c http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS-Base.repo# 重新生成缓存
yum clean all && yum makecache
2.2.3 常用软件安装
yum -y install vim lrzsz tree
2.2.4 关闭防火墙
systemctl stop firewalldsystemctl disable firewalld
2.2.5 关闭selinux
# 临时生效
setenforce 0
# 永久生效
# vim /etc/selinux/config
# 将SELINUX=的值改成disabled,即:SELINUX=disabled
2.2.6 关闭 swap
# 临时关闭
swapoff -a
# 永久生效
# vim /etc/fstab
# 将 [/dev/mapper/centos-swap swap                    swap    defaults        0 0] 这一行注释掉
2.2.7 同步时间
# 安装
yum -y install chrony# vim /etc/chrony.conf 注释下面内容
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst# 新增阿里时间服务器
server ntp.aliyun.com iburst# 保存退出后,设置开机自启,重新加载配置,重启服务
systemctl enable chronyd
systemctl daemon-reload
systemctl restart chronyd# 验证是否设置成功
# 方式一
chronyc sources
# 方式二
date
2.2.8 修改Linux内核参数
cat >> /etc/sysctl.d/k8s.conf << EOF
# 内核参数调整
vm.swappiness=0
# 配置iptables参数,使得流经网桥的流量也经过iptables/netfilter防火墙
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF# 配置生效,加载网桥过滤模块
modprobe br_netfilter
modprobe overlay# 重新加载
sysctl -p /etc/sysctl.d/k8s.conf
# 终端输出如下
# vm.swappiness = 0
# net.bridge.bridge-nf-call-ip6tables = 1
# net.bridge.bridge-nf-call-iptables = 1
# net.ipv4.ip_forward = 1
2.2.9 配置ipvs功能
# 安装ipset和ipvsadm
yum install ipset ipvsadm -y# 添加需要加载的模块写入脚本文件
cat >> /etc/sysconfig/modules/ipvs.modules << EOF 
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF# 为脚本文件添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules# 执行脚本文件
/bin/bash /etc/sysconfig/modules/ipvs.modules# 查看对应的模块是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
# 终端输出如下
# ip_vs_sh               12688  0 
# ip_vs_wrr              12697  0 
# ip_vs_rr               12600  0 
# ip_vs                 145458  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
# nf_conntrack          139264  1 ip_vs
# libcrc32c              12644  3 xfs,ip_vs,nf_conntrack

2.3 容器安装

2.3.1 设置软件yum源
# yum-config-manager命令能用,需要安装的依赖
yum install -y yum-utils device-mapper-persistent-data lvm2# 新增docker阿里镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.3.2 安装docker软件
# 这里不指定版本,安装的是最新版docker
yum install -y docker-ce
2.3.3 配置加速器
cat >> /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://afnsj47q.mirror.aliyuncs.com"], # 私有仓配置# "insecure-registries": ["域名或ip"],"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF[root@k8s-master ~]# cat /etc/docker/daemon.json 
{
"registry-mirrors": [# 个人阿里云加速器配置"https://afnsj47q.mirror.aliyuncs.com"], # 私有仓配置# "insecure-registries": ["域名或ip"],"exec-opts": ["native.cgroupdriver=systemd"]
}
# 重启加载配置,设置开机自启并开启docker服务
systemctl daemon-reload
systemctl enable docker
systemctl start docker

2.4 cri环境搭建

2.4.1 软件下载

软件地址:https://github.com/Mirantis/cri-dockerd/releases

# 这里下载的是cri最新版本
wget -c https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.8/cri-dockerd-0.3.8.amd64.tgz
2.4.2 安装配置
# 解压下载文件
tar -xvf cri-dockerd-0.3.8.amd64.tgz -C /usr/local
mv /usr/local/cri-dockerd/cri-dockerd /usr/local/bin
cri-dockerd --version
# cri-dockerd交给systemd管理的配置文件
cat > /etc/systemd/system/cri-dockerd.service<<-EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9 --network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cri-dockerd-root-directory=/var/lib/dockershim --docker-endpoint=unix:///var/run/docker.sock --
cri-dockerd-root-directory=/var/lib/docker
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOFcat > /etc/systemd/system/cri-dockerd.socket <<-EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
[Socket]
ListenStream=/var/run/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
# 加载配置,设置开启自启并启动服务
systemctl daemon-reload
systemctl enable cri-dockerd
systemctl start cri-dockerd

2.5 k8s环境安装

2.5.1 指定k8s源

这里使用阿里的yum源

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
2.5.2 安装kubeadm kubelet kubectl
# 安装kubeadm kubelet kubectl
yum -y install kubeadm kubelet kubectl# 设置kubelet开机自启和启动
systemctl enable kubelet && systemctl restart kubelet
2.5.3 在master节点检查镜像文件列表
[root@k8s-master ~]# kubeadm config images list
I1220 18:09:30.152344   26378 version.go:256] remote version is much newer: v1.29.0; falling back to: stable-1.28
registry.k8s.io/kube-apiserver:v1.28.4
registry.k8s.io/kube-controller-manager:v1.28.4
registry.k8s.io/kube-scheduler:v1.28.4
registry.k8s.io/kube-proxy:v1.28.4
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.9-0
registry.k8s.io/coredns/coredns:v1.10.1
2.5.4 在master节点上获取镜像文件
# cat images.sh 
#!/usr/bin/env bash
images=$(kubeadm config images list --kubernetes-version=1.28.4 | awk -F'/' '{print $NF}')
for i in ${images}
dodocker pull registry.aliyuncs.com/google_containers/$idocker tag registry.aliyuncs.com/google_containers/$i registry.k8s.io/$idocker rmi registry.aliyuncs.com/google_containers/$i
done

下载后一个不满足,需要再手动修改下

docker tag registry.k8s.io/coredns:v1.10.1 registry.k8s.io/coredns/coredns:v1.10.1
docker rmi registry.k8s.io/coredns:v1.10.1# kubeadm config images list 和 docker images保持一致了
[root@centos ~]# kubeadm config images list
I1215 08:55:02.856427   14692 version.go:256] remote version is much newer: v1.29.0; falling back to: stable-1.28
registry.k8s.io/kube-apiserver:v1.28.4
registry.k8s.io/kube-controller-manager:v1.28.4
registry.k8s.io/kube-scheduler:v1.28.4
registry.k8s.io/kube-proxy:v1.28.4
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.9-0
registry.k8s.io/coredns/coredns:v1.10.1
[root@centos ~]# docker images
REPOSITORY                                TAG       IMAGE ID       CREATED         SIZE
registry.k8s.io/kube-apiserver            v1.28.4   7fe0e6f37db3   4 weeks ago     126MB
registry.k8s.io/kube-controller-manager   v1.28.4   d058aa5ab969   4 weeks ago     122MB
registry.k8s.io/kube-scheduler            v1.28.4   e3db313c6dbc   4 weeks ago     60.1MB
registry.k8s.io/kube-proxy                v1.28.4   83f6cc407eed   4 weeks ago     73.2MB
registry.k8s.io/etcd                      3.5.9-0   73deb9a3f702   7 months ago    294MB
registry.k8s.io/coredns/coredns           v1.10.1   ead0a4a53df8   10 months ago   53.6MB
registry.k8s.io/pause                     3.9       e6f181688397   14 months ago   744kB
2.5.5 在master节点初始化
# 直接初始化
kubeadm init --kubernetes-version=1.28.4 \
--node-name=k8s-master \
--apiserver-advertise-address=192.168.123.92 \
--image-repository registry.k8s.io \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock
# 重置并初始化
kubeadm reset -f --cri-socket=unix:///var/run/cri-dockerd.sock && kubeadm init --kubernetes-version=1.28.4 \
--node-name=k8s-master \
--apiserver-advertise-address=192.168.123.92 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock

master节点初始化成功,终端显示

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.123.92:6443 --token jy6fvz.3zf24v9sb5f4dto2 \--discovery-token-ca-cert-hash sha256:d0d61ece9c05b8ffcc4b246dfedf139dab7a701618e11621934575844216aee4

跟进终端提示,主节点操作

mkdir -p $HOME/.kube && cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && chown $(id -u):$(id -g) $HOME/.kube/config
2.5.6 在node节点加入master节点

node节点加入主节点,在其node节点运行

# 直接加入
kubeadm join 192.168.123.92:6443 --token jy6fvz.3zf24v9sb5f4dto2 \--discovery-token-ca-cert-hash sha256:d0d61ece9c05b8ffcc4b246dfedf139dab7a701618e11621934575844216aee4 \--cri-socket=unix:///var/run/cri-dockerd.sock
# 重置并加入
kubeadm reset -f --cri-socket=unix:///var/run/cri-dockerd.sock && kubeadm join 192.168.123.92:6443 --token jy6fvz.3zf24v9sb5f4dto2 \--discovery-token-ca-cert-hash sha256:d0d61ece9c05b8ffcc4b246dfedf139dab7a701618e11621934575844216aee4 \--cri-socket=unix:///var/run/cri-dockerd.sock

重新生成加入节点token

kubeadm token create --print-join-command

设置kubectl命令可以在node节点操作

scp -r $HOME/.kube 192.168.123.93:$HOME/

至此kubeadm命令工作完成,kubectl命令开始工作

2.5.7 网络插件安装

只在master节点操作即可

安装网络插件kube-flannel

# 打开https://site.ip138.com/网站查询raw.githubusercontent.com网址的域名解析,然后配置到/etc/hosts
# 521github.com# 用wget命令下载kube-flannel.yml文件
wget --no-check-certificat https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml# 主节点执行
kubectl apply -f kube-flannel.yml

安装网络插件calico

官方网址:https://docs.tigera.io/

# 打开https://site.ip138.com/网站查询raw.githubusercontent.com网址的域名解析,然后配置到/etc/hosts
# 下载calico.yaml
# https://docs.tigera.io/calico/latest/getting-started/kubernetes/self-managed-onprem/onpremises
wget --no-check-certificat https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml# 官方提供的yaml文件中,ip识别策略(IPDETECTMETHOD)没有配置,即默认为first-found,这会导致一个网络异常的ip作为nodeIP被注册,从而影响node-to-nodemesh。# 解决方法
vim calico.yaml:/CLUSTER_TYPE# 在下添加:- name: IP_AUTODETECTION_METHODvalue: "interface=ens192"   # 192为Linux执行ip a或ifconfig的名称# 验证
kubectl get po -n kube-system

至此,k8s最新版集群环境搭建完毕

相关文章:

2024年k8s最新版本安装教程

k8s安装教程 1 k8s介绍2 环境搭建2.1 主机准备2.2 主机初始化2.2.1 安装wget2.2.2 更换yum源2.2.3 常用软件安装2.2.4 关闭防火墙2.2.5 关闭selinux2.2.6 关闭 swap2.2.7 同步时间2.2.8 修改Linux内核参数2.2.9 配置ipvs功能 2.3 容器安装2.3.1 设置软件yum源2.3.2 安装docker软…...

Gin 获取请求参数

POST 请求参数 Gin 获取Post请求URL参数有三种方式 func (c *Context) PostForm(key string) string func (c *Context) DefaultPostForm(key, defaultValue string) string func (c *Context) GetPostForm(key string) (string, bool)大多数情况下使用的是application/x-www…...

安卓 Kotlin 面试题 31-40

&#x1f525; 31、简述Kotlin 中的内联类&#xff0c;我们什么时候需要&#xff1f;&#x1f525; 有时&#xff0c;业务逻辑需要围绕某种类型创建包装器。 但是&#xff0c;由于额外的堆分配&#xff0c;它会引入运行时开销。 此外&#xff0c;如果包装的类型是原始类型&…...

【洛谷千题详解】P1613 跑路

目录 题目总览 题目描述 输入格式 输出格式 思路分析 AC代码 题目总览 题目描述 小 A 的工作不仅繁琐&#xff0c;更有苛刻的规定&#xff0c;要求小 A 每天早上在 6:00 之前到达公司&#xff0c;否则这个月工资清零。可是小 A 偏偏又有赖床的坏毛病。于是为了保住自己的…...

如何定义resultType和resultMap,它们之间的区别是什么?解释一下<parameterType>的作用和用法。

在MyBatis中&#xff0c;resultType和resultMap都用于将数据库查询结果映射到Java对象&#xff0c;但它们在使用方式和灵活性上有一些区别。 resultType resultType是一个简单的类型别名&#xff0c;它用于指定查询结果应该映射到的Java类型。当数据库表中的列名和Java对象的属…...

Docker:部署微服务集群

1. 部署微服务集群 实现思路&#xff1a; ① 查看课前资料提供的cloud-demo文件夹&#xff0c;里面已经编写好了docker-compose文件 ② 修改自己的cloud-demo项目&#xff0c;将数据库、nacos地址都命名为docker-compose中的服务名 ③ 使用maven打包工具&#xff0c;将项目…...

傅里叶变换pytorch使用

参考视频&#xff1a;1 傅里叶变换原理_哔哩哔哩_bilibili 傅里叶变换是干嘛的&#xff1a; 傅里叶得到低频、高频信息&#xff0c;针对低频、高频处理能够实现不同的目的。 傅里叶过程是可逆的&#xff0c;图像经过傅里叶变换、逆傅里叶变换后&#xff0c;能够恢复到原始图像…...

LeetCode104 二叉树的最大深度

题目 给定一个二叉树 root &#xff0c;返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;root [1,null,…...

使用Spring的AOP

使用Spring的AOP 一、AOP 的常用注解1.切面类Aspect2.Pointcut3.前置通知Before4.后置通知AfterReturning5.环绕通知Around6.异常通知AfterThrowing7.最终通知After8.切面顺序Order9.启用自动代理EnableAspectJAutoProxy 二、AOP注解方式开发三、AOP 全注解开发四、基于XML配置…...

爬虫之矛---JavaScript基石篇3<JavaScript构造函数的内部机制和应用(2)>

前言: 继续上一篇https://blog.csdn.net/m0_56758840/article/details/136592611 正文: 1.ES6中的类和构造函数的对应关系 A. 介绍ES6引入的类的概念和语法糖 类的概念&#xff1a; ES6引入了类&#xff08;class&#xff09;的概念&#xff0c;类是一种抽象的数据类型&…...

_note_05

1.说一说什么是函数重载&#xff1f; 函数签名相同除了 形参不同数据类型 函数签名相同除了 形参不同个数 2.void关键字的作用&#xff1f;返回值是void &#xff0c;可以写return 吗&#xff1f; 函数无返回&#xff0c;使用void修饰; 可以只使用return使函数结束; 3.按要…...

将格蠹GDK8的cmake3.10升级为cmake3.15

#升级过程# 1、wget https://cmake.org/files/v3.15/cmake-3.15.0-rc1.tar.gz 2、tar -zxvf cmake-3.15.0-rc1.tar.gz 3 、cd cmake-3.15.0-rc1 4、./configure 5、sudo make install 6、reboot 7、查看cmake版本&#xff1a; geduergdk8:~$ cmake --version cmake ve…...

b树(一篇文章带你 理解 )

目录 一、引言 二、B树的基本定义 三、B树的性质与操作 1 查找操作 2 插入操作 3 删除操作 四、B树的应用场景 1 数据库索引 2 文件系统 3 网络路由表 五、哪些数据库系统不使用B树进行索引 1 列式数据库 2 图形数据库 3 内存数据库 4 NoSQL数据库 5 分布式数据…...

OD_2024_C卷_200分_7、5G网络建设【JAVA】【最小生成树】

package odjava;import java.util.Scanner;public class 七_5G网络建设 {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt(); // 基站数量&#xff08;节点数&#xff09;int m sc.nextInt(); // 基站对数量&#xff08;边数&…...

面试题:分布式锁用了 Redis 的什么数据结构

在使用 Redis 实现分布式锁时&#xff0c;通常使用 Redis 的字符串&#xff08;String&#xff09;。Redis 的字符串是最基本的数据类型&#xff0c;一个键对应一个值&#xff0c;它能够存储任何形式的字符串&#xff0c;包括二进制数据。字符串类型的值最多可以是 512MB。 Re…...

【学习心得】websocket协议简介并与http协议对比

一、轮询和长轮询 在websocket协议出现之前&#xff0c;要想实现服务器和客户端的双向持久通信采取的是Ajax轮询。它的原理是每隔一段时间客户端就给服务器发送请求找服务器要数据。 让我们通过一个生活化的比喻来解释轮询和长轮询假设你正在与一位不怎么主动说话的老大爷&…...

基于Token的身份验证:安全与效率的结合

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

Electron程序如何在MacOS下获取相册访问权限

1.通过entitiment.plist&#xff0c;在electron-builder签名打包时&#xff0c;给app包打上签名。最后可以通过codesign命令进行验证。 TestPhotos.plist electron-builder配置文件中加上刚刚的plist文件。 通过codesign命令验证&#xff0c;若出现这个&#xff0c;则说明成…...

uniapp让输入框保持聚焦状态,不会失去焦点

使用场景&#xff1a;当输入框还有发送按钮的时候&#xff0c;点击发送希望软键盘不消失&#xff0c;还可以继续输入&#xff0c;或者避免因输入图片标签造成的屏闪问题 多次尝试后发现一个很实用的方法&#xff0c;适用input输入框和editor输入框 解决办法&#xff1a;把cli…...

面试中如何介绍mysql的B+树

B树是B树的变体&#xff0c;也是一颗多路搜索树。在MySQL中&#xff0c;B树是为磁盘或者其他直接辅助存储设备所设计的一种平衡的查找树结构。其具有以下特点&#xff1a; 每个节点最多有m个子女&#xff0c;m阶的B树深度最多为m。非根节点关键值个数范围是⌈m/2⌉-1<k<m…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...