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

云计算与大数据——部署Kubernetes集群+完成nginx部署(超级详细!)

云计算与大数据——部署Kubernetes集群+完成nginx部署(超级详细!)

部署 Kubernetes 集群的基本思路如下:

  1. 准备环境:

    • 选择适合的操作系统:根据需求选择适合的 Linux 发行版作为操作系统,并确保在所有节点上进行相同的选择。
    • 安装 Docker:在所有节点上安装 Docker,它将用于容器化应用程序和组件。
    • 安装 Kubernetes 工具:安装 kubectlkubeadmkubelet 工具,这些工具将用于集群的管理和配置。
  2. 设置主节点 (Master Node):

    • 选择一个节点作为主节点:通常是从节点中选择一台作为主节点,可以是任意一台具备足够资源的机器。
    • 初始化主节点:使用 kubeadm init 命令初始化主节点,并获取生成的加入令牌 (join token)。
    • 设置网络插件:选择并安装适当的网络插件,例如 Flannel、Calico 或 Weave,以便节点之间能够进行网络通信。
  3. 添加从节点 (Worker Nodes):

    • 在每个从节点上运行加入命令:使用之前生成的加入令牌,在每个从节点上运行 kubeadm join 命令,将其加入到集群中。
    • 确认节点加入:在主节点上运行 kubectl get nodes 命令,确保所有节点都成功加入集群。
  4. 部署网络插件:

    • 根据选定的网络插件,按照其特定的部署和配置方式进行操作。这将确保各节点之间可以进行网络通信,并提供 Kubernetes 集群的网络功能。
  5. 部署其他组件和应用程序:

    • 部署其他所需的核心组件,如 kube-proxy 和 kube-dns/coredns。
    • 部署您的应用程序或服务,可以使用 Kubernetes 的 Deployment、Service 或其他资源类型来管理它们。
  6. 验证集群状态:

    • 运行 kubectl get nodes 和其他 kubectl 命令,以确保集群中的节点和组件正常工作。
    • 测试应用程序:在集群中部署的应用程序上运行测试,确保它们能够正常运行并与其他组件交互。

以上是部署 Kubernetes 集群的基本思路。具体的步骤和细节可能会因环境和需求而有所不同,但这个简要说明可以帮助您了解部署过程的大致流程。

接下来我们进行实操部署kubernetes集群和完成nginx服务。

开始部署Kubernetes集群

以下以root登录运行命令:

一、在所有节点安装和配置docker

1.安装docker所需的工具

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

在这里插入图片描述
2.配置阿里云的docker源

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

在这里插入图片描述
3.安装docker-ce、docker-ce-cli、containerd.io

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

在这里插入图片描述
4.启动docker

systemctl enable docker	#设置开机自启
systemctl start docker		#启动docker

在这里插入图片描述
5. 设置镜像加速器
#设置镜像加速器,新建daemon.json文件(参考文献1)

cat <<EOF > /etc/docker/daemon.json
{"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}

在这里插入图片描述
在这里插入图片描述
6.生成并修改containerd 的默认配置文件/etc/containerd/config.toml(参考文献2)

containerd config default > /etc/containerd/config.toml

在这里插入图片描述
在这里插入图片描述
将sandbox_image = “registry.k8s.io/pause:3.6”
修改为sandbox_image = “k8simage/pause:3.6”
在这里插入图片描述
在这里插入图片描述

重启 containerd 服务

systemctl daemon-reload  
systemctl restart containerd.service 

在这里插入图片描述
在这里插入图片描述
注:此步骤可以解决failed to pull image \“registry.k8s.io/pause:3.6\”; Failed to create sandbox for pod :拉取 registry.k8s.io/pause:3.6 镜像等问题(具体错误问题可以通过运行以下命令查看日志:journalctl -xeu kubelet)
7.关闭防火墙

systemctl disable firewalld
systemctl stop firewalld

在这里插入图片描述
在这里插入图片描述
8.关闭selinux
#临时禁用selinux

setenforce 0

#或永久关闭,修改/etc/sysconfig/selinux文件设置

sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux

在这里插入图片描述
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
在这里插入图片描述
9.禁用交换分区

swapoff -a

#或永久禁用,注释掉/etc/fstab文件swap那一行

sed -i ‘s/.*swap.*/#&/’ /etc/fstab

在这里插入图片描述
在这里插入图片描述
10.修改内核参数
将桥接的IPv4流量传递到iptables的链(有一些ipv4的流量不能走iptables链,因为linux内核的一个过滤器,每个流量都会经过他,然后再匹配是否可进入当前应用进程去处理,所以会导致流量丢失),配置k8s.conf文件(k8s.conf文件原来不存在,需要自己创建的)

cat<<EOF> /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
vm.swappiness=0                  
EOF

在这里插入图片描述
在这里插入图片描述

sysctl --system 

#重新加载系统全部参数,或者使用sysctl -p亦可
在这里插入图片描述
在这里插入图片描述
文献1:https://yebd1h.smartapps.cn/pages/blog/index?blogId=123605246&_swebfr=1&_swebFromHost=bdlite

二、在全部节点(个别单独说明的除外)上安装配置Kubernetes

1.配置Kubernetes阿里云源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

在这里插入图片描述
在这里插入图片描述
2.安装kubeadm、kubectl、kubelet(kubeadm和kubectl都是工具,kubelet才是系统服务,参考文献1)

yum install -y kubelet-1.14.2
yum install -y kubeadm-1.14.2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.启动kubelet服务

systemctl enable kubelet && systemctl start kubelet

在这里插入图片描述
在这里插入图片描述
4. 生成当前版本的初始化配置文件到 /etc/kubernetes 目录下

kubeadm config print init-defaults > /etc/kubernetes/init-default.yaml

在这里插入图片描述
1)指定kube-apiserver广播给其他组件的IP地址
这个参数需要设置为主节点的IP地址,以确保其他节点可以访问到kube-apiserver
即:advertiseAddress: 1.2.3.4 -> advertiseAddress: [宿主机ip(内网)]
此项根据自己主节点的IP地址具体设定,本机设置的是:

advertiseAddress:192.168.95.20

2)指定安装镜像的仓库源
建议使用国内镜像如阿里云:
imageRepository: registry.aliyuncs.com/google_containers
注:我们开始会遇到以下初始化问题:

failed to pull image registry.k8s.io/kube-apiserver:v1.26.3

此设置结合kubeadm init命令的以下参数可以解决该问题:

--image-repository=registry.aliyuncs.com/google_containers

即初始化时:kubeadm init --image-repository=registry.aliyuncs.com/google_containers
初始化在后面
3)编辑/etc/hosts,添加一行:

192.168.95.20 k8s.cnblogs.com #需根据自己主机的IP地址进行修改

在这里插入图片描述
总体上第4步可以解决[kubelet-check] Initial timeout of 40s passed.这个复杂问题。
参考文献2:
https://blog.csdn.net/weixin_52156647/article/details/129765134
4)统一Kubernetes和docker的Cgroup Driver为systemd
修改/etc/docker/daemon.json 文件,添加如下参数:

vim /etc/docker/daemon.json 

#为了保持所有节点docker配置一致,所以其它节点的docker也改了

{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],	
"exec-opts": ["native.cgroupdriver=systemd"]
}

在这里插入图片描述
重新加载 Docker

systemctl daemon-reload
systemctl restart docker

5.在主节点上初始化Kubernetes
初始化之前先运行:

systemctl restart docker

在这里插入图片描述
kubelet命令补全

echo "source <(kubectl completion bash)" >> ~/.bash_profile
source .bash_profile

在这里插入图片描述
在这里插入图片描述
拉取镜像
列出Kubernetes集群启动所需的镜像列表。这些镜像包括控制平面组件(如kube-apiserver、kube-controller-manager和kube-scheduler)以及其他一些必要的组件(如etcd、CoreDNS等)
,并修改tag与所需版本保持一致。

kubeadm config images list

在这里插入图片描述
设置镜像源和脚本程序

vim image.sh
#!/bin/bash
url=registry.cn-hangzhou.aliyuncs.com/google_containers
version=v1.14.2
images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)
for imagename in ${images[@]} ; dodocker pull $url/$imagenamedocker tag $url/$imagename k8s.gcr.io/$imagenamedocker rmi -f $url/$imagename
done

在这里插入图片描述
运行脚本

chmod u+x image.sh
./image.sh
docker images

在这里插入图片描述
docker images查看docker仓库中的镜像,发现所有的镜像都是以registry.aliyuncs.com/google_containers/开头,有的与kubeadm config images list中要求的镜像名称不一样。我们要修改镜像名称,即对镜像重新打个tag

docker images

显示结果:

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.14.10 k8s.gcr.io/kube-apiserver:v1.14.10docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.14.10 k8s.gcr.io/kube-controller-manager:v1.14.10docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.14.10 k8s.gcr.io/kube-scheduler:v1.14.10docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.14.10 k8s.gcr.io/kube-proxy:v1.14.10docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1

在这里插入图片描述
修改完tag后再次查看发现镜像名和版本号与"kubeadm config images list"命令列出的Kubernetes集群启动所需的镜像列表保持一致了。
在这里插入图片描述
另一种方法我们也可以一个一个拉取镜像

kubeadm config images list

在这里插入图片描述

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.40.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.40.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.40.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.40.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1

在这里插入图片描述
再次查看docker镜像:

docker images

在这里插入图片描述
进行重置k8s集群

kubeadm reset

在这里插入图片描述
以解除端口占用,删除之前初始化时生成的配置文件等。
然后开始正式执行集群初始化:

kubeadm init --apiserver-advertise-address 192.168.95.20 --pod-network-cidr=10.244.0.0/16

在这里插入图片描述
执行信息出现:Your Kubernetes control-plane has initialized successfully!成功完成集群初始化。
在这里插入图片描述
在这里插入图片描述
6. 配置节点
以下3条命令使用普通用户:

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

7.注意从节点加入时的命令和秘钥

kubeadm join 192.168.95.20:6443 --token 7em598.2cwgsvdgga5fohae \--discovery-token-ca-cert-hash sha256:9fca7635ebe04c5fe7eccb8c30974ff0e4f7cb08785d1132956be9a800ded442

妥善保存此秘钥。
在这里插入图片描述
8.查看节点运行情况(NotReady状态)

kubectl get nodes

在这里插入图片描述

三、安装配置从节点Kubernetes

1.根据以上第一、二的相关步骤安装从节点软件及进行配置。
host1基本配置:
在这里插入图片描述
docker version
在这里插入图片描述

Kubectl version
kubeadm version
kubelet version

在这里插入图片描述
2.从节点加入集群(使用root用户)

kubeadm join 192.168.95.20:6443 --token 7em598.2cwgsvdgga5fohae \
--discovery-token-ca-cert-hash sha256:9fca7635ebe04c5fe7eccb8c30974ff0e4f7cb08785d1132956be9a800ded442

在这里插入图片描述
注:此步骤一般会遇到以下问题:

[ERROR CRI]: container runtime is not running:

这是因为用安转包安装的containerd,会默认禁用它作为容器运行时:
在这里插入图片描述
解决:
1)使用systemctl status containerd 查看状态
Active: active (running) 表示容器运行时正常运行
在这里插入图片描述
2)查看 /etc/containerd/config.toml文件,这个是容器运行时的配置文件
3)

vim /etc/containerd/config.toml

如果看到了这行:disabled_plugins : ["cri"]
将这行用#注释或者将"cri"删除:
#disabled_plugins : [“cri”]或者
disabled_plugins : []
4)重启容器运行时

systemctl restart containerd

在这里插入图片描述
参考文献3:https://blog.csdn.net/weixin_52156647/article/details/129758753

四、在主节点上查看加入的从节点并解决随后的问题

kubectl get nodes

在这里插入图片描述

1.此时STATUS显示NotReady
解决:
1)所有集群的节点进行重装kubernetes-cni:

yum reinstall -y kubernetes-cni

在这里插入图片描述
在这里插入图片描述
2)在主节点上安装网络:
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml,其中要将185.199.108.133 raw.githubusercontent.com加入etc/hosts
(参考文献五:https://www.cnblogs.com/sinferwu/p/12726833.html)
3. 运行kubectl get nodes时出现的问题
1)couldn’t get current server API group list:
解决:
不能用root运行该命令。
2)kubernetes-admin问题
K8S输入 kubectl get nodes显示The connection to the server localhost:8080 was refused - did you specify the right host or port?
出现这个问题的原因是 kubectl 命令需要使用 kubernetes-admin 来运行。可能是系统环境不干净导致,例如重装 k8s 前未完全清空配置等。
解决方法:
(1)将主节点初始化后生成的/etc/kubernetes/admin.conf文件复制到从节点相应目录。

scp /etc/kubernetes/admin.conf  host1:/etc/kubernetes/

在这里插入图片描述
(2)在所有节点上设置环境变量并更新

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile 
source ~/.bash_profile

在这里插入图片描述
在这里插入图片描述

在https://www.ipaddress.com/查询raw.githubusercontent.com的真实IP。

在这里插入图片描述
再次运行

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

安装flannel成功!
在这里插入图片描述
再次通过kubectl get nodes命令获取集群节点列表时候发现host1集群状态一直处于NotReady状态,通过查看日志发现报错:

journalctl -f -u kubelet

在这里插入图片描述
由日志信息可知,报错原因是不能从/var/llib/kubelet/config.yaml下载到kubelet的配置。

错误原因估计是我之前没有做 kubeadm init就运行了systemctl start kubelet
我们可以尝试将token更新,重新生成token,代码如下:

kubeadm token create --print-join-command

在主节点g更新token
在这里插入图片描述
复制输出的内容,在hsot1中运行
在这里插入图片描述
成功解决问题!
集群都是Ready状态!
在这里插入图片描述
参考文献六:https://www.cnblogs.com/eastwood001/p/16318644.html

五、测试Kubernetes

1.在主节点上运行:

kubectl create deployment nginx --image=nginx #创建一个httpd服务测试

在这里插入图片描述

kubectl expose deployment nginx --port=80 --type=NodePort #端口就写80,如果你写其他的可能防火墙拦截了

在这里插入图片描述

kubectl get svc,pod   #对外暴露端口

在这里插入图片描述
2.使用主节点IP地址加保留的端口访问Nginx主页:
比如:

192.168.95.20:21729

在这里插入图片描述
显示连接失败
使用命令

kubectl describe pod nginx-77b4fdf86c-krqtk

显示结果:

open /run/flannel/subnet.env: no such file or directory 

发现我缺少相关cni网络配置文件。
我们要仔细检查查看各个节点,包括主节点是否有/run/flannel/subnet.env,内容应该是类似如下:

FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true

通过检查报错日志发现我缺少相关cni网络配置文件。

创建cni网络相关配置文件:
mkdir -p /etc/cni/net.d/
cat <<EOF> /etc/cni/net.d/10-flannel.conf
{"name":"cbr0","type":"flannel","delegate": {"isDefaultGateway": true}}
EOF

这里我们使用 cat 命令和重定向操作符 (<<),将 {“name”:“cbr0”,“type”:“flannel”,“delegate”: {“isDefaultGateway”: true}} 内容写入到 /etc/cni/net.d/10-flannel.conf 文件中。

mkdir /usr/share/oci-umount/oci-umount.d -p
mkdir /run/flannel/
cat <<EOF> /run/flannel/subnet.env
FLANNEL_NETWORK=10.199.0.0/16
FLANNEL_SUBNET=10.199.1.0/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
EOF

这里在 <<EOF 和 EOF 之间,有多行文本,每行都包含一个环境变量的定义。具体来说:
FLANNEL_NETWORK=10.199.0.0/16 定义了名为 FLANNEL_NETWORK 的环境变量,并将其设置为 10.199.0.0/16。
FLANNEL_SUBNET=10.199.1.0/24 定义了名为 FLANNEL_SUBNET 的环境变量,并将其设置为 10.199.1.0/24。
FLANNEL_MTU=1450 定义了名为 FLANNEL_MTU 的环境变量,并将其设置为 1450。
FLANNEL_IPMASQ=true 定义了名为 FLANNEL_IPMASQ 的环境变量,并将其设置为 true。
在这里插入图片描述
若哪个节点没有该文件那就拷贝一份,再次进行部署,应该就不会报这个错了。
我们在host1节点检查一下:

cat /run/flannel/subnet.env
cat  /etc/cni/net.d/10-flannel.conf

在这里插入图片描述
通过命令查看到从节点已经有了相关cni网络相关配置文件。
如果缺少这些重要配置文件也会在集群日志中报错:

cni config uninitialized
5月 06 12:44:06 master kubelet[48391]: W0506 12:44:06.599700   48391 cni.go:213] Unable to update cni config: No networks found in /etc/cni/net.d
5月 06 12:44:07 master kubelet[48391]: E0506 12:44:07.068343   48391 kubelet.go:2170] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready

在这里插入图片描述
上面配置都没问题的话,
最后也是成功显示nginx

Kubectl get nodes

这里的kubectl get nodes 命令将返回一个表格,其中包含了集群中所有节点的相关信息,如节点名称、状态、角色(master/worker)等。
在这里插入图片描述
浏览器网址输入

192.168.95.25:30722

在这里插入图片描述
或者输入CLUSTER-IP:

10.100.184.180

在这里插入图片描述
这样我们就成功部署Kubernetes集群,完成nginx部署了!

这些都是亲测过的,按照上面正常操作都可以成功部署,祝各位一切顺利。
最后暑假祝各位一切顺利,学的扎实通透,玩得开心。

相关文章:

云计算与大数据——部署Kubernetes集群+完成nginx部署(超级详细!)

云计算与大数据——部署Kubernetes集群完成nginx部署(超级详细&#xff01;) 部署 Kubernetes 集群的基本思路如下&#xff1a; 准备环境&#xff1a; 选择适合的操作系统&#xff1a;根据需求选择适合的 Linux 发行版作为操作系统&#xff0c;并确保在所有节点上进行相同的选…...

Maven 打包项目后,接口识别中文乱码

背景 项目在Idea里面运行&#xff0c;调用接口发送中文消息正常&#xff0c;用Maven打包项目后&#xff0c;运行jar包&#xff0c;调用接口发送中文出现乱码。 解决方法 1.Idea编译配置 2.如果更改了上述配置之后还是没有效果&#xff0c;则在运行jar包的前面加上 -Dfile.en…...

计算机视觉项目中的文件批量操作与文件批量预处理

计算机视觉项目中的文件批量操作与文件批量预处理 目录 数据集制作文件批量重命名文件批量移动将文件批量按照一定格式进行重命名修改xml文件内容的方法 引言 在计算机视觉项目中&#xff0c;文件批量操作和文件批量预处理是必不可少的步骤。它们涉及处理大量的图像文件&am…...

PHP数组转对象和对象转数组

PHP数组转对象和对象转数组 <?php function array_to_object($arr){$obj new stdClass();foreach ($arr as $key > $val) {if (is_array($val) || is_object($val)) {$obj->$key array_to_object($val);} else {$obj->$key $val;}}return $obj; } function o…...

前后端分离开发中的传参

1.post请求&#xff0c;后台代码使用RequestBody注解接收前端传过来的参数 PostMapping("/saveHosp") public Result SaveHosp(RequestBody HospitalSet hospitalSet){//此处省略中间代码......} 此时前端传过来的参数须为JSON格式&#xff0c;前端VUE传参数为&…...

mount: wrong fs type, bad option, bad superblock报错 ubuntu

问题描述 mount: wrong fs type, bad option, bad superblock Ubuntu无法挂载磁盘。 原因 很大概率是你的硬盘是NTFS。 解决 sudo apt install ntfs-3g即可。...

【图像分类】CNN+Transformer结合系列.3

介绍两篇图像分类的论文&#xff1a;ResMLP&#xff08;arXiv2305&#xff09;&#xff0c;MetaFormer&#xff08;CVPR2022&#xff09;&#xff0c;两者都与Transformer有关系&#xff0c;前者基于transformer结构的特点设计ResMLP&#xff0c;后者认为宏观架构才是Transform…...

IDA分析实例android_crackme/EasyJNI/Transformers/pingan2

文章目录 第一个实例android_crackme将32位的android_server放到手机目录下给android_server赋予root更改root用户组运行android_serverpc端端口转发安装apk&#xff0c;并运行app打开32位IDA并attach到进程先使用jadx看java层逻辑定位要分析的方法IDA 给两个方法打断点 第二个…...

拿捏--->求一元二次方程的根

文章目录 题目描述算法思路代码示例 题目描述 从键盘输入a, b, c的值&#xff0c;编程计算并输出一元二次方程ax2 bx c 0的根&#xff0c;当a 0时&#xff0c;输出“Not quadratic equation”&#xff0c;当a ≠ 0时&#xff0c;根据△ b2 - 4ac的三种情况计算并输出方程…...

深入浅出之Docker Compose详解

目录 1.Docker Compose概述 1.1 Docker Compose 定义 1.2 Docker Compose产生背景 1.3 Docker Compose 核心概念 1.4 Docker Compose 使用步骤 1.5 Docker Compose 常用命令 2. Docker Compose 实战 2.1 Docker Compose下载和卸载 2.2 Docker Compose 项目概述 2.3 Do…...

spring5源码篇(12)——spring-mvc请求流程

spring-framework 版本&#xff1a;v5.3.19 文章目录 一、请求流程1、处理器映射器1.1、 RequestMappingHandlerMapping1.2、获取对应的映射方法1.3、添加拦截器 2、获取合适的处理器适配器3、通过处理器适配器执行处理器方法3.1、拦截器的前置后置3.2、处理器的执行3.2.1 参数…...

风辞远的科技茶屋:来自未来的信号枪

很久之前&#xff0c;有位朋友问我&#xff0c;现在科技资讯这么发达了&#xff0c;你们还写啊写做什么呢&#xff1f; 我是这么看的。最终能够凝结为资讯的那个新闻点&#xff0c;其实是一系列事情最终得出的结果&#xff0c;而这个结果又会带来更多新的结果。其中这些“得出”…...

MongoDB教程-8

ObjectId 在之前的所有章节中&#xff0c;我们一直在使用MongoDB的Object Id。在本章中&#xff0c;我们将了解ObjectId的结构。 ObjectId是一个12字节的BSON类型&#xff0c;具有以下结构-- 1. 前4个字节代表自unix epoch以来的秒数 接下来的3个字节是机器标识符 接下来的2…...

Redis 理论部分

前面写了很多redis项目&#xff0c;今天在通过redis的理论加深redis的了解&#xff0c;顺便做个总结 Redis 理论部分 1.redis 速度快的原因 纯内存操作单线程操作&#xff0c;避免频繁的上下文切换以及资源争用的问题&#xff0c;多线程需要占用更多的cpu资源采用非阻塞I/O多…...

Android—Monkey用法

文章目录 Monkey知识 Monkey知识 介绍 Monkey是Android中的一个命令行工具&#xff0c;可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等)&#xff0c;实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软…...

几个影响 cpu cache 性能因素及 cache 测试工具介绍

》内核新视界文章汇总《 文章目录 1 cache 性能及影响因素1.1 内存访问和性能比较1.2 cache line 对性能的影响1.3 L1 和 L2 缓存大小1.4 指令集并行性对 cache 性能的影响1.5 缓存关联性对 cache 的影响1.6 错误的 cacheline 共享 (缓存一致性)1.7 硬件设计 2 cpu cache benc…...

Java从入门到精通(二)· 基本语法

Java从入门到精通&#xff08;二&#xff09; 基本语法 一 变量 1.字面量 计算机是用来处理数据的&#xff0c;字面量就是告诉程序员&#xff1a;数据在程序中的书写格式。 特殊的字符&#xff1a; \n 表示换行&#xff0c; \t 表示一个制表符&#xff0c;即一个tab 2.变量…...

云安全攻防(三)之 面向云原生环境的安全体系

面向云原生环境的安全体系 根据云原生环境的构成&#xff0c;面向云原生环境的安全体系可包含三个层面的安全体制&#xff0c;它们分别是容器安全、编排系统安全和云原生应用安全&#xff0c;下面&#xff0c;我们逐步来讲解这三点&#xff1a; 容器安全 容器环境&#xff0…...

BGP汇总和破解水平分割

一&#xff0c;BGP的宣告问题 在BGP协议中每台运行BGP的设备上&#xff0c;宣告本地直连路由在BGP协议中运行BGP协议的设备来宣告&#xff0c;通过IGP学习到的&#xff0c;未运行BGP协议设备产生的路由&#xff1b; 在BGP协议中宣告本地路由表中路由条目时&#xff0c;将携带本…...

BUG:pm2启动verdaccio报错:Invalid or unexpected toke

输入命令&#xff1a; pm2 state verdaccio 问题描述&#xff1a; pm2 logs verdaccio报错翻译&#xff1a;数据格式错误 导致我呢提原因&#xff0c;没有找到运行文件&#xff0c; 发现问题&#xff1a;因为命令默认查找verdaccio是去系统盘查找。 解决方式 1&#xff1a;…...

Zookeeper笔记

为什么要使用Zookeeper dubbo需要一个注册中心&#xff0c;而Zookeeper是我们在使用Dubbo是官方推荐的注册中心 Zookeeper介绍 Zookeeper的集群机制 Zookeeper是为了其他分布式程序提供服务的&#xff0c;所以不能随便就挂了。Zookeeper的集群机制采取的是半数存活机制。也…...

【视觉SLAM入门】5.1. 特征提取和匹配--FAST,ORB(关键点描述子),2D-2D对极几何,本质矩阵,单应矩阵,三角测量,三角化矛盾

"不言而善应" 0. 基础知识1. 特征提取和匹配1.1 FAST关键点1.2 ORB的关键点--改进FAST1.3 ORB的描述子--BRIEF1.4 总结 2. 对极几何&#xff0c;对极约束2.1 本质矩阵(对极约束)2.1.1 求解本质矩阵2.1.2 恢复相机运动 R &#xff0c; t R&#xff0c;t R&#xff0c;…...

【能量管理系统( EMS )】基于粒子群算法对光伏、蓄电池等分布式能源DG进行规模优化调度研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

绘制Circos基因圈图

写在前面 昨天在绘制Circos圈图&#xff0c;已经隔了2年左右没有做这类的图了。这时间过得真是快&#xff0c;但是文章和成果依旧是没有很明显的成效。只能安慰自己&#xff0c;后面的时间继续加油吧&#xff01;关于Cirocs图的制作&#xff0c;我从刚开始到现在都是是使用TBt…...

openGauss学习笔记-26 openGauss 高级数据管理-约束

文章目录 openGauss学习笔记-26 openGauss 高级数据管理-约束26.1 NOT NULL约束26.2 UNIQUE约束26.3 PRIMARY KEY26.4 FOREIGN KEY26.5 CHECK约束 openGauss学习笔记-26 openGauss 高级数据管理-约束 约束子句用于声明约束&#xff0c;新行或者更新的行必须满足这些约束才能成…...

学习React(四)

学习React&#xff08;四&#xff09; componentWillMount&#xff08;被放弃使用&#xff09;rendercomponentDidMountshouldComponentUpdate(nextProps,nextState)componentWillUpdate&#xff08;被放弃使用&#xff09;componentDidUpdatecomponentWillReceiveProps&#x…...

如何将单体项目拆分成微服务

1、如何将单体项目拆分成微服务 如何拆分微服务&#xff1f;其实对不同的业务项目场景&#xff0c;对应有不同的拆分方案。需要项目人员详细的分析项目需求、团队现状、业务边界、业务逻辑等方方面面&#xff0c;拆分的粒度既不能过细&#xff0c;也不能过粗&#xff0c;需要把…...

【Vue框架】Vuex状态管理

前言 在上一篇 【Vue框架】Vue路由配置 结尾时说到store.js&#xff0c;在代码里new Vuex.Store()传入了getters对象&#xff1b;本篇专门针对getters的内容进行整理。 1、getters.js 1.1 代码 // 用于存储获取状态的方法 const getters {// 这里的state参数&#xff0c;是…...

Linked List

文章目录 链表定义专业术语代码链表分类常见算法链表创建和常用算法 链表总结 链表 补充知识 typedef 给类型换名字&#xff0c;比如 typedef struct Student {int sid;char name[100];char sex; }ST;//ST就代表了struct Student //即这上方一大坨都可以用ST表示 //原先结构体…...

javascript数组基础

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/front-end-tutorial 】或者公众号【AIShareLab】回复 javascript 也可获取。 文章目录 数组的基本使用定义数组和数组单元访问数组和数组索引数据单元值类型数组长度属性操作数组 数组&#xff1a;(…...