kubeadm快速部署K8S

目录

一、kubeadm安装K8S

1.1 环境准备

1.2 初始化配置

1.3 所有节点安装docker

1.3.1 安装依赖环境和docker

1.3.2 定义docker 配置文件

1.3.3 重启并开机自启docker

1.3.4 查看docker 是否配置成功

1.4 master、node01 、node02安装kubeadm,kubelet和kubectl 

1.5 部署K8S集群

1.5.1 查看初始化(一键安装)需要的镜像

1.5.2 master、node01、node02节点准备需要的镜像和启动脚本

1.5.3  生成Kubernetes集群初始化的默认配置文件

1.5.4 编辑ymal 文件

1.5.5 根据提示设定kubectl(准备家目录下.kube目录)

 1.5.6 master、node01、node02节点部署网络插件flannel

 1.5.7 检查集群状态

1.5.8 暴露端口提供服务

二、安装Harbor私有仓库 

2.1 Harbor节点配置

2.1.1 修改主机名

2.1.2 所有节点加上主机名映射

2.1.3 上传 harbor-offline-installer-v1.2.2.tgz 和 docker-compose 文件到 /opt 目录

2.1.4 移到指定目录添加执行权限

2.1.5 解压harbor

2.1.6 修改cfg文件内容

2.2 生成私钥

2.2.1 生成证书

2.2.2  备份私钥并清除私钥密码

2.2.3 签发一个有效期为1000天的X.509证书,并将生成的证书保存为server.crt

2.2.4 给所有的文件加执行权限

2.2.5 安装harbor

​2.2.6 检测harbor 仓库

 2.2.7 修改调度策略为NodePort

2.2.8 浏览器访问master01或node01或node02的ip+31090

2.2.9 将cluster-admin角色权限授予用户system:anonymous 

三、内核参数优化方案


一、kubeadm安装K8S

1.1 环境准备

节点名称IP地址相关组件
master192.168.133.19docker、kubeadm、kubelet、kubectl、flannel
node01192.168.133.20docker、kubeadm、kubelet、kubectl、flannel
node02192.168.133.21docker、kubeadm、kubelet、kubectl、flannel
harbor192.168.133.13docker、docker-compose、harbor-offline-v1.2.2

1.2 初始化配置

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
swapoff -a						#交换分区必须要关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab		#永久关闭swap分区,&符号在sed命令中代表上次匹配的结果//加载ip_vs 模块
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done//修改主机名
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02//所有节点修改hosts文件
vim /etc/hosts
192.168.133.19 master01
192.168.133.20 node01
192.168.133.21 node02//调整内核参数
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
EOF//生效参数
sysctl --system 

1.3 所有节点安装docker

1.3.1 安装依赖环境和docker

yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce docker-ce-cli containerd.io

1.3.2 定义docker 配置文件

mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],"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.3.3 重启并开机自启docker

systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service 

1.3.4 查看docker 是否配置成功

docker info | grep "Cgroup Driver"


1.4 master、node01 、node02安装kubeadm,kubelet和kubectl 

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
EOFyum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11
systemctl enable kubelet.service    # 开机自启kubelet

 #K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启

1.5 部署K8S集群

1.5.1 查看初始化(一键安装)需要的镜像

kubeadm config images list

1.5.2 master、node01、node02节点准备需要的镜像和启动脚本

for i in $(ls *.tar); do docker load -i $i; done

1.5.3  生成Kubernetes集群初始化的默认配置文件

kubeadm config print init-defaults > /opt/kubeadm-config.yaml

生成Kubernetes集群初始化的默认配置文件。这个命令的具体操作分解如下:

1、kubeadm config print init-defaults: 这部分命令调用了kubeadm工具中的config print init-defaults子命令。kubeadm是Kubernetes的一个命令行工具,用于快速、简单地初始化和管理Kubernetes集群。print init-defaults命令会输出一个默认的初始化配置模板,这个模板定义了使用kubeadm init命令启动一个新的Kubernetes控制平面所需的配置选项。配置包括API服务器的设置、网络插件的选择、证书和token的管理等。

2、**> 符号**: 在shell命令中,>`是一个重定向操作符,它指示将前面命令的输出内容写入(或覆盖)到后面指定的文件中,而不是打印到终端屏幕上。

3、/opt/kubeadm-config.yaml: 这是文件路径和名称,表示生成的默认配置将会被保存到/opt/目录下,文件名为kubeadm-config.yaml。/opt/目录通常用于存放可选的附加软件包,这里用来存储Kubernetes的初始化配置文件。

1.5.4 编辑ymal 文件

 vim kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 192.168.133.19bindPort: 6443
nodeRegistration:criSocket: /var/run/dockershim.sockname: master01taints:- effect: NoSchedulekey: node-role.kubernetes.io/master
---
apiServer:timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:type: CoreDNS
etcd:local:dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.20.11
networking:dnsDomain: cluster.localpodSubnet: "10.244.0.0/16"serviceSubnet: 10.96.0.0/16
scheduler: {}---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs

1.5.5 执行ymal 文件

kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log

1、kubeadm init: 这是 kubeadm 命令中用于初始化一个新的 Kubernetes 控制平面的主要子命令。执行此命令会在当前机器上部署集群的控制面组件,如 API 服务器、控制器管理器、调度器等,并且会设置必要的网络和安全配置。

2、--config=kubeadm-config.yaml: 这个参数指定了一个自定义的配置文件路径。在此命令中,使用了之前通过 kubeadm config print init-defaults 生成并可能经过编辑的 kubeadm-config.yaml 文件。该文件包含了初始化过程中的各种配置选项,比如 Pod 网络、API 服务器广告地址、令牌以及证书配置等。

3、--upload-certs: 这是一个可选参数,指示 kubeadm init 在初始化过程中自动将生成的证书上传到 Kubernetes 密钥存储中(通常是通过集群内的 Secret 对象)。这简化了在多节点集群中分发这些证书的过程,使得加入额外的节点变得更容易。

4、| (管道符号): 管道符号用于将前一个命令的输出作为后一个命令的输入。

5、tee kubeadm-init.log: tee 命令用于读取标准输入(本例中是 kubeadm init 的输出)并同时将其写入到指定的文件(这里是 kubeadm-init.log)以及标准输出(即屏幕)。这意味着初始化过程的日志不仅会显示在终端上,还会被保存到 kubeadm-init.log 文件中,便于后续查看或故障排查。

综上,整个命令的作用是使用自定义配置文件 kubeadm-config.yaml 初始化 Kubernetes 集群,并自动上传证书到集群内,同时通过管道和 tee 命令记录整个初始化过程的日志到 kubeadm-init.log 文件中。这样既完成了集群的初始化配置,又方便记录和审查操作日志。

(1) 查看 kubeadm-init 日志

less kubeadm-init.log

(2)查看kubernetes配置文件目录

ls /etc/kubernetes/

(3)查看存放ca等证书和密码的目录

ls /etc/kubernetes/pki/

1.5.5 根据提示设定kubectl(准备家目录下.kube目录)

kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm 部署的集群为其生成了一个具有管理员权限的认证配置文件 /etc/kubernetes/admin.conf,它可由 kubectl 通过默认的 “$HOME/.kube/config” 的路径进行加载。

在master01上操作

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config----------------------------------------------------
#这条命令序列是用来配置Kubernetes命令行工具(kubectl)的访问权限,以便用户能够在本地轻松地管理Kubernetes集群
vim /etc/kubernetes/manifests/kube-scheduler.yaml

 

vim /etc/kubernetes/manifests/kube-controller-manager.yaml

systemctl restart kubelet

 1.5.6 master、node01、node02节点部署网络插件flannel

(1)上传 flannel-cni-v1.2.0.tar   flannel-v0.22.2.tar 这两个镜像

(2)载入镜像

docker load -i flannel-v0.22.2.tar
docker load -i flannel-cni-v1.2.0.tar

(3)在master节点上传 kube-flannel.yml 文件

 

kubectl apply -f kube-flannel.yml 

(4)node节点让node 也加入集群,复制执行 kubeadm-config.yaml 得到的令牌(可以看 kubeadm-init.log )

 1.5.7 检查集群状态

kubectl get node

kubectl get pods -n kube-system

在Kubernetes环境中,使用kubectl get pods -n <namespace>命令可以查看指定命名空间(namespace)下的Pods状态。上述命令显示了kube-system命名空间中的Pods状态。下面是输出信息的解释:

        NAME: Pod的名称。每个条目代表一个运行中的Pod实例。

        READY: 表示Pod内所有容器的期望状态是否达到。例如,1/1意味着Pod中有一个容器,并且这个容器已经就绪(Running且健康检查通过)。如果有多个容器,会显示为N/M,其中N是已就绪的容器数,M是总容器数。

        STATUS: 描述Pod的当前状态。常见状态包括:

                Running: Pod内的容器正在运行并且至少有一个容器已经就绪。
                Pending: Pod正在被调度或者等待其依赖的服务(如镜像拉取)完成。
                Failed: Pod中的所有容器以非0退出码终止,且kubelet不会重启它们。
                Succeeded: 对于只运行到完成的Pod(比如Job),所有容器都成功执行结束。
                其他状态还包括CrashLoopBackOff(容器反复启动并失败)等。
        RESTARTS: 自Pod启动以来,容器被重启的次数。频繁的重启可能指示存在问题。

        AGE: Pod创建至今的时间长度。

kubectl get pod -n kube-flannel -owide

1.5.8 暴露端口提供服务

(1)测试 pod 资源创建

kubectl  create deployment nginx --image=nginx
kubectl get pods -owide

(2)查看所有的网络

1) 查看pod ip

kubectl get pods -owide

 2)查看service ip

kubectl get svc

 3)在内部可以访问 (网络互通的)

(3)暴露端口提供服务

kubectl expose deployment nginx --port=80 --type=NodePort

 1)浏览器访问 node ip:30660

 

(4)副本扩容

kubectl scale deployment nginx --replicas=3

(5)部署 Dashboard

1)上传软件包并载入镜像

docker load -i dashboard.tar

 2)修改yaml文件

vim recommended.yaml

3)启动ymal 文件

kubectl apply -f recommended.yaml

4)创建service account并绑定默认cluster-admin管理员集群角色 

kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

 

(5)使用输出的token登录Dashboard

 

二、安装Harbor私有仓库 

2.1 Harbor节点配置

2.1.1 修改主机名

hostnamectl set-hostname hub.shibin.com

2.1.2 所有节点加上主机名映射

echo '192.168.133.13 hub.shibin.com' >> /etc/hosts

2.1.3 上传 harbor-offline-installer-v1.2.2.tgz 和 docker-compose 文件到 /opt 目录

2.1.4 移到指定目录添加执行权限

cp docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose

2.1.5 解压harbor

tar zxvf harbor-offline-installer-v1.2.2.tgz

2.1.6 修改cfg文件内容

vim harbor.cfg
5  hostname = hub.wyq.com
9  ui_url_protocol = https
24 ssl_cert = /data/cert/server.crt
25 ssl_cert_key = /data/cert/server.key
59 harbor_admin_password = Harbor12345

2.2 生成私钥

2.2.1 生成证书

mkdir -p /data/certcd /data/certopenssl genrsa -des3 -out server.key 2048openssl req -new -key server.key -out server.csr

 

2.2.2  备份私钥并清除私钥密码

cp server.key server.key.orgopenssl rsa -in server.key.org -out server.key
#清除私钥密码主要是为了自动化部署和服务运行的便捷性

2.2.3 签发一个有效期为1000天的X.509证书,并将生成的证书保存为server.crt

openssl x509 -req -days 1000 -in server.csr -signkey server.key -out server.crt

2.2.4 给所有的文件加执行权限

chmod +x /data/cert/*

2.2.5 安装harbor

cd /opt/harbor/
./install.sh

 

解决方法: 

sudo yum remove -y docker-ce docker-ce-cli containerd.io
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io

解决方法

sudo yum remove -y docker-buildx-plugin
sudo yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io
sudo systemctl start docker
sudo systemctl enable docker
docker --version

./install.sh

2.2.6 本机映射

192.168.133.13 hub.shibin.com

在本地使用浏览器访问:https://hub.shibin.com
用户名:admin
密码:Harbor12345

 

 2.2.6 检测harbor 仓库

docker login -u admin -p Harbor12345 https://hub.shibin.com

解决方法

sudo nano /etc/docker/daemon.json{"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"insecure-registries": ["hub.shibin.com"]
}sudo systemctl daemon-reload
sudo systemctl restart dockerdocker login -u admin -p Harbor12345 https://hub.shibin.com

 

(1)上传镜像

 

 (2)在master节点上删除之前创建的nginx资源

kubectl delete deployment nginx

(3)创建3台nginx并暴露端口

kubectl create deployment nginx-deployment --image=hub.shibin.com/library/nginx:v1 --port=80 --replicas=3kubectl expose deployment nginx-deployment --port=30000 --target-port=80

(4)查看LVS

yum install ipvsadm -y
ipvsadm -Ln

 (5)使用deployment的虚拟ip进行内部访问

 2.2.7 修改调度策略为NodePort

kubectl edit svc nginx-deployment
25   type: NodePort						#把调度策略改成NodePort

 

2.2.8 浏览器访问master01或node01或node02的ip+31090

 

2.2.9 将cluster-admin角色权限授予用户system:anonymous 

kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

三、内核参数优化方案

cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0									#禁止使用 swap 空间,只有当系统内存不足(OOM)时才允许使用它
vm.overcommit_memory=1							#不检查物理内存是否够用
vm.panic_on_oom=0								#开启 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963							#指定最大文件句柄数
fs.nr_open=52706963								#仅4.4以上版本支持
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/28277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2.线上论坛项目

一、项目介绍 线上论坛 相关技术&#xff1a;SpringBootSpringMvcMybatisMysqlSwagger项目简介&#xff1a;本项目是一个功能丰富的线上论坛&#xff0c;用户可编辑、发布、删除帖子&#xff0c;并评论、点赞。帖子按版块分类&#xff0c;方便查找。同时&#xff0c;用户可以…

图像处理:Python使用OpenCV进行图像锐化 (非锐化掩模、拉普拉斯滤波器)

文章目录 非锐化掩模 (Unsharp Masking)拉普拉斯滤波器 (Laplacian Filter)效果对比总结 在图像处理中&#xff0c;锐化操作用于增强图像的边缘和细节&#xff0c;使图像看起来更清晰。常见的图像锐化方法包括非锐化掩模&#xff08;Unsharp Masking&#xff09;和拉普拉斯滤波…

轻松实现H5页面下拉刷新:滑动触发、高度提示与数据刷新全攻略

前段时间在做小程序到H5的迁移&#xff0c;其中小程序中下拉刷新的功能引起了产品的注意。他说到&#xff0c;哎&#xff0c;我们迁移后的H5页面怎么没有下拉刷新&#xff0c;于是乎&#xff0c;我就急忙将这部分的内容给填上。 本来是计划使用成熟的组件库来实现&#xff0c;…

Windows修改CMD窗口编码为UTF-8

windows下的cmd的默认编码是GBK编码&#xff0c;有时可能造成乱码问题&#xff0c;下面是我找到的两种更换编码方式为UTF-8的方法。 1、临时修改 &#xff08;1&#xff09;先进入cmd命令窗口&#xff08;快捷键win键R&#xff09; &#xff08;2&#xff09;直接输入“chcp…

畅想智能美颜工具的未来:美颜SDK技术详解

美颜SDK作为技术的核心&#xff0c;承载了美颜工具的实现和创新。本篇文章&#xff0c;小编将深入探讨美颜SDK技术的细节。 一、技术原理 美颜SDK是一种软件开发工具包&#xff0c;集成了一系列图像处理算法和技术&#xff0c;旨在实现对照片和视频中人物的实时美化。其主要技…

逢3必过报数游戏-第13届蓝桥杯省赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第84讲。 逢3必过报数游戏&…

c++_0基础_讲解7 练习

这一讲我为大家准备了几道题目&#xff0c;大家试着独自做一下&#xff08;可能来自不同网站&#xff09; 整数大小比较 - 洛谷 题目描述 输入两个整数&#xff0c;比较它们的大小。若 x>yx>y &#xff0c;输出 > &#xff1b;若 xyxy &#xff0c;输出 &#xff…

---异常---

我们在运行程序时总遇到各种与报错&#xff0c;数组越界&#xff0c;空指针的引用&#xff0c;这些在java中都称为异常 对于不同的错误都具有一个与他对应的异常类来秒描述 这是对于数组越界这个类里有的方法&#xff0c;这些是描述异常的 在java中有一个完整的描述异常的类的…

嵌入式数据库的一般架构

嵌入式数据库的架构与应用对象紧密相关&#xff0c;其架构是以内存、文件和网络等三种方式为主。 1.基于内存的数据库系统 基于内存的数据库系统中比较典型的产品是每个McObject公司的eXtremeDB嵌入式数据库&#xff0c;2013年3月推出5.0版&#xff0c;它采用内存数据结构&…

2024年黑龙江省特岗招聘公告出了!!!

2024年黑龙江省农村义务教育阶段学校特设岗位教师招聘822人公告 (1、网上报名 时间&#xff1a;6月17日9&#xff1a;00—6月22日17&#xff1a;00。 网址&#xff1a; https&#xff1a;//sfyz.hljea.org.cn&#xff1a;7006/tgjs 2、网上资格审查 资格审查时间&#xff1a;6月…

英语学习笔记36——Where ... ?

Where … ? ……在哪里&#xff1f; 词汇 Vocabulary beside prep. 在……旁边 同义词&#xff1a; near by 构成&#xff1a;be side side n. 边 搭配&#xff1a;side walk 人行道 例句&#xff1a;Bobby在我旁边。    Bobby is beside me. off prep. 离开&#xff…

C/C++中内存开辟与柔性数组

C/C中内存的开辟 在C中&#xff0c;我们都知道有三个区&#xff1a; 1. 栈区&#xff08;stack&#xff09;&#xff1a;在执行函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执行结 束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指…

使用itextPDF实现PDF电子公章工具类

一、制作公章 在线网站&#xff1a;印章生成器 - Kalvin在线工具 (kalvinbg.cn) 然后对公章进行下载保存 盖章图片&#xff1a; 二、生成数字签名 2.1&#xff1a; java工具keytool生成p12数字证书文件 Keytool是用于管理和证书的工具&#xff0c;位于%JAVA_HOME%/bin目录。…

代码随想录——组合总数Ⅲ(Leetcode216)

题目链接 回溯 class Solution {List<List<Integer>> res new ArrayList<List<Integer>>();List<Integer> list new ArrayList<Integer>();public List<List<Integer>> combinationSum3(int k, int n) {backtracking(k, …

揭秘最强气象武器的库,SPEI-Python不可思议之处.

spei-python是一个专门用于计算标准化降水蒸散指数&#xff08;Standardized Precipitation Evapotranspiration Index,SPEI&#xff09;的Python库.SPEI是一种综合考虑降水和潜在蒸散发的干旱指数,用于评估干旱的严重程度和持续时间. 安装 ## 可以使用 pip 来安装 spei-pyth…

【EtherCAT电机板】CiA402增加cst模式

在EtherCAT电机板上实现cst功能&#xff0c;在xml中增加cst相关pdo&#xff0c;在402程序增加cst模式。 1、XML配置修改 cst模式需要用到目标转矩和反馈实际转矩PDO&#xff0c;结合CiA402手册&#xff0c;这两个PDO对应的索引号分别为&#xff1a;0x6071&#xff08;Target t…

基于微信小程序的在线答题小程序设计与实现

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…

JavaFX VBox

VBox布局将子节点堆叠在垂直列中。新添加的子节点被放置在上一个子节点的下面。默认情况下&#xff0c;VBox尊重子节点的首选宽度和高度。 当父节点不可调整大小时&#xff0c;例如Group节点&#xff0c;最大垂直列的宽度基于具有最大优选宽度的节点。 默认情况下&#xff0c;…

分数布朗运动FBM期权定价模型

BS定价模型和蒙特卡洛模拟期权定价方法都 假设标的资产价格的对数服从布朗运动 &#xff0e; 但是实际 的金融市场中标的资产价格运动过程具有 “尖峰厚尾 ” 现象 &#xff0c; 运用分数布朗运动 &#xff08;FBM &#xff09;来刻画标的资产 价格的运动过程可能更加合适。 …

单列集合顶层接口Collection及五类遍历方式(迭代器)

collection add方法细节&#xff1a; remove方法细节&#xff1a; contains方法细节&#xff1a; 如果集合中存储的是自定义对象, student之类的, 也想通过contains进行判断, 就必须在javaBean中重写equals方法 contains在arrayList中源代码&#xff1a;在底层调用了equals方…