当前位置: 首页 > 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…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...