k8s中资源的介绍及标准资源namespaces实践

文章目录

  • 第1章 k8s中的资源(resources)介绍
    • 1.1 k8s中资源(resouces)的分类
    • 1.2 k8s中资源(resources)的级别
    • 1.3 k8s中资源(resources)的API规范
    • 1.4 k8s中资源(resources)的manifests
  • 第2章 k8s中的标准资源之namespaces的实践
    • 2.1 基本介绍
    • 2.2 编写相关ns资源对象的manifests
    • 2.3 应用相关ns资源对象的manifests
    • 2.4 列出相关ns资源对象
    • 2.5 ns资源对象的name
    • 2.6 ns资源对象的labels
    • 2.7 列出ns资源对象中已有非namespace级别的资源对象
    • 2.8 ns资源对象的删除
  • 第3章 基于ns资源对象实践理解Label的管理

第1章 k8s中的资源(resources)介绍

1.1 k8s中资源(resouces)的分类

我们用 kubectl api-resources 可看到其 kubernetes 中的所有资源(当然kubectl所用的kubeconfig所承载的帐户得具备超级权限)。

root@master01:~# kubectl api-resources | head -4   # 只取了前4行
NAME                 SHORTNAMES  APIVERSION NAMESPACED   KIND
bindings                         v1         true         Binding
componentstatuses    cs          v1         false        ComponentStatus
configmaps           cm          v1         true         ConfigMap

这些资源可分为标准资源(安装好kubernetes后就有)、非标准资源(扩展kubernetes后才有),我们可用 kubectl get crd 看到有哪些非标准资源,其结果 NAME 字段对应值以点号"."分隔的第一列就是其资源的name。

root@master01:~# kubectl get crd | head -4        # 只取了前4行
NAME                                         CREATED AT
analysisruns.argoproj.io                     2025-04-23T02:32:30Z
analysistemplates.argoproj.io                2025-04-23T02:32:30Z
applications.argoproj.io                     2025-04-19T17:46:46Z
root@master01:~#
root@master01:~# kubectl api-resources | grep -w applications
applications       app,apps     argoproj.io/v1alpha1     true   Application

1.2 k8s中资源(resources)的级别

不管是标准资源、非标准资源,它们要么是namespace级别、非namespace级别(也称cluster级别)。可从 kubectl api-resources 结果的 NAMESPACE字段中看到,也可用 kubectl api-resources --namespaced=true/false 列出所有namespace级别或非namespace级别的资源

## kubectl工具看某个资源属于什么级别
root@master01:~# kubectl api-resources  | grep -w Namespace 
namespaces   ns   v1    false        Namespace    # <== false表示 非namespace级别
root@master01:~# 
root@master01:~# kubectl api-resources | grep -w Pod
pods        po    v1    true         Pod          # <== true表示 namespace级别## kuectl工具列出所有namespace级别或所有非namespace级别的资源
kubectl api-resources --namespaced=true 
kubectl api-resources --namespaced=false

注意:namespace级别的资源其实例化出来的对象得放在已存在的ns资源对象(由Kind为Namespace的资源namespaces实例化出来的)中。

1.3 k8s中资源(resources)的API规范

我们可用以下方法获取标准资源、非标准资源类的某资源其API规范中有哪些一级字段。

## 参考
root@master01:~# kubectl api-resources | head -1
NAME        SHORTNAMES       APIVERSION     NAMESPACED      KIND## 规范的
# <== 格式
kubectl explain --api-version='<APIVERSION>' <KIND># <== 例如
kubectl explain --api-version='v1' Pod## 简化的
# <== 格式
kubectl explain  <KIND># <== 例如
kubectl explain  Pod

标准资源、非标准资源其API规范一定会有apiVersion、kind、metadata这三个一级字段,在编写其对象的manifests是得写上。
大多数资源其API规范中有spec这个一级字段,用于定义期望状态,在编写其对象的manifests时得写上。
标准资源、非标准资源的API规范一定会有status这个一级字段,在编写其对象的manifests时不用写。当对象创建后其status是由其spec转换而来(期望状态转换成实际状态)。
我们也可以查看某资源其API规范中一级字段下有哪些二级字段,二级字段有哪些三级字段。如下所示。

## 规范的
kubectl explain --api-version='<APIVERSION>' <KIND>                       # 可看到有哪些一级字段
kubectl explain --api-version='<APIVERSION>' <KIND>.某一级字段             # 可看到有哪些二级字段
kubectl explain --api-version='<APIVERSION>' <KIND>.某一级字段.某二级字段   # 可看到有哪些三级字段 ## 简化的
kubectl explain                              <KIND>                       # 可看到有哪些一级字段
kubectl explain                              <KIND>.某一级字段             # 可看到有哪些二级字段
kubectl explain                              <KIND>.某一级字段.某二级字段   # 可看到有哪些三级字段 

前面提到

namespace级别的资源其实例化出来的对象得放在某ns资源对象(由Kind为Namespace的资源namespaces实例化出来)中。

那么所以

namespace级别的资源其API规范中metadata字段下的namespace字段,在编写manifests时得指定。
非namespace级别的资源其API规范中metadata字段下的namespace字段,在编写manifests时不用指定,指定也没用的。

# namespace级别的资源其API规范中metadata字段下的namespace字段,在编写manifests时得指定。
root@master01:~# kubectl explain Pod.metadata.namespace         # 在编写manifests时得指定# 非namespace级别的资源其API规范中metadata一级字段下的namespace字段,在编写manifests时不用指定,指定也没用的。
root@master01:~# kubectl explain Namespace.metadata.namespace   # 在编写manifests时不用指定

1.4 k8s中资源(resources)的manifests

资源实例化出对象

可以使用kubectl工具在命令行直接创建(默认只支持使用相应的标准资源),但这种方式不推荐(若要在线修改呢、若被删除了且在没备份的情况下你如何快速恢复呢)。
也可以根据其API规范编写manifests,其manifests可以放在一个文件中,这个文件中可以存在多个不同类型的资源对象的manifests,得用三个横杠(—)独占一行进行分隔,这个文件中的内容其格式要么是json/yaml,其文件的扩展名也得是json/yaml,推荐内容格式为yaml,文件扩展名为yaml,易于人类可读。最后可用kubectl apply -f /path/xxx.yaml -f /path/yyy.yaml 或 cd /path/ && kubectl apply -f . 或 kubectl apply -f /path/ 进行应用(不存在就创建,存在就更新其差异的,有些字段是不可在线更新的)
在版书时可用 “资源的类型/所实例化出对象的name”来表示一个对象,如下所示

Namespace/a
Namespace/b

前面提到

标准资源、非标准资源都有namespace级别、非namespace级别(也称cluster级别),均有一级字段之metadata字段,而metadata字段下的name字段是必须指定的。

那么所以

非namespace级别的某资源所实例化出来的对象不允许重名,不同资源间所实例化出来的对象是允许重名的。如下所示:

Namespace/a#      # 若存在#   kubectl工具命令行再创建Namespace/a,不允许,直接报错。#   kubectl工具apply -f Namespace/a <其manifests所在的文件>,其实是#       更新(有些字段是不允许更新的,例如metadata.name,有些字段更新后的影响你得心中有数)#   
PersistentVolume/a   # # 若存在#   kubectl工具命令行再创建PersistentVolume/a,不允许,直接报错。#   kubectl工具apply -f PersistentVolume/a <其manifests所在的文件>,其实是#      更新(有些字段是不允许更新的,例如metadata.name,有些字段更新后的影响你得心中有数)# 

namespace级别的某资源所实例化出来的对象不能在所指定 ns 中与现有某资源对象重名,可与非指定ns中现有某资源对象重名。

Namespace/a 对象中Deployment/a # 若存在#   kubectl工具命令行再创建Deployment/a,不允许,直接报错。#   kubectl工具apply -f Deployment/a <其manifests所在的文件>,其实是#       更新(有些字段是不允许更新的,例如metadata.name,有些字段更新后的影响你得心中有数)#   Service/a# 若存在#   kubectl工具命令行再创建Service/a,不允许,直接报错。#   kubectl工具apply -f Service/a <其manifests所在的文件>,其实是#       更新(有些字段是不允许更新的,例如metadata.name,有些字段更新后的影响你得心中有数)#   Namespace/b 对象中Deployment/a## 若存在,跟 Namespace/a 中的 Deployment/a 没有任何关系#   kubectl工具命令行再创建Deployment/a,不允许,直接报错。#   kubectl工具apply -f Deployment/a <其manifests所在的文件>,其实是#       更新(有些字段是不允许更新的,例如metadata.name,有些字段更新后的影响你得心中有数)#  Service/a## 若存在,跟 Namespace/a 中的  Service/a 没有任何关系#   kubectl工具命令行再创建Service/a,不允许,直接报错。#   kubectl工具apply -f Service/a <其manifests所在的文件>,其实是#       更新(有些字段是不允许更新的,例如metadata.name,有些字段更新后的影响你得心中有数)#   

第2章 k8s中的标准资源之namespaces的实践

2.1 基本介绍

namespaces资源(简写ns)是kubernetes中的标准资源,属于非namespace级别,其实例化出来的对象用于逻辑存放namespace级别资源所实例化出来的对象。
当ns资源对象被删除后,其里面所包含的非namespace级别资源所实例化出来的对象也会被删除。得小心哦。

2.2 编写相关ns资源对象的manifests

我们应该让各ns资源对象的manifests独占一个文件。因为在删除资源对象时可以使用kubectl delete -f <文件> 来删除,当ns资源对象被删除后,其里面所包含的非namespace级别资源所实例化出来的对象也会被删除。

ns/dev-wyc对象的manifests,手动编写

cat >./ns_dev-wyc.yaml<<'EOF'
apiVersion: v1
kind: Namespace
metadata:name: dev-wyclabels:env: dev proj: wyc
EOF

ns/test-wyc对象的manifests,手动编写

cat >./ns_test-wyc.yaml<<'EOF'
apiVersion: v1
kind: Namespace
metadata:name: test-wyclabels:env: testproj: wyc
EOF

ns/prod-wyc对象的manifests,手动编写

cat >./ns_prod-wyc.yaml<<'EOF'
apiVersion: v1
kind: Namespace
metadata:name: prod-wyclabels:env: prodproj: wyc
EOF

ns/uat-wyc对象的manifests,kubectl工具快速生成

kubectl create namespace uat-wyc --dry-run=client -o yaml >./ns_uat-wyc.yaml
ls -l ./ns_uat-wyc.yaml## 命令行快速生成ns资源对象的manifests,并保存于一个文件中。# 命令行无法指定ns/uat-wyc对象的相应label(不是必须的,可命令行添加,也可编辑文件后并保存)。# PS:我这里没有修改,主要是与后面的步骤有关联#

2.3 应用相关ns资源对象的manifests

应用ns_dev-wyc.yaml这个manifests

# -->检查语法
kubectl apply -f ./ns_dev-wyc.yaml --dry-run=client
# -->应用manifests
kubectl apply -f ./ns_dev-wyc.yaml
# -->列出manifests中的相关资源对象
kubectl get   -f ./ns_dev-wyc.yaml
# -->列出ns/dev-wyc对象
kubectl get   ns/dev-wyc
# -->列出所有的ns资源对象,并根据labels过滤,且显示所有labels
kubectl get   ns -l kubernetes.io/metadata.name=dev-wyc --show-labels

应用ns_test-wyc.yaml这个manifests

kubectl apply -f ./ns_test-wyc.yaml --dry-run=client
kubectl apply -f ./ns_test-wyc.yaml
kubectl get   -f ./ns_test-wyc.yaml
kubectl get   ns/test-wyc
kubectl get   ns -l kubernetes.io/metadata.name=test-wyc --show-labels

应用ns_prod-wyc.yaml这个manifests

kubectl apply -f ./ns_prod-wyc.yaml --dry-run=client
kubectl apply -f ./ns_prod-wyc.yaml
kubectl get   -f ./ns_prod-wyc.yaml
kubectl get   ns/prod-wyc
kubectl get   ns -l kubernetes.io/metadata.name=prod-wyc --show-labels

应用ns_uat-wyc.yaml这个manifests

kubectl apply -f ./ns_uat-wyc.yaml --dry-run=client
kubectl apply -f ./ns_uat-wyc.yaml
kubectl get   -f ./ns_uat-wyc.yaml
kubectl get   ns/uat-wyc
kubectl get   ns -l kubernetes.io/metadata.name=uat-wyc --show-labels
# --> 命令行给其打上相应的标签。规范的是修改其manifests,再应用manifests,这里只是引出命令行如何给某资源对象打Label
kubectl label Namespace uat-wyc env=uat proj=wyc
# --> 再通过相应标签进行查看
kubectl get   ns -l kubernetes.io/metadata.name=uat-wyc --show-labels

2.4 列出相关ns资源对象

列出所有的ns资源对象

## 格式
kubectl get <某资源的kind>## 示例
kubectl get Namespace

列出已存在的一个或多个ns资源对象

## 格式1
kubectl get <某资源的kind>  <对象name>   [对象name]## 格式2
kubectl get <某资源的kind>/<对象name>    [某资源的kind]/[对象的name]## 格式1示例
kubectl get Namespace   dev-wyc  test-wyc  uat-wyc  prod-wyc## 格式2示例
kubectl get Namespace/dev-wyc Namespace/test-wyc  Namespace/uat-wyc  Namespace/prod-wyc

通过标签列出wyc项目相关的ns资源对象

# 列出wyc项目相关的所有ns资源对象
kubectl get ns -l proj=wyc# 列出dev环境之wyc项目所用的ns资源对象
kubectl get ns -l env=dev,proj=wyc   # 指定多个标签进行过滤,当有多个时,用逗号分隔,且是与(and)关系# 列出test环境之wyc项目所用的ns资源对象
...................................# 列出uat环境之wyc项目所用的ns资源对象
...................................# 列出prod环境之wyc项目所用的ns资源对象
...................................

2.5 ns资源对象的name

非namespace级别的某资源所实例化出来的对象不能重名,不同资源间所实例化出来的对象是可以重名的。
namespace级别的某资源所实例化出来的对象不能在所指定 ns 中与现有某资源对象重名,可与非指定ns中现有某资源对象重名。
kubernetes中所有资源对象的name规范均遵循一定的规范:

https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/names/#names

ns资源对象的name规范得遵循 RFC 1123。
在这里插入图片描述

2.6 ns资源对象的labels

kubernetes中的各资源对象均有 labels 这一属性,属于元数据(metadata)的一部分,支持在线更新,我们不能随便在线更新。
各ns资源对象具备默认的标签之 app.kubernetes.io/instance=<ns资源对象的name> ,我们可以给ns资源对象额外的添加 labels。
有些场景下,ns资源对象可能需要打上特定的标签,例如:Istio部署到kubernetes平台上,其业务所用标签就得打上 Istio 所规定的标签。

2.7 列出ns资源对象中已有非namespace级别的资源对象

首先,kubectl -n <ns资源对象> get all 看不全 <ns资源对象> 中包含的所有已有非namespace资源所实例化出来的对象,即使kubernetes中的标准资源。

## 查看 ns/uat-wyc 对象中所包含的所有资源对象,(不严谨) 
root@master01:~# kubectl -n uat-wyc get all
No resources found in uat-wyc namespace.
root@master01:~# ## 可用以下命令查看某 ns资源对象 中所包含的所有资源对象 (严谨)
# <== 列出namespace级别所有resources,并取其KIND字段的值
kubectl api-resources --verbs=list --namespaced=true | awk -F " " '{print $NF}' | sed 1d# <== 列出某ns资源对象中所包含namespace级别资源的相关资源对象
kubectl api-resources --verbs=list --namespaced=true | awk -F " " '{print $NF}' | sed 1d  | \xargs -n 1  kubectl -n <ns资源对象>  get --show-kind  --ignore-not-found# <== 再进一步处理
kubectl api-resources --verbs=list --namespaced=true | awk -F " " '{print $NF}' | sed 1d  | \xargs -n 1  kubectl -n <ns资源对象>  get --show-kind  --ignore-not-found |  \sed '/^NAME/'d# <== 再进一步处理
kubectl api-resources --verbs=list --namespaced=true | awk -F " " '{print $NF}' | sed 1d  | \xargs -n 1  kubectl -n <ns资源对象>  get --show-kind  --ignore-not-found |  \sed '/^NAME/'d | \awk -F " " '{print $1}'

2.8 ns资源对象的删除

第3章 基于ns资源对象实践理解Label的管理

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

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

相关文章

优化uniappx页面性能,处理页面滑动卡顿问题

问题&#xff1a;在页面遇到滑动特别卡的情况就是在页面使用了动态样式或者动态类&#xff0c;做切换的时候页面重新渲染导致页面滑动卡顿 解决&#xff1a;把动态样式和动态类做的样式切换改为通过获取元素修改样式属性值 循环修改样式示例 bannerList.forEach((_, index)…

DeepSeek赋能Nuclei:打造网络安全检测的“超级助手”

引言 各位少侠&#xff0c;周末快乐&#xff0c;幸会幸会&#xff01; 今天唠一个超酷的技术组合——用AI大模型给Nuclei开挂&#xff0c;提升漏洞检测能力&#xff01; 想象一下&#xff0c;当出现新漏洞时&#xff0c;少侠们经常需要根据Nuclei模板&#xff0c;手动扒漏洞文章…

leetcode - 字符串

字符串 466. 统计重复个数 题目 定义 str [s, n] 表示 str 由 n 个字符串 s 连接构成。 例如&#xff0c;str ["abc", 3] "abcabcabc" 。 如果可以从 s2( )中删除某些字符使其变为 s1&#xff0c;则称字符串 s1( )可以从字符串 s2 获得。 例如&#xf…

Java求职者面试:从Spring Boot到微服务的技术深度探索

场景&#xff1a;互联网大厂Java求职者面试 角色介绍&#xff1a; 面试官&#xff1a;技术精湛&#xff0c;负责把控面试质量。谢飞机&#xff1a;搞笑的程序员&#xff0c;偶尔能答对问题。 第一轮&#xff1a;基础知识 面试官&#xff1a;谢飞机&#xff0c;你能简要介绍…

榕壹云国际版短剧系统:基于Spring Boot+MySQL+UniApp的全球短剧创作平台

一、项目背景与简介 在短视频行业高速发展的今天&#xff0c;短剧内容已成为全球用户娱乐消费的新宠。为满足市场对高质量、多样化短剧的需求&#xff0c;我们基于Spring Boot MySQL UniApp技术栈开发了榕壹云国际版短剧系统&#xff0c;这是一款面向全球市场的短剧创作与分…

资料分享!瑞芯微RK3506(3核ARM+Cortex-A7 + ARM Cortex-M0)工业评估板硬件资料

前 言 本文主要介绍TL3506-EVM评估板硬件接口资源以及设计注意事项等内容。 RK3506J/RK3506B处理器的IO电平标准一般为1.8V、3.3V,上拉电源一般不超过3.3V或1.8V,当外接信号电平与IO电平不匹配时,中间需增加电平转换芯片或信号隔离芯片。按键或接口需考虑ESD设计,ESD器…

C#通过NTP服务器获取NTP时间

C#通过NTP服务器获取NTP时间 注意事项&#xff1a; 如果NTP服务器地址是域名&#xff0c;如阿里云的NTP服务器地址。需要DNS解析。NTP使用UDP通讯&#xff0c;默认端口是123NTP经过很多年的发展&#xff0c;有4个版本号&#xff0c;目前常用的3和4。NTP区分客户端和服务端&am…

使用cmd来创建数据库和数据库表-简洁步骤

创建数据库和表&#xff1a; 1. 按WinR打开“运行”&#xff0c;输入cmd&#xff0c;回车 2. 登录数据库&#xff1a;mysql -u root -p 然后输入密码 3. 创建数据库create database myblog; myblog为数据库名(自定义你的数据库名) &#xff01;注意分号不要漏了&#xff01; …

java工具类

LocalDateTime LocalDateTime可以获取当前时间&#xff1a; LocalDateTime now LocalDateTime.now(); 同时他也可以获取指定时间&#xff1a; LocalDateTime dateTime LocalDateTime.of(2023, 5, 15, 10, 30) 若我们时间值超出了我们的实际情况值&#xff0c;我们将会出现…

02_java的运行机制以及JDKJREJVM基本介绍

1、运行机制 2、JDK&JRE&JVM JDK 基本介绍 &#xff08;1&#xff09; JDK 的全称(Java Development Kit Java开发工具包) JDK JRE java的开发工具 [ java, javac, javadoc, javap等 ] &#xff08;2&#xff09;JDK是提供给Java开发人员使用的&#xff0c;其…

【文心快码】确实有点东西!

这里写自定义目录标题 背景 Electron 开发 Markdown 编辑器全记录提问1&#xff1a;提问2&#xff1a;提问3&#xff1a;提问4&#xff1a;完整项目结构总结 背景 前两天百度在2025 百度AI开发者大会"如何驾驭Coding Agent分会场"上发布了文心快码&#xff0c;注册试…

AI心理健康服务平台项目面试实战

AI心理健康服务平台项目面试实战 第一轮提问&#xff1a; 面试官&#xff1a; 请简要介绍一下AI心理健康服务平台的核心技术架构。在AI领域&#xff0c;心理健康服务的机遇主要体现在哪些方面&#xff1f;如何利用NLP技术提升用户与AI的心理健康对话体验&#xff1f; 马架构…

Win10安装 P104-100 驱动

安装完之后总结一下, 之前做了不少功课, 在网上搜了很多教程, 视频的文字的, 但是很多已经比较陈旧了. 最后发现的这个 GitHub 项目 NVIDIA-patcher 是最有用的, 因为这是现在这些魔改驱动的来源. NVIDIA-patcher 仓库地址: https://github.com/dartraiden/NVIDIA-patcher 安…

把一个 PyTorch 的图像张量转换成 NumPy 格式,并按照正确的维度顺序显示出来

示例代码&#xff1a; plt.imshow(np.transpose(tensor_denorm.numpy(), (1, 2, 0)))它的作用是&#xff1a;把一个 PyTorch 的图像张量转换成 NumPy 格式&#xff0c;并按照正确的维度顺序显示出来。 &#x1f680; 一步步解释&#xff1a; ✅ tensor_denorm 这是一个形状为…

【速写】conda安装(linux)

序言 昨天叶凯浩空降&#xff08;全马241&#xff09;&#xff0c;降维打击&#xff0c;10分24秒断层夺冠。 夏潇阳10分53秒绝杀小崔10分54秒第2&#xff0c;小崔第3&#xff0c;均配都在3’30"以内&#xff0c;即便我是去年巅峰期也很难跑出这种水平。我就知道他去年大…

算法题(135):唯一的雪花

审题&#xff1a; 本题需要我们对于每一组数据都找出最大的包裹大小 思路&#xff1a; 本题解析题目意思后我们可以把雪花的编号当成数组中元素的值&#xff0c;把包裹看成一个区间。 本质上就是让我们找出一组数据中&#xff0c;所有子段中最长的子段。 方法一&#xff1a;暴力…

算法习题-力扣446周赛题解

算法可以调度思维&#xff0c;让程序员的思维发散&#xff0c;找到更好的解决方案。 第一题&#xff1a;执行指令后的得分 题目&#xff1a; 给你两个数组&#xff1a;instructions 和 values&#xff0c;数组的长度均为 n。你需要根据以下规则模拟一个过程&#xff1a; 从下标…

Ubuntu下MySQL的安装

Ubuntu下MySQL的安装 1. 查看当前操作系统版本2. 添加MySQL APT源2.1 访问下载页面&#xff0c;并下载发布包2.2 执行安装指令2.3 安装MySQL 3. 查看MySQL状态4. 设置开机自启动 1. 查看当前操作系统版本 通过命令lsb_release -a查看&#xff1a; 2. 添加MySQL APT源 2.1 访问下…

航顺 芯片 开发记录 (一) 2025年4月27日19:23:32

芯片型号: HK32F030MF4P6 第一步:创建工程目录 inc :头文件目录 MDK-ARM : 工程根目录 (新建工程选择该目录) src :相关资源存放位置 官方函数库相关内容 官方函数库大致结构图 ├─HK32F030MLib ├─CMSIS │ ├─CM0 │ │ └─Core │ │ arm_common_table…

Python 数据可视化进阶:精准插入图表到指定 Excel 工作表

Python 数据可视化进阶&#xff1a;精准插入图表到指定 Excel 工作表 在处理数据的过程中&#xff0c;我们常常需要将生成的图表精准地插入到已存在数据的 Excel 文件的指定工作表中。借助 Python 的强大库组合&#xff0c;这一操作得以高效实现。以下是经过优化和注释补充的代…