Linux——k8s认识

news2024/11/16 4:42:43

计算资源隔离

-  更方便进行高并发架构的维护和升级

-  架构管理的灵活性更高,不再以单个节点的物理资源作为基础

技术:

- 硬件辅助虚拟化

- 容器技术

在企业部署方案中,很少以单节点实现虚拟化和容器技术,一般以集群状态来运行虚拟化技术或者容器。

容器相对比硬件辅助虚拟化的优点:

  1. 轻量级  (运行时对系统内存和硬盘的使用较少)
  2. 便捷性  portable   (容器对于镜像有规范化的镜像标准,因此打包制作好的镜像可以在任何容器运行时环境中运行)
  3. 运行速度快   (容器在启动时,并不需要从系统内核开始进行初始化;容器在运行时只需要启动少量进程即可)

缺点:

  1. 容器并不可靠
  2. 缺少专门的存储规划
  3. 容器通信方式有限

Kubernetes 是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、扩缩和管理。

容器的存储管理和网络基础设施管理:

以docker为例:

存储:

bind-mount

volume

以上的存储类型都不支持在跨节点进行容器化应用部署时的存储管理问题.

网络:

host    直接复制容器宿主机的网络配置

bridge   桥接网络驱动       不同桥接网络之间容器通信需要配置额外的网络通信参数

ipvlan / macvlan        通过改变网络接口的vlan标签,让不同宿主机中的容器可以彼此进行通信

overlay 支持跨宿主机的容器通信

以上的docker网络设施解决方案中,要么只能实现单节点的通信,要么在多节点通信状态下,将大大增加宿主机网卡的工作压力。以上的跨节点通信方案在设置时,都需要设置额外的路由规则才可以实现。

K8S 部署过程整理:

Kubernetes 集群的需求:

(1)可用性:一个单机的 Kubernetes 学习环境,具有单点失效特点。创建高可用的集群则意味着需要考虑:

  1. 将控制器(运行K8S核心组件的节点)与工作节点(运行应用容器的节点)分开
  2. 在多个节点上提供控制器组件的副本
  3. 为针对集群的 API 服务器的流量提供负载均衡
  4. 随着负载的合理需要,提供足够的可用的(或者能够迅速变为可用的)工作节点
  5. 规模:如果你预期你的生产用Kubernetes 环境要承受固定量的请求,你可能可以针对所需要的容量来一次性完成安装。不过,如果你预期服务请求会随着时间增长,或者因为类似季节或者特殊事件的原因而发生剧烈变化,你就需要规划如何处理请求上升时对控制面和工作节点的压力,或者如何缩减集群规模以减少未使用资源的消耗。
  6. 安全性与访问管理:在你自己的学习环境 Kubernetes 集群上,你拥有完全的管理员特权。
  7. 但是针对运行着重要工作负载的共享集群,用户账户不止一两个时,就需要更细粒度的方案来确定谁或者哪些主体可以访问集群资源。
  8. 你可以使用基于角色的访问控制(RBAC)和其他安全机制来确保用户和负载能够访问到所需要的资源,同时确保工作负载及集群自身仍然是安全的。
  9. 你可以通过管理策略和 容器资源来针对用户和工作负载所可访问的资源设置约束。

K8S 集群中每个节点的角色分工:

  1. 控制器: K8S 部署集群的管理,应用服务的调度管理
  2. 工作节点(Node):运行pod的节点

简单修改主机名/ip地址

node1:

[root@bogon ~]# hostnamectl set-hostname node1
[root@bogon ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.110.11/24 ipv4.gateway 192.168.110.2 ipv4.dns 8.8.8.8 autoconnect yes
[root@bogon ~]# nmcli connection up ens160 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@bogon ~]# ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:00:8b:54 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.110.11/24 brd 192.168.110.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe00:8b54/64 scope link tentative noprefixroute 
       valid_lft forever preferred_lft forever
[root@bogon ~]# su 
[root@node1 ~]# 
[root@node1 ~]# vim /etc/ssh/sshd_config   // 允许root登录
添加下面这一行
PermitRootLogin yes

[root@node1 ~]# systemctl restart sshd
[root@node1 ~]# 

node2:

利用终端软件,统一执行,前期环境配置和软件安装

注:以下命令需要在三个节点上都执行

一、启用ipv4软件包转发

[root@node1 ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
[root@node1 ~]# vim /etc/sysctl.d/k8s.conf
net.ipv[root@node1 ~]# sysctl --system
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
* Applying /usr/lib/sysctl.d/50-coredump.conf ...
* Applying /usr/lib/sysctl.d/50-default.conf ...
* Applying /usr/lib/sysctl.d/50-libkcapi-optmem_max.conf ...
* Applying /usr/lib/sysctl.d/50-pid-max.conf ...
* Applying /usr/lib/sysctl.d/50-redhat.conf ...
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.d/k8s.conf ...
* Applying /etc/sysctl.conf ...
kernel.yama.ptrace_scope = 0
kernel.core_pattern = |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h
kernel.core_pipe_limit = 16
fs.suid_dumpable = 2
kernel.sysrq = 16
kernel.core_uses_pid = 1
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.ens160.rp_filter = 2
net.ipv4.conf.lo.rp_filter = 2
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.ens160.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.ens160.promote_secondaries = 1
net.ipv4.conf.lo.promote_secondaries = 1
net.ipv4.ping_group_range = 0 2147483647
net.core.default_qdisc = fq_codel
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
fs.protected_regular = 1
fs.protected_fifos = 1
net.core.optmem_max = 81920
kernel.pid_max = 4194304
kernel.kptr_restrict = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.ens160.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.ip_forward = 1
[root@node1 ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

二、确认ip、mac地址、prod_uuid、主机名、在三个节点上不同

[root@node1 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 100                                                                                               0
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen                                                                                                1000
    link/ether 00:0c:29:00:8b:54 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.110.11/24 brd 192.168.110.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe00:8b54/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
[root@node1 ~]# cat /sys/class/dmi/id/p
power/           product_name     product_sku      product_version
product_family   product_serial   product_uuid
[root@node1 ~]# cat /sys/class/dmi/id/p
power/           product_name     product_sku      product_version
product_family   product_serial   product_uuid
[root@node1 ~]# cat /sys/class/dmi/id/product_uuid
9b3c4d56-0bb8-1c6d-3ab7-e216b7008b54

三、确认6443 端口未被占用

[root@node1 ~]# nc 127.0.0.1 6443 -v
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connection refused.

四、禁用交换分区

[root@node1 ~]# swapon -s
Filename                                Type            Size            Used            Pr                                                                                               iority
/dev/dm-1                               partition       4108284         0               -2
[root@node1 ~]# swapoff -a
[root@node1 ~]# swapon -s
[root@node1 ~]# vim /etc/fstab
[root@node1 ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Fri Aug 23 00:45:24 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/cs_bogon-root /                       xfs     defaults        0 0
UUID=d910d323-150c-40df-bd32-bdfb1f5c93b9 /boot                   xfs     defaults                                                                                                       0 0
UUID=BA00-CA1F          /boot/efi               vfat    umask=0077,shortname=winnt 0 2
#/dev/mapper/cs_bogon-swap none                    swap    defaults        0 0

五、安装CRI 容器运行时

[root@node1 ~]# dnf remove -y podman container* runc*
[root@node1 ~]# dnf -y install dnf-utils
[root@node1 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/doc                                                                                               ker-ce.repo
Adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
[root@node1 ~]# dnf -y install docker-ce docker-ce-cli containerd.io   // 等待安装完成即可

[root@node1 ~]# systemctl enable --now containerd.service
Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /usr/lib/systemd/system/containerd.service.
[root@node1 ~]# ll /var/run/containerd/containerd.sock   //k8s调用容器运行时接口,确保此文件存在
srw-rw----. 1 root root 0 Sep 19 13:57 /var/run/containerd/containerd.sock
配置containerd 服务支持CRI的调用
[root@node1 ~]# vim /etc/containerd/config.toml
[root@node1 ~]# sed -i "s/cri//" /etc/containerd/config.toml
[root@node1 ~]# grep plugin /etc/containerd/config.toml
disabled_plugins = [""]
[root@node1 ~]# systemctl restart containerd.service
[root@node1 ~]#

六、安装Kubenetes相关管理工具

三个节点一起执行
[root@node1 ~]# setenforce 0
[root@node1 ~]# sed -i "s/^SELINUX=enforcing/SELINUX=permissivce" /etc/selinux/config
sed: -e expression #1, char 40: unterminated `s' command
[root@node1 ~]# sed -i 's/^SELINUX=enforcing/SELINUX=permissivce' /etc/selinux/config
sed: -e expression #1, char 40: unterminated `s' command
[root@node1 ~]# sed -i 's/^SELINUX=enforcing/SELINUX=permissivce/' /etc/selinux/config
[root@node1 ~]# grep SELINUX /etc/selinux/config
# SELINUX= can take one of these three values:
# NOTE: Up to RHEL 8 release included, SELINUX=disabled would also
SELINUX=permissive
# SELINUXTYPE= can take one of these three values:
SELINUXTYPE=targeted
[root@node1 ~]# vim /etc/yum.repos.d/k8s.repo
[root@node1 ~]# cat /etc/yum.repos.d/k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
只在node1上配置,通过scp 同步给其他节点。
[root@node1 ~]# scp /etc/yum.repos.d/k8s.repo root@192.168.110.10:/etc/yum.repos.d/
The authenticity of host '192.168.110.10 (192.168.110.10)' can't be established.
ED25519 key fingerprint is SHA256:84EopGSflyn0EP7RLvmnvaWPJCTe8G99eX4dF6XQzFk.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.110.10' (ED25519) to the list of known hosts.
root@192.168.110.10's password:
k8s.repo                                                                                                                            100%  235   104.8KB/s   00:00
[root@node1 ~]# scp /etc/yum.repos.d/k8s.repo root@192.168.110.22:/etc/yum.repos.d/
The authenticity of host '192.168.110.22 (192.168.110.22)' can't be established.
ED25519 key fingerprint is SHA256:84EopGSflyn0EP7RLvmnvaWPJCTe8G99eX4dF6XQzFk.
This host key is known by the following other names/addresses:
    ~/.ssh/known_hosts:1: 192.168.110.10
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.110.22' (ED25519) to the list of known hosts.
root@192.168.110.22's password:
k8s.repo                                                                                                                            100%  235   120.0KB/s   00:00

在三个节点上同时安装。
[root@node1 ~]# yum -y install kubeadm kubectl kubelet --disableexcludes=kubernetes
[root@control ~]# systemctl start  kubelet.service

下载初始化平台需要使用的镜像,不使用官方的register.k8s.io仓库,使用aliyun的镜像。

在三个节点上同时下载。

[root@control ~]# cat kube.memo
registry.cn-hangzhou.aliyuncs.com/google_containers
[root@control ~]# kubeadm config print init-defaults > init.yml
[root@control ~]# kubeadm config print join-defaults > join.yml

修改init.yml

使用国内镜像,并且设置好apiserver的地址

下载镜像:

[root@control ~]# kubeadm config images  pull   --config init.yml
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.31.0
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.31.0
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.31.0
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.31.0
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.11.3
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.15-0

初始化集群:

[root@control ~]# kubeadm init  --config init.yml

// 注意观察输出中可能包含的错误信息

 

 测试可以拉取docker镜像的方案:

1、 设置dns 服务器

2、设置docker加速镜像

[root@control ~]# cat  /etc/docker/daemon.json
{
"registry-mirrors": [
   "https://docker.registry.cyou",
   "https://docker-cf.registry.cyou",
   "https://dockercf.jsdelivr.fyi",
   "https://docker.jsdelivr.fyi",
   "https://dockertest.jsdelivr.fyi",
   "https://mirror.aliyuncs.com",
   "https://dockerproxy.com",
   "https://mirror.baidubce.com",
   "https://docker.m.daocloud.io",
   "https://docker.nju.edu.cn",
   "https://docker.mirrors.sjtug.sjtu.edu.cn",
   "https://docker.mirrors.ustc.edu.cn",
   "https://mirror.iscas.ac.cn",
   "https://docker.rainbond.cc"
 ]
}
[root@control ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 223.5.5.5
nameserver 8.8.8.8
[root@control ~]# systemctl restart docker
docker pull flannel/flannel:latest
docker pull flannel/flannel-cni-plugin:latest

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

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

相关文章

翻唱技巧:AU和Cubase翻唱录制对轨技巧

分享和记录一下个人翻唱的经验和技巧&#xff01;防止后续自己忘了&#xff01;同时如果有大佬看到&#xff0c;希望可以帮我指出其中的错误&#xff01;个人推荐用Cubase12录制翻唱&#xff0c;因为Cubase12可以做乐段的标记&#xff0c;翻唱时有助于学习一些歌曲的层次设计。…

C++对象拷贝时的优化编译

在现代编译器中&#xff0c;当我们在 C中进行对象的拷贝操作时&#xff0c;编译器并非只是机械地执行逐字节的复制。相反&#xff0c;它会进行优化&#xff0c;避免不必要的拷贝构造等等&#xff0c;这种优化包括“返回值优化”&#xff08;RVO&#xff09;&#xff0c;“拷贝省…

JavaSE——String类

一、字符串构造 注意&#xff1a;String是引用类型&#xff0c;内部并不存储字符串本身。 有三种方式&#xff1a; public class Test1 {public static void main(String[] args) {// 使用常量串构造String s1 "hello java";System.out.println(s1);// 直接newSt…

JavaEE:探索网络世界的魅力——玩转UDP编程

文章目录 UDPUDP的特点UDP协议端格式校验和前置知识校验和具体是如何工作的? UDP UDP的特点 UDP传输的过程类似于寄信. 无连接: 知道对端的IP和端口号就直接进行传输,不需要建立连接.不可靠: 没有确认机制,没有重传机制,如果因为网络故障导致该段无法到达对方,UDP协议也不会…

Linux:make,Makefile

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《Linux&#xff1a;make&#xff0c;Makefile》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点点赞&…

技术成神之路:设计模式(十四)享元模式

介绍 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构性设计模式&#xff0c;旨在通过共享对象来有效地支持大量细粒度的对象。 1.定义 享元模式通过将对象状态分为内部状态&#xff08;可以共享&#xff09;和外部状态&#xff08;不可共享&#xff09;&#xf…

为什么我不建议你考CCNA/HCIA这种初级认证

CCNA和HCIA&#xff0c;这两个证书可能是许多刚入门的网络工程师第一个听说的认证。作为入门级网络认证&#xff0c;CCNA是思科公司推出的&#xff0c;提供了网络基础的全面知识&#xff0c;而HCIA则是华为的基础认证&#xff0c;覆盖了网络技术的基本原理。 这些认证的目的是帮…

2023-03 GESP Python一级试卷

一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 1.以下不属于计算机输入设备的有&#xff08; &#xff09;。 ​ A&#xff0e;键盘 ​ B&#xff0e;音箱 ​ C&#xff0e;鼠标 ​ D&#xff0e;传感器 2.计算机系统中存储的基本单位用 B 来表示&am…

用友U8二次开发工具KK-FULL-*****-EFWeb使用方法

1、安装: 下一步&#xff0c;下一步即可。弹出黑框不要关闭&#xff0c;让其自动执行并关闭。 2、服务配置&#xff1a; 输入服务器IP地址&#xff0c;选择U8数据源&#xff0c;输入U8用户名及账号&#xff0c;U8登录日期勾选系统日期。测试参数有效性&#xff0c;提示测试通过…

洞悉市场先机,Vatee万腾平台助力企业精准决策

在瞬息万变的商业环境中&#xff0c;每一个市场动向都可能成为企业兴衰的关键。因此&#xff0c;洞悉市场先机&#xff0c;做出精准决策&#xff0c;成为了企业持续发展和保持竞争力的核心要素。Vatee万腾平台&#xff0c;凭借其强大的数据分析能力和智能化技术&#xff0c;正成…

对象检测边界框损失 – 从IOU到ProbIOU

1.概述 目标检测损失函数的选择在目标检测问题建模中至关重要。通常&#xff0c;目标检测需要两个损失函数&#xff0c;一个用于对象分类&#xff0c;另一个用于边界框回归&#xff08;BBR&#xff09;。本文将重点介绍 IoU 损失函数&#xff08;GIoU 损失、DIoU 损失和 CIoU 损…

【补码运算】设x=FEH,当x分别为下列情况时写出其对应的十进制真值(写出计算过程):(1)为原码(2)为补码。

欢迎来到我的技术博客&#xff01; &#x1f389; 这里不仅有满满的编程干货和学习资源&#xff0c;我的某站账号也为你准备了更多实用的技术视频和知识分享。 &#x1f449; 点击关注我的小破站账号&#xff0c;获取更多编程技巧和学习资源&#xff01; 小破站主页 题目&…

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(三)-文档

文档 文档服务负责写入&#xff0c;包括批量&#xff1b;id获取文档&#xff1b;nested写入 写入文档 写入文档主要是构建IndexRequest&#xff0c;索引请求 Elasticsearch v8构建文档索引请求简单很多&#xff0c;可以直接接受Map数据 批量写入文档 批量操作可以融合增删改…

肥胖成因:饮食之外,消耗吸收慢是关键因素

肥胖问题一直被现代社会所关注&#xff0c;不可否认&#xff0c;饮食是影响胖瘦的重要因素之一。高热量、高油脂的食物摄入过多&#xff0c;也确实会导致热量油脂过剩&#xff0c;堆积储存进身体内进而养肥身体。可在正常情况中&#xff0c;就算是消耗吸收率一般的人&#xff0…

从源码看透 Ptmalloc:堆内存分配与释放的背后

&#x1f6f8;0. 前言 内存管理是个很复杂的东西&#xff0c;一般的程序员在写应用层代码的时候根本就不会关注内存的使用&#xff0c;尤其是 GC 语言自带垃圾回收机制&#xff0c;很多同学都使用过 C 语言中的 malloc&#xff0c;但很少有人能知道 malloc 其实是个很复杂的实现…

tomcat服务搭建部署ujcms网站

tomcat服务搭建部署ujcms网站 关闭selinux和防火墙 setenforce 0 && systemctl stop firewalld安装java环境 #卸载原有java8环境 yum remove java*#上传java软件包&#xff0c;并解压缩 tar -xf openjdk-11.0.1_linux-x64_bin.tar.gz && mv jdk-11.0.1 jdk11…

Android Perfetto 学习

1、如何抓取性能日志 方式1、通过手机里的System Tracing抓取 1、点击Settings->System->Developer options->System Tracing->Record trace 打开 2、操作完成后&#xff0c;点击Settings->System->Developer options->System Tracing->Record trace…

C++自动寻径算法

测试 #include <iostream> #include "source/AStar.hpp"int main() {AStar::Generator generator;generator.setWorldSize({25, 25});generator.setHeuristic(AStar::Heuristic::euclidean);generator.setDiagonalMovement(true);generator.addCollision({1, …

Vue 实现高级穿梭框 Transfer 封装

文章目录 01 基础信息1.1. 技术栈1.2. 组件设计a. 竖版设计稿b. 横版设计稿 02 技术方案&#xff08;1&#xff09;初定义数据&#xff08;2&#xff09;注意事项&#xff08;3&#xff09;逻辑草图 03 代码示例3.1. 组件使用3.2. 组件源码./TransferPlus/index.vue./TransferP…

爬虫----webpack

目录 一. 什么是webpack 出现的原因&#xff1a;同名函数 概念: 特征&#xff1a;大量缩进 webpack的格式 简单的webpack格式&#xff1a; 详细的webpack格式&#xff1a; 几个参数的运用 1. webpack数组形式 2. webpack对象格式 3.多个js文件打包 打印要扣的代码 …