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

【k8s】如何搭建搭建k8s服务器集群(Kubernetes)

搭建k8s服务器集群

服务器搭建环境随手记

文章目录

  • 搭建k8s服务器集群
    • 前言:
    • 一、前期准备(所有节点)
      • 1.1所有节点,关闭防火墙规则,关闭selinux,关闭swap交换,打通所有服务器网络,进行ping测试
        • 1.1.1关闭防火墙
        • 1.1.2关闭selinux增强机制
        • 1.1.3配置iptables的ACCEPT规则
        • 1.1.4关闭swap
      • 1.2所有节点,修改各个主机名,并写入所有服务器的hosts中
        • 1.2.1给hosts文件,并增加ip映射
      • 1.3所有节点,设置系统参数,调整内核参数,将桥接的 IPV4 流量传递到 iptables 链
      • 1.4所有节点,安装Docker
        • 1.4.1安装依赖
        • 1.4.2设置镜像源
        • 1.4.3安装docker
        • 1.4.4设置系统管理docker命令
        • 1.4.5重新加载服务配置文件,并启动docker
      • 1.5所有节点,配置k8s镜像源
      • 1.6所有节点安装kubeadm,kubelet和kubectl
    • 二、master节点操作(master节点)
      • 2.1初始化master节点
      • 2.2根据日志提示执行以下命令可使用kubectl管理工具
    • 三、node节点操作(所有node节点)
      • 3.1kube join将node节点加入k8s集群
    • 四、安装部署网络插件(master节点上)
      • 4.1calico网络插件
        • 4.1.1部署方式
      • 4.2flannel网络插件
        • 4.2.1部署方式
        • 4.2.2如果发布完flannel容器状态不是Running状态的解决方案
    • 五、检查各节点健康状态


前言:

kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。

服务器环境

在所有节点上安装Docker和kubeadm
部署Kubernetes Master
部署容器网络插件
部署 Kubernetes Node,将节点加入Kubernetes集群中

搭建一主四从集群
服务器列表:
服务器类型 IP地址

master192.168.0.185
node-1192.168.0.56
node-2192.168.0.230
Node-3192.168.0.161

一、前期准备(所有节点)

1.1所有节点,关闭防火墙规则,关闭selinux,关闭swap交换,打通所有服务器网络,进行ping测试

全部的服务器都执行以下服务器

1.1.1关闭防火墙

systemctl stop firewalld     
#关闭防火墙systemctl disable firewalld  
#禁止防火墙启动

1.1.2关闭selinux增强机制

setenforce 0  
#关闭selinuxsed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
#永久关闭swap分区,&符号在sed命令中代表上次匹配的结果

1.1.3配置iptables的ACCEPT规则

iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

1.1.4关闭swap

swapoff -a   
#交换分区必须要关闭sed -ri 's/.*swap.*/#&/' /etc/fstab	  
#永久关闭swap分区,&符号在sed命令中代表上次匹配的结果

1.2所有节点,修改各个主机名,并写入所有服务器的hosts中

hostnamectl set-hostname master  
#修改主机名hostnamectl set-hostname node-1hostnamectl set-hostname node-2hostnamectl set-hostname node-3bash   
#每个节点修改完后记得刷新重启加载

1.2.1给hosts文件,并增加ip映射

cat >> /etc/hosts << EOF 
192.168.0.185 master 
192.168.0.56 node-1 
192.168.0.230 node-2 
192.168.0.193 node-3 
EOF
#这里ip必须和前面修改的主机名一致

1.3所有节点,设置系统参数,调整内核参数,将桥接的 IPV4 流量传递到 iptables 链

#调整内核参数cat > /etc/sysctl.d/kubernetes.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOFsysctl --system  #加载参数

1.4所有节点,安装Docker

1.4.1安装依赖

yum install -y yum-utils device-mapper-persistent-data lvm2 #安装依赖

1.4.2设置镜像源

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
#yum-config-manager命令——管理软件仓库--add-repo=<软件仓库从指定文件或URL添加(和启用)软件仓库这就是添加一个docker镜像源

1.4.3安装docker

yum install -y docker-ce docker-ce-cli containerd.io
#安装docker

1.4.4设置系统管理docker命令

mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"}
}
EOF
#使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。
#日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。

1.4.5重新加载服务配置文件,并启动docker

systemctl daemon-reload 
#重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载上方已经让docker归属systemctl管理了。systemctl restart docker.service
#重启docker
systemctl enable docker.service 
#设置开机自启
docker info | grep "Cgroup Driver"
#显示Cgroup Driver: system为正确

1.5所有节点,配置k8s镜像源

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
#定义kubernetes源

1.6所有节点安装kubeadm,kubelet和kubectl

yum install -y kubelet-1.21.3 kubeadm-1.21.3 kubectl-1.21.3systemctl enable kubelet.service  #开机自启kubeletsystemctl start kubelet.service #启动#K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启

二、master节点操作(master节点)

2.1初始化master节点

官网参考:
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

kubeadm init \
--apiserver-advertise-address=192.168.0.185 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.21.3 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
【若要重新初始化集群状态:kubeadm reset,然后再进行上述操作】

参数说明

kubeadm init \
--apiserver-advertise-address=10.0.0.116 \ 
#指定master监听的地址,修改为自己的master地址
--image-repository registry.aliyuncs.com/google_containers \ 
#指定为aliyun的下载源,最好用国内的
--kubernetes-version v1.18.0 \
#指定k8s版本,1.18.0版本比较稳定
--service-cidr=10.96.0.0/12 \ 
#设置集群内部的网络
--pod-network-cidr=10.244.0.0/16 
#设置pod的网络
# service-cidr 和 pod-network-cidr 最好就用这个,不然需要修改后面的 kube-flannel.yaml 文件

记得保存好最后的 kubeadm join的信息node节点加入集群需要token!!!
不然要执行生成token

kubeadm token create --print-join-command  
#利用kubeadm命令重新生成token,node 节点加入集群需要token

2.2根据日志提示执行以下命令可使用kubectl管理工具

执行上方初始化master节点后程序会打印提示日志(就是设置环境变量)
kubeconfig官网解释

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#命令的含义:Kubectl 是一个命令行接口,用于对 Kubernetes 集群运行命令。
#Kubectl 在 $HOME/.kube 目录中寻找一个名为 config 的文件。
#你可以通过设置环境变量 KUBECONFIG 或设置 --kubeconfig 参数指定其它 kubeconfig 文件
#当集群初始化成功后,要使 kubectl 适用于非 root 用户,则需要运行以下命令,这些命令也是 kubeadm init输出的一部分
#即创建.kube目录 -> 拷贝配置文件 -> 用户授权
#当然,如果你是 root 用户,则可以直接添加环境变量:执行export KUBECONFIG=/etc/kubernetes/admin.confkubeectl cluster-info   
#查看一下是否成功,等待一会儿,同时可以发现像etc,controller,scheduler等组件都以pod的方式安装成功

三、node节点操作(所有node节点)

3.1kube join将node节点加入k8s集群

记得保存初始化master节点的最后打印信息【注意这边要自己的,下面我的只是一个参考!!!

kubeadm join 192.168.0.185:6443 --token xwc4yz.g1zic1bv52wrwf0r --discovery-token-ca-cert-hash sha256:34c556c6a086d80b587c101f81b1602ba102feccc8dccd74a10fd25ab7cfa0ba   
#获取前面创建好的token令牌,所有node节点都执行

四、安装部署网络插件(master节点上)

必须安装网络组件否则k8s各个节点都是Noready状态

calico和flannel二选一(本次安装使用的是flannel网路插件
二者不同可以查看官方文档

4.1calico网络插件

选择calico网络插件版本:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
calico网络插件:
https://docs.tigera.io/v3.9/manifests/tigera-operator.yaml

4.1.1部署方式

kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml
# 在k8s中安装calico
kubectl get pods --all-namespaces -w 
# 确认一下calico是否安装成功状态是否正常

4.2flannel网络插件

选择calico网络插件版本:
https://gitcode.net/mirrors/flannel-io/flannel
用wget下载并修改里面的Network字段与初始化master节点设置的一致
https://gitcode.net/mirrors/flannel-io/flannel/-/blob/v0.20.2/Documentation/kube-flannel.yml

flannel插件的yaml
将下面这代码放在kube-flannel.yam文件里,再kubectl apply -f发布一下就好了

4.2.1部署方式

wget https://gitcode.net/mirrors/flannel-io/flannel/-/blob/v0.20.2/Documentation/kube-flannel.yml 
#下载文件
vim kube-flannel.yml 
底线命令模式下
输入/Network
输入i插入
将ip段修改和上文初始化master节点一样就可以了
也可以用下文我修改好的kube-flannel.yml
kubectl apply -f  kube-flannel.yml

下文为我修改好的kube-flannel.yml

---
kind: Namespace
apiVersion: v1
metadata:name: kube-flannellabels:pod-security.kubernetes.io/enforce: privileged
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: flannel
rules:
- apiGroups:- ""resources:- podsverbs:- get
- apiGroups:- ""resources:- nodesverbs:- get- list- watch
- apiGroups:- ""resources:- nodes/statusverbs:- patch
- apiGroups:- "networking.k8s.io"resources:- clustercidrsverbs:- list- watch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: flannel
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: flannel
subjects:
- kind: ServiceAccountname: flannelnamespace: kube-flannel
---
apiVersion: v1
kind: ServiceAccount
metadata:name: flannelnamespace: kube-flannel
---
kind: ConfigMap
apiVersion: v1
metadata:name: kube-flannel-cfgnamespace: kube-flannellabels: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",  ####初始化master节点时设置一样就行"Backend": {"Type": "vxlan"}}
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-dsnamespace: kube-flannellabels:tier: nodeapp: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/osoperator: Invalues:- linuxhostNetwork: truepriorityClassName: system-node-criticaltolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cni-plugin#image: flannelcni/flannel-cni-plugin:v1.1.2 #for ppc64le and mips64le (dockerhub limitations may apply)image: docker.io/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.2command:- cpargs:- -f- /flannel- /opt/cni/bin/flannelvolumeMounts:- name: cni-pluginmountPath: /opt/cni/bin- name: install-cni#image: flannelcni/flannel:v0.20.2 #for ppc64le and mips64le (dockerhub limitations may apply)image: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.2command:- 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-flannel#image: flannelcni/flannel:v0.20.2 #for ppc64le and mips64le (dockerhub limitations may apply)image: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.2command:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"limits:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN", "NET_RAW"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: EVENT_QUEUE_DEPTHvalue: "5000"volumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/- name: xtables-lockmountPath: /run/xtables.lockvolumes:- name: runhostPath:path: /run/flannel- name: cni-pluginhostPath:path: /opt/cni/bin- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg- name: xtables-lockhostPath:path: /run/xtables.locktype: FileOrCreate

4.2.2如果发布完flannel容器状态不是Running状态的解决方案

确认状态

kubectl get pods -n kube-system
# 查看所有名称空间kube-system下的pod

如果出现Running则表示正常,如果出现Init:0/1执行以下命令

sed -i -r "s#quay.io/coreos/flannel:.*-amd64#lizhenliang/flannel:v0.12.0-amd64#g" kube-flannel.yaml
#修改 flannel 插件文件,这个版本比较低,高版本 k8s 尽量选择一些高一些的版本 flannel

五、检查各节点健康状态


kubectl get cs 
#查询master是否正常 
#若状态为unhealthy 
vim /etc/kubernetes/manifests/kube-scheduler.yaml 
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
#将- --port=0注释掉kubectl get pods -A 
#检查容器状态节点状态kubectl get nodes
#查询node节点是否ready 

在这里插入图片描述

到此部署结束

相关文章:

【k8s】如何搭建搭建k8s服务器集群(Kubernetes)

搭建k8s服务器集群 服务器搭建环境随手记 文章目录搭建k8s服务器集群前言&#xff1a;一、前期准备&#xff08;所有节点&#xff09;1.1所有节点&#xff0c;关闭防火墙规则&#xff0c;关闭selinux&#xff0c;关闭swap交换&#xff0c;打通所有服务器网络&#xff0c;进行p…...

DIDL4_前向传播与反向传播(模型参数的更新)

前向传播与反向传播前向传播与反向传播的作用前向传播及公式前向传播范例反向传播及公式反向传播范例小结前向传播计算图前向传播与反向传播的作用 在训练神经网络时&#xff0c;前向传播和反向传播相互依赖。 对于前向传播&#xff0c;我们沿着依赖的方向遍历计算图并计算其路…...

链表学习之链表划分

链表解题技巧 额外的数据结构&#xff08;哈希表&#xff09;&#xff1b;快慢指针&#xff1b;虚拟头节点&#xff1b; 链表划分 将单向链表值划分为左边小、中间相等、右边大的形式。中间值为pivot划分值。 要求&#xff1a;调整之后节点的相对次序不变&#xff0c;时间复…...

(考研湖科大教书匠计算机网络)第五章传输层-第一、二节:传输层概述及端口号、复用分用等概念

获取pdf&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;传输层概述&#xff08;1&#xff09;概述&#xff08;2&#xff09;从计算机网络体系结构角度看传输层&#xff08;3&#xff09;传输层意义二&am…...

C#:Krypton控件使用方法详解(第七讲) ——kryptonHeader

今天介绍的Krypton控件中的kryptonHeader&#xff0c;下面开始介绍这个控件的属性&#xff1a;控件的样子如上图所示&#xff0c;从上面控件外观来看&#xff0c;这个控件有三部分组成。第一部分是前面的图片&#xff0c;第二部分是kryptonHeader1文本&#xff0c;第三部分是控…...

5年软件测试工程师分享的自动化测试经验,一定要看

今天给大家分享一个华为的软件测试工程师分享的关于自动化测试的经验及干货。真的后悔太晚找他要了&#xff0c; 纯干货。一定要看完&#xff01; 1.什么是自动化测试&#xff1f; 用程序测试程序&#xff0c;用代码取代思考&#xff0c;用脚本运行取代手工测试。自动化测试涵…...

什么是猜疑心理?小猫测试网科普小作文

什么是猜疑心理&#xff1f;猜疑心理是说一个人心中想法偏离了客观事实&#xff0c;牵强附会&#xff0c;往往是指不好的一面&#xff0c;对别人的一言一行都充满了不良的解读&#xff0c;认为这些对自己都有针对性&#xff0c;目的性&#xff0c;对自己都是不利的。猜疑心理重…...

Redis命令行对常用数据结构String、list、set、zset、hash等增删改查操作

1.Redis命令的小套路 - NX&#xff1a;not exist - EX&#xff1a;expire - M&#xff1a;multi 2.基本操作 ①切换数据库 Redis默认有16个数据库。 115 # Set the number of databases. The default database is DB 0, you can select 116 # a different one on a per-con…...

mycobot 使用教程

(1) 树莓派4B ubuntu系统调整swap空间与使SD卡快速扩容参考&#xff1a;https://www.bilibili.com/read/cv14825069https://blog.csdn.net/weixin_45824920/article/details/114381292?spm1001.2101.3001.6650.1&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edef…...

JVM学习总结,虚拟机性能监控、故障处理工具:jps、jstat、jinfo、jmap、Visual VM、jstack等

上篇&#xff1a;JVM学习总结&#xff0c;全面介绍运行时数据区域、各类垃圾收集器的原理使用、内存分配回收策略 参考资料&#xff1a;《深入理解Java虚拟机》第三版 文章目录三&#xff0c;虚拟机性能监控、故障处理工具1&#xff09;jps&#xff1a;虚拟机进程状况工具2&…...

指针笔记(指针数组和指向数组的指针,数组中a和a的区别等)

指针数组和指向数组的指针 int *p[4]和int (*p)[4]有何区别&#xff1f; 前者是一个指针数组&#xff0c;数组大小为4&#xff0c;每一个元素都是一个指向int的指针 后者是指向int[4]类型数组的指针 以上代码若运行会报如下错误 main函数中定义的a数组本质是一个指向int[2]的…...

MySQL ---基础概念

目录 餐前小饮&#xff1a;什么是服务器&#xff1f;什么是数据库服务器&#xff1f; 一、数据库服务软件 1. 常见数据库产品 2.如何开启和停止MySQL服务 二、数据库术语及语法 1.数据库术语 2.SQL语法结构 3.SQL 语法要点 三、SQL分类 1.数据定义语言&#xff08;D…...

【基础】Flink -- ProcessFunction

Flink -- ProcessFunction处理函数概述处理函数基本处理函数 ProcessFunction按键分区处理函数 KeyedProcessFunction定时器与定时服务基于处理时间的分区处理函数基于事件时间的分区处理函数窗口处理函数 ProcessWindowFunction应用案例 -- Top N处理函数概述 为了使代码拥有…...

JavaEE|网络编程基础与Socket套接字

文章目录一、为什么需要网络编程二、什么是网络编程三、网络编程中的基本概念1.发送端和接收端2.请求和响应3.客户端和服务端4.常见的客户端服务端模型四、Socket套接字概念及分类1.概念2.分类1&#xff09;流套接字&#xff1a;使用传输层TCP协议2&#xff09;数据报套接字&am…...

【SpringBoot】基础协议及邮件配置整合

一、名词概念解释 什么是POP3、SMTP和IMAP&#xff1f; 简单的说&#xff1a;POP3和IMAP是用来从服务器上下载邮件的。SMTP适用于发送或中转信件时找到下一个目的地。所以我们发送邮件应该使用SMTP协议。 POP3、SMTP和IMAP协议介绍 IMAP和POP3有什么区别&#xff1f;什么是免费…...

pytorch配置—什么是CUDA,什么是CUDNN、在配置pytorch虚拟环境中遇到的问题、在安装gpu—pytorch中遇到的问题

1.什么是CUDA&#xff0c;什么是CUDNN &#xff08;1&#xff09;什么是CUDA CUDA(ComputeUnified Device Architecture)&#xff0c;是显卡厂商NVIDIA推出的运算平台。 CUDA是一种由NVIDIA推出的通用并行计算架构&#xff0c;该架构使GPU能够解决复杂的计算问题。 &#xff0…...

jfr引起的一次jvm异常记录

业务生产启动时&#xff0c;20个节点有1-2个节点因为jvm问题出现启动失败&#xff0c;k8s自动重启后正常。在测试环境2个节点下偶现 排查思路&#xff1a; 先拿到hs_err_pid的jvm错误文件找到当前线程和内部错误信息 hs_err_pid 文件分析 当前线程&#xff1a;lettuce的线程…...

Java智慧校园平台源码:SaaS模式智慧校园运营云平台源码

校班务管理&#xff1a;评价管理&#xff1a; 1.web端/教师端小程序编辑点评 多元化评价&#xff0c;捕捉学生闪光点全方位评价&#xff0c;自定义评价类型、 评价信息实时推送至家长、AI智能点评 班级报表一键导出&#xff0c;智能评测学生在校表现&#xff0c;老师、家长实…...

【yolov5】将标注好的数据集进行划分(附完整可运行python代码)

问题描述 准备使用yolov5训练自己的模型&#xff0c;自己将下载的开源数据集按照自己的要求重新标注了一下&#xff0c;然后现在对其进行划分。 问题分析 划分数据集主要的步骤就是&#xff0c;首先要将数据集打乱顺序&#xff0c;然后按照一定的比例将其分为训练集&#xf…...

es-05分词器

文章目录分词器1 normalization&#xff1a;文档规范化,提高召回率2 字符过滤器&#xff08;character filter&#xff09;&#xff1a;分词之前的预处理&#xff0c;过滤无用字符3 令牌过滤器&#xff08;token filter&#xff09;&#xff1a;停用词、时态转换、大小写转换、…...

已解决zipfile.BadZipFile: File is not a zip file

已解决Python openpyxl 读取Excel文件&#xff0c;抛出异常zipfile.BadZipFile: File is not a zip file的正确解决&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录报错问题报错翻译报错原因解决方法联系博主免费帮忙解决报错报错问题 一个小伙伴遇到问题跑…...

Mybatis源码分析:Mybatis的数据存储对象

前言&#xff1a;SQLSession是对JDBC的封装 一&#xff1a;SQLSession和JDBC的对照说明 左边是我们的客户端程序&#xff0c;右边是我们的MySQL数据仓&#xff0c;或者叫MySQL实例 Mybatis是对JDBC的封装&#xff0c;将JDBC封装成了一个核心的SQLSession对象 JDBC当中的核心对…...

学习 Python 之 Pygame 开发坦克大战(二)

学习 Python 之 Pygame 开发坦克大战&#xff08;二&#xff09;坦克大战的需求开始编写坦克大战1. 搭建主类框架2. 获取窗口中的事件3. 创建基类4. 初始化我方坦克类5. 完善我方坦克的移动5. 完善我方坦克的显示6. 在主类中加入我方坦克并完成坦克移动7. 初始化子弹类8. 完善子…...

短视频时代是靠什么赚钱的,介绍常见的5种方式,简单明了

目前&#xff0c;短视频越来越火热&#xff0c;大家都知道做短视频可以赚钱&#xff0c;那么究竟是靠什么赚钱的&#xff0c;又有几个人知道呢&#xff1f;短视频创业有个人、有团队&#xff0c;怎么实现团队的生存和发展。 常见的几种变现方式有&#xff1a; 1、平台分成 各…...

关于CentOS维护的几条简单命令

1、检查/etc/passwd这个文件里面有没有异常用户名2、通过命令top查看是否有异常进程&#xff0c;按M键对进程进行排序3、通过命令netstat -lnpt&#xff0c;查看是否有异常端口号4、通过命令ll -a /proc/PID&#xff0c;查看异常进程执行文件所在位置5、通过命令kill -9 PID&am…...

PoW 、PoS , DPoS 算法

PoW 、PoS &#xff0c; DPoS 算法 在区块链领域&#xff0c;多采用 PoW 工作量证明算法、PoS 权益证明算法&#xff0c;以及 DPoS 代理权 益证明算法&#xff0c;以上三种是业界主流的共识算法&#xff0c;这些算法与经典分布式一致性算法不同的是 融入了经济学博弈的概念。 …...

SpringCloud(PS)远程调用--Feign

远程调用RestTemplate远程调用RestTemplate方式调用存在的问题Http客户端Feign实现步骤自定义配置Feign优化Feign性能优化——连接池配置最佳实践RestTemplate远程调用 Bean // LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}Autowiredprivat…...

2023年全国最新二级建造师精选真题及答案1

百分百题库提供二级建造师考试试题、二建考试预测题、二级建造师考试真题、二建证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 11.当事人未依照法律、行政法规规定办理租赁合同登记备案手续的&#xff0c;租赁合同&#xf…...

HydroD 实用教程(四)水动力模型

目 录一、前言二、Hydro Properties2.1 Compartment Properties2.2 Rudder and Thruster2.3 Wind Properties三、Hydro Structure3.1 Load Cross Sections四、Loading Conditions4.1 Mass Model4.2 Second Order Surface Model4.3 Wadam Offbody Points4.4 Additional Matrices…...

vue项目第七天

项目中模块操做业务使用ajax&#xff08;需要使用接口认证&#xff09;修改封装的findData发送ajax请求管理员列表内部搜索业务复用之前的findData 方法即可实现整个查询业务。实现退出业务在下拉菜单上添加事件以及属性。用户退出登录&#xff0c;二次登录系统菜单可能不存在的…...

佛山美容网站建设/女教师遭网课入侵直播录屏曝光视频

VS 报错&#xff1a; 警告”不能像使用方法那样使用不可调用的成员”System.Data.DataSet.Tables”. 今天用VS敲机房重构时&#xff0c;有一个获取表中信息的语句。 return adataset.Tables(0); 然后报警&#xff1a;不能像使用方法那样使用不可调用的成员”System.Data.Da…...

如何判断网站被google k/产品设计

字符串 1.单引号和双引号都一样2.单引号可以嵌套双引号,双引号可以嵌套单引号3.单单不能嵌套,双双不能嵌套,需要嵌套怎么办在里面的符号前面加上\用来转义4.charAt(n),打印第n几个数字,数字从0开始,如果参数大于最大长度或者负数,那么返回空字符串5.concat链接字符串 s1"…...

网站设计方案/想要导航页面推广app

6月24日&#xff0c;是CVPR 2022 最后一天了&#xff0c;全世界计算机视觉领域的大佬们齐聚一堂&#xff0c;翱翔在知识的海洋。一片祥和之下&#xff0c;突然发生了一件可以惊呼“厚礼蟹”的大事&#xff1a;有人举报CVPR Oral&#xff08;口头报告&#xff0c;比较好的论文才…...

企业网站制作及cms技术/线下推广方式

大多数计算机语言&#xff0c;有且仅有一个表示“无”的值&#xff0c;比如&#xff1a;C 语言的 NULL&#xff0c;Java 语言的 null&#xff0c;Python 语言的 None&#xff0c;Ruby 语言的 nil。但是在 JavaScript 中却同时存在 undefined 和 null&#xff0c;这主要是由于历…...

怎么样下载网页上的视频/seoul是什么意思中文

在消费升级的宏观商业环境下&#xff0c;2015年&#xff0c;“新零售”的一经提出就得到了各界的关注与热议&#xff1b;2017年3月&#xff0c;阿里研究院给出了“新零售”的定义&#xff1a;以消费者体验为中心的数据驱动的泛零售形态&#xff1b;阿里同时提出&#xff1a;零售…...

网站成功上线报道/公司企业网站建设

作者&#xff1a;朱金灿 来源&#xff1a;blog.csdn.net/clever101 谈一下元旦经历的一次诈骗&#xff0c;我想这还算是一个有趣的故事。 1月2日我到住在怀柔的好友李哥处玩。晚上我和好友肖哥、李哥一块吃饭。我刚喝下一杯啤酒&#xff0c;突然接到一个陌生的电话。我问&…...