kubeadm 部署Kubernetes 集群一主多从集群并完成pod部署

news2024/9/23 7:26:40

目录

搭建环境准备三台虚拟机:

 环境条件限制:

一,关闭交换分区

二,禁用selinux

三,防火墙关闭

四,docker安装

五,设置IPv4 流量传递到 iptables

六,配置k8s的yum源

七,三台服务安装kubelet, kubeadm,kubectl

八 启动主节点:

九,启动从节点

十,配置cni pod网络插件

查看组件下载状态:

十一,卸载 kubelet kubeadm kubectl

问题汇总:

问题一,镜像问题

问题二 ,健康检测不过:

问题三 ,找不到环境变量

问题四,从节点使用kubectl工具

问题五,卸载后没有删除干净


虚拟机环境搭建可以参考博主这篇文章操作:centos虚拟机服务器手把手搭建_虚拟机搭建服务器_无名之辈之码谷娃的博客-CSDN博客

搭建环境准备三台虚拟机:

iphostname配置内存
192.168.192.150masterArchitecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             2
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 165
Model name:            Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz
Stepping:              2
CPU MHz:               2591.589
BogoMIPS:              5183.99
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              12288K
 
192.168.192.151slave1Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             2
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 165
Model name:            Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz
Stepping:              2
CPU MHz:               2591.589
BogoMIPS:              5183.99
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              12288K
192.168.192.151slave2Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             2
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 165
Model name:            Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz
Stepping:              2
CPU MHz:               2591.589
BogoMIPS:              5183.99
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              12288K

我这里是三台都是8g的内存

最低配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘30G 配置是越高越好

 环境条件限制:

1,集群中所有机器之间网络互通 可以访问外网,需要拉取镜像

2, 禁止 swap 分区

3,禁用selinux

4,关闭防火墙

前置工作:

一,关闭交换分区

--临时关闭

swapoff -a

--永久关闭

sed -i 's/.*swap.*/#&/' /etc/fstab

二,禁用selinux

--永久禁用

sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

三,防火墙关闭

--禁用

systemctl disable firewalld.service

systemctl stop firewalld.service 

注:这三台服务器都要执行这三个命令 

四,docker安装

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo
##安装指定版本docker
yum -y install docker-ce-18.06.1.ce-3.el7

##设置后台启动docker
systemctl enable docker && systemctl start docker


##设置镜像加速
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF

 五,设置IPv4 流量传递到 iptables

##设置IPv4 流量传递到 iptables
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
##执行生效
sysctl --system 

六,配置k8s的yum源

vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

七,三台服务安装kubelet, kubeadm,kubectl

##指定版本安装
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

##后台启动
systemctl enable kubelet

##启动kubelet
systemctl start kubelet

八 启动主节点:

kubeadm init --apiserver-advertise-address=192.168.192.150  --image-repository=registry.aliyuncs.com/google_containers  --kubernetes-version=v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 --v=5   
 

 

[addons] Applied essential addon: kube-proxy

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.192.150:6443 --token qtd0wr.7tkdtma8uaso4ahn \
    --discovery-token-ca-cert-hash sha256:18b8f0d045edbf048c9dbe83ac8424ea95c594d6b970df0fb52bc8ed5d9ed410 

九,启动从节点

需要把主节点的命令去从节点执行:

kubeadm join 192.168.192.150:6443 --token qtd0wr.7tkdtma8uaso4ahn \
    --discovery-token-ca-cert-hash sha256:18b8f0d045edbf048c9dbe83ac8424ea95c594d6b970df0fb52bc8ed5d9ed410 

slave1:

slave2:

 查看节点状态:

kubectl get nodes

 这个时候节点状态是未就绪,还得配置pod网络插件

十,配置cni pod网络插件

 kubectl apply -f  https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
namespace/kube-flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
 

查看组件下载状态:

kubectl get pods -n kube-system 

如果这俩个下载失败,没有Running状态就需要手动拉取镜像了

coredns-7ff77c879f-6m68h         1/1     Running   0          57m
coredns-7ff77c879f-8742f         1/1     Running   0          57m

kubectl describe pod -n kube-system coredns-7ff77c879f-6m68h

 成功的状态:

 kubectl get nodes

到这里我们的集群还不算真正完成,我们创建一个容器运行看看

验证一个nginx是否能够正常访问

kubectl create deployment nginx --image=nginx

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

kubectl get pod,svc

 到这里我们的集群才算是搭建成功!!!

十一,卸载 kubelet kubeadm kubectl

##环境搭建问题后可以卸载重新执行命令操作

yum remove -y kubelet kubeadm kubectl
kubeadm reset -f
modprobe -r ipip
lsmod
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd

问题汇总:

问题一:镜像问题

[root@master ~]# kubeadm init --apiserver-advertise-address=192.168.192.150 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0--service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16  --v=5 
I0508 20:31:14.877517   38501 initconfiguration.go:103] detected and using CRI socket: /var/run/dockershim.sock
invalid version "v1.18.0--service-cidr=10.96.0.0/12"
k8s.io/kubernetes/cmd/kubeadm/app/util.splitVersion
    /workspace/anago-v1.18.0-rc.1.21+8be33caaf953ac/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/util/version.go:167
k8s.io/kubernetes/cmd/kubeadm/app/util.kubernetesReleaseVersion
    /workspace/anago-v1.18.0-rc.1.21+8be33caaf953ac/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/util/version.go:78
k8s.io/kubernetes/cmd/kubeadm/app/util.KubernetesReleaseVersion
    /workspace/anago-v1.18.0-rc.1.21+8be33caaf953ac/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/util/version.go:66
k8s.io/kubernetes/cmd/kubeadm/app/util/config.NormalizeKubernetesVersion
    /workspace/anago-v1.18.0-rc.1.21+8be33caaf953ac/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/util/config/common.go:93
k8s.io/kubernetes/cmd/kubeadm/app/util/config.SetClusterDynamicDefaults
    /workspace/anago-v1.18.0-rc.1.21+8be33caaf953ac/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/util/config/initconfiguration.go:149
k8s.io/kubernetes/cmd/kubeadm/app/util/config.SetInitDynamicDefaults
    /workspace/anago-v1.18.0-rc.1.21+8be33caaf953ac/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/util/config/initconfiguration.go:56
k8s.io/kubernetes/cmd/kubeadm/app/util/config.DefaultedInitConfiguration
    /workspace/anago-v1.18.0-rc.1.21+8be33caaf953ac/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/util/config/initconfiguration.go:188
k8s.io/kubernetes/cmd/kubeadm/app/util/config.LoadOrDefaultInitConfiguration
    /workspace/anago-v1.18.0-rc.1.21+8be33caaf953ac/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/util/config/initconfiguration.go:222
k8s.io/kubernetes/cmd/kubeadm/app/cmd.newInitData
    /workspace/anago-v1.18.0-rc.1.21+8be33caaf953ac/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/cmd/init.go:330
k8s.io/kubernetes/cmd/kubeadm/app/cmd.NewCmdInit.func3
    /workspace/anago-v1.18.0-rc.1.21+8be33caaf953ac/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/cmd/init.go:191
k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow.(*Runner).InitData
    /workspace/anago-v1.18.0-rc.1.21+8be33caaf953ac/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow/runner.go:183
k8s.io/kubernetes/cmd/kubeadm/app/cmd.NewCmdInit.func1
    /workspace/anago-v1.18.0-rc.1.21+8be33caaf953ac/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/cmd/init.go:139
k8s.io/kubernetes/vendor/github.com/spf13/cobra.(*Command).execute
    /workspace/anago-v1.18.0-rc.1.21+8be33caaf953ac/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/spf13/cobra/command.go:826
k8s.io/kubernetes/vendor/github.com/spf13/cobra.(*Command).ExecuteC
    /workspace/anago-v1.18.0-rc.1.21+8be33caaf953ac/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/spf13/cobra/command.go:914
k8s.io/kubernetes/vendor/github.com/spf13/cobra.(*Command).Execute
    /workspace/anago-v1.18.0-rc.1.21+8be33caaf953ac/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/spf13/cobra/command.go:864
k8s.io/kubernetes/cmd/kubeadm/app.Run
    /workspace/anago-v1.18.0-rc.1.21+8be33caaf953ac/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/app/kubeadm.go:50
main.main
    _output/dockerized/go/src/k8s.io/kubernetes/cmd/kubeadm/kubeadm.go:25
runtime.main
    /usr/local/go/src/runtime/proc.go:203
runtime.goexit
    /usr/local/go/src/runtime/asm_amd64.s:1357
 

 这个问题一般还是分区问题

问题二 健康检测不过:

The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused.

###问题一和问题二,问题五都可以执行这个命令一般都是分区和网络问题

sudo swapoff -a 
sudo kubeadm reset
sudo rm -rf /var/lib/cni/
sudo systemctl daemon-reload
sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X

 问题三 找不到环境变量

 [root@master opt]# kubectl get nodes
error: no configuration has been provided, try setting KUBERNETES_MASTER environment variable

这一步需要在安装完kubectl 后启动后 执行这个命令 

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

 问题四,从节点使用kubectl工具

这个从节点执行没有目录:去主节点执行命令复制文件就行

scp /etc/kubernetes/admin.conf root@192.168.192.151:/etc/kubernetes/admin.conf

scp /etc/kubernetes/admin.conf root@192.168.192.152:/etc/kubernetes/admin.conf

 [root@slave1 network-scripts]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
cp: cannot stat ‘/etc/kubernetes/admin.conf’: No such file or directory

五,卸载后没有删除干净

从节点报错:

error execution phase kubelet-start: error uploading crisocket: timed out waiting for the condition
To see the stack trace of this error execute with --v=5 or higher
[root@slave1 network-scripts]# kubeadm join 192.168.192.150:6443 --token qtd0wr.7tkdtma8uaso4ahn \
>     --discovery-token-ca-cert-hash sha256:18b8f0d045edbf048c9dbe83ac8424ea95c594d6b970df0fb52bc8ed5d9ed410 
W0508 21:39:20.279566   38344 join.go:346] [preflight] WARNING: JoinControlPane.controlPlane settings will be ignored when control-plane flag is not set.
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
    [ERROR FileAvailable--etc-kubernetes-kubelet.conf]: /etc/kubernetes/kubelet.conf already exists
    [ERROR Port-10250]: Port 10250 is in use
    [ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
 

rm -f /etc/kubernetes/pki/ca.crt

rm -f  /etc/kubernetes/kubelet.conf

杀端口:10250

主要是分区问题和节点网络问题可以执行问题二命令

 ————没有与生俱来的天赋,都是后天的努力拼搏(我是小杨,谢谢你的关注和支持)

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

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

相关文章

vue3学习三 computed

vue3中的computed 也被封装成了一个组合api , 所以我们使用的时候&#xff0c; 要 import {computed} from “vue” 和vue2样&#xff0c; computed 是有两种书写方式 简写方式和全写方式 <template><div> firstname:<input v-model"firstname" /&g…

【专题连载】基于5G+机器视觉的芯片检测解决方案

基于5G机器视觉的芯片检测解决方案 背景 机器视觉的价值体现在它能为工业生产带来产量的增加和产品质量的提升&#xff0c;并同时降低生产成本&#xff0c;推动了工业生产的快速发展&#xff0c;使工业生产企业真正从中受益。为了进一步压缩生产成本&#xff0c;工业控制的产…

信号与槽机制一

一、信号与槽 1、什么是信号与槽&#xff1f; 信号和槽是用于对象之间的通信&#xff0c;它是Qt的核心机制&#xff0c;在Qt编程中有着广泛的应用。如果想学好Qt&#xff0c;一定要充分掌握信号的槽的概念与使用。 2、信号和槽的代码实例 在Qt中&#xff0c;发送对象、发送的信…

FPGA上的视觉 SLAM

在FPGA开发板上实现基于立体视觉的 SLAM。 绪论 SLAM&#xff08;同步定位和地图绘制&#xff09;在自动驾驶、AGV 和无人机等各种应用中引起了人们的广泛关注。尽管目前有很多优秀的 SLAM 项目可以参考&#xff0c;但是他们的复杂性&#xff08;高性能&#xff09;及依赖性&am…

体验洞察 | 原来它才是最受欢迎的CX指标?

一直以来&#xff0c;企业都在试图追踪他们能否在整个客户旅程中始终如一地提供卓越的客户体验&#xff08;Customer Experience&#xff0c;简称“CX”&#xff09;&#xff0c;并通过多个CX指标&#xff0c;如NPS&#xff08;净推荐值&#xff09;、CSAT&#xff08;客户满意…

简单讲讲UE中的PlayerCameraManager

我们在平时开发中&#xff0c;少不了编写一些逻辑去控制相机&#xff0c;例如俯视角镜头与各个特写镜头的过渡切换&#xff0c;因此了解一些PlayerCameraManager是有必要的。 PlayerCameraManager是UE自带的相机管理组件&#xff0c;本身比较简单&#xff0c;一般需要自行扩展…

长短期记忆网络LSTM(long short-term memory)

递归神经网络 递归神经网络可以解决这个问题。它们是带有循环的神经网络&#xff0c;允许信息保留一段时间。 在上图中&#xff0c;A 代表神经网络主体, xt 是网络输入&#xff0c;ht是网络输出&#xff0c;循环结构允许信息从当前输出传递到下一次的网络输入。 一个递归神经网…

强烈推荐:一款中文AI问答、创作、绘画工具

前言 相信很多人已经听过ChatGPT这款人工智能机器人了&#xff0c;它能够根据用户输入的内容&#xff0c;自动生成智能回复。它使用自然语言处理技术&#xff0c;通过学习大量的文本资料&#xff0c;能够模拟人类的对话行为。它是由OpenAI开发的&#xff0c;一家非常伟大的人工…

6个月的测试,来面试居然要15K,我一问连5K都不值

2023年4月份我入职了深圳某家创业公司&#xff0c;刚入职还是很兴奋的&#xff0c;到公司一看我傻了&#xff0c;公司除了我一个自动化测试&#xff0c;公司的测试人员就只有2个开发3个前端1个测试还有2个UI&#xff0c;在粗略了解公司的业务后才发现是一个从零开始的项目&…

HNU-计算机系统-讨论课6

完整讲解视频&#xff1a;野生Gprof会梦见存储器山嘛&#xff1f;_哔哩哔哩_bilibili 别忘了一键三连哦 题 3&#xff1a; 在“存储器层次结构”一章的 6.6 节从存储器山的角度具象化 了存储器性能描述。 &#xff08; 1 &#xff09; 请阅读教材 6.6.1 内容&#xff08…

从 Elasticsearch 到 Apache Doris,10 倍性价比的新一代日志存储分析平台|新版本揭秘

日志数据的处理与分析是最典型的大数据分析场景之一&#xff0c;过去业内以 Elasticsearch 和 Grafana Loki 为代表的两类架构难以同时兼顾高吞吐实时写入、低成本海量存储、实时文本检索的需求。Apache Doris 借鉴了信息检索的核心技术&#xff0c;在存储引擎上实现了面向 AP …

京东金融Android瘦身探索与实践

作者&#xff1a;京东科技 冯建华 一、背景 随着业务不断迭代更新&#xff0c;App的大小也在快速增加&#xff0c;2019年~2022年期间一度超过了117M&#xff0c;期间我们也做了部分优化如图1红色部分所示&#xff0c;但在做优化的同时面临着新的增量代码&#xff0c;包体积一直…

openEuler 社区 2023 年 4 月运作报告

概述 过去一个月&#xff0c;openEuler社区全员参与openEuler Developer Day 2023&#xff0c;通过SIG组开放工作会议完成了下个版本的规划。openEuler社区也参加了在新加坡举办的FOSSASIA SUMMIT。 在技术层面&#xff0c;社区不断推进创新&#xff0c;发布新项目&#xff0…

动态规划--01背包问题

01背包问题 背包问题题目最优解结构性质状态转移方程方程理解 递归实现核心思想代码实现用例测试 画表非递归实现核心思路代码实现画表展示 计算哪些物品放入算法思想代码实现 背包问题 题目 0-1背包问题:给定n种物品和一背包。物品的重量是w;,其价值为v; ,背包的容量为C。问…

科普文:国内ChatGPT怎么用,ChatGPT国内怎么用,关于ChatGPT你需要了解的内容应该都在这

在国内用了很长一段时间的ChatGPT&#xff0c;每次跟小白&#xff0c;哪怕是用ChatGPT的人交流的时候&#xff0c;都感觉解释不清&#xff0c;正好今天周末&#xff0c;给大家整理一篇关于ChatGPT的科普文&#xff0c;想要了解或使用ChatGPT的人&#xff0c;一定要看~~~&#x…

html实现经典赛车小游戏

文章目录 1.设计来源1.1 主界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/130580123 html实现经典赛车小游戏源码 html实现经典赛车小游戏源码&#xff0c;1.通过键盘…

如何让flex布局中的一个子元素单独右侧对齐

flex布局中的一个子元素单独右侧对齐 在 Flex布局中&#xff0c;我们经常需要对子元素进行对齐操作。使用 justify-content 和 align-items 可以轻松地对所有子元素进行对齐&#xff0c;但是当我们需要对某个子元素进行单独的对齐时&#xff0c;我们应该怎么做呢&#xff1f; …

【涨知识】PCB板为什么多是绿色的?

拿到一块PCB板时&#xff0c;最直观看到板子上油墨的颜色&#xff0c;就是我们一般指的PCB板颜色。PCB板的颜色多种多样&#xff0c;包括绿色、蓝色、红色和黑色等。 其中&#xff0c;绿色是最常用的&#xff0c;更为大家所熟悉。但为什么PCB板多是绿色呢? 当中缘由&#xff…

exe4j打包Jar成exe文件

1. 进入exe4j官网下载exe4j&#xff0c;安装到自己电脑上。 安装完后运行此软件 2. 在自己电脑上新建一个文件夹&#xff08;名字随便起&#xff09;&#xff0c;文件夹内放入要转换的jar文件&#xff0c;ico格式的图片&#xff0c;jar文件夹&#xff08;含jar文件&#xff09…

fbx sdk的使用介绍

我们平时需要围绕fbx写一些小工具&#xff0c;虽说使用ascii格式的fbx可以直接进行字符串解析&#xff0c;并且网上也有一些基于ascii解析的开源库&#xff0c;但在制作一些通用的工具时&#xff0c;使用fbx sdk进行编写肯定是最好的。 1.下载fbx sdk和cmake 要用cmake生成vi…