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

kubernetes集群部署:环境准备及master节点部署(二)

主机名IPv4地址IPv6地址角色安装组件操作系统
k8s130-node190192.168.XX.190240a:XX::190masterkubeadm、kubelet、containerdAnolis OS 8.9+4.19.91-28.1.an8.x86_64
k8s130-node191192.168.XX.191240a:XX::191nodekubeadm、kubelet、cri-oAnolis OS 8.9+4.19.91-28.1.an8.x86_64
k8s130-node189192.168.XX.189240a:XX::189nodekubeadm、kubelet、cri-dockerdAnolis OS 8.9+4.19.91-28.1.an8.x86_64

安装前准备

1、最小化安装虚拟机,安装完之后需要更新到最新

~]# yum -y update

2、关闭防火墙

~]# systemctl disable firewalld && systemctl stop firewalld

3、关闭SELinux

~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

4、确保时间同步服务运行正常,并且可以成功同步时间

~]# systemctl status chronyd -l --no-pager

5、安装必须的一些软件包

~]# yum -y install ipvsadm ipset conntrack-tools iproute-tc conntrack libseccomp wget tar

6、启用内核模块

~]# modprobe ip_conntrack
~]# modprobe nf_conntrack
~]# modprobe ip_vs
~]# modprobe ip_vs_rr
~]# modprobe ip_vs_rr
~]# modprobe ip_vs_wrr
~]# modprobe ip_vs_sh
~]# modprobe br_netfilter
~]# modprobe bridge

7、配置内核参数

~]# cat /etc/sysctl.d/99-sysctl.conf 
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.all.forwarding=1
net.ipv4.ip_forward=1
net.ipv4.neigh.default.gc_thresh1=1024
net.ipv4.neigh.default.gc_thresh2=2048
net.ipv4.neigh.default.gc_thresh3=4096
net.netfilter.nf_conntrack_max=2310720net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_keepalive_time = 180
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.ip_local_port_range = 21000 61000vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963

8、关闭swap(在装虚拟机分区时就不做swap最好)

a、swapoff -a
b、注释/etc/fstab中的swap挂载

安装Containerd

containerd最初是Docker引擎的一部分,作为Docker的核心组件负责容器的创建、运行和管理。2017年,Docker决定将containerd作为一个独立的开源项目,以便社区能够更广泛地使用和贡献。containerd的目标是提供一个简单、稳定且高效的容器运行时,它可以作为各种容器生态系统的基础,特别是在与Kubernetes的集成方面。

1、配置第三方镜像源(在线安装Containerd需要配置docker-ce的镜像源,如果不想或者不能在线安装,那么可以通过其他方式:Getting started with containerd)

注:

a、这两种方式安装结果还是有很大不同的;

b、下面使用的是阿里镜像源,docker官方镜像源被qiang

~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo~]# yum repolist|grep docker
docker-ce-stable                    Docker CE Stable - x86_64

2、安装Containerd最新版

~]# yum -y install containerd.io --disableexcludes=docker-ce-stable

3、设置开机启动

systemctl enable containerd

4、设置Containerd

docker-ce的配置文件是/etc/docker/daemon.json ,那么Containerd的呢?答案:/etc/containerd/config.toml。但是,通过docker镜像源在线安装的Containerd的配置文件不可用,需要重新生成配置文件。

mv /etc/containerd/config.toml{,_docker}
containerd config default > /etc/containerd/config.toml
4.1、配置sandbox_image

早先使用dockershim时,只需要配置kubelet的--pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9即可,如果要使用containerd作为kubernetes的运行时,pod-infra-container-image将不生效(不过kubeadm启动kubernetes组件时仍然会用到)

<     sandbox_image = "registry.k8s.io/pause:3.6"
---
>     sandbox_image = "192.168.XX.XX/kubeadm/pause:3.9"

4.2、设置SystemdCgroup && 配置私有仓库认证信息

……
[plugins]
  [plugins."io.containerd.grpc.v1.cri"]
    sandbox_image = "192.168.XX.XX/kubeadm/pause:3.7"
    [plugins."io.containerd.grpc.v1.cri".containerd]
      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
        [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
            SystemdCgroup = true
……
      [plugins."io.containerd.grpc.v1.cri".registry.configs]
        [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.XX.XX".auth]
          username = "admin"
          password = "密码" 
 
      [plugins."io.containerd.grpc.v1.cri".registry.headers]
 
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://registry-1.docker.io"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.XX.XX"]
          endpoint = ["http://192.168.XX.XX"]

4.3、Containerd的客户端命令配置

docker-ce的客户端命令就是docker,Containerd的客户端命令crictl和ctr,一般使用crictl,需要配置一下,否则~~哼哼

cat /etc/crictl.yaml 
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10
debug: false

5、启动Containerd

systemctl start containerd

安装kubeadm、kubelet、kubectl

1、配置第三方镜像源

cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

2、安装kubelet kubeadm kubectl

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable kubelet

初始化kubernetes master节点

1、生成初始化YAML文件

kubeadm config print init-defaults > kubeadm-init.default.yaml

2、设置初始化文件。如下红色内容需要根据需要修改,另外,advertiseAddress只支持IPv4。

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.XX.190
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: k8s130-node190
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.30.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.254.0.0/16,2408:822a:730:af01::/112
  podSubnet: 172.254.0.0/16,fa00:cafe:42::/56

scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
iptables:
  masqueradeAll: false
ipvs:
  minSyncPeriod: 0s
  scheduler: "rr"
kind: KubeProxyConfiguration
mode: "ipvs"

3、初始化master节点

kubeadm init --config=kubeadm-init.default.yaml |tee kubeadm-init.log

打印如下内容,则表明初始化成功。另外,根据初始化文件中定义的ttl: 24h0m0s,token的有效期是24小时,过期之后,将无法使用如下打印的token加入kubernetes集群。

安装之后处理

1、验证

~]$ kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE   ERROR
controller-manager   Healthy   ok        
scheduler            Healthy   ok        
etcd-0               Healthy   ok        
~]$ kubectl get node
NAME             STATUS     ROLES           AGE     VERSION
k8s130-node190   NotReady   control-plane   3m44s   v1.30.2

执行kubectl get node,node是NotReady状态 !                        --- --- 没有安装网络插件
执行kubectl get po,pod中coredns是Pending状态!                 --- --- 没有安装网络插件

安装网络插件-Calico

1、下载Calico启动配置文件

wget https://mirrors.chenby.cn/https://github.com/projectcalico/calico/blob/master/manifests/calico-typha.yaml

2、定制Calico配置文件

2.1、配置启用IP双栈(无需IPv6,则不需要配置)

<               "type": "calico-ipam"
---
>               "type": "calico-ipam",
>               "assign_ipv4": "true",
>               "assign_ipv6": "true"

2.2、配置IP地址段(无需IPv6,则只需配置IPv4即可)

<             # - name: CALICO_IPV4POOL_CIDR
<             #   value: "192.168.0.0/16"
<             - name: FELIX_IPV6SUPPORT
<               value: "true"
---
>             - name: CALICO_IPV4POOL_CIDR
>               value: "172.254.0.0/16"
>             - name: CALICO_IPV6POOL_CIDR
>               value: "fa00:cafe:42::/56"
>             - name: IP_AUTODETECTION_METHOD
>               value: "interface=ens.*"
>             - name: IP6_AUTODETECTION_METHOD
>               value: "interface=ens.*"
>             - name: FELIX_IPV6SUPPORT
>               value: "true"

2.3、修改镜像地址(无fan墙能力就得老老实实改)

<           image: docker.io/calico/cni:master
---
>           image: 192.168.XX.XX/library/cni:master
<           image: docker.io/calico/node:master
---
>           image: 192.168.XX.XX/library/node:master
<           image: docker.io/calico/kube-controllers:master
---
>           image: 192.168.XX.XX/library/kube-controllers:master
<           image: docker.io/calico/typha:master
---
>           image: 192.168.XX.XX/library/typha:master

2.4、创建Calico
kubectl apply -f calico-typha.yaml 
2.5、验证是否成功

Calico Typha启动的pod有3类:controller、node、typha。状态都变成Running,且Ready为1/1才表明成功了。controller是由deploy调度创建、node由daemonset调度创建(确保每个node上都启动一个calico-node,并且使用hostNetwork)

3、Calico组件说明

3.1. Calico Node

Calico Node 是 Calico 的核心组件,运行在每个集群节点上,负责以下任务:

  • IPAM(IP Address Management):管理分配和回收 Pod 的 IP 地址。
  • BGP(Border Gateway Protocol):使用 BGP 与其他 Calico 节点进行路由信息交换,确保网络中的所有 Pod 可以相互通信。
  • 网络策略实施:通过 iptables 或 eBPF 实施网络策略,控制 Pod 之间的流量。
  • Felix:Calico Node 包含 Felix 代理,负责与 Linux 内核网络栈交互,应用网络策略和管理路由。
3.2. Calico Controller

Calico Controller 是一个 Kubernetes 控制器,负责管理 Calico 与 Kubernetes API 之间的交互。其主要职责包括:

  • 同步 Calico 和 Kubernetes 对象:确保 Calico 的网络策略、IP 池和其他配置与 Kubernetes 中定义的对象保持一致。
  • 管理 Kubernetes 服务:处理 Kubernetes 服务对象,确保服务的 IP 地址正确配置,并与 Calico 网络策略兼容。
  • 确保高可用性:通过定期检查和同步,确保 Calico 配置的一致性和高可用性。
3.3. Calico Typha

Calico Typha 是一个可选的组件,主要用于大规模 Kubernetes 集群,以减少 API 服务器的负载和提高性能。其职责包括:

  • 聚合和分发数据:从 Kubernetes API 服务器获取更新,并将这些更新分发给集群中的 Calico Node 实例。
  • 减少 API 请求数量:通过集中处理和分发数据,Typha 减少了直接与 API 服务器通信的 Calico Node 实例数量,从而降低了 API 服务器的负载。
  • 提高集群性能:在大规模集群中,Typha 帮助减少网络流量和提高配置分发效率,从而提高整体性能。
3.4. 总结
  • Calico Node 是 Calico 的核心组件,负责管理节点上的网络配置和策略实施。
  • Calico Controller 负责 Calico 与 Kubernetes API 的交互,确保配置一致性和高可用性。
  • Calico Typha 用于大规模集群中,聚合和分发数据,减少 API 服务器的负载,提高性能。

下一篇:《kubernetes集群部署:node节点部署和CRI-O运行时安装(三)》

相关文章:

kubernetes集群部署:环境准备及master节点部署(二)

主机名IPv4地址IPv6地址角色安装组件操作系统k8s130-node190192.168.XX.190240a:XX::190masterkubeadm、kubelet、containerdAnolis OS 8.94.19.91-28.1.an8.x86_64k8s130-node191192.168.XX.191240a:XX::191nodekubeadm、kubelet、cri-oAnolis OS 8.94.19.91-28.1.an8.x86_64k…...

第8篇 智能合约的商业应用场景解析

一、引言 在区块链技术的众多应用中,智能合约无疑是其中的一颗璀璨明珠。它通过自动化、去中心化和不可篡改的特性,为商业世界带来了革命性的变革。今天,我们将一同探索智能合约在十个不同行业中的实际应用,感受其独特的魅力。 二、智能合约的商业应用案例 供应链管理:…...

Zabbix 配置grafana对接

zabbix对接grafana简介 Zabbix与Grafana对接可以实现更加丰富和美观的数据可视化&#xff0c;可以利用Grafana强大的可视化功能来展示Zabbix收集的数据。 Grafana 本身是提供了Zabbix的对接插件&#xff0c;开箱即用&#xff0c;安装好了之后点击 enable 一下就能启用。然后就…...

三相感应电机的建模仿真(2)基于ABC相坐标系S-Fun的仿真模型

1. 概述 2. 三相感应电动机状态方程式 3. 基于S-Function的仿真模型建立 4. 瞬态分析实例 5. 总结 6. 参考文献 1. 概述 前面建立的三相感应电机在ABC相坐标系下的数学模型是一组周期性变系数微分方程&#xff08;其电感矩阵是转子位置角的函数&#xff0c;转子位置角随时…...

开源全新H5充值系统源码/自定义首页+充值页面/灵活对接上游渠道接口

开源全新H5充值系统源码&#xff0c;系统基于thinkphp框架开发&#xff0c;功能已全完善&#xff0c;可灵活对接其他上游渠道接口&#xff0c;默认对接了大猿人接口&#xff0c;另外可无限制自定义创建充值页面&#xff0c;首页支持后台自定义修改&#xff0c;支持三级分销&…...

Linux查看文件的行数,字数,字节数

介绍 在Linux系统中这统计非常方便&#xff0c;只需要简单的几个命令就可以搞定&#xff0c;这个命令就是 wc。 wc --help 用法&#xff1a;wc [选项]... [文件]...或&#xff1a;wc [选项]... --files0-fromF 输出每个指定文件的行数、单词计数和字节数&#xff0c;如果指定…...

【IO】文件操作

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 文件1.1 认识文件1.2 分清操作的是内存还是硬盘1.3 路径1.3.1 目录结构1.3.2 相对和绝对路径 1.4 文本文件…...

代码随想录算法训练营第74天:路径总结[1]

代码随想录算法训练营第74天&#xff1a;路径总结 ‍ A * 算法精讲 &#xff08;A star算法&#xff09; 卡码网&#xff1a;126. 骑士的攻击(opens new window) 题目描述 在象棋中&#xff0c;马和象的移动规则分别是“马走日”和“象走田”。现给定骑士的起始坐标和目标…...

用 Emacs 写代码有哪些值得推荐的插件

以下是一些用于 Emacs 写代码的值得推荐的插件&#xff1a; Ido-mode&#xff1a;交互式操作模式&#xff0c;它用列出当前目录所有文件的列表来取代常规的打开文件提示符&#xff0c;能让操作更可视化&#xff0c;快速遍历文件。Smex&#xff1a;可替代普通的 M-x 提示符&…...

自定义注解-手机号验证注解

注解 package com.XX.assess.annotation;import com.XX.assess.util.MobileValidator;import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.*;/*** 手机号校验注解* author super*/ Retention(RetentionPolicy.RUNTIME) Targe…...

华为od-C卷200分题目5 -项目排期

华为od-C卷200分题目5 -项目排期 题目描述 项目组共有N个开发人员&#xff0c;项目经理接到了M个独立的需求&#xff0c;每个需求的工作量不同&#xff0c;且每个需求只能由一个开发人员独立完成&#xff0c;不能多人合作。 假定各个需求之间无任何先后依赖关系&#xff0c;请…...

如何使用Pip从Git仓库安装Python包:深入探索远程依赖管理

如何使用Pip从Git仓库安装Python包&#xff1a;深入探索远程依赖管理 Python的包管理工具Pip使得安装和管理Python库变得非常简单。有时&#xff0c;我们需要安装那些尚未发布到PyPI的包&#xff0c;或者想要尝试最新的开发版本。这时&#xff0c;可以直接从Git仓库安装包。本…...

计算机专业怎么选择电脑

现在高考录取结果基本已经全部出来了&#xff0c;很多同学都如愿以偿的进入到了计算机类专业&#xff0c;现在大部分同学都在为自己的大学生活做准备了&#xff0c;其中第一件事就是买电脑&#xff0c;那计算机类专业该怎么选择电脑呢&#xff1f; 计算机专业是个一类学科&…...

当前国内可用的docker加速器搜集 —— 筑梦之路

可用镜像加速器 以下地址搜集自网络&#xff0c;仅供参考&#xff0c;请自行验证。 1、https://docker.m.daocloud.io2、https://dockerpull.com3、https://atomhub.openatom.cn4、https://docker.1panel.live5、https://dockerhub.jobcher.com6、https://hub.rat.dev7、http…...

【腾讯内推】腾讯2025校招/青云计划/社招——长期有效

及时跟进进度&#xff0c;保证不让简历石沉大海&#xff01; 涵盖NLP/CV/CG/ML/多模态/数据科学/多媒体等各方向! 定向匹配优质团队/竞争力薪酬/覆盖全球工作地点! 招聘对象: 本硕博:2024年1月-2025年12月毕业的同学 目前最热岗位: 技术研究-自然语言处理 技术研究-计算机视觉 …...

集群限流sentinel实践

参考&#xff1a; 集群模式 实践 集群流控规则 其中 用一个专门的 ClusterFlowConfig 代表集群限流相关配置项&#xff0c;以与现有规则配置项分开&#xff1a; // 全局唯一的规则 ID&#xff0c;由集群限流管控端分配. private Long flowId;// 阈值模式&#xff0c;默认&…...

Flutter-实现双向PK进度条

如何实现一个双向PK进度条 在Flutter应用中&#xff0c;进度条是一个非常常见的组件。而双向PK进度条则能够展示两个对立的数值&#xff0c;如对战中的双方得分对比等。本文将介绍如何实现一个具有双向PK效果的进度条&#xff0c;并支持竖直和斜角两种过渡效果。 1. 需求 我…...

unix高级编程系列之文件I/O

背景 作为linux 开发者&#xff0c;我们不可避免会接触到文件编程。比如通过文件记录程序配置参数&#xff0c;通过字符设备与外设进行通信。因此作为合格的linux开发者&#xff0c;一定要熟练掌握文件编程。在文件编程中&#xff0c;我们一般会有两类接口函数&#xff1a;标准…...

PySide(PyQt),记录最后一次访问文件的路径

1、在同目录下用文本编辑器创建JSON文件&#xff0c;命名为setting.json&#xff0c;并输入以下内容后保存&#xff1a; { "setting": { "last_file": [ "" ] } } 2、应用脚本&#xff1a; import json …...

wordpress企业网站模板免费下载

大气上档次的wordpress企业模板&#xff0c;可以直接免费下载&#xff0c;连注册都不需要&#xff0c;网盘就可以直接下载&#xff0c;是不是嘎嘎给力呢 演示 https://www.jianzhanpress.com/?p5857 下载 链接: https://pan.baidu.com/s/1et7uMYd6--NJEWx-srMG1Q 提取码:…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...