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

k8s集群搭建参考(by lqw)

文章目录

    • 声明
    • 配置yum源
    • 安装docker
    • 安装 kubeadm,kubelet 和 kubectl
    • 部署主节点
    • 其他节点加入集群
    • 安装网络插件

声明

由于看了几个k8s的教程,都存在各种问题,自己搭建的时候,踩了不少坑,最后还是靠百度+csdn+chatGPT才搭建了起来,所以决定单独起个帖子,结合这几个教程,出一版搭建参考。
本次示范使用三台虚拟机,分别是119,120和121,仅供学习参考,另外建议每做一个步骤,就对虚拟机或者服务器生成一次备份,避免哪一步操作出错。

配置yum源

如果用的是centos7的话,yum安装一些东西的时候会报Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64,可参考下面解决方案:

cd /etc/yum.repos.d/
mv /etc/yum.repos.d/CentOS-Base.repo  /etc/yum.repos.d/CentOS-Base.repo.bak
# 如果无法wget可以直接浏览器下载下来后放进去 
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  #之后执行
yum clean all
yum update
yum makecache#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld#关闭 selinux
selinux:linux 的安全系统
sed -i 's/enforcing/disabled/' /etc/selinux/config#关闭 swap
sed -ri 's/.*swap.*/#&/' /etc/fstab#设置网桥参数
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF#时间同步(非常重要)
yum install ntpdate -y
ntpdate time.windows.com备注:如果 yum 下载过程中断开,造成 yum 程序锁定,可运行以下命令关闭 yum 程序
rm -f /var/run/yum.pid#在 master 节点为各主机的 IP 命名cat >> /etc/hosts << EOF
192.168.10.119 master
192.168.10.120 node1
192.168.10.121 node2
EOF

配置完重启虚拟机或者服务器。

安装docker

# yum install -y docker-ce 没有可用的软件包的解决方案
yum -y install yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#如果 yum 下载过程中断开,造成 yum 程序锁定,可运行以下命令关闭 yum 程序
rm -f /var/run/yum.pid
# 安装docker-ce
yum -y install docker-ce

接下来访问这个网址:阿里云镜像加速器,跟着页面指引配置镜像加速器
在这里插入图片描述

sudo systemctl daemon-reload
sudo systemctl restart docker
# 配置开机自启动systemctl enable docker

安装 kubeadm,kubelet 和 kubectl

#配置 yum 源镜像
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#执行以下指令,设置各种密匙
curl -fsSL https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg | sudo gpg --importcurl -fsSL https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg | sudo gpg --importsudo rpm --import https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgsudo yum clean all
sudo yum makecache

执行yum makecache的时候,会有以下提示,输入y,回车:
在这里插入图片描述

#安装软件
yum install kubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4 -y
#自动运行软件
systemctl enable kubelet.service
#查看是否安装成功
yum list installed | grep kubelet
yum list installed | grep kubeadm
yum list installed | grep kubectl

在这里插入图片描述

部署主节点

在master节点执行:

kubeadm init \--apiserver-advertise-address=192.168.10.119 \--image-repository=registry.aliyuncs.com/google_containers \--kubernetes-version=v1.19.4 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16

其中192.168.10.119为主节点的ip地址,用ifconfig查看即可。

执行后如下图所示:
在这里插入图片描述
把里面的指令复制出来执行,主要是这三个:

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

之后执行一下:

kubectl get nodes

如下图所示为正常:
在这里插入图片描述

其他节点加入集群

将之前master节点看到的这段复制过来,贴到其他节点上执行

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

执行成功后,在主节点执行以下指令确认:

kubectl get nodes

在这里插入图片描述

安装网络插件

上传kube-flannel.yml到主节点,执行kubectl apply -f kube-flannel.yml,以下是文件内容:

apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:name: psp.flannel.unprivilegedannotations:seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/defaultseccomp.security.alpha.kubernetes.io/defaultProfileName: docker/defaultapparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/defaultapparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
spec:privileged: falsevolumes:- configMap- secret- emptyDir- hostPathallowedHostPaths:- pathPrefix: "/etc/cni/net.d"- pathPrefix: "/etc/kube-flannel"- pathPrefix: "/run/flannel"readOnlyRootFilesystem: false# Users and groupsrunAsUser:rule: RunAsAnysupplementalGroups:rule: RunAsAnyfsGroup:rule: RunAsAny# Privilege EscalationallowPrivilegeEscalation: falsedefaultAllowPrivilegeEscalation: false# CapabilitiesallowedCapabilities: ['NET_ADMIN']defaultAddCapabilities: []requiredDropCapabilities: []# Host namespaceshostPID: falsehostIPC: falsehostNetwork: truehostPorts:- min: 0max: 65535# SELinuxseLinux:# SELinux is unused in CaaSPrule: 'RunAsAny'
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: flannel
rules:- apiGroups: ['extensions']resources: ['podsecuritypolicies']verbs: ['use']resourceNames: ['psp.flannel.unprivileged']- apiGroups:- ""resources:- podsverbs:- get- apiGroups:- ""resources:- nodesverbs:- list- watch- apiGroups:- ""resources:- nodes/statusverbs:- patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: flannel
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: flannel
subjects:
- kind: ServiceAccountname: flannelnamespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:name: flannelnamespace: kube-system
---
kind: ConfigMap
apiVersion: v1
metadata:name: kube-flannel-cfgnamespace: kube-systemlabels:tier: nodeapp: flannel
data:cni-conf.json: |{"name": "cbr0","cniVersion": "0.3.1","plugins": [{"type": "flannel","delegate": {"hairpinMode": true,"isDefaultGateway": true}},{"type": "portmap","capabilities": {"portMappings": true}}]}net-conf.json: |{"Network": "10.244.0.0/16","Backend": {"Type": "vxlan"}}
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-ds-amd64namespace: kube-systemlabels:tier: nodeapp: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/osoperator: Invalues:- linux- key: kubernetes.io/archoperator: Invalues:- amd64hostNetwork: truetolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cniimage: registry.cn-zhangjiakou.aliyuncs.com/test-lab/coreos-flannel:amd64command:- cpargs:- -f- /etc/kube-flannel/cni-conf.json- /etc/cni/net.d/10-flannel.conflistvolumeMounts:- name: cnimountPath: /etc/cni/net.d- name: flannel-cfgmountPath: /etc/kube-flannel/containers:- name: kube-flannelimage: registry.cn-zhangjiakou.aliyuncs.com/test-lab/coreos-flannel:amd64command:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"limits:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespacevolumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/volumes:- name: runhostPath:path: /run/flannel- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-ds-arm64namespace: kube-systemlabels:tier: nodeapp: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/osoperator: Invalues:- linux- key: kubernetes.io/archoperator: Invalues:- arm64hostNetwork: truetolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cniimage: registry.cn-zhangjiakou.aliyuncs.com/test-lab/coreos-flannel:arm64command:- cpargs:- -f- /etc/kube-flannel/cni-conf.json- /etc/cni/net.d/10-flannel.conflistvolumeMounts:- name: cnimountPath: /etc/cni/net.d- name: flannel-cfgmountPath: /etc/kube-flannel/containers:- name: kube-flannelimage: registry.cn-zhangjiakou.aliyuncs.com/test-lab/coreos-flannel:arm64command:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"limits:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespacevolumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/volumes:- name: runhostPath:path: /run/flannel- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-ds-armnamespace: kube-systemlabels:tier: nodeapp: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/osoperator: Invalues:- linux- key: kubernetes.io/archoperator: Invalues:- armhostNetwork: truetolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cniimage: registry.cn-zhangjiakou.aliyuncs.com/test-lab/coreos-flannel:armcommand:- cpargs:- -f- /etc/kube-flannel/cni-conf.json- /etc/cni/net.d/10-flannel.conflistvolumeMounts:- name: cnimountPath: /etc/cni/net.d- name: flannel-cfgmountPath: /etc/kube-flannel/containers:- name: kube-flannelimage: registry.cn-zhangjiakou.aliyuncs.com/test-lab/coreos-flannel:armcommand:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"limits:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespacevolumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/volumes:- name: runhostPath:path: /run/flannel- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-ds-ppc64lenamespace: kube-systemlabels:tier: nodeapp: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/osoperator: Invalues:- linux- key: kubernetes.io/archoperator: Invalues:- ppc64lehostNetwork: truetolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cniimage: registry.cn-zhangjiakou.aliyuncs.com/test-lab/coreos-flannel:ppc64lecommand:- cpargs:- -f- /etc/kube-flannel/cni-conf.json- /etc/cni/net.d/10-flannel.conflistvolumeMounts:- name: cnimountPath: /etc/cni/net.d- name: flannel-cfgmountPath: /etc/kube-flannel/containers:- name: kube-flannelimage: registry.cn-zhangjiakou.aliyuncs.com/test-lab/coreos-flannel:ppc64lecommand:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"limits:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespacevolumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/volumes:- name: runhostPath:path: /run/flannel- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-ds-s390xnamespace: kube-systemlabels:tier: nodeapp: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/osoperator: Invalues:- linux- key: kubernetes.io/archoperator: Invalues:- s390xhostNetwork: truetolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cniimage: registry.cn-zhangjiakou.aliyuncs.com/test-lab/coreos-flannel:s390xcommand:- cpargs:- -f- /etc/kube-flannel/cni-conf.json- /etc/cni/net.d/10-flannel.conflistvolumeMounts:- name: cnimountPath: /etc/cni/net.d- name: flannel-cfgmountPath: /etc/kube-flannel/containers:- name: kube-flannelimage: registry.cn-zhangjiakou.aliyuncs.com/test-lab/coreos-flannel:s390xcommand:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"limits:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespacevolumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/volumes:- name: runhostPath:path: /run/flannel- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg

执行一下指令:

kubectl apply -f kube-flannel.yml
# 如果自己发现这个文件有问题,想替换的话,可以删掉
# kubectl delete -f kube-flannel.yml

在这里插入图片描述

执行后先执行这个指令:

 kubectl get pods -n kube-system

在这里插入图片描述
基本可以看到这两个为0,其他为1,为什么呢?

执行kubectl get nodes,节点也是noready的状态:
在这里插入图片描述

执行以下指令去查看其中一个节点:

# nodename换成你要查的,在主节点上执行,例如这里我查的是node1
kubectl describe node <node-name>

这里的信息也提示网络组件其实还没准备好:
在这里插入图片描述

在主节点输入以下指令查看一下日志:

journalctl -u kubelet -xe

在这里插入图片描述

把这两个关键信息到网上查,才知道 /etc/cni/net.d是跟我们安装的网络flannel有关的,这说明了虽然flannel安装了,但是仍然存在问题。

Flannel 会自动安装 CNI 插件到 /opt/cni/bin,于是我去看了下这个地方:

ls /opt/cni/bin

在这里插入图片描述

根据查看的结果,我发现里面少了好几个文件夹,包括flannel,这就说明其实CNI插件没有安装成功。

在这里插入图片描述

知道问题了,就很好解决了,接下来就是在每个节点上都安装CNI插件:

wget https://github.com/flannel-io/cni-plugin/releases/download/v1.1.0/flannel-amd64 -O /opt/cni/bin/flannel
chmod +x /opt/cni/bin/flannel

安装后重新执行ls /opt/cni/bin 检查了一下,发现终于完整了:

在这里插入图片描述

ls /etc/cni/net.d/ 检查了一下,也有相关配置文件:

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

{"name": "cbr0","cniVersion": "0.3.1","plugins": [{"type": "flannel","delegate": {"hairpinMode": true,"isDefaultGateway": true}},{"type": "portmap","capabilities": {"portMappings": true}}]
}

然后执行以下指令,方便重新生成CNI相关配置到k8s里:

# 主节点执行
kubectl delete pod -n kube-system -l app=flannel
# 主从节点都要执行
sudo systemctl restart kubelet# 主节点执行
[root@master ~]# kubectl get pods -n kube-system -l app=flannel
NAME                          READY   STATUS    RESTARTS   AGE
kube-flannel-ds-amd64-4dk66   1/1     Running   0          33s
kube-flannel-ds-amd64-g76mr   1/1     Running   0          23s
kube-flannel-ds-amd64-zdklx   1/1     Running   0          34s[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   62m   v1.19.4
node1    Ready    <none>   59m   v1.19.4
node2    Ready    <none>   59m   v1.19.4

之后执行:

 kubectl get pods -n kube-system

如果还有这种
在这里插入图片描述

可以先删掉对应的pod,k8s会自动恢复的,例如上面的三个异常pod:

kubectl delete pod -n kube-system etcd-master
kubectl delete pod -n kube-system kube-controller-manager-master
kubectl delete pod -n kube-system kube-scheduler-master
kubectl get pods -n kube-system

在这里插入图片描述

如果还是不行,就用这个指令去查看对应的pod的日志,然后根据日志报错,上网搜搜看怎么解决:

#把name换成你要查的pod,pod是用kubectl get pods -n kube-system来查的
# 例如下图的etcd-master,可以用指令kubectl logs -n kube-system etcd-master
kubectl logs -n kube-system name

在这里插入图片描述

在这里插入图片描述

相关文章:

k8s集群搭建参考(by lqw)

文章目录 声明配置yum源安装docker安装 kubeadm&#xff0c;kubelet 和 kubectl部署主节点其他节点加入集群安装网络插件 声明 由于看了几个k8s的教程&#xff0c;都存在各种问题&#xff0c;自己搭建的时候&#xff0c;踩了不少坑&#xff0c;最后还是靠百度csdnchatGPT才搭建…...

vue3+vite项目引入electron运行为桌面项目

一、安装electron npm install --save-dev electron二、项目根目录添加electron文件 在此文件夹中添加两个js文件&#xff1a;main.js、preload.js main.js: // Modules to control application life and create native browser window const { app, BrowserWindow } requ…...

教育小程序+AI出题:如何通过自然语言处理技术提升题目质量

随着教育科技的飞速发展&#xff0c;教育小程序已经成为学生与教师之间互动的重要平台之一。与此同时&#xff0c;人工智能&#xff08;AI&#xff09;和自然语言处理&#xff08;NLP&#xff09;技术的应用正在不断推动教育内容的智能化。特别是在AI出题系统中&#xff0c;如何…...

使用 Flask 构建流式返回服务

使用 Flask 构建流式返回服务是一个很常见的应用场景&#xff0c;特别是在需要逐步传输大数据或进行长时间操作的场景下&#xff08;比如下载大文件、实时日志等&#xff09;。Flask 中可以通过 Response 对象来实现流式响应。以下是一个简单的例子&#xff0c;展示了如何在 Fl…...

Redis 集群相关知识介绍

Redis 集群详解&#xff1a;从入门到实战 Redis 是一个高性能的开源数据库&#xff0c;支持多种数据结构&#xff0c;广泛应用于缓存、消息队列、实时分析等领域。随着业务规模的增长&#xff0c;单机 Redis 的性能和容量往往无法满足需求&#xff0c;因此 Redis 集群&#xf…...

宏基传奇swift edge偶尔开机BIOS重置

电脑是acer swift edge&#xff0c; SFA16-41&#xff0c;出厂是Win11系统&#xff0c; BIOS版本出厂1.04&#xff0c;更新到了目前最新1.10。 问题是 会偶尔开机ACER图标变小跑到屏幕左上方&#xff0c;下次开机BIOS就会被重置&#xff0c;开机等待很长时间。 因为是偶尔现象的…...

DeepSeek是如何通过“蒸馏”技术打造自己的AI模型

1 引言&#xff1a; 最近&#xff0c;外媒对中国公司——DeepSeek进行了猛烈抨击&#xff0c;指控其采用了所谓的“蒸馏”&#xff08;Distillation&#xff09;技术&#xff0c;涉嫌抄袭甚至作弊。那么&#xff0c;什么是“蒸馏”技术&#xff1f; 在人工智能领域&#xff0c;…...

你如何利用SIMD(如SSE/AVX)优化图像处理的性能?

SIMD优化问题 1. SIMD 在图像处理中的优化方式2. 典型应用场景3. SIMD 的常见优化技巧4. 总结 利用 SIMD&#xff08;Single Instruction, Multiple Data&#xff09; 指令集&#xff08;如 SSE/AVX/AVX2/AVX-512&#xff09;优化图像处理的性能&#xff0c;可以极大地提升计算…...

支付宝 IoT 设备入门宝典(上)设备管理篇

相信不少朋友最近都被支付宝“碰一下”广告刷屏&#xff0c;“不用打开 APP 支付就碰一下”几个字一出简直自带BGM……其实“碰一下”就是支付宝 IoT 设备的一种&#xff0c;趁着热度还在&#xff0c;我会分为设备管理和设备经营上下两篇&#xff0c;简单介绍一下支付宝 IoT&am…...

Go语言 Web框架Gin

Go语言 Web框架Gin 参考 https://docs.fengfengzhidao.com https://www.liwenzhou.com/posts/Go/gin/#c-0-7-2 返回各种值 返回字符串 package mainimport ("net/http""github.com/gin-gonic/gin")func main() {router : gin.Default()router.GET("…...

蓝桥杯-洛谷刷题-day5(C++)(为未完成)

1.P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布 i.题目 ii.代码 #include <iostream> #include <string> using namespace std;int N, Na, Nb; //0-"剪刀", 1-"石头", 2-"布", 3-"蜥", 4-"斯"&#xff1…...

【Unity3D优化】使用ASTC压缩格式优化内存

在Unity3D手游开发中&#xff0c;合理选择纹理压缩格式对于优化内存占用、提高渲染效率至关重要。本文将记录近期在项目内进行的图片压缩格式优化过程&#xff0c;重点介绍从ETC2到ASTC 5x5的优化方案及其带来的收益。 1. 现状分析&#xff1a;从ETC2到ASTC 6x6 block 在项目…...

NO.13十六届蓝桥杯备战|条件操作符|三目操作符|逻辑操作符|!||||(C++)

条件操作符 条件操作符介绍 条件操作符也叫三⽬操作符&#xff0c;需要接受三个操作数的&#xff0c;形式如下&#xff1a; exp1 ? exp2 : exp3条件操作符的计算逻辑是&#xff1a;如果 exp1 为真&#xff0c; exp2 计算&#xff0c; exp2 计算的结果是整个表达式的结果&am…...

【uniapp-小程序】实现方法调用的全局tips弹窗

【uniapp-小程序】实现方法调用的全局tips弹窗 开发背景弹窗组件全局调用封装配置项入参全局注入使用 附带&#xff1a;如何在uniapp-H5项目中实现全局自定义弹窗组件定义定义vue插件引入 笑死&#xff0c;只有在想找工作的时候才会想更新博客。 开发背景 本来是个uniapp开发…...

springboot如何将lib和jar分离

遇到一个问题&#xff0c;就是每次maven package或者maven install后target中的jar很大&#xff0c;少的50几MB&#xff0c;大的100多兆 优化前&#xff1a; 优化后&#xff1a; 优化前 优化后压缩率77.2MB4.65MB93% 具体方案&#xff1a; pom.xml中 <build><…...

深入探索C语言中的字符串处理函数:strstr与strtok

在C语言的字符串处理领域&#xff0c; strstr 和 strtok 是两个非常重要的函数&#xff0c;它们各自承担着独特的功能&#xff0c;为开发者处理字符串提供了强大的支持。 一、strstr函数&#xff1a;字符串查找的利器 strstr 函数用于在一个字符串中查找另一个字符串的首次出现…...

Django学习笔记(第一天:Django基本知识简介与启动)

博主毕业已经工作一年多了&#xff0c;最基本的测试工作已经完全掌握。一方面为了解决当前公司没有自动化测试平台的痛点&#xff0c;另一方面为了向更高级的测试架构师转型&#xff0c;于是重温Django的知识&#xff0c;用于后期搭建测试自动化平台。 为什么不选择Java&#x…...

npm版本号标记

在 npm 中,版本号的标记遵循 语义化版本控制(Semantic Versioning, SemVer) 的规则,版本号通常由 主版本号(major)、次版本号(minor) 和 修订版本号(patch) 组成,格式为: <major>.<minor>.<patch>1. 版本号格式 主版本号(major):当你做了不兼…...

无人机雨季应急救灾技术详解

无人机在雨季应急救灾中发挥着至关重要的作用&#xff0c;其凭借机动灵活、反应迅速、高效安全等特点&#xff0c;为救灾工作提供了强有力的技术支撑。以下是对无人机雨季应急救灾技术的详细解析&#xff1a; 一、无人机在雨季应急救灾中的应用场景 1. 灾情侦查与监测 无人机…...

算法与数据结构(多数元素)

题目 思路 方法一&#xff1a;哈希表 因为要求出现次数最多的元素&#xff0c;所以我们可以使用哈希映射存储每个元素及其出现的次数。每次记录出现的次数若比最大次数大&#xff0c;则替换。 方法二&#xff1a;摩尔算法 摩尔的核心算法就是对抗&#xff0c;因为存在次数多…...

详解如何使用Pytest内置Fixture tmp_path 管理临时文件

关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理&#xff0c;构建成功的基石 在自动化测试工作之前&#xff0c;你应该知道的10条建议 在自动化测试中&#xff0c;重要的不是工具 临时目录在测试中起着至关重要的作用&#xff0c;它为执行和验证代码提供了一个可控…...

量子计算的五大优势

量子计算的优势有哪些&#xff1f; 量子计算是一个快速发展的领域&#xff0c;有望彻底改变我们处理复杂计算问题的方式。那么&#xff0c;量子计算的优势是什么&#xff1f;与经典计算相比&#xff0c;量子计算又有哪些优势呢&#xff1f;当我们探索量子力学的世界以及量子系…...

行内元素和块级元素

行内元素和块级元素 1.行内元素1.1什么是行内元素1.2行内元素的特点1.3常见的行内元素 2.块级元素2.1什么是块级元素2.2块级元素的特点2.3常见的块级元素 3.行内元素和块级元素的区别 1.行内元素 1.1什么是行内元素 行内元素是指在网页中不会独占一行,而是与其他行内元素在同…...

java面试题-集合篇

Collection 1.Collection有哪些类&#xff1f; Java集合框架中的Collection接口是所有集合类的基础接口&#xff0c;定义了一些基本的集合操作&#xff0c;如添加元素、删除元素、判断是否包含某个元素等。常见的集合类包括List、Set和Queue。 List List接口定义了按照索引…...

二十九、vite项目集成webpack+vue2项目

一、开发 基座应用: 1、安装依赖 npm i @micro-zoe/micro-app@0.8.6 --save 2、在入口处引入(main.ts) import microApp from @micro-zoe/micro-appmicroApp.start()...

小程序之间实现互相跳转的逻辑

1:小程序之间可以实现互相跳转吗 可以实现互相跳转! 2:小程序跳转是否有限制 有限制!限制如下 2.1:需要用户触发跳转 从 2.3.0 版本开始,若用户未点击小程序页面任意位置,则开发者将无法调用此接口自动跳转至其他小程序。 2.2:需要用户确认跳转 从 2.3.0 版本开始…...

算法——数学建模的十大常用算法

数学建模的十大常用算法在数学建模竞赛和实际问题解决中起着至关重要的作用。以下是这些算法的具体信息、应用场景以及部分算法的C语言代码示例&#xff08;由于篇幅限制&#xff0c;这里只给出部分算法的简要代码或思路&#xff0c;实际应用中可能需要根据具体问题进行调整和扩…...

cookie、session、jwt、Oauth2.0、sso 分别有什么用

cookie、session、jwt都是 web 应用中的认证方式&#xff0c;最早只有 cookie&#xff0c;后面觉得所有数据存储在客户端不安全&#xff0c;就出现了 cookie-session&#xff0c;再后面有了 jwt。 cookie工作原理 cookie 数据存储在用户的本地。服务器完全根据 cookie 确定访…...

maven使用默认settings.xml配置时,Idea基于pom.xml更新依赖时报错,有些组件下载时连接超时

1、问题背景&#xff1a;maven使用默认settings.xml配置时&#xff0c;Idea基于pom.xml更新依赖时报错&#xff0c;有些组件下载时连接超时&#xff0c; 通过日志发下&#xff0c;去连接maven.org网站下载依赖&#xff0c;有时候肯定会超时。 2、解决办法&#xff1a;使用国外…...

信息收集-Web应用搭建架构指纹识别WAF判断蜜罐排除开发框架组件应用

知识点&#xff1a; 1、信息收集-Web应用-架构分析&指纹识别 2、信息收集-Web应用-架构分析&WAF&蜜罐 3、信息收集-Web应用-架构分析&框架组件识别 指纹识别 EHole_magic https://github.com/lemonlove7/EHole_magic 指纹识别 Wappalyzer https://github.com…...

蓝桥杯之图

图&#xff1a; 对于图来说&#xff0c;重点在于之后的最短路径算法&#xff0c;这边简单做一下了解即可...

ProxySQL构建PolarDB-X标准版高可用路由服务三节点集群

ProxySQL构建PolarDB-X标准版高可用路由服务三节点集群 一、PolarDB-X标准版主备集群搭建 三台机器上传 polardbx 包&#xff0c;包可以从官网https://openpolardb.com/download获取&#xff0c;这里提供离线rpm。 1、上传 polardbx 安装包 到 /opt目录下 rpm -ivh t-pol…...

【leetcode】双指针:移动零 and 复写零

文章目录 1.移动零2.复写零 1.移动零 class Solution { public:void moveZeroes(vector<int>& nums) {for (int cur 0, dest -1; cur < nums.size(); cur)if (nums[cur] ! 0)swap(nums[dest], nums[cur]);} };class Solution { public:void moveZeroes(vector&l…...

正则化(Regularization)和正则表达式(Regular Expression)区别

文章目录 1. **正则化&#xff08;Regularization&#xff09;**2. **正则表达式&#xff08;Regular Expression&#xff09;**关键区别为什么名字相近&#xff1f; 正则化&#xff08;Regularization&#xff09;和正则表达式&#xff08;Regular Expression&#xff09;不是…...

【C++】C++-教师信息管理系统(含源码+数据文件)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 【C】C教师信息管理系统&#xff08;含源码&#x…...

MySql从入门到精通

第一部分 基础篇 1.概述 1.1 启动与停止MySql 启动 net start mysql80 停止 net stop mysql80 注意&#xff1a; mysql开机默认启动 1.2 客户端连接 方法一&#xff1a;使用MySQL提供的命令行客户端方法二&#xff1a;系统自带的命令行工具执行指令 mysql [-h 127.0.0.1] …...

27、深度学习-自学之路-NLP自然语言处理-做一个简单的项目识别一组电影评论,来判断电影评论是积极的,还是消极的。

一、如果我们要做这个项目&#xff0c;第一步我们要做的就是需要有对应的训练数据集。 这里提供两个数据集&#xff0c;一个是原始评论数据集《reviews.txt》&#xff0c;以及对应的评论是消极还是积极的数据集《labels.txt》&#xff0c;下面的程序就是找到这两个数据集&…...

微信小程序 - 组件和样式

组件和样式介绍 在开 Web 网站的时候&#xff1a; 页面的结构由 HTML 进行编写&#xff0c;例如&#xff1a;经常会用到 div、p、 span、img、a 等标签 页面的样式由 CSS 进行编写&#xff0c;例如&#xff1a;经常会采用 .class 、#id 、element 等选择器 但在小程序中不能…...

滤波总结 波形处理原理 如何对一个规律的波形进行滤波 显现出真正的波形 如何设计滤波

需要用到的软件:waveserialport vofa++ 1.波形想用MCU进行采集首先你要考虑到你的采集频率因为如果你的对象波形即你要采集的波形,他过于快速的话有一些MCU它是不能的比如说有一些它的主频才36兆72兆呢你如果遇到一个特别快的波形毫秒级别那他就检测不了 2.…...

【代码随想录】刷题记录(115)-岛屿数量(广搜)

题目描述&#xff1a; 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成&#xff0c;并且四周都是水域。你可以假设矩阵外均被水包围。 输入描…...

Git指南-从入门到精通

代码提交和同步命令 流程图如下&#xff1a; 第零步: 工作区与仓库保持一致第一步: 文件增删改&#xff0c;变为已修改状态第二步: git add &#xff0c;变为已暂存状态 bash $ git status $ git add --all # 当前项目下的所有更改 $ git add . # 当前目录下的所有更改 $ g…...

uvm错误记录4

如下所示&#xff0c;奇怪的是penable莫名其妙的出X。可问题&#xff0c;我发送激励了。 仔细定位发现&#xff0c;39行用的是vif中的penable, 问题是都是赋值&#xff0c;却出现同时赋值多次&#xff0c;这是因为nonblocking和blocking同时触发导致的&#xff0c;因此&#xf…...

用大模型学大模型03-数学基础 概率论

https://metaso.cn/s/Jp0OU9w 提示词:我正在学习深度学习相关的数学知识&#xff0c;学到了概率论与统计学部分&#xff0c;给我一个入门级的完整教程和实例。 好的&#xff0c;我现在需要回答用户关于深度学习所需的概率论与统计学入门教程和实例的问题。用户希望得到一个完整…...

数字电路-基础逻辑门实验

基础逻辑门是数字电路设计的核心元件&#xff0c;它们执行的是基本的逻辑运算。通过这些基本运算&#xff0c;可以构建出更为复杂的逻辑功能。常见的基础逻辑门包括与门&#xff08;AND&#xff09;、或门&#xff08;OR&#xff09;、非门&#xff08;NOT&#xff09;、异或门…...

基于springboot轨道交通安全评估系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;轨道交通安全评估管理当然不能排除在外。轨道交通安全评估系统是在实际应用和软件工程的开发原理之上&#xff0c;运用Java语言以及Spring…...

多能互补综合能源系统,改变能源结构---安科瑞 吴雅芳

多能互补综合能源系统是一种通过整合多种能源的形势&#xff08;如电力、天然气、热能、冷能等&#xff09;和多种能源技术&#xff08;如可再生能源、储能技术、智能电网等&#xff09;&#xff0c;实现能源利用和配置调整的系统。其目标是通过多能互补和协同优化&#xff0c;…...

Python 量化

Python 量化是指利用 Python 编程语言以及相关的库和工具来进行金融市场数据分析、策略开发和交易执行的过程。 Python 由于其简洁、易学、强大的生态系统和丰富的金融库而成为量化交易的首选编程语言之一。 量化交易在金融领域得到广泛应用&#xff0c;它允许交易者通过系统…...

图数据库Neo4j面试内容整理-属性(Property)

在图数据库中,属性(Property)是用来描述节点(Node)和关系(Relationship)详细信息的键值对。属性可以附加到节点或关系上,用来存储具体的数据,如名字、年龄、时间戳、标签等。属性使得节点和关系不仅能够表示实体或交互,还能包含丰富的、与实体或交互相关的信息。 1. …...

uniapp - iconfont下载本地并且运用至项目上

1、项目中创建一个文件夹放置iconfont相关文件&#xff0c;例如src/assets/iconfont&#xff08;名称自己定义&#xff09; 2、在iconfont下载项目至本地 3、解压后把文件复制进1的文件夹中 4、修改src/assets/iconfont - iconfont.css里的font-face的src地址&#xff0c;修…...

leetcode 1594. 矩阵的最大非负积

题目如下 数据范围 示例 本题难就难在矩阵存在负数&#xff0c;我们可以先思考如果矩阵每个数都大于等于0那么很简单我们只需要维护左边和上面的最大值即可。那么如果遇到负数显然要得到最大值就要和左边和右边的最小值相乘。所以这里我们维护两个二维数组用于存从(0,0)开…...