【kubernetes】k8s高可用集群搭建(三主三从)
目录
【kubernetes】k8s高可用集群搭建(三主三从)
一、服务器设置
二、环境配置
1、关闭防火墙
2、关闭selinux
3、关闭swap
4、修改主机名(根据主机角色不同,做相应修改)
5、主机名映射
6、将桥接的IPv4流量传递到iptables的链
7、时间同步
8、master之间进行免密登录设置
三、安装部署
(一)配置部署keepalived服务
1、安装Keepalived(所有master主机)
2、k8s-master1/2/3节点配置
3、启动和检查
4、查看启动状态
5、启动完成后在master1查看网络信息
(二)配置部署haproxy服务
1、所有master主机安装haproxy
2、修改配置文件
3、启动和检查
4、查看启动状态
5、检查端口
(三)配置部署Docker服务(所有主机)
(四)部署kubelet kubeadm kubectl工具
1、使用 YUM 方式安装Kubernetes时,推荐使用阿里的yum。
2、安装kubelet kubeadm kubectl
(五)部署Kubernetes Master
1、创建kubeadm-config.yaml文件
2、查看所需镜像信息
3、下载k8s所需的镜像(所有master主机)
4、使用kubeadm命令初始化k8s
5、根据初始化的结果操作
6、查看集群状态
1)修改kube-controller-manager.yaml文件
2)修改kube-scheduler.yaml文件
3)查看集群状态
4)查看pod信息
5)查看节点信息
(六)安装集群网络
在k8s-master1节点执行
没有变成ready:(原因是网络插件缺失)
上传插件:
再次查看节点信息:
(七)添加master节点
1、在k8s-master2和k8s-master3节点创建文件夹
2、在k8s-master1节点执行
3、将其他master节点加入集群
查看节点信息
(八)加入Kubernetes Node
查看节点信息
查看pod信息
(九)测试Kubernetes集群
1、所有node主机下载测试镜像
2、在Kubernetes集群中创建一个pod,验证是否正常运行。
3、创建完 Deployment 的资源清单之后,使用 create 执行资源清单来创建容器。
4、创建Service资源清单
5、访问测试
四、拓展试验
(一)宕机master1,验证服务
(二)宕机master1/2,验证服务
(三)两台宕机主机恢复,验证服务
五、实验总结
【kubernetes】k8s高可用集群搭建(三主三从)
一、服务器设置
准备6台虚拟机,3台master节点,3台node节点,保证master节点数为>=3的奇数。
网络:所有机器网络互通、可以访问外网
硬件:2核CPU+、2G内存+、硬盘20G+
IP地址 | 角色 | 主机名 | 需要用到的服务 |
192.168.100.131 | master | k8s-master1 | keepalived haproxy docker kubectl kubeadm kubelet |
192.168.100.132 | master | k8s-master2 | |
192.168.100.133 | master | k8s-master3 | |
192.168.100.134 | node | k8s-node1 | docker kubectl kubeadm kubelet |
192.168.100.135 | node | k8s-node2 | |
192.168.100.136 | node | k8s-node3 | |
192.168.100.154 | VIP | master.k8s.io | 代理master1/2/3 |
二、环境配置
1、关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
2、关闭selinux
[root@localhost ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config
[root@localhost ~]# setenforce 0
3、关闭swap
[root@localhost ~]# swapoff -a
[root@localhost ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab
4、修改主机名(根据主机角色不同,做相应修改)
hostname k8s-node1 建议做永久主机名配置 hostnamectl set-hostname k8s-master1
bash
5、主机名映射
[root@k8s-master1 ~]# cat >> /etc/hosts << EOF192.168.100.131 master1.k8s.io k8s-master1192.168.100.132 master2.k8s.io k8s-master2192.168.100.133 master3.k8s.io k8s-master3192.168.100.134 node1.k8s.io k8s-node1192.168.100.135 node2.k8s.io k8s-node2192.168.100.136 node3.k8s.io k8s-node3192.168.100.154 master.k8s.io k8s-vipEOF
6、将桥接的IPv4流量传递到iptables的链
[root@k8s-master1 ~]# cat << EOF >> /etc/sysctl.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOF
[root@k8s-master1 ~]# modprobe br_netfilter
[root@k8s-master1 ~]# sysctl -p
7、时间同步
[root@k8s-master1 ~]# yum install ntpdate -y
[root@k8s-master1 ~]# ntpdate time.windows.com
8、master之间进行免密登录设置
[root@k8s-master1 ~]# ssh-keygen
[root@k8s-master1 ~]# ssh-cpoy-id 192.168.100.131
[root@k8s-master1 ~]# ssh-cpoy-id 192.168.100.132
[root@k8s-master1 ~]# ssh-cpoy-id 192.168.100.133
同理:
master2/3操作,互相之间免密登录
三、安装部署
(一)配置部署keepalived服务
1、安装Keepalived(所有master主机)
[root@k8s-master1 ~]# yum install -y keepalived
2、k8s-master1/2/3节点配置
[root@k8s-master1 ~]#
cat /etc/keepalived/keepalived.conf
k8s-master2节点配置
[root@k8s-master2 ~]#
cat /etc/keepalived/keepalived.conf
k8s-master3节点配置
[root@k8s-master3 ~]#
cat /etc/keepalived/keepalived.conf
3、启动和检查
所有master节点都要执行
[root@k8s-master1 ~]# systemctl start keepalived
[root@k8s-master1 ~]# systemctl enable keepalived
4、查看启动状态
[root@k8s-master1 ~]# systemctl status keepalived
5、启动完成后在master1查看网络信息
[root@k8s-master1 ~]# ip a s ens33
(二)配置部署haproxy服务
1、所有master主机安装haproxy
[root@k8s-master1 ~]# yum install -y haproxy
每台master节点中的配置均相同,配置中声明了后端代理的每个master节点服务器,指定了haproxy的端口为16443,因此16443端口为集群的入口。
2、修改配置文件
[root@k8s-master1 ~]# cat /etc/haproxy/haproxy.cfg
3、启动和检查
所有master节点都要执行
[root@k8s-master1 ~]# systemctl start haproxy
[root@k8s-master1 ~]# systemctl enable haproxy
4、查看启动状态
[root@k8s-master1 ~]# systemctl status haproxy
5、检查端口
[root@k8s-master1 ~]# netstat -lntup|grep haproxy
(三)配置部署Docker服务(所有主机)
所有主机上分别部署 Docker 环境,因为 Kubernetes 对容器的编排需要 Docker 的支持。
[root@k8s-master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@k8s-master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
使用 YUM 方式安装 Docker 时,推荐使用阿里的 YUM 源。
[root@k8s-master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@k8s-master ~]# yum clean all && yum makecache fast
[root@k8s-master ~]# yum -y install docker-ce
[root@k8s-master ~]# systemctl start docker
[root@k8s-master ~]# systemctl enable docker
镜像加速器(所有主机配置)
[root@k8s-master ~]# cat /etc/docker/daemon.json
[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl restart docker
(四)部署kubelet kubeadm kubectl工具
1、使用 YUM 方式安装Kubernetes时,推荐使用阿里的yum。
所有主机配置
[root@k8s-master ~]#
cat /etc/yum.repos.d/kubernetes.repo
[root@k8s-master ~]# ls /etc/yum.repos.d/
backup Centos-7.repo CentOS-Media.repo CentOS-x86_64-kernel.repo docker-ce.repo kubernetes.repo
2、安装kubelet kubeadm kubectl
所有主机配置
[root@k8s-master ~]# yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0
[root@k8s-master ~]# systemctl enable kubelet
(五)部署Kubernetes Master
在具有vip的master上操作。此处的vip节点为k8s-master1。
1、创建kubeadm-config.yaml文件
[root@k8s-master1 ~]# cat kubeadm-config.yaml
2、查看所需镜像信息
[root@k8s-master1 ~]# kubeadm config images list --config kubeadm-config.yaml
3、下载k8s所需的镜像(所有master主机)
[root@k8s-master1 ~]# kubeadm config images pull --config kubeadm-config.yaml
4、使用kubeadm命令初始化k8s
[root@k8s-master1 ~]# kubeadm init --config kubeadm-config.yaml
初始化中的错误:
执行以下命令后重新执行初始化命令
[root@k8s-master1 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@k8s-master1 ~]# kubeadm init --config kubeadm-config.yaml
5、根据初始化的结果操作
[root@k8s-master1 ~]# mkdir -p $HOME/.kube
[root@k8s-master1 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master1 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
6、查看集群状态
[root@k8s-master1 manifests]# kubectl get cs
注意:出现以上错误情况,是因为/etc/kubernetes/manifests/下的kube-controller-manager.yaml和kube-scheduler.yaml设置的默认端口为0导致的,解决方式是注释掉对应的port即可
1)修改kube-controller-manager.yaml文件
2)修改kube-scheduler.yaml文件
3)查看集群状态
[root@k8s-master1 ~]# kubectl get cs
4)查看pod信息
[root@k8s-master1 ~]# kubectl get pods -n kube-system
5)查看节点信息
[root@k8s-master1 ~]# kubectl get nodes
(六)安装集群网络
在k8s-master1节点执行
[root@k8s-master1 ~]# docker load < flannel_v0.12.0-amd64.tar
没有变成ready:(原因是网络插件缺失)
上传插件:
[root@k8s-master1 ~]# tar xf cni-plugins-linux-amd64-v0.8.6.tgz
[root@k8s-master1 ~]# cp flannel /opt/cni/bin/
[root@k8s-master1 ~]# kubectl delete -f kube-flannel.yml 删除之前的apply操作
再次查看节点信息:
[root@k8s-master1 ~]# kubectl apply -f kube-flannel.yml
[root@k8s-master1 ~]# kubectl get nodes
(七)添加master节点
1、在k8s-master2和k8s-master3节点创建文件夹
[root@k8s-master2 ~]# mkdir -p /etc/kubernetes/pki/etcd
[root@k8s-master3 ~]# mkdir -p /etc/kubernetes/pki/etcd
2、在k8s-master1节点执行
从k8s-master1复制秘钥和相关文件到k8s-master2和k8s-master3
[root@k8s-master1 ~]# scp /etc/kubernetes/admin.conf root@192.168.100.132:/etc/kubernetes
[root@k8s-master1 ~]# scp /etc/kubernetes/pki/{ca.*,sa.*,front-proxy-ca.*} root@192.168.100.132:/etc/kubernetes/pki
[root@k8s-master1 ~]# scp /etc/kubernetes/pki/etcd/ca.* root@192.168.100.132:/etc/kubernetes/pki/etcd
[root@k8s-master1 ~]# scp /etc/kubernetes/admin.conf root@192.168.100.133:/etc/kubernetes
[root@k8s-master1 ~]# scp /etc/kubernetes/pki/{ca.*,sa.*,front-proxy-ca.*} root@192.168.100.133:/etc/kubernetes/pki
[root@k8s-master1 ~]# scp /etc/kubernetes/pki/etcd/ca.* root@192.168.100.133:/etc/kubernetes/pki/etcd
3、将其他master节点加入集群
注意:kubeadm init生成的token有效期只有1天,生成不过期token
[root@k8s-master1 manifests]# kubeadm token create --ttl 0 --print-join-command
[root@k8s-master1 manifests]# kubeadm token list
k8s-master2和k8s-master3都需要加入
[root@k8s-master2 ~]# kubeadm join master.k8s.io:6443 --token pj2haa.zf72tyum7uiyeamx --discovery-token-ca-cert-hash sha256:aaec80f6efa10581c329034bef7e2c2f2f1cb2ef4228f8ddcfcbbb44df55aae3 --control-plane
[root@k8s-master2 ~]# mkdir -p $HOME/.kube
[root@k8s-master2 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master2 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8s-master2 ~]# docker load < flannel_v0.12.0-amd64.tar
[root@k8s-master2 ~]# tar xf cni-plugins-linux-amd64-v0.8.6.tgz
[root@k8s-master2 ~]# cp flannel /opt/cni/bin/
查看节点信息
[root@k8s-master1 ~]# kubectl get nodes
[root@k8s-master1 manifests]# kubectl get pods --all-namespaces
(八)加入Kubernetes Node
直接在node节点服务器上执行k8s-master1初始化成功后的消息即可:
[root@k8s-node1 ~]# kubeadm join master.k8s.io:6443 --token o3j9wj.58io4u28r6q8o9lj --discovery-token-ca-cert-hash sha256:6ad29ff932b12680844e140938eaeaaca120d6020c273b6b56d69d256fbc44b0
[root@k8s-node1 ~]# docker load < flannel_v0.12.0-amd64.tar
查看节点信息
[root@k8s-master1 ~]# kubectl get nodes
查看pod信息
[root@k8s-master1 ~]# kubectl get pods -n kube-system
(九)测试Kubernetes集群
1、所有node主机下载测试镜像
[root@k8s-node1 ~]# docker pull nginx:1.19.0
2、在Kubernetes集群中创建一个pod,验证是否正常运行。
[root@k8s-master1 ~]# mkdir demo
[root@k8s-master1 ~]# cd demo
[root@k8s-master1 demo]# vim nginx-deployment.yaml
3、创建完 Deployment 的资源清单之后,使用 create 执行资源清单来创建容器。
通过 get pods 可以查看到 Pod 容器资源已经自动创建完成。
[root@k8s-master1 demo]# kubectl create -f nginx-deployment.yaml
[root@k8s-master1 demo]# kubectl get pods
[root@k8s-master1 ~]# kubectl get pods -o wide
4、创建Service资源清单
在创建的 nginx-service 资源清单中,定义名称为 nginx-service 的 Service、标签选择器为 app: nginx、type 为 NodePort 指明外部流量可以访问内部容器。在 ports 中定义暴露的端口库号列表,对外暴露访问的端口是 80,容器内部的端口也是 80。
[root@k8s-master1 demo]# vim nginx-service.yaml
[root@k8s-master1 demo]# kubectl create -f nginx-service.yaml
[root@k8s-master1 demo]# kubectl get svc
5、访问测试
通过浏览器访问nginx:http://master.k8s.io:31350 域名或者VIP地址
[root@k8s-master1 demo]# elinks --dump http://master.k8s.io:31350
浏览器测试:192.168.100.154:31350
四、拓展试验
(一)宕机master1,验证服务
挂起k8s-master1节点,刷新页面还是能访问nginx,说明高可用集群部署成功。
检查会发现VIP已经转移到k8s-master2节点上
[root@k8s-master2 ~]# ip a s ens33
验证操作master
[root@k8s-master2 ]#kubectl get nodes
至此Kubernetes企业级高可用环境完美实现。
(二)宕机master1/2,验证服务
以此类推,停掉master2的服务,vip跳转至master3,服务仍保持
检查会发现VIP已经转移到k8s-master3节点上
[root@k8s-master3 ~]# ip a s ens33
验证操作master
[root@k8s-master3 ]#kubectl get nodes
(三)两台宕机主机恢复,验证服务
Master1:
Master2:
Master3:
访问服务:
五、实验总结
1、集群中只要有一个master节点正常运行就可以正常对外提供业务服务。
2、如果需要在master节点使用kubectl相关的命令,必须保证至少有2个master节点正常运行才可以使用,不然会有 Unable to connect to the server: net/http: TLS handshake timeout 这样的错误。
3、当一台可以查看nodes节点的master宕机之后,其余两台随机一台获取vip,然后可以观察nodes节点,但是当超过两台master宕机之后,集群需重建才可以观察nodes节点,但服务未停止;当两台宕机主机回复之后,服务停止,node节点不可观察,集群停止,需重建!
4、Node节点故障时pod自动转移:当pod所在的Node节点宕机后,根据 controller-manager的–pod-eviction-timeout 配置,默认是5分钟,5分钟后k8s会把pod状态设置为unkown, 然后在其它节点启动pod。当故障节点恢复后,k8s会删除故障节点上面的unkown pod。如果你想立即强制迁移,可以用 kubectl drain nodename
5、为了保证集群的高可用性,建议master节点和node节点至少分别部署3台及以上,且master节点应该部署基数个实例(3、5、7、9)。
相关文章:

【kubernetes】k8s高可用集群搭建(三主三从)
目录 【kubernetes】k8s高可用集群搭建(三主三从) 一、服务器设置 二、环境配置 1、关闭防火墙 2、关闭selinux 3、关闭swap 4、修改主机名(根据主机角色不同,做相应修改) 5、主机名映射 6、将桥接的IPv4流量…...

凸优化基础学习——凸集
凸优化基础学习——凸集 文章内容全部来自对Stephen Boyd and Lieven vandenberghe的Convex Optimization的总结归纳。 电子书资源: 链接:https://pan.baidu.com/s/1dP5zI6h3BEyGRzSaJHSodg?pwd0000 提取码:0000 基本概念 仿射集合 **…...

oracle 19c环境常见问题汇总
1、rman备份时会消耗这么多临时表空间 参考MOS: RMAN-08132: Warning: Cannot Update Recovery Area ORA-01652: unable to extend temp segment by 64 in tablespace TEMP (Doc ID 2658437.1) Known RMAN Performance Problems (Doc ID 247611.1) 处理办法&…...

django实现悲观锁乐观锁
前期准备 # 线上卖图书-图书表 图书名字,图书价格,库存字段-订单表: 订单id,订单名字# 表准备class Book(models.Model):name models.CharField(max_length32)price models.IntegerField() #count models.SmallIntegerField…...

vector【2】模拟实现(超详解哦)
vector 引言(实现概述)接口实现详解默认成员函数构造函数析构函数赋值重载 迭代器容量size与capacityreserveresizeempty 元素访问数据修改inserterasepush_back与pop_backswap 模拟实现源码概览总结 引言(实现概述) 在前面&…...

金融助贷公司怎么获客——大数据获客
2023年已过去大半,整个贷款领域遭遇的现象仍然是拓客难、拓客贵、顾客精确度不高难题。从业者工作压力与日俱增,每日遭遇各种各样考评,因此大家并不是在开发客户便是在开发客户的路上。贷款市场销售艰难变成一个问题,很多贷款营销…...

Java进阶-Oracle(二十一)(2)
🌻🌻 目录 一、Oracle 数据库的操作(DDL DML DQL DCL TPL)1.1 标识符、关键字、函数等1.1.1 数值类型:1.1.2 字符串类型:1.1.3 日期类型1.1.4 大的数据类型--适合保存更多的数据 1.2 运算符1.3 函数---预定义函数、自定义函数&…...

SpringCloud实用篇4——MQ RabbitMQ SpringAMQP
目录 1 初识MQ1.1 同步和异步通讯1.1.1 同步通讯1.1.2 异步通讯 1.2 技术对比 2.快速入门2.1 安装RabbitMQ2.1.1 单机部署2.1.2集群部署 2.2 RabbitMQ消息模型2.3.导入Demo工程2.4 入门案例2.4.1 publisher实现2.4.2 consumer实现 3 SpringAMQP3.1 Basic Queue 简单队列模型3.1…...

【BASH】回顾与知识点梳理(二十二)
【BASH】回顾与知识点梳理 二十二 二十二. Linux 账号管理22.1 Linux 的账号与群组使用者标识符: UID 与 GID使用者账号/etc/passwd 文件结构/etc/shadow 文件结构 关于群组: 有效与初始群组、groups, newgrp/etc/group 文件结构有效群组(effective grou…...

shell脚本之正则表达式
目录 一.常见的管道命令1.1sort命令1.2uniq命令1.3tr命令1.4cut命令1.5实例1.5.1统计当前主机连接状态1.5.2统计当前主机数 二.正则表达式2.1正则表达式的定义2.2常见元字符(支持的工具:find,grep,egrep,sed和awk&…...

将SM2根证书预置到chromium中
最近花了很多精力在做chromium的GmSSL适配,协议和算法都已经完成,这篇文章是关于将SM2根证书预置到chromium中 我的开发测试环境是macos12.4,从chromium的代码和文档中得知证书获取和校验都是通过操作系统以及native api接口完成,…...

linux安装mysql-8.0.33正确方式及常见问题
目录 获取mysql下载地址链接 解压安装包 复制文件到安装目录 添加用户和用户属组修改权限 创建存储数据的文件夹/usr/local/mysql 初始化安装 修改配置文件 创建日志文件并赋予对应权限 启动成功编辑 创建软链接 之前安装过mysql,时间比较长忘记安装步骤了今天…...

Vim的插件管理器之Vundle
1、安装Vundle插件管理器 Vim可以安装插件,但是需要手动安装比较麻烦,Vim本身没有提供插件管理器,所以会有很多的第三方的插件管理器,有一个vim的插件叫做 “vim-easymotion”,在它的github的安装说明里有列出对于不同…...

机器学习丨1. 机器学习概述
Author:AXYZdong 硕士在读 工科男 有一点思考,有一点想法,有一点理性! 定个小小目标,努力成为习惯!在最美的年华遇见更好的自己! CSDNAXYZdong,CSDN首发,AXYZdong原创 唯…...

清除pip安装库时的缓存
目录 1、命令清除缓存 2、路径手动清除 在使用pip安装Python库时,如果之前已经下载过该库,pip会默认使用缓存来安装库,而不是重新从网络上下载。缓存文件通常存储在用户目录下的缓存文件夹中,具体位置因操作系统和Python版本而异…...

gitee上传一个本地项目到一个空仓库
gitee上传一个本地项目到一个空仓库 引入 比如,你现在本地下载了一个半成品的框架,现在想要把这个本地项目放到gitee的仓库上,这时就需要我们来做到把这个本地项目上传到gitee上了。 具体步骤 1. 登录码云 地址:https://gite…...

力扣:63. 不同路径 II(Python3)
题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。 现在考虑网格中有障碍物。那么从…...

【C语言】每日一题(多数元素)
多数元素,链接奉上 方法 1.摩尔投票2.合理但错误的方法2.1暴力循环2.2排序求出中间元素中间元素 1.摩尔投票 先来简单的介绍摩尔投票: 摩尔投票是一种用来解决绝对众数问题的算法。 什么是绝对众数呢? 在一个集合中,如果一个元素…...

后端 .net7 Minimal API 限流中间件(微信小程序无师自通十)
我的微信小程序使用.net7 Minimal API 作为后端,当服务器摆上公网后,可以观察到很多的攻击行为和暴力访问。所以,我需要使用微软的限流中间件部署相应的功能在服务器上 关键字: AddFixedWindowLimiter using Microsoft.AspNetCo…...

背上沉重的书包准备面试之react篇
目录 react特性? react生命周期? state和props区别 react中setState执行机制? 在react类组件形式中,setState第二个参数的作用? react事件机制? react事件绑定方式有哪些? react组件之间…...

OpenCV-Python中的图像处理-霍夫变换
OpenCV-Python中的图像处理-霍夫变换 霍夫变换霍夫直线变换霍夫圆环变换 霍夫变换 霍夫(Hough)变换在检测各种形状的技术中非常流行,如果要检测的形状可以用数学表达式描述,就可以是使用霍夫变换检测它。即使要检测的形状存在一点破坏或者扭曲也是可以使…...

W5500-EVB-PICO做UDP Client进行数据回环测试(八)
前言 上一章我们用开发板作为UDP Server进行数据回环测试,本章我们让我们的开发板作为UDP Client进行数据回环测试。 连接方式 使开发板和我们的电脑处于同一网段: 开发板通过交叉线直连主机开发板和主机都接在路由器LAN口 测试工具 网路调试工具&a…...

npm install 中 --save 和 --save-dev 是什么?
npm,全名 Node Package Manager,套件管理工具,package.json 会记下你在项目中安装的所有套件。 假设在项目中安装 lodash npm i --save lodash这样在 dependencies 中会出现: 如果修改了导入方式: npm i --save-dev …...

【Nginx17】Nginx学习:目录索引、字符集与浏览器判断模块
Nginx学习:目录索引、字符集与浏览器判断模块 今天要学习的内容有几个还是大家比较常见的,所以学习起来也不会特别费劲。对于目录的默认页设置大家都不会陌生,字符集的设置也比较常见,而浏览器的判断这一块,可能有同学…...

CA/TA开发编程实战-视频课程
Hello大家好,上架一门新的视频课程,课程主要包含两大部分,第一部分搭建环境,第二部分从无到有的编写代码。带领大家"手把手"编写。 具体大纲如下: qemu v8环境搭建 搭建一个qemu_v8的环境,用于…...

(7)(7.1) 使用航点和事件规划任务
文章目录 前言 7.1.1 设置Home位置 7.1.2 视频:制作并保存多路点任务 7.1.3 视频:加载已保存的多航点任务 7.1.4 使用说明 7.1.5 提示 7.1.6 自动网格 7.1.7 任务指令 7.1.8 任务结束 7.1.9 任务重置 7.1.10 MIS_OPTIONS 7.1.11 任务再出发 …...

OCR相关模块——版面分析技术、表格文本识别
OCR相关模块——版面分析技术、表格文本识别 版面分析技术表格识别技术 版面分析技术 版面分析模型:飞桨用到了yolov2检测模型,对文档图片中的文本、表格、图片、标题与列表区域进行检测。当前主流是用分割做。 表格识别技术 参考博文...

mov转mp4格式怎么转?
mov转mp4格式怎么转?众所周知,MOV视频格式是由苹果公司推出的常用的视频格式,能够在苹果软件及设备上使用。但是,如果将其应用于其他软件和设备上的话,可能会遇到文件无法正常播放的情况。在这个时候,我们需…...

SSL握手协议相关概念
下图为握手协议的流程图,具体的解释参考博客: 【下】安全HTTPS-全面详解对称加密,非对称加密,数字签名,数字证书和HTTPS_tenfyguo的博客-CSDN博客 下面梳理一下SSL协议中的一些细节。首先是相关名词:证书、…...

idea 打开java项目后新建的模块中,java文件夹需要变成蓝色,以及resources文件夹变成三条杠的
idea 打开java项目后新建的模块中,java文件夹需要变成蓝色,以及resources文件夹变成三条杠的方法 再选择modules,找到需要变蓝的文件夹,点击sources即可 同理resources文件夹变成三条杠也只需要找到对应文件夹,点击re…...