容器_Docker ( 05 )

news2024/11/16 10:23:56

容器_Docker ( 04 )

K8S管理

集群管理

集群管理命令
  • kubectl是用于控制Kubernetes集群的命令行工具

  • 语法格式 : kubectl [command] [Type] [Name] [flags]

    • command : 子命令 , 如create , get , describe , delete

    • 查询集群信息管理命令

      子命令说明
      help用于查看命令及子命令的帮助信息
      cluster-info显示集群的相关配置信息
      version查看服务器及客户端的版本信息
      api-resources查看当前服务器上所有的资源对象
      api-versions查看当前服务器上所有资源对象的版本
      config管理当前节点上kubeconfig 的认证信息
    • type : 资源类型 ,可以表示为单数 , 复数或缩写形式

    • name : 资源的名称 , 如果省略 , 则显示所有资源信息

    • flags : 指定可选标志 , 或附加的参数

管理命令示例
  • help
# 查看帮助命令信息
[root@master ~]# kubectl help version
Print the client and server version information for the current context.
Examples:
  # Print the client and server versions for the current context
  kubectl version
... ...
  • cluster-info
# 查看集群状态信息
[root@master ~]# kubectl cluster-info 
Kubernetes control plane is running at https://192.168.1.50:6443
CoreDNS is running at https://192.168.1.50:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
... ...
  • version
# 查看服务端与客户端版本信息
[root@master ~]# kubectl version
WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short.  Use --output=yaml|json to get the full version.
Client Version: version.Info{Major:"1", Minor:"26", GitVersion:"v1.26.0", GitCommit:"b46a3f887ca979b1a5d14fd39cb1af43e7e5d12d", GitTreeState:"clean", BuildDate:"2022-12-08T19:58:30Z", GoVersion:"go1.19.4", Compiler:"gc", Platform:"linux/amd64"}
Kustomize Version: v4.5.7
Server Version: version.Info{Major:"1", Minor:"26", GitVersion:"v1.26.0", GitCommit:"b46a3f887ca979b1a5d14fd39cb1af43e7e5d12d", GitTreeState:"clean", BuildDate:"2022-12-08T19:51:45Z", GoVersion:"go1.19.4", Compiler:"gc", Platform:"linux/amd64"}
  • api-resources
# 查看资源对象类型

[root@master ~]# kubectl api-resources 
NAME             SHORTNAMES     APIVERSION      NAMESPACED      KIND
bindings                        v1              true            Binding
endpoints        ep             v1              true            Endpoints
events           ev             v1              true            Event
... ...
  • api-versions
# 查看资源对象版本
[root@master ~]# kubectl api-versions 
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
... ...
  • config
# 查看当前认证使用的用户及证书
[root@master ~]# kubectl config get-contexts 
CURRENT   NAME                          CLUSTER      AUTHINFO
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin

# 使用 view 查看详细配置
[root@master ~]# kubectl config view 
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://192.168.1.50:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
为其他主机添加管理权限
  • 安装集群管理工具 kubectl
[root@harbor ~]# vim /etc/hosts
192.168.1.30    harbor
192.168.1.50    master
192.168.1.51    node-0001
192.168.1.52    node-0002
192.168.1.53    node-0003
192.168.1.54    node-0004
192.168.1.55    node-0005

[root@harbor ~]# dnf install -y kubectl
  • 拷贝证书到目标主机
    • 整数默认路径 : ${HOME}/.kube/config
[root@harbor ~]# mkdir -p $HOME/.kube

#拷贝证书
[root@harbor ~]# rsync -av master:/etc/kubernetes/admin.conf $HOME/.kube/config

#设置证书的所有者和所属组
[root@harbor ~]# chown $(id -u):$(id -g) $HOME/.kube/config

#验证管理权限
[root@harbor ~]# kubectl get nodes
NAME        STATUS   ROLES           AGE   VERSION
master      Ready    control-plane   24h   v1.26.0
node-0001   Ready    <none>          22h   v1.26.0
node-0002   Ready    <none>          22h   v1.26.0
node-0003   Ready    <none>          22h   v1.26.0
node-0004   Ready    <none>          22h   v1.26.0
node-0005   Ready    <none>          22h   v1.26.0
资源对象概述
  • 什么是资源对象
    • k8s中把可以创建或配置的应用和服务成为资源对象
    • 我们在集群中创建的Pod , 负载均衡 , 存储 , 网络服务等等都是资源对象
    • 创建资源对象
      • 简单资源对象可以使用 “kubectl” 直接创建
      • 高级资源对象需要使用 “资源对象文件” 创建
  • 查看私有资源对象中的镜像
curl -sku admin https://harbor:443/v2/library/myos/tags/list | python3 -m json.tool
创建 Pod 资源对象
  • 使用 run 创建一个 Pod资源对象
    • kubectl run Pod名称 [选项/参数] --image=镜像名:标签
# 创建 Pod
[root@master ~]# kubectl run myweb --image=myos:nginx
pod/myweb created

# 查询资源对象
[root@master ~]# kubectl get pods -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP           NODE
myweb   1/1     Running   0          3s    10.244.1.3   node-0001

[root@master ~]# curl http://10.244.1.3
Nginx is running !

Pod详解

什么是 Pod
  • Pod 就像是豌豆荚一样 名是由一个或多个容器组成
  • Pod 是 Kubernetes中最小的管理元素
  • Pod 是一个服务的多个进程的聚合单位
  • 同一个 Pod 共享网络IP以及权限
  • 同一个 Pod 共享主机名称
  • 同一个 Pod 共享存储设备
为什么使用Pod
  • 服务之间有相关性
  • 启动容器的时候需要初始化或进行相关配置
Pod的生命周期
  • Pod 对象自从创建开始至终止的时间范围称为其声明周期
  • 在这段时间中 , Pod处在多种不同的状态 , 并执行相关操作
  • 创建主容器(main container)为必须的操作 , 其他为可选操作
Pod相位状态
  • Pod的stastus字段是一个 PodStatus的对象 , Pod对象总是应该处于其生命进程中以下几个相位(phase)之一
    • Pending Pod创建过程中 , 但尚未被调度完成
    • Running Pod中所有容器都已经被创建成功
    • Completed Pod所有容器都已经成功终止 , 并不会被重启
    • Failed Pod中所有容器中至少有一个容器退出是非0状态
    • Unknown 无法正常获取到Pod对象的状态信息
Pod 管理命令
子命令说明备注
run/create创建资源对象可输出资源文件模板
get查看资源对象的状态信息常用参数: -o 显示格式
describe查询资源对象的属性信息
logs查看容器的报错信息常用参数: -c 容器名称
kubectl get 语法格式
  • kubectl get 资源类型 [资源名称] [选项/参数]
    • 常用参数
      • -o name 只显示名字
      • -o wide 显示更加详细的信息
      • -o yaml 以yaml语法格式显示资源对象
      • -o json 以json语法格式显示资源对象
      • namespace 查看命名空间
      • -n kube-system 查看命名空间中的资源对象
# 查看 Pod 资源对象
[root@master ~]# kubectl get pods
NAME     READY   STATUS    RESTARTS   AGE
myweb    1/1     Running   0          10m

# 只查看资源对象的名字
[root@master ~]# kubectl get pods -o name
pod/myweb

# 查看资源对象运行节点的信息
[root@master ~]# kubectl get pods -o wide
NAME     READY   STATUS    RESTARTS   AGE   IP           NODE
myweb    1/1     Running   0          10m   10.244.1.3   node-0001

# 查看资源对象详细信息,Yaml 格式
[root@master ~]# kubectl get pod myweb -o yaml
apiVersion: v1
kind: Pod
metadata:
  name: myweb
... ...

# 查看名称空间
[root@master ~]# kubectl get namespaces 
NAME              STATUS   AGE
default           Active   39h
kube-node-lease   Active   39h
kube-public       Active   39h
kube-system       Active   39h

# 查看 kube-system 名称空间中的 Pod 信息
[root@master ~]# kubectl -n kube-system get pods
NAME                             READY   STATUS    RESTARTS      AGE
etcd-master                      1/1     Running   0             39h
kube-apiserver-master            1/1     Running   0             39h
kube-controller-manager-master   1/1     Running   0             39h
kube-scheduler-master            1/1     Running   0             39h
... ...
kubectl create 语法格式
  • kubectl create <资源对象> [选项/参数]
# 创建名称空间资源对象
[root@master ~]# kubectl create namespace work
namespace/work created

# 查看名称空间
[root@master ~]# kubectl get namespaces
NAME              STATUS   AGE
default           Active   39h
kube-node-lease   Active   39h
kube-public       Active   39h
kube-system       Active   39h
work              Active   11s
kubectl run 语法格式
  • kubectl run pod名称 [选项/参数]
# 创建简单 Pod 资源对象
[root@master ~]# kubectl -n work run myhttp --image=myos:httpd
pod/myhttp created

# 查询资源对象
[root@master ~]# kubectl -n work get pods -o wide
NAME     READY   STATUS    RESTARTS   AGE   IP           NODE
myhttp   1/1     Running   0          3s    10.244.2.2   node-0002

# 访问验证
[root@master ~]# curl http://10.244.2.2
Welcome to The Apache.
kubectl describe 语法格式
  • kubectl describe 资源类型 [资源名称] [选项/参数]
  • Events排错
  • 查看 pod的错误
# 查看资源对象的属性信息
[root@master ~]# kubectl describe pod myweb
Name:             myweb
Namespace:        default
Priority:         0
Service Account:  default
Node:             node-0001/192.168.1.51
... ...
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  16m   default-scheduler  Successfully assigned default/myweb to node-0001
  Normal  Pulled     16m   kubelet            Container image "myos:nginx" already present on machine
  Normal  Created    16m   kubelet            Created container myweb
  Normal  Started    16m   kubelet            Started container myweb

# 查看 work 名称空间下的 pod 信息
[root@master ~]# kubectl -n work describe pod myhttp
Name:             myhttp
Namespace:        work
Priority:         0
Service Account:  default
Node:             node-0002/192.168.1.52
... ...
kubectl logs 语法格式
  • kubectl logs Pod名称 [选项/参数]
  • 查看容器内的错误
# 访问服务,并查看日志
[root@master ~]# curl http://10.244.1.3/info.php

[root@master ~]# curl http://10.244.2.2/info.php
... ...

# 查看 myweb 日志
[root@master ~]# kubectl logs myweb 
2022/11/12 18:28:54 [error] 7#0: *2 open() "/usr/local/nginx/html/info.php" failed (2: No such file or directory), client: 10.244.0.0, server: localhost, request: "GET /info.php HTTP/1.1", host: "10.244.2.12"

# 查看 myhttp 日志
[root@master ~]# kubectl -n work logs myhttp
Pod管理命令
子命令说明备注
exec在某一个容器内执行特定的命令可选参数: -c 容器名称
cp在容器和宿主机之间拷贝文件或目录可选参数: -c 容器名称
delete删除资源对象可选参数: -l 标签
kubectl exec
  • kubectl exec [选项/参数] Pod名称 -- 操作命令
    • 常用参数 -it 分布交互式终端
[root@master ~]# kubectl exec myweb -- ls 
50x.html
index.html

[root@master ~]# kubectl exec -it myweb -- /bin/bash

[root@myweb html]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        inet 10.244.1.3  netmask 255.255.255.0  broadcast 10.244.2.255
        ether 3a:32:78:59:ed:25  txqueuelen 0  (Ethernet)
... ...
kubectl cp
  • kubectl cp [选项/参数] 原文件 目标文件
    • 路径格式 [Pod名称:绝对路径]
# 与容器进行文件或目录传输
[root@master ~]# kubectl cp myweb:/etc/yum.repos.d /root/aaa
tar: Removing leading `/' from member names

[root@master ~]# tree /root/aaa
/root/aaa
├── local.repo
├── Rocky-AppStream.repo
├── Rocky-BaseOS.repo
└── Rocky-Extras.repo
0 directories, 4 files

[root@master ~]# kubectl -n work cp /etc/passwd myhttp:/root/mima
[root@master ~]# kubectl -n exec myweb -- ls /root/
mima
kubectl delete
  • 集群所有资源均可使用 delete 命令删除

    kubectl delete [选项/参数] 资源类型 资源名称

# 删除资源对象
[root@master ~]# kubectl delete pods myweb 
pod "myweb" deleted

# 删除 work 名称空间下所有 Pod 对象
[root@master ~]# kubectl -n work delete pods --all
pod "myhttp" deleted

# 删除名称空间
[root@master ~]# kubectl delete namespaces work 
namespace "work" deleted

k8s资源对象管理

资源对象文件

资源文件详解
  • 什么是资源对象
    • Kubernetes 对象是 “目标性记录”
    • kubernetes 使用这些对象去表示整个集群的状态
  • 什么是资源对象文件
    • 创建 kubernetes 对象时 , 必须提供资源对象的一些基本信息 , 以及描述对象的期望状态特征(规约) , 如果在文件中使用yaml的语法格式描述了上述信息 , 此文件就是资源对象文件
  • 为什么要使用资源对象文件
    • 命令无法持久化 , 没有历史记录 , 不方便重现
    • 服务众多 , 多个容器之间有关联性 , 管理不方便
    • 很多高级复杂的功能靠简单的命令方式无法实现 , 这些都需要使用资源文件描述
  • 资源对象文件可以创建 , 删除 , 变更 , 管理资源对象
最简单的资源对象文件
  • 命名规范 : 使用帕斯卡拼写法 , key使用小驼峰 , value使用大驼峰
    请添加图片描述
    请添加图片描述
[root@master ~]# vim myweb.yaml
---                      #Yaml文件起始标志
kind: Pod                #当前创建资源的类型
apiVersion: v1           #当前资源对应的版本
metadata:                #属性信息 , 元数据
  name: myweb            #属性信息 , 资源的名称
spec:                    #资源的特性描述
  containers:            #容器资源特征描述
  - name: webserver      #容器名称
    image: myos:nginx    #启动容器使用的镜像
status: {}               #资源状态 , 运行后自动生成
Pod资源对象管理
子命令说明备注
create创建文件中定义的资源支持指令式和资源对象文件配置
apply创建(更新)文件中定义的资源只支持资源对象文件(声明式)
delete删除文件中定义的资源支持指令式和资源对象文件配置
create
# 创建资源对象
[root@master ~]# kubectl create -f myweb.yaml 
pod/myweb created

# 不能更新,重复执行会报错
[root@master ~]# kubectl create -f myweb.yaml 
Error from server (AlreadyExists): error when creating "myweb.yaml": pods "myweb" already exists
delete
# 使用资源对象文件删除
[root@master ~]# kubectl delete -f myhttp.yaml
pod "myhttp" deleted

[root@master ~]# kubectl get pods
No resources found in default namespace.
apply
# 创建资源对象
[root@master ~]# kubectl apply -f myweb.yaml 
pod/myweb created

# 更新资源对象
[root@master ~]# kubectl apply -f myweb.yaml 
pod/myweb configured

# 删除资源对象
[root@master ~]# kubectl delete -f myweb.yaml 
pod "myweb" deleted

# 拓展提高
# 与 kubectl apply -f myweb.yaml 功能相同
[root@master ~]# cat myweb.yaml |kubectl apply -f -  
静态Pod(一般不使用)
  • 什么是静态Pod

    • 静态Pod是由kubelet守护进程直接管理的Pod , 不需要API服务器监管 , 与由控制面管理的 Pod不同

    • kubelet 监视每个静态 Pod (在它崩溃后重启)

    • 静态Pod永远都会绑定到一个指定节点上的 Kubelet

    • 静态Podspec不能引用其他API对象

    • 静态Pod配置路径 : /var/lib/kubelet/config.yaml

      • staticPodPath: /etc/kubernetes/mainfests

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

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

相关文章

openGauss学习笔记-225 openGauss性能调优-系统调优-配置向量化执行引擎

文章目录 openGauss学习笔记-225 openGauss性能调优-系统调优-配置向量化执行引擎 openGauss学习笔记-225 openGauss性能调优-系统调优-配置向量化执行引擎 openGauss数据库支持行执行引擎和向量化执行引擎&#xff0c;分别对应行存表和列存表。 一次一个batch&#xff0c;读…

C++如何避免float误差?

C如何避免float误差&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「c的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; …

openEuler2203 LTS安装VMware WorkStation Pro 17并远程桌面连接Linux服务器

openEuler 2203 LTS默认只有命令行&#xff0c;没有GUI图形界面&#xff0c;在其中安装VMware WorkStation需要有图形界面的支持。这里以安装深度的DDE桌面环境&#xff0c;最后通过VNC远程桌面连接Linux服务器操作VMware WorkStation。 以下操作请保持网络能正常连接 1、安装…

如何使用idea连接服务器上的mysql?

安全组进行开放 具体步骤 关闭防火墙 开放端口号 重启防火墙 firewall-cmd --reload在mysql进行修改配置 update user set host % where user root;flush privileges;使得其他网络也可以连接这个数据库 另外如果想要sqlyog或者其他图形化界面要连接到数据库可以看下面这…

【论文解读】transformer小目标检测综述

目录 一、简要介绍 二、研究背景 三、用于小目标检测的transformer 3.1 Object Representation 3.2 Fast Attention for High-Resolution or Multi-Scale Feature Maps 3.3 Fully Transformer-Based Detectors 3.4 Architecture and Block Modifications 3.6 Improved …

【打工日常】使用docker部署StackEdit编辑器-Markdown之利器

一、StackEdit介绍 StackEdit一款强大的在线Markdown编辑器&#xff0c;不仅具备卓越的写作功能&#xff0c;还支持实时预览、多设备同步等特性。 很多时候基于安全和信息保密的关系&#xff0c;建议放在自己的服务器或者本地linux去运行&#xff0c;这样会比较省心。 二、本次…

云快充1.5-帧类型码数据定义

1、 注册心跳帧类型码数据定义 1.1 充电桩登录认证 1.2 登录认证应答 1.3 充电桩心跳包 1.4 心跳包应答 1.5 计费模型验证请求 1.6 计费模型验证请求应答 1.7 充电桩计费模型请求 1.8 计费模型请求应答 2、 实时数据帧类型码数据定义 2.1 读取实时监测数据 2.2 上传实…

【AIGC】开源声音克隆GPT-SoVITS

GPT-SoVITS 是由 RVC 创始人 RVC-Boss 与 AI 声音转换技术专家 Rcell 共同开发的一款跨语言 TTS 克隆项目&#xff0c;被誉为“最强大中文声音克隆项目” 相比以往的声音克隆项目&#xff0c;GPT-SoVITS 对硬件配置的要求相对较低&#xff0c;一般只需 6GB 显存以上的 GPU 即可…

冷链物流追踪:Java与MySQL的协同实践

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

打造智能物品租赁平台:Java与SpringBoot的实践

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

工业网关的功能和优势,以及如何选择合适的工业网关-天拓四方

工业网关是连接各种工业设备和系统的通信设备&#xff0c;可以实现不同设备和系统之间的数据交换和通信。它可以作为一个中心节点&#xff0c;将各种工业设备连接起来&#xff0c;形成一个统一的通信网络&#xff0c;从而实现设备的远程监控、数据采集、分析和控制等功能。在工…

【web安全】渗透测试实战思路

步骤一&#xff1a;选目标 1. 不建议太小的公司&#xff08;可能都是请别人来开发的&#xff0c;用现成成熟的框架&#xff09; 2. 不建议一线大厂&#xff1a;腾讯&#xff0c;字节&#xff0c;阿里等&#xff0c;你懂的 3. 不建议政府部门&#xff0c;安全设备多&#xff…

c++ 到底是什么呢。需要学的太多了!

如谷歌&#xff0c;苹果&#xff0c;微软&#xff0c;造硬件的更是如此&#xff0c;如amd的&#xff0c;英传达&#xff0c;英特尔&#xff0c;他们都有C加速库。 C难就难在你如果达到顶峰&#xff0c;像些公司一样&#xff0c;是非常难的。因为这些公司已经垄断了市场。 C编译…

Linux离线安装插件

当公司Linux环境无外网情况下&#xff0c;需要先下载好离线安装包&#xff0c;然后上传到服务器&#xff0c;进行安装。 这里介绍一个下载插件安装包的网站&#xff0c;可以搜索到lrzsz、lsof、telnet、unzip、zip等安装包 搜索到想要的插件安装包后&#xff0c;下载并上传到服…

关于xinput1_3.dll丢失怎么修复,xinput1_3.dll缺失如何解决的方法

xinput1_3.dll 是一个与 Microsoft DirectX 相关的动态链接库&#xff08;DLL&#xff09;文件&#xff0c;它是 Windows 操作系统中用于处理输入设备功能的重要组件。以下是对 xinput1_3.dll 文件的详细属性和作用进行介绍&#xff1a; 一、xinput1_3.dll基本属性 文件名&am…

适用于 Linux、Windows 和 macOS 的免费 ONLYOFFICE 桌面应用程序

前言&#xff1a; 最近也是发现了一款特别好用的免费ONLYOFFICE 桌面应用程序忍不住分享给大家&#xff0c;这款编辑器能够打开、阅读和编辑多种文件类型&#xff0c;包括.docx文档、.pptx幻灯片和.xlsx表格等开放XML格式的Office文档。此外&#xff0c;ONLYOFFICE桌面编辑器还…

Linux常见的指令

目录 01. ls 指令02. pwd命令03. cd 指令04. touch指令05.mkdir指令&#xff08;重要&#xff09;&#xff1a;06.rmdir指令 && rm 指令&#xff08;重要&#xff09;&#xff1a;07.man指令&#xff08;重要&#xff09;&#xff1a;08.cp指令&#xff08;重要&#x…

《探索网校 App 的魅力世界:知识与科技的完美结合》

在数字化时代&#xff0c;教育也在经历着深刻的变革。网校 App 的出现&#xff0c;正为学习者们开启了一扇通往知识的新大门&#xff0c;它融合了科技的力量&#xff0c;让学习变得更加便捷、高效和有趣。 一、功能与优势 网校 App 提供了丰富多样的学习功能&#xff0c;满足了…

盲盒小程序开发,线上盲盒应该具备哪些功能?

盲盒在我国是一个热门行业&#xff0c;它的种类繁多&#xff0c;玩法新奇有趣&#xff0c;吸引了无数年轻人的眼光&#xff0c;发展更是经久不衰&#xff01; 随着科学技术的不断发展&#xff0c;盲盒行业也在继续保持上升趋势&#xff0c;为我国消费者带来了更多的新体验&…

Commonjs 和 Es Module详解

一 前言 今天我们来深度分析一下 Commonjs 和 Es Module&#xff0c;希望通过本文的学习&#xff0c;能够让大家彻底明白 Commonjs 和 Es Module 原理&#xff0c;能够一次性搞定面试中遇到的大部分有关 Commonjs 和 Es Module 的问题。 带上疑问开始今天的分析&#xff1a; …