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

超详细kubernetes部署k8s----一台master和两台node

一、部署说明

1、主机操作系统说明

2、主机硬件配置说明

二、主机准备(没有特别说明都是三台都要配置)

1、配置主机名和IP

2、配置hosts解析

3、防火墙和SELinux

4、时间同步配置

5、配置内核转发及网桥过滤

6、关闭swap

7、启用ipvs

8、句柄数最大

9、系统优化

三、容器运行时工具安装及运行

1、安装docker

2、安装cri-dockerd

1. 下载最新版cri-dockerd rpm包

2、安装并启动cri-docker

3、cri-dockerd设置国内镜像加速

四、K8S软件安装

1、配置kubernetes源

​2、查看所有可用的版本

3、安装kubelet、kubeadm、kubectl、kubernetes-cni

​4、配置cgroup

五、K8S集群初始化

六、K8S集群工作节点加入

七、K8S集群网络插件使用

八、Kubectl命令自动补全

九、报错问题与解决

1、在替换默认源时----dnf makecache出现以下内容

2、在安装docker的,更新并安装Docker-CE时出现

3、在安装cri-dockerd时,

4、K8S集群初始化时


一、部署说明

image-20250217162805144

1、主机操作系统说明

序号操作系统及版本备注
1Rocky Linux release 9下载链接:https://mirrors.163.com/rocky/9.5/isos/x86_64/Rocky-9.5-x86_64-minimal.iso

2、主机硬件配置说明

作用IP地址操作系统配置关键组件
k8s-master01192.168.131.137Rocky Linux release 92颗CPU 4G内存 100G硬盘kube-apiserver, etcd, etc
k8s-node01192.168.131.138Rocky Linux release 92颗CPU 4G内存 100G硬盘kubelet, kube-proxy
k8s-node02192.168.131.139Rocky Linux release 92颗CPU 4G内存 100G硬盘kubelet, kube-proxy

网络规划表

网络类型CIDR用途说明
节点管理网络10.10.0.0/24SSH/K8s组件通信
Pod网络10.244.0.0/16Flannel默认网段
Service网络10.96.0.0/16ClusterIP地址池
Ingress网络172.16.90.0/24外部访问入口

二、主机准备(没有特别说明都是三台都要配置)

1、系统最小化安装。(最小内存)
2、替换默认源。
#这组命令的作用是把 Rocky Linux 的软件源配置文件中的官方镜像地址替换成阿里云的镜像地址,同时备份原配置文件

sed -e 's|^mirrorlist=|#mirrorlist=|g' \
    -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
    -i.bak \
    /etc/yum.repos.d/rocky*.repo

#​更新软件包元数据缓存

dnf makecache
3、安装epel软件仓库,更换国内源
        1>. 在 Rocky Linux 9 中启用并安装 EPEL Repo。
dnf config-manager --set-enabled crb
dnf install epel-release
        2>. 备份(如有配置其他epel源)并替换为国内镜像 注意最后这个库,阿里云没有对应的镜像,不要修改它,如果误改恢复原版源即可
cp /etc/yum.repos.d/epel.repo  /etc/yum.repos.d/epel.repo.backup 
cp /etc/yum.repos.d/epel-testing.repo  /etc/yum.repos.d/epel-testing.repo.backup
cp /etc/yum.repos.d/epel-cisco-openh264.repo  /etc/yum.repos.d/epel-cisco-openh264.repo.backup
         3>. 将 repo 配置中的地址替换为阿里云镜像站地址执行下面语句,它会替换epel.repo、eple-testing.repo中的网址,不会修改epel-cisco-openh264.repo,可以正常使用。
​
sed -e 's!^metalink=!#metalink=!g' \
    -e 's!^#baseurl=!baseurl=!g' \
    -e 's!https\?://download\.fedoraproject\.org/pub/epel!https://mirrors.aliyun.com/epel!g' \
    -e 's!https\?://download\.example/pub/epel!https://mirrors.aliyun.com/epel!g' \
    -i /etc/yum.repos.d/epel{,-testing}.repo
现在我们有了 EPEL 仓库,更新仓库缓存
​
dnf clean all 
dnf makecache

1、配置主机名和IP

#在131.137上配置
hostnamectl set-hostname k8s-master01
#在131.138上配置
hostnamectl set-hostname k8s-node01
#在131.139上配置
hostnamectl set-hostname k8s-node02

2、配置hosts解析

# cat >> /etc/hosts << EOF
172.16.90.11 k8s-master01
172.16.90.12 k8s-node01
172.16.90.13 k8s-node02
EOF

# 配置免密登录,只在k8s-master01上操作
[root@k8s-master01 ~]# ssh-keygen -f ~/.ssh/id_rsa -N '' -q
​
# 点拷贝秘钥到其他 2 台节点
[root@k8s-master01 ~]# ssh-copy-id k8s-node01
[root@k8s-master01 ~]# ssh-copy-id k8s-node02

3、防火墙和SELinux

systemctl disable --now firewalld
sed -i '/^SELINUX=/ c SELINUX=disabled' /etc/selinux/config
setenforce 0

4、时间同步配置

#安装chrony
dnf install -y chrony
# 修改同步服务器
sed -i '/^pool/ c pool ntp1.aliyun.com  iburst' /etc/chrony.conf
systemctl restart chronyd
systemctl enable chronyd
​
chronyc sources
出现以下内容:
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 47.96.149.233                 2   6    17     3    +77us[ +147us] +/-   34ms

5、配置内核转发及网桥过滤

添加网桥过滤及内核转发配置文件
# cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0
EOF
​
#加载br_netfilter模块
modprobe br_netfilter
​
#查看是否加载
lsmod | grep br_netfilter
br_netfilter           22256  0
bridge                151336  1 br_netfilter
​
使用新添加配置文件生效
# sysctl -p /etc/sysctl.d/k8s.conf

6、关闭swap

# 临时关闭​
swapoff -a

#永远关闭swap分区
sed -i 's/.*swap.*/#&/' /etc/fstab

7、启用ipvs

cat >> /etc/modules-load.d/ipvs.conf << EOF
br_netfilter
ip_conntrack
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF

#下载安装​
dnf install ipvsadm ipset sysstat conntrack libseccomp -y
​
# 重启服务
systemctl restart systemd-modules-load.service
# 查看以下内容
lsmod | grep -e ip_vs -e nf_conntrack

#出现以下内容
ip_vs_ftp              16384  0
nf_nat                 61440  1 ip_vs_ftp
.....
nf_defrag_ipv4         16384  1 nf_conntrack
libcrc32c              16384  4 nf_conntrack,nf_nat,xfs,ip_vs

8、句柄数最大

ulimit -SHn 65535
cat >> /etc/security/limits.conf <<EOF
* soft nofile 655360
* hard nofile 131072
* soft nproc 655350
* hard nproc 655350
* seft memlock unlimited
* hard memlock unlimitedd
EOF
#查看修改结果
ulimit -a

9、系统优化

cat > /etc/sysctl.d/k8s_better.conf << EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.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
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
​
modprobe br_netfilter

lsmod |grep conntrack

modprobe ip_conntrack

sysctl -p /etc/sysctl.d/k8s_better.conf
​

三、容器运行时工具安装及运行

1、安装docker

#安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
​
#添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/rhel/docker-ce.repo
​
#更新并安装Docker-CE
yum makecache fast
yum -y install docker-ce
​
#查看版本 
docker -v
#出现以下
Docker version 27.5.1, build 9f9e405
​
​
# 设置国内镜像加速
mkdir -p /etc/docker/
cat  >> /etc/docker/daemon.json << EOF
{
   "registry-mirrors":["https://p3kgr6db.mirror.aliyuncs.com",
   "https://docker.m.daocloud.io",
   "https://your_id.mirror.aliyuncs.com",
   "https://docker.nju.edu.cn/",
    "https://docker.anyhub.us.kg",
    "https://dockerhub.jobcher.com",
    "https://dockerhub.icu",
    "https://docker.ckyl.me",
       "https://cr.console.aliyun.com"
   ],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
​
​
#设置docker开机启动并启动
systemctl enable --now docker
​
​
#查看docker版本
docker version

2、安装cri-dockerd

1. 下载最新版cri-dockerd rpm包

网络条件好的话直接使用wget下载,网络条件一般的话可以在github上面先下载再上传到虚拟机

下载地址:Releases · Mirantis/cri-dockerd (github.com)。

https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.16/cri-dockerd-0.3.16-3.fc35.x86_64.rpm

2、安装并启动cri-docker
wget -c https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.16/cri-dockerd-0.3.16-3.fc35.x86_64.rpm
wget -c https://rpmfind.net/linux/almalinux/8.10/BaseOS/x86_64/os/Packages/libcgroup-0.41-19.el8.x86_64.rpm
yum install libcgroup-0.41-19.el8.x86_64.rpm
yum install cri-dockerd-0.3.16-3.fc35.x86_64.rpm
systemctl enable cri-docker

但一般如果没有代理是安装不了的,可以上传cri-dockerd和他的lincgroup依赖包的包(私我)上传好后
顺序不要错
yum install libcgroup-0.41-19.el8.x86_64.rpm
yum install cri-dockerd-0.3.16-3.fc35.x86_64.rpm
systemctl enable cri-docke

3、cri-dockerd设置国内镜像加速
vim /usr/lib/systemd/system/cri-docker.service
------------------
修改第10行内容
ExecStart=/usr/bin/cri-dockerd  --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9  --container-runtime-endpoint  fd://
-----------------------------------
​
# 重启Docker组件
systemctl daemon-reload && systemctl restart docker cri-docker.socket cri-docker 
# 检查Docker组件状态
systemctl status docker cir-docker.socket cri-docker

四、K8S软件安装

1、配置kubernetes源
#添加阿里云YUM软件源
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/repodata/repomd.xml.key
EOF
​2、查看所有可用的版本
yum list kubelet --showduplicates | sort -r |grep 1.32

kubelet.x86_64                    1.32.2-150500.1.1                   kubernetes
kubelet.x86_64                    1.32.1-150500.1.1                   kubernetes
kubelet.x86_64                    1.32.0-150500.1.1                   kubernetes
kubelet.src                       1.32.2-150500.1.1                   kubernetes
kubelet.src                       1.32.1-150500.1.1                   kubernetes
kubelet.src                       1.32.0-150500.1.1                   kubernetes
kubelet.s390x                     1.32.2-150500.1.1                   kubernetes
kubelet.s390x                     1.32.1-150500.1.1                   kubernetes
kubelet.s390x                     1.32.0-150500.1.1                   kubernetes
kubelet.ppc64le                   1.32.2-150500.1.1                   kubernetes
kubelet.ppc64le                   1.32.1-150500.1.1                   kubernetes
kubelet.ppc64le                   1.32.0-150500.1.1                   kubernetes
kubelet.aarch64                   1.32.2-150500.1.1                   kubernetes
kubelet.aarch64                   1.32.1-150500.1.1                   kubernetes
kubelet.aarch64                   1.32.0-150500.1.1                   kubernetes
​
3、安装kubelet、kubeadm、kubectl、kubernetes-cni
yum install -y kubelet kubeadm kubectl kubernetes-cni
​4、配置cgroup
为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容。
vim /etc/sysconfig/kubelet  [3台全部设置下]
---------------------
添加
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
---------------------
设置kubelet为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动
systemctl enable kubelet
-----------------------------------

五、K8S集群初始化

# 只在master01节点上操作创建初始化文件 kubeadm-init.yaml
​kubeadm config print init-defaults > kubeadm-init.yaml
#修改如下配置:
​
#- advertiseAddress:为控制平面地址,( Master 主机 IP )
#    advertiseAddress: 1.2.3.4
修改为 advertiseAddress: 172.16.90.11

#- criSocket:为 containerd 的 socket 文件地址
#    criSocket: unix:///var/run/containerd/containerd.sock
修改为 criSocket: unix:///var/run/cri-dockerd.sock

#    name: node
修改为 name: k8s-master01
​
#- imageRepository:阿里云镜像代理地址,否则拉取镜像会失败
#    imageRepository: registry.k8s.io
修改为:imageRepository: registry.aliyuncs.com/google_containers

#- kubernetesVersion:为 k8s 版本
#   kubernetesVersion: 1.32.0
修改为:kubernetesVersion: 1.32.2

#注意:一定要配置镜像代理,否则会由于防火墙问题导致集群安装失败文件末尾增加启用ipvs功能
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
​
# 根据配置文件启动 kubeadm 初始化 k8s

kubeadm init --config=kubeadm-init.yaml --upload-certs --v=6
...
​
#(当出现以下就说明配置成功了)
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
​
Alternatively, if you are the root user, you can run:
​
  export KUBECONFIG=/etc/kubernetes/admin.conf
​
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 172.16.90.11:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:06faf8d64c03530bf88d1a34eae877b3d446ab5e4f0e071fc96567ccf53b1e70 


#配置一下内容
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
​  export KUBECONFIG=/etc/kubernetes/admin.conf





六、K8S集群工作节点加入

#所有的工作节点加入集群注意:加入集群时需要添加 (node1和node2添加)
--cri-socket unix:///var/run/cri-dockerd.sock
kubeadm join 172.16.90.11:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:06faf8d64c03530bf88d1a34eae877b3d446ab5e4f0e071fc96567ccf53b1e70 \
    --cri-socket unix:///var/run/cri-dockerd.sock
    
[root@k8s-master01 ~]# kubectl get node
NAME           STATUS     ROLES           AGE     VERSION
k8s-master01   NotReady   control-plane   2m55s   v1.32.2
k8s-node01     NotReady   <none>          56s     v1.32.2
k8s-node02     NotReady   <none>          49s     v1.32.2

七、K8S集群网络插件使用

网络插件选型对比

插件网络模式性能损耗适用场景
FlannelVXLAN8-10%中小型集群
CalicoBGP3-5%大规模生产环境
CiliumeBPF1-3%云原生安全场景
Weavemesh10-15%混合云环境
# 只在master01上操作可能也需要代理,如果curl不下来,私我发包直接上传不用修改)
curl -O https://docs.projectcalico.org/archive/v3.28/manifests/calico.yaml
​vim calico.yaml
以下两行默认没有开启,开始后修改第二行为kubeadm初始化使用指定的pod network即可。
3680             # The default IPv4 pool to create on startup if none exists. Pod IPs will be
3681             # chosen from this range. Changing this value after installation will have
3682             # no effect. This should fall within `--cluster-cidr`.
3683             - name: CALICO_IPV4POOL_CIDR
3684               value: "10.244.0.0/16"
3685             # Disable file logging so `kubectl logs` works.
​

#可以将镜像提前拉取下来,如果官网仓库不可达,可以尝试手动从quay.io下载镜像,quay.io是一个公共镜像仓库。(这步需要三台都要拉镜像)
docker pull calico/cni:v3.28.0
docker pull calico/node:v3.28.0
docker pull calico/kube-controllers:v3.28.0
#(可能也是需要代理才能拉下镜像来,私我发包直接上传,再按以下步骤)
​docker load -i calico.tar.gz
docker images


#部署calico网络(在master上)
[root@k8s-master01 ~]# kubectl apply -f calico.yaml
​
#检查:
[root@k8s-master01 ~]# kubectl get pod -n kube-system 
NAME                                      READY   STATUS    RESTARTS   AGE
calico-kube-controllers-cb7c98d86-qbbmr   1/1     Running   0          10m
calico-node-68gc6                         1/1     Running   0          10m
calico-node-gxcl8                         1/1     Running   0          10m
calico-node-xj6xp                         1/1     Running   0          10m
coredns-6766b7b6bb-dzbzb                  1/1     Running   0          59m
coredns-6766b7b6bb-qmwjw                  1/1     Running   0          59m
etcd-k8s-master01                         1/1     Running   0          59m
kube-apiserver-k8s-master01               1/1     Running   0          59m
kube-controller-manager-k8s-master01      1/1     Running   0          59m
kube-proxy-gfv7j                          1/1     Running   0          59m
kube-proxy-nfhvt                          1/1     Running   0          57m
kube-proxy-pf2rs                          1/1     Running   0          57m
kube-scheduler-k8s-master01               1/1     Running   0          59m
​

八、Kubectl命令自动补全

yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

九、报错问题与解决

1、在替换默认源时----dnf makecache出现以下内容

        1、检查网络连接(如果无法 ping 通,可能是网络配置问题,在管理出检查设备是否可以net连接)

ping mirrors.aliyun.com

如果网络连接正常,但域名解析失败,可能是 DNS 配置有问题。 /etc/resolv.conf 文件,添加一个可靠的 DNS 服务器,我这里是

 search localdomain nameserver 192.168.131.2

你也可以写 Google 的公共 DNS:

nameserver 8.8.8.8
nameserver 8.8.4.4

2、在安装docker的,更新并安装Docker-CE时出现

加一个sudo就行

sudo yum makecache fast

3、在安装cri-dockerd时,

这表示没有cri-docker的依赖包libcgroup,只需要改变一下顺序:先安装libcgroup如下:

yum install libcgroup-0.41-19.el8.x86_64.rpm
yum install cri-dockerd-0.3.16-3.fc35.x86_64.rpm

4、K8S集群初始化时

        1、出现重复字段和未知字段,如下

#进入到kubeadm-init.yaml里,将配置修改为以下内容(可以直接粘贴过去,但 advertiseAddress:后面的ip改为你自己的master IP地址)
vim kubeadm-init.yaml


apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
localAPIEndpoint:
  advertiseAddress: 192.168.131.137
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/cri-dockerd.sock
  imagePullPolicy: IfNotPresent
  name: k8s-master01
  taints: null
timeouts:
  controlPlaneComponentHealthCheck: 4m0s
  discovery: 5m0s
  etcdAPICall: 2m0s
  kubeletHealthCheck: 4m0s
  kubernetesAPICall: 1m0s
  tlsBootstrap: 5m0s
  upgradeManifests: 5m0s
---
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
clusterName: kubernetes
imageRepository: registry.aliyuncs.com/google_containers
kubernetesVersion: 1.32.2
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
certificatesDir: /etc/kubernetes/pki
caCertificateValidityPeriod: 87600h0m0s
certificateValidityPeriod: 8760h0m0s
encryptionAlgorithm: RSA-2048
apiServer: {}
controllerManager: {}
scheduler: {}
etcd:
  local:
    dataDir: /var/lib/etcd
dns: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs

       再次执行 kubeadm init --config=kubeadm-init.yaml --upload-certs --v=6      

        2、kubelet没有运行

首先,检查 kubelet 是否正在运行:

systemctl status kubelet

如果 kubelet 没有运行,尝试启动它:

sudo systemctl start kubelet

然后再次检查状态:

systemctl status kubelet

       再次执行 kubeadm init --config=kubeadm-init.yaml --upload-certs --v=6      

3、问题 1:端口被占用。问题 2:文件已存在。问题 3:/var/lib/etcd 目录不为空问题/var/lib/etcd 目录不为空

 

#安装 net-tools
sudo dnf install net-tools -y
#检查端口占用
[root@k8s-master01 ~]# sudo netstat -tuln | grep -E '6443|10259|10257|10250|2379|2380'
tcp6       0      0 :::10250                :::*                    LISTEN
#运行以下命令停止 kubelet 服务:
sudo systemctl stop kubelet

2. 检查 kubelet 是否仍在运行
运行以下命令确认 kubelet 是否已停止:
sudo systemctl status kubelet

3. 清理 Kubernetes 环境
运行以下命令清理 Kubernetes 环境:
sudo kubeadm reset
sudo rm -rf /etc/kubernetes
sudo rm -rf /var/lib/etcd
sudo rm -rf $HOME/.kube

       再次执行 kubeadm init --config=kubeadm-init.yaml --upload-certs --v=6    


http://www.kler.cn/a/590967.html

相关文章:

  • AK 接口
  • Oracle静默安装方法
  • MySQL事务:确保数据一致性的关键机制
  • 复旦:LLM不同层位置编码缩放
  • 【arXiv 2025】卷积加法自注意力CASAtt,轻量且高效,即插即用!
  • 【紫光同创FPGA开发常用工具】FPGACPLD的下载与固化
  • 数据库设计实验(4)—— 数据更新实验
  • 神思智飞无人机智能调度系统介绍
  • pwn刷题记录
  • 笔记:代码随想录算法训练营day56:图论理论基础、深搜理论基础、98. 所有可达路径、广搜理论基础
  • XXXX数字化交流BI系统分析与设计(40页PPT)(文末有下载方式)
  • Web 小项目: 网页版图书管理系统
  • ESMFold 安装教程
  • (6)用于无GPS导航的Nooploop
  • 音视频处理的“瑞士军刀”与“积木”:FFmpeg 与 GStreamer 的深度揭秘
  • leetcode236-二叉树的公共祖先
  • Django REST Framework中的序列化器类和视图类
  • 基于深度学习的OCR+NLP,医疗化验单智能识别方案
  • MPC算法路径跟踪_Matlab实现
  • HTML基础内容2