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

k8s最详细集群部署

安装kubeadm、kubectl、和 kubelet

这里通过百度网盘下载所需要的安装包:

链接: k8s部署包.zip_免费高速下载|百度网盘-分享无限制 提取码: 0000

1、下载部署包到本地后,在k8s部署包/k8s目录下

执行此yum命令安装:yum localinstall ./*.rpm 或 rpm -Uvh *.rpm --nodeps --force

2、在 /etc/sysconfig/kublet 中增加自定义 kubelet 配置

# 设置hostname

hostnamectl set-hostname master

mkdir -p /home/work/kubernetes/log

mkdir -p /home/work/kubernetes/kubelet_data

mkdir -p /home/work/docker

# 自定义kublet配置

vi /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS=" --hostname-override=master --logtostderr=false --log-dir=/home/work/kubernetes/log --v=0\

--root-dir=/home/work/kubernetes/kubelet_data "

3、设置 kubelet 开机启动

systemctl enable kubelet && systemctl start kubelet

docker安装

1、rpm包在k8s部署包/docker目录下

2、切换到该目录下安装

yum localinstall ./*.rpm 或rpm -Uvh *.rpm --nodeps --force

4、若是GPU机节点,需要安装nvidia-dcoker

1、切到k8s部署包/docker/nvidia-dcoker目录下

3、在该目录下执行

rpm -Uvh *.rpm --nodeps --force

4、sudo systemctl restart docker

5、修改docker配置,包括cgroup和仓库地址

vim /etc/docker/daemon.json

# gpu机器:

{

"runtimes": {

"nvidia": {

"path": "nvidia-container-runtime",

"runtimeArgs": []

}

},

"registry-mirrors": ["https://23h04een.mirror.aliyuncs.com"],

"exec-opts": ["native.cgroupdriver=systemd"],

"default-runtime": "nvidia",

"storage-driver": "overlay2",

"storage-opts": [

"overlay2.override_kernel_check=true"

]

}

# cpu机器:

{

"exec-opts": ["native.cgroupdriver=systemd"]

}

6、修改docker服务参数,增加docker配置文件,指定docker数据文件目录

vim /etc/kubernetes/docker_opts.env

DOCKER_OPT_IPMASQ="--ip-masq=true"

DOCKER_OPT_MTU="--mtu=1372"

DOCKER_OPTS=" --ip-masq=true --mtu=1372 --data-root=/home/work/docker "

vim /usr/lib/systemd/system/docker.service (EnvironmentFile 对应上面的文件绝对路径)

EnvironmentFile=/etc/kubernetes/docker_opts.env

ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd:// --containerd=/run/containerd/containerd.sock

#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

7、重启docker,设置开机启动

systemctl daemon-reload

systemctl restart docker

nfs准备

安装nfs,配置挂载

先进入到k8s部署包/nfs-utils目录下

执行命令安装:yum localinstall ./*.rpm 或rpm -Uvh *.rpm --nodeps --force

# 创建本地目录

mkdir /cfs

# 挂载远程目录到本地

mount -t nfs4 -o minorversion=1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport cfs-PJ5X3SRg7M.lb-d065a956.cfs.bj.baidubce.com:/ /cfs

# 设置开机启动

systemctl enable nfs.service

更改服务器配置

1. 关闭防火墙和selinux

[root@centos7 ~] systemctl stop firewalld && systemctl disable firewalld

# 永久关闭selinux

[root@centos7 ~] sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config && cat /etc/selinux/config

# 临时关闭selinux

root@centos7 ~] setenforce 0

1. 禁用swap

# 临时禁用

[root@master ~] swapoff -a

# 永久禁用

[root@master ~] sed -i.bak '/swap/s/^/#/' /etc/fstab

1. 内核参数修改

部署的 k8s 网络使用 flannel,该网络需要设置内核参数 bridge-nf-call-iptables=1

# 临时修改

[root@master ~] sysctl net.bridge.bridge-nf-call-iptables=1

net.bridge.bridge-nf-call-iptables = 1

[root@master ~] sysctl net.bridge.bridge-nf-call-ip6tables=1

net.bridge.bridge-nf-call-ip6tables = 1

# 永久修改

[root@master ~] cat /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

[root@master ~] sysctl -p /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

1. 处理依赖的docker镜像

所需要的镜像为:

registry.aliyuncs.com/google_containers/kube-apiserver:v1.23.5

registry.aliyuncs.com/google_containers/kube-controller-manager:v1.23.5

registry.aliyuncs.com/google_containers/kube-scheduler:v1.23.5

registry.aliyuncs.com/google_containers/kube-proxy:v1.23.5

registry.aliyuncs.com/google_containers/pause:3.6

registry.aliyuncs.com/google_containers/etcd:3.5.1-0

registry.aliyuncs.com/google_containers/coredns:v1.8.6

在k8s部署包/images下,逐个docker load -i 导入镜像。

kubeadm启动集群

1. 初始化

kubeadm reset -f

若是之前已经创建集群:

* 删除/root/.kube/config文件

* 若是安装了flannel网络,删除 /etc/cni/net.d/ 下的flannel网络文件,10-flannel.conflist

如果报错:[ERROR FileExisting-conntrack]: conntrack not found in system path

解决办法:先下载:yum install --downloadonly --downloaddir=/home/conntrack conntrack

安装到目标服务器上:rpm -Uvh *.rpm --nodeps --force

1. 通过命令+参数初始化集群

kubeadm init --kubernetes-version=v1.23.5 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap --apiserver-advertise-address=10.132.130.197 --image-repository registry.aliyuncs.com/google_containers --v=5

# apiserver-advertise-address 必须填充ip

1. 修改kubectl配置

把 kubectl 所需的 apiserver 服务地址和证书配置添加到环境变量中,否则会无权限访问 6443 端口

mkdir -p $HOME/.kube

sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

cp -p $HOME/.bash_profile $HOME/.bash_profile.bak$(date '+%Y%m%d%H%M%S')

echo "export KUBECONFIG=$HOME/.kube/config" >> $HOME/.bash_profile

source $HOME/.bash_profile

4、配置环境变量

export KUBECONFIG=/etc/kubernetes/admin.conf

5、flannel网络搭建

需要的yaml文件:kube-flannel.yml

对应的镜像:

docker.io/flannel/flannel:v0.21.4

docker.io/flannel/flannel-cni-plugin:v1.1.2

在k8s部署包/flannel下,

先docker load -i 导入镜像,然后执行下面命令:

kubectl apply -f kube-flannel.yml

如果 flannel 的 pod 无法启动,显示 CrashLoopBackOff。通过 kubectl logs 显示 node“master“podcidr not assigned 错误,有两种解决方法:

1)安装 kubeadm Init的时候,没有增加 --pod-network-cidr 10.244.0.0/16 参数

注意,安装Flannel时,kubectl create -f https://bd.bcebos.com/datahub-online/k8s/kube-flannel.yml 如果 yml 中的 "Network": "10.244.0.0/16"和--pod-network-cidr 不一样,就修改成一样的。不然可能会使得Node间Cluster IP 不通。

如果你没有快照可以还原,采用方法(2),然后 kubectl delete pod -n kube-system kube-flannel-*, 将错误的 flannel-pod 删除,即可自动重新创建新的 flannel-pod。

如果你有恢复快照,那么在 kubeadm init 时加上 --pod-network-cidr=10.244.0.0/16 参数重新 init 即可。

在搭建完 flannel 网络后把 coredns 的 pod 删了自动重启一下应该就可以 running 了

6、节点加入集群

* 首先k8s集群的node节点同按照上述去安装kubeadmin、kubectl和kubelet,安装docker,更改服务器配置,安装nfs挂载服务

* node节点上不需要去部署集群,只需要安装好k8s的基础环境即可

* 再master节点上运行

kubeadm token create --print-join-command

kubeadm join 10.52.12.2:6443 --token 774333.jxfe29jzo86zsgfo --discovery-token-ca-cert-hash sha256:ffb898db137891d1eb88a8d0727d623312cac68dc84999a4978658b1cbeb3c35

在希望加入集群的节点执行上面命令输出的语句

在node节点上运行 kubeadm join 10.52.12.2:6443 --token 774333.jxfe29jzo86zsgfo --discovery-token-ca-cert-hash sha256:ffb898db137891d1eb88a8d0727d623312cac68dc84999a4978658b1cbeb3c35 即可加入集群中

注意:这里如果之前节点已经加入过集群了,需要做一些清理工作,否则加入不成功

重新初始化集群:kubeadm -f reset

清理网络:ifconfig查看网络,清理之前加入的网络,否则加入集群不成功

sudo ifconfig cni0 down

sudo ip link delete cni0

安装插件

1. 安装nvidia-device-plugin插件,使用gpu

1、在k8s部署包/nvidia-device-plugin文件下

2、在Gpu机器上导入镜像:docker load -i nvidia/k8s-device-plugin:1.0.0-beta6.tar

3、kubectl create -f nvidia-device-plugin.yml

1. 训练调度kube-queue的安装和使用

之前的基于k8s的调度是基于java单独写的一套,他需要不停的轮询队列去查信息进行调度,存在以下问题:

1. 与业务代码耦合,通用性差,可移植性差

2. 持续轮询,有性能瓶颈

3. 稳定性不高

基于此,我们引入了新的队列kube-queue,他基于k8s的informer机制进行时间监听和执行,kube-queue已经过大规模平台验证,稳定性比较高;我们通过编写不同的extender就可以支持job、tf-job、pytorch-job、mxnet-job等多个类型。

1)安装helm

1、在/k8s部署包/kube-queue文件夹下

2、解压:tar -zxvf helm-v3.9.3-linux-amd64.tar.gz

cp helm /usr/local/bin

# helm是一个可执行的二进制文件,可以直接执行,若是想全局执行,将文件复制到/usr/local/bin下

2)安装kube-queue

参考:http://agroup.baidu.com/zhongce_saas/md/article/4816652

1、在/k8s部署包/kube-queue文件夹下

2、解压:tar -zxvf kube-queue.tar.gz

3、cd kube-queue

修改charts/v0.1.0/templates/controller.yaml镜像拉取策略为Never

# 通过helm安装

4、helm install kube-queue -n kube-system ./charts/v0.1.0

#查看kube-queue-controller和job-extension进程是否存在

5、helm get manifest kube-queue -n kube-system | kubectl get -n kube-queue -f -

# 通过helm卸载kube-queue

6、helm uninstall kube-queue -n kube-system

3、NFS Server安装 & K8S适配NFS

1)NFS Server安装

参考:搭建NFS Server_山间漫步人生路的博客-CSDN博客

# 安装nfs server

在k8s部署包/nfs目录下安装:rpm -ivh *.rpm --force --nodeps

docker load -i busybox.tar

# 启动nfs server & 设置开机自启

systemctl start rpcbind

systemctl enable rpcbind

systemctl start nfs-server

systemctl enable nfs-server

# 创建共享目录

mkdir -p /nas/k8s

chmod -R 777 /nas/k8s

# 设置共享目录

vim /etc/exports

/nas/k8s 192.168.3.0/24(insecure,rw,sync,no_root_squash)

exportfs -a # 使exports的修改生效

# 将共享目录挂载到其他服务器,需要已安装nfs-utils

mount -t nfs 10.132.130.197:/nas/k8s /nas/k8s

# 设置开机自挂载,编辑/etc/fstab,增加一条挂载记录

vim /etc/fstab

192.168.3.81:/nas/k8s /data nfs defaults 0 1

2)nfs-provisioner 插件安装

参考:http://agroup.baidu.com/zhongce_saas/md/article/4826066

需要的镜像在k8s部署包/nfs文件夹下。

在k8s部署包/nfs下导入镜像:docker load -i nfs-provisioner.tar

# 解压

tar -xvf nfs-provisioner_file.tar

cd nfs-provisioner/nfs-subdir-external-provisioner

# 设置namespace的rbac权限

NS=$(kubectl config get-contexts|grep -e "^\*" |awk '{print $5}')

NAMESPACE=${NS:-default}

sed -i'' "s/namespace:.*/namespace: $NAMESPACE/g" ./deploy/rbac.yaml ./deploy/deployment.yaml

kubectl create -f deploy/rbac.yaml

如有报错,参考:Error from server: Get “https://[::1]:6443/api/v1/namespaces/victor/resourcequotas“: dial tcp [::1]:_get "https://[::1]:6443/api/v1/namespaces/kube-sys_victorgk的博客-CSDN博客

配置 NFS subdir external provisioner的deploy/deployment.yaml,设置nfs地址和路径并执行,部署的时候需要指定对应的ns,并部署到指定机器上。编辑deployment.yaml,修改nfs-server的地址和共享目录

kubectl create -f deploy/deployment.yaml

执行deploy/class.yaml ,定义了NFS子目录外部提供给Kubernetes的存储目录的存储类

cd nfs-provisioner/nfs-subdir-external-provisioner

kubectl apply -f deploy/class.yaml

测试

# 创建pod,查看创建的pvc是否分配到了nfs共享目录中

kubectl create -f deploy/test-claim.yaml -f deploy/test-pod.yaml

kubectl delete -f deploy/test-pod.yaml -f deploy/test-claim.yaml

4、ingress-controller安装

参考:http://agroup.baidu.com/zhongce_saas/md/article/4890077

1、需要的tar包:ingress-nginx.tar.gz

2、镜像:

registry.baidubce.com/datahub/ingress-nginx-controller:v1.2.0

registry.baidubce.com/datahub/ingress-nginx-kube-webhook-certgen:v1.1.1

registry.cn-beijing.aliyuncs.com/google_registry/myapp:v1

3、tar包和镜像都在/k8s部署包/ingress-controller下

4、解压:tar -zxvf ingress-nginx.tar.gz

5、依次使用docker load -i导入上面的镜像

6、cd ingress-nginx

# 需要修改的地方:deploy.yaml

# externalTrafficPolicy:local -> externalTrafficPolicy: Cluster

# 如果改成Cluster, 含有kube-proxy进程的机器都可以通过端口访问。Local的话只能部署ingress-controller的那台机器可以访问。

# Service的type改成NodePort

# 安装

7、kubectl apply -f deploy.yaml

5、分布式任务的安装和使用

1、在/k8s部署包/分布式任务下

3、解压:tar -xvf training-operator.tar

4、cd training-operator

docker load -i training-operator.tar

5、kubectl apply -k manifests/overlays/standalone

6、filebeat安装

1、需要的包在/k8s部署包/filebeat下

2、解压:tar -zxvf filebeat-7.13.0-zhongcesaas.tar.gz

3、cd filebeat

# 修改的地方:filebeat/values.yaml,修改es的地址,docker

---

daemonset:

# Annotations to apply to the daemonset

annotations: {}

# additionals labels

labels: {}

affinity: {}

# Include the daemonset

enabled: true

# Extra environment variables for Filebeat container.

envFrom: []

# - configMapRef:

# name: config-secret

extraEnvs: []

# - name: MY_ENVIRONMENT_VAR

# value: the_value_goes_here

extraVolumes:

- name: extras

hostPath:

path: /home/work/docker/containers

type: DirectoryOrCreate

extraVolumeMounts:

- name: extras

mountPath: /home/work/docker/containers

readOnly: true

hostNetworking: false

# Allows you to add any config files in /usr/share/filebeat

# such as filebeat.yml for daemonset

filebeatConfig:

filebeat.yml: |

filebeat.inputs:

- type: container

paths:

- /var/log/containers/*-job-*.log

processors:

- add_kubernetes_metadata:

host: ${NODE_NAME}

matchers:

- logs_path:

logs_path: "/var/log/containers"

output.elasticsearch:

host: '${NODE_NAME}'

hosts: '${ELASTICSEARCH_HOSTS:10.138.117.28:8200}'

# 创建namespace

kubectl create ns logs

# 指定ns安装

helm install filebeat -n logs filebeat/

# 卸载

helm uninstall filebeat -n logs

注意点:es的地址需要配置对,否则连接不上es

7、job-extension安装

1、需要的yaml文件:job-extension.yaml

tar包:job-extension-vtest2.tar

2、在/k8s部署包/job-extension下

导入镜像:docker load -i job-extension-vtest2.tar

3、kubectl apply -f job-extension.yaml

8、设置任务优先级资源

1、在/k8s部署包/job-extension下

2、kubectl apply -f priorityclass.yaml

生成ca证书脚本

export clientcert=$(grep client-cert ~/.kube/config |cut -d" " -f 6)

export certauth=$(grep certificate-authority-data ~/.kube/config |cut -d" " -f 6)

export clientkey=$(grep client-key-data ~/.kube/config |cut -d" " -f 6)

echo $clientcert | base64 -d > ./client.pem

echo $clientkey | base64 -d > ./client-key.pem

echo $certauth | base64 -d > ./ca.pem

7、部署node节点参考:

k8s 集群新增 Node 文档

8、k8s集群默认存在污点策略NoSchedule,master节点不会被调度到。如果需要master节点被调度,则需要做去除操作:

kubectl taint nodes --all for-node-role.kubernetes.io/master:NoSchedule-

参考:k8s污点策略与容忍的简单应用_prefernoschedule_xhredeem的博客-CSDN博客

相关文章:

k8s最详细集群部署

安装kubeadm、kubectl、和 kubelet 这里通过百度网盘下载所需要的安装包: 链接: k8s部署包.zip_免费高速下载|百度网盘-分享无限制 提取码: 0000 1、下载部署包到本地后,在k8s部署包/k8s目录下 执行此yum命令安装:yum localinstall ./*.r…...

Redis底层数据结构:字典

在 Redis 中,字典(Dictionary)是一种常用的底层数据结构,它被用于实现 Redis 的哈希表(Hash Table)数据结构。字典用于存储键值对,它提供了快速的键值查找、插入和删除操作。 Redis 字典的特点&…...

upload 文件自动上传写法,前后端 下载流文件流

<el-uploadv-model:file-list"fileList":action"app.api/student/student/import":headers"{// Content-Type: multipart/form-data;boundary----split-boundary, 此处切记不要加&#xff0c;否则会造成后端报错 Required request part file is…...

Python文件、文件夹操作汇总

目录 一、概览 二、文件操作 2.1 文件的打开、关闭 2.2 文件级操作 2.3 文件内容的操作 三、文件夹操作 四、常用技巧 五、常见使用场景 5.1 查找指定类型文件 5.2 查找指定名称的文件 5.3 查找指定名称的文件夹 5.4 指定路径查找包含指定内容的文件 一、概览 ​在…...

CHM Viewer Star 6.3.2(CHM文件阅读)

CHM Viewer Star 是一款适用于 Mac 平台的 CHM 文件阅读器软件&#xff0c;支持本地和远程 CHM 文件的打开和查看。它提供了直观易用的界面设计&#xff0c;支持多种浏览模式&#xff0c;如书籍模式、缩略图模式和文本模式等&#xff0c;并提供了丰富的功能和工具&#xff0c;如…...

【GIT】git分支命令,使用分支场景介绍git标签介绍,git标签命令,git标签使用的场景git查看提交历史

目录 一&#xff0c;git分支命令&#xff0c;使用分支场景介绍 二&#xff0c;git标签介绍&#xff0c;git标签命令&#xff0c;git标签使用的场景 三&#xff0c;git查看提交历史 前言&#xff1a; 今天我们来聊聊关于Git 分支管理。几乎每一种版本控制系统都以某种形式支持…...

Zeitgeist ZTG Token以及其预测市场加入Moonbeam生态

波卡上的首选多链开发平台Moonbeam宣布与Zeitgeist达成XCM集成&#xff0c;将ZTG Token引入Moonbeam。此集成将使波卡内的Moonbeam和Zeitgeist网络之间的流动性得以流动&#xff0c;并通过Moonbeam的互连合约实现远程链集成。 Zeitgeist是一个基于波卡的Substrate区块链框架构…...

AM@方向导数概念和定理

文章目录 abstract方向导数二元函数方向导数偏导数是方向导数的特例偏导数存在一定有对应的方向导数存在方向导数存在不一定有偏导数存在例 三元函数方向导数例 方向导数存在定理和计算公式证明二元函数三元函数 abstract 方向导数的概念,定理和计算公式方向导数是对偏导的补充…...

微信小程序隐私政策不合规,应当由用户自主阅读后自行选择是否同意隐私政策协议,不得默认强制用户同意

小程序隐私政策不合规&#xff0c;默认自动同意《用户服务协议》及《隐私政策》&#xff0c;应当由用户自主阅读后自行选择是否同意隐私政策协议&#xff0c;不得默认强制用户同意&#xff0c;请整改后再重新提交。 把 登录代表同意《用户协议》和《隐私政策》 改为 同意《用…...

Python中如何判断两个对象的内存地址是否一致?

目录 一、引言 二、Python的内存管理 三、对象的比较 四、使用id函数判断内存地址 五、总结 一、引言 在Python中&#xff0c;我们经常需要比较两个对象是否是同一个对象&#xff0c;或者说它们是否在内存中占据同一位置。在理解这个问题之前&#xff0c;我们需要了解Pyt…...

唯美仙侠3D手游2023【仙变3】画面精美/linux服务端+双端+GM后台+运营后台+详细教程

搭建资源下载地址&#xff1a;https://www.ldmzy.com/6618/6618.html...

React组件通信:如何优雅地实现组件间的数据传递

在React应用中&#xff0c;组件通信是至关重要的一部分。通过合适的数据传递和交互方式&#xff0c;我们可以构建出更加灵活和高效的前端应用。本文将介绍React组件通信的各种方式&#xff0c;并提供代码实现&#xff0c;帮助你更好地理解和应用这些技术。 1. 使用props进行父子…...

数据分析实战 | 逻辑回归——病例自动诊断分析

目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 九、模型调参 十、模型预测 一、数据及分析对象 CSV文件——“bc_data.csv” 数据集链接&#xff1a;https://download.csdn.net/d…...

Eigen::Matrix<double,3,1> F;Eigen::MatrixXd F (3, 2);这两行代码有什么区别?

这两行代码的区别在于定义的矩阵 F 的类型和维度不同。 第一行&#xff1a; Eigen::Matrix<double,3,1> F;这行代码创建了一个3x1的矩阵 F&#xff0c;其中元素类型为 double。这是一个静态大小的矩阵&#xff0c;其维度在编译时确定。 第二行&#xff1a; Eigen::Ma…...

Java Agent - 应用程序代理-笔记

Java Agent - 应用程序代理-笔记 概述说明 Java Agent 又叫做 Java 探针&#xff0c;该功能是 Java 虚拟机提供的一整套后门&#xff0c;通过这套后门可以对虚拟机方方面面进行监控与分析&#xff0c;甚至干预虚拟机的运行。 是在 JDK1.5 引入的一种可以动态修改 Java 字节码…...

gird 卡片布局

场景一&#xff1a;单元格大小相等 这承载了所有 CSS Grid 中最著名的片段&#xff0c;也是有史以来最伟大的 CSS 技巧之一&#xff1a; 等宽网格响应式卡片实现 .section-content {display: grid;grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));gap: 10px; …...

C#医学检验室(LIS)信息管理系统源码

LIS:实验室信息管理系统 (Laboratory Information Management System简称:LIS)。 LIS 是面向医院检验科、检验中心、动物实验所、生物医疗研究所等科研单位研发的集数据采集、传输、存储、分析、处理、发布等功能于一体的信息管理系统。 一、完善的质控&#xff1a; 从样本管理…...

建行广东江门分行:科技赋能,数据助力纠“四风”

为进一步深化落实中央八项规定精神&#xff0c;持续加大“四风”问题查处力度&#xff0c;建行驻江门市分行纪检组根据《广东省分行贯彻落实中央八项规定精神持之以恒纠治“四风”实施方案》&#xff08;建粤党发〔2023〕1号&#xff09;安排&#xff0c;对驻在市分行开展“四风…...

3164:练27.1 叮叮当当 《信息学奥赛一本通编程启蒙(C++版)》

3164&#xff1a;练27.1 叮叮当当 《信息学奥赛一本通编程启蒙&#xff08;C版&#xff09;》 【题目描述】 松鼠老师和尼克玩报数游戏。松鼠老师数到2的倍数时&#xff0c;尼克就说“叮叮”&#xff1b;松鼠老师数到3的倍数时&#xff0c;尼克就说“当当”&#xff1b;松鼠老…...

立体库堆垛机放货动作控制程序功能

放货动作程序功能块 DB11.DBX0.0 为左出货台有货 DB11.DBX1.0 为右出货台有货 左出货台车就位 DB11.DBX0.2 右出货台车就位 DB11.DBX1.2 左出货台车就位 DB11.DBX0.2 右出货台车就位 DB11.DBX1.2 左出货台车就位 DB11.DBX0.2 右出货台车就位 DB11.DBX1.2...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...