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, 此处切记不要加,否则会造成后端报错 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 文件阅读器软件,支持本地和远程 CHM 文件的打开和查看。它提供了直观易用的界面设计,支持多种浏览模式,如书籍模式、缩略图模式和文本模式等,并提供了丰富的功能和工具,如…...

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

Zeitgeist ZTG Token以及其预测市场加入Moonbeam生态
波卡上的首选多链开发平台Moonbeam宣布与Zeitgeist达成XCM集成,将ZTG Token引入Moonbeam。此集成将使波卡内的Moonbeam和Zeitgeist网络之间的流动性得以流动,并通过Moonbeam的互连合约实现远程链集成。 Zeitgeist是一个基于波卡的Substrate区块链框架构…...
AM@方向导数概念和定理
文章目录 abstract方向导数二元函数方向导数偏导数是方向导数的特例偏导数存在一定有对应的方向导数存在方向导数存在不一定有偏导数存在例 三元函数方向导数例 方向导数存在定理和计算公式证明二元函数三元函数 abstract 方向导数的概念,定理和计算公式方向导数是对偏导的补充…...

微信小程序隐私政策不合规,应当由用户自主阅读后自行选择是否同意隐私政策协议,不得默认强制用户同意
小程序隐私政策不合规,默认自动同意《用户服务协议》及《隐私政策》,应当由用户自主阅读后自行选择是否同意隐私政策协议,不得默认强制用户同意,请整改后再重新提交。 把 登录代表同意《用户协议》和《隐私政策》 改为 同意《用…...
Python中如何判断两个对象的内存地址是否一致?
目录 一、引言 二、Python的内存管理 三、对象的比较 四、使用id函数判断内存地址 五、总结 一、引言 在Python中,我们经常需要比较两个对象是否是同一个对象,或者说它们是否在内存中占据同一位置。在理解这个问题之前,我们需要了解Pyt…...

唯美仙侠3D手游2023【仙变3】画面精美/linux服务端+双端+GM后台+运营后台+详细教程
搭建资源下载地址:https://www.ldmzy.com/6618/6618.html...
React组件通信:如何优雅地实现组件间的数据传递
在React应用中,组件通信是至关重要的一部分。通过合适的数据传递和交互方式,我们可以构建出更加灵活和高效的前端应用。本文将介绍React组件通信的各种方式,并提供代码实现,帮助你更好地理解和应用这些技术。 1. 使用props进行父子…...

数据分析实战 | 逻辑回归——病例自动诊断分析
目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 九、模型调参 十、模型预测 一、数据及分析对象 CSV文件——“bc_data.csv” 数据集链接:https://download.csdn.net/d…...
Eigen::Matrix<double,3,1> F;Eigen::MatrixXd F (3, 2);这两行代码有什么区别?
这两行代码的区别在于定义的矩阵 F 的类型和维度不同。 第一行: Eigen::Matrix<double,3,1> F;这行代码创建了一个3x1的矩阵 F,其中元素类型为 double。这是一个静态大小的矩阵,其维度在编译时确定。 第二行: Eigen::Ma…...
Java Agent - 应用程序代理-笔记
Java Agent - 应用程序代理-笔记 概述说明 Java Agent 又叫做 Java 探针,该功能是 Java 虚拟机提供的一整套后门,通过这套后门可以对虚拟机方方面面进行监控与分析,甚至干预虚拟机的运行。 是在 JDK1.5 引入的一种可以动态修改 Java 字节码…...

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

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

建行广东江门分行:科技赋能,数据助力纠“四风”
为进一步深化落实中央八项规定精神,持续加大“四风”问题查处力度,建行驻江门市分行纪检组根据《广东省分行贯彻落实中央八项规定精神持之以恒纠治“四风”实施方案》(建粤党发〔2023〕1号)安排,对驻在市分行开展“四风…...
3164:练27.1 叮叮当当 《信息学奥赛一本通编程启蒙(C++版)》
3164:练27.1 叮叮当当 《信息学奥赛一本通编程启蒙(C版)》 【题目描述】 松鼠老师和尼克玩报数游戏。松鼠老师数到2的倍数时,尼克就说“叮叮”;松鼠老师数到3的倍数时,尼克就说“当当”;松鼠老…...

立体库堆垛机放货动作控制程序功能
放货动作程序功能块 DB11.DBX0.0 为左出货台有货 DB11.DBX1.0 为右出货台有货 左出货台车就位 DB11.DBX0.2 右出货台车就位 DB11.DBX1.2 左出货台车就位 DB11.DBX0.2 右出货台车就位 DB11.DBX1.2 左出货台车就位 DB11.DBX0.2 右出货台车就位 DB11.DBX1.2...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...