【探索 Kubernetes|容器基础进阶篇 系列 4】理解现代云原生时代的引擎

文章目录

  • 系列文章目录
  • 👹 关于作者
  • 一、前言|回顾
  • 二、静态和动态视图
  • 三、爆火的容器编排工具 Kubernetes 的诞生
  • 四、Kubernetes 要解决的问题是什么?
  • 五、理解 Kubernetes 全局架构图
    • Master(控制节点)
    • Node(计算节点)
      • Node 节点小结
  • 六、Kubernetes 设计思想
  • 七、Kubernetes 全景图
  • 总结
  • ✊ 最后
  • 参考

在这里插入图片描述

系列文章目录


【云原生|探索 Kubernetes-1】容器的本质是进程
【云原生|探索 Kubernetes-2】容器 Linux Cgroups 限制
【云原生|探索 Kubernetes 系列 3】深入理解容器进程的文件系统



👹 关于作者


大家好,我是秋意零。

😈 CSDN作者主页

  • 😎 博客主页

👿 简介

  • 👻 普通本科生在读
  • 在校期间参与众多计算机相关比赛,如:🌟 “省赛”、“国赛”,斩获多项奖项荣誉证书
  • 🔥 各个平台,秋意零 账号创作者
  • 🔥 云社区 创建者
点赞、收藏+关注下次不迷路!

欢迎加入云社区


一、前言|回顾

今天介绍的主题是:Kubernetes 的本质。文章有点长,希望大家能完整阅读完,并品味。

前面三篇文章中,我们介绍了容器的具体实现是怎么回事。通过前三篇文章,你应该能理解:一个 “容器”,首先是启用 Linux Namespace(名称空间)、配置 Linux Cgroups(限制)、使用 rootfs (根文件系统) 三种技术来实现容器进程的隔离。

二、静态和动态视图

1.容器基础核心技术是由三个技术实现的:Linux Namespace、 Linux Cgroups、rootfs 。一个正在运行的 Linux 容器 ,我们可以 “一分为二” 看待为静态和动态视图:

  • 静态视图: 一组联合挂载目录 /var/lib/docker/overlay2/<directory-of-running-container>/merged,这个是我们容器的 rootfs 根文件系统,也称为 “容器镜像”(Container Image),是容器的静态视图;
  • 动态视图: 使用 Namespace + Cgroups 技术构建的隔离环境,我们称为 “容器运行时”(Container Runtime),是容器的动态视图。

2.如果你是一名开发人员,我们只需要关心 “容器镜像”,而如果你是一名运维人员,你需要关心 “容器运行时”。软件开发流程:开发-测试-发布-运维,“容器镜像”(这里是开发部分)承载着容器信息的传递,而不是 “容器运行时”(这里是运维部分)。

  • 因为开发者只需要编写代码,代码跑起来程序正常运行就行,是属于 “容器镜像”部分;
  • 而运维者需要维护这个程序的生命周期,管理程序状态的,是属于 “容器运行时” 的部分

3.这里的价值在于:通过容器镜像将开发者关联起来,科技圈中 “得开发者得天下”

  • 开发者,负责将自己的程序代码打包为容器镜像;
  • 运维者或用户,将容器镜像运行为容器。

这样,容器从一个开发者当中的工具,一跃变成了云计算领域的绝对主角;

  • 而这里容器还不够有意义,更有意义的是 “容器编排”,因为单一的容器,到庞大的容器集群,从容器到容器云的飞跃,非常需要对容器进行编排管理;
  • 而能够定义容器组织和管理规范的 “容器编排” 技术,则会是容器技术领域的 “头把交椅”

三、爆火的容器编排工具 Kubernetes 的诞生

具有代表性的容器编排工具(这里主要介绍 Kubernetes):

  • Docker 公司的 Compose + Swarm 组合;
  • Google 和 RedHat 公司主导的 Kubernetes 项目。

Kubernetes 是由 Google 开源的容器编排系统,最初是基于 Google 内部的 Borg 系统(始于 2003 年)开发的。2014 年,Google 将 Kubernetes 作为开源项目发布,并将其交给了 Cloud Native Computing Foundation(CNCF)来管理和维护,使其成为一个全球性的开源项目。Kubernetes 的诞生是为了解决容器编排的问题,使得开发人员能够更轻松地管理和部署大规模容器化应用程序。

Google 公司的 Borg 系统和 Borg 论文密切相关。Borg 论文是由 Google 的工程师们在 2015 年 4 月发表的一篇论文,详细描述了 Borg 系统的设计、实现和应用场景。这篇论文对于后来 Kubernetes 的设计和发展产生了深远的影响。 因此,Borg 系统和 Borg 论文可以说是互相关联、相辅相成的。

Borg 系统要承担的责任,是承载 Google 公司整个基础设施的核心依赖。在 Google 整个基础设施技术栈的最底层。正是由于这个地位,Borg 可以说是 Google 最不可能开源的一个项目。而幸运的是,得益于 Docker 项目和容器技术的风靡,它却终于得以以另一种方式与开源社区见面,这个方式就是 Kubernetes 项目。

Kubernetes 项目在 Borg 体系的指导下,体现出了一种独有的 “先进性” 与 “完备性”。

在这里插入图片描述

四、Kubernetes 要解决的问题是什么?

容器编排?容器调度?容器集群管理?

但是实际上,随着社会和 Kubernetes 项目的不断发展,Kubernetes 需要解决的问题是不同的,所以没有一个标准答案,不过 Kubernetes 的诞生是为了解决容器编排的问题。

目前为止 Kubernetes 已经逐渐演进为云原生下的 ”操作系统”:

  • 操作系统一般有存储、网络、进程调度、设备管理、安全性管理、系统调用 API 等功能。所以类似操作系统一样 Kubernetes 也提供了的存储、网络、资源调度、设备管理、安全性管理、声明式 API。
  • 所以 Kubernetes 具有运维能力,比如自动化部署和扩展、高可用性和容错、水平扩展、服务发现和负载均衡、网络管理、存储管理、自动化滚动更新等。

所以 Kubernetes 解决的问题和所在的高度对比 Compose 、Swarm 是不一样的。

下图是 ChatGPT 回答的 “操作系统” 和 “Kubernetes(操作系统)” 功能对比图:

  • 在这里插入图片描述
  • 在这里插入图片描述

五、理解 Kubernetes 全局架构图

Kubernetes 项目依托 Borg 项目的理论优势,在短短几个月内迅速站稳了脚跟,进而确定了Kubernetes 全局架构图:

在这里插入图片描述
Kubernetes 架构是由 Master (控制节点)和 Node(计算节点) 两种节点组成:

Master(控制节点)

Master 控制节点,主要负责管理和控制整个集群的运行。

  • Master(控制节点):由三个独立的组件组成:kube-apiserver(提供 API 接口)、kube-apiserver(负责资源调度)、kube-controller-manager(负责容器编排控制)。整个集群的持久化数据,由 kube-apiserver 处理后交给 Etcd 键值对数据库保存。在这里插入图片描述

Kubernetes 没有把 Docker 作为整个框架的核心,而是把它作为做底层容器运行时实现。

Kubernetes 着重要解决的问题,则来自于 Borg 的研究人员在论文中提到的一个非常重要的观点:

  • 运行在大规模集群中的各种任务之间,实际上存在着各种各样的关系。这些关系的处理,才是作业编排和管理系统最困难的地方。

如:一个 Web 应用与后端数据库之间的访问关系,一个负载均衡器和它的后端服务之间的代理关系。

Node(计算节点)

Node(计算节点)承载容器的运行,负责运行容器的工作负载,并提供计算资源、容器运行时、容器网络、存储卷挂载等功能。

  • Node(计算节点):Node 节点中最核心的部分,是 kubelet 组件。

    • kubelet 主要负责和容器运行时打交道,这个交互依赖的是一个 CRI(Container Runtime Interface)容器运行时接口,这个接口是 Kubernetes 与容器运行时交互的标准接口,定义了容器运行的时候的各项核心操作,比如:容器的创建和销毁、容器的启动和停止。在这里插入图片描述
      在这里插入图片描述
      通过上图 ChatGPT 介绍,CRI 和容器运行时的关系是:CRI 是 Kubernetes 针对容器运行时的标准接口规范,定义了Kubernetes主节点和容器运行时之间的通信协议。而容器运行时则是实现这个规范的软件,用来启动、停止和管理容器的进程。容器运行时需要遵守 CRI 规范来与 Kubernetes 集群进行交互。


    这里需要说明的是:只要支持和 CRI 接口对接,就可以替换容器运行时和 Kubernetes 无缝集成,比如:Kubernetes 1.24.x 及以后的版本 ,Docker 项目已经不是 Kubernetes 的默认容器运行时了,而是 containerd,常见的容器运行时,可以看下图我在官网上截取的,更多信息参考官网)
    在这里插入图片描述

    • 容器运行时,通过 OCI 容器运行时规范和底层的 Linux 操作系统进行交互,把 CRI 请求翻译成对 Linux 系统的调用,对 Linux Namespace 和 Cgroups 操作等。
      在这里插入图片描述
    • kubelet 还通过 gRPC 协议与 Device Plugin 设备插件进行交互。这个插件是 Kubernetes 用来添加和管理 GPU、FPGA、网络适配器等宿主机物理设备的主要组件,也是 Kubernetes 项目进行机器学习训练、高性能作业支持等工作必须关注的功能,因为这些功能需要高算力的支持。提供给 Pod 使用(声明相应的 Device Request 来获取这些资源,并绑定到自己的容器中)。
    • kubelet 的另一个重要功能,是调用 CNI 容器网络接口(Container Networking Interface)和 CSI 容器存储接口(Container Storage Interface),分别为 Kubernetes 项目提供容器网络配置持久化存储
      这里目前不对 CNI 网络插件和 CSI 存储插件深入展开,这会是后续重要的内容。

Node 节点小结

Node 计算节点 kubelet 工作流程图:

  • kubelet 直接与 CRI(容器运行时接口)、Device Plugin (设备插件)、CNI(容器网络接口)、CSI(容器存储接口)交互:
    • CRI(容器运行时接口): CRI 向下走,与 Container Runtime(容器运行时)交互,容器运行时负责操作容器生命周期,再下走需要与 Linux 系统直接交互,来操作 Linux Namespace、Linux Cgroups 等。
    • Device Plugin(设备插件):Device Plugin 添加管理宿主机物理设备,如 GPU、FPGA(集成电路设备),下层是直接与 Linux 宿主操作系统交互,最终会将资源分配给容器
    • CNI(容器网络接口):CNI 与 Networking 交互,Networking 负责处理容器网络相关的功能和配置,Networking 与 Linux 系统交互。首先为容器创建一个网络接口(包括IP地址、子网掩码、网关等网络参数),其次配置网络路由(Linux 宿主机上设置,确保容器可以与其他网络节点进行通信),最后连接网络设备(与Linux宿主机上的网络设备进行交互,如:虚拟网络设备、配置VLAN)。
    • CSI(容器存储接口): 容器存储管理的标准接口,与存储提供商之间定义了一致的交互方式,这里与 Volume Plugin 卷插件交互,负责管理容器存储卷(提供具体功能),与 Linxu 宿主机交互,提供存储卷的挂载、卸载和管理等功能
      在这里插入图片描述

六、Kubernetes 设计思想

在传统虚拟机中,发现并不相关的应用被一股脑儿地部署在同一台虚拟机中(粗粒度),有了容器之后就是单独一个应用一个环境(粗粒度)。容器也是 “微服务” 思想得以落地的先决条件。

如果只做 “封装微服务、调度单容器” 这一层次,Docker Swarm + Compose 项目就能很好实现,并具备了处理一些简单依赖关系,如:一个 “Web 容器” 和它的后端数据库 “DB 容器” 之间的访问。

在 Compose 中,你可以使用 “link” 将这两个具有依赖关系的容器联系起来,这种 “link” 实际上是配置了两个容器之间的 /etc/hosts 文件。

  • 但是这种方案还是过去简单了,没有办法支持未来可能出现的更多种类的关系。架构一般是:追求项目的普适性,就一定要从顶层开始做好设计。

Kubernetes 项目最主要的设计思想是,从更宏观的角度,以统一的方式来定义任务之间的各种关系,并且为将来支持更多种类的关系留有余地。

Kubernetes 对容器间的 "访问“ 进行了分类,比如:Pod,它是 Kubernetes 中最基本的单元,Pod 中可以包含一个或多个容器,这些容器可以通过 locahost 进行频繁的交互和访问,也可以通过本地磁盘目录交换文件,因为一个 Pod 中它们的 Network Namespace 和数据卷是共享的,从而提高效率来交换信息。

需要注意的是:需要非常频繁的交互和访问,我们一般把这类容器放入到一个 Pod 中。

对于另外一种更为常见的需求,比如: Web 应用与数据库之间的访问关系,它们之间一般不会部署到一个 Pod 中或者说一台机器上,这样即使 Web 端 down 机了,数据库也不会受到影响,对于容器来说把当前运行的容器删除了,或者后端数据库做了高可用(前端也可以)IP地址会变化或后端 IP 地址很多,这种时候 Web 怎么和数据库连接呢?

  • Kubernetes 为这种情况提供了一个叫 ”Service“ 的服务。目前你可以把 Service 看作一个做负载均衡和服务发现的一个服务。Service 为我们提供了一个虚拟 VIP,我们访问这个与后端数据库关联的 VIP 地址,它就会为我们代理到后端的数据库上,并且支持负责均衡和服务发现(外部可以访问)。

七、Kubernetes 全景图

从 Servcie 服务可以看到,我们都是围绕着 Pod 去扩展和去提供服务的,我们可以看下图 Kubernetes 项目核心功能的“全景图”:在这里插入图片描述
从这副图中,我们可以看到 Pod 的地位是在最中心,所有的服务都是为 Pod 提供服务或者管理 Pod。

从容器这个最基础的概念出发,首先遇到了容器间 “紧密协作” 关系的难题,于是就有了 Pod;有了 Pod 之后,我们希望能一次启动或收缩多个应用的实例,这样就需要 Deployment 这个 Pod 的控制器;有了这样的控制器之后(一组相同的 Pod),就需要一个 VIP 来负载均衡和暴露服务访问它,这个时候就有了 Service。

这个时候还有一些问题,比如:Web 访问数据库时肯定时需要密码的,这个时候我们怎么安全的定义密码而不会以明文的方式暴露在外呢?

  • Kubernetes 提供了一个加 Secret 服务,它把键值对的数据保存在 Etcd 中,我们使用这个密码信息时,就要用到 Secret 里的数据以 Volume 的方式挂载到容器里。

Kubernetes 项目并没有像其他项目那样,为每一个管理功能创建一个指令,然后在项目中实现其中的逻辑。

  • 相比之下,在 Kubernetes 项目中,我们所推崇的使用方法是:
    • 首先,通过一个“编排对象”,比如 Pod、Job、CronJob、Deployment 等,来描述你试图管理的应用;
    • 然后,再为它定义一些“服务对象”,比如 Service、Secret、Horizontal Pod Autoscaler(自动水平扩展器)等。这些对象,会负责具体的平台级功能。

这种使用方法,就是所谓的 “声明式 API”。这种 API 对应的 “编排对象” 和 “服务对象”,都是 Kubernetes 项目中的 API 对象(API Object)。

总结

首先我们简单的回顾了一下前面章节的知识,理解静态视图和动态视图,了解开发和运维在容器中所承担的角色。

接着我们介绍了 Kubernetes 它和 borg 系统和论文之间的关系,这里也说明了 Kubernetes 诞生的基础,阐述了 Kubernetes 是为解决什么问题而诞生的。然后我们重点介绍了 Kubernetes 的全局架构图,从 Master 控制节点和 Node 计算节点展开。

最后我们说明了设计思想所站在的高度和其他项目有什么不同,同时阐述了 Kubernetes 之间的对象服务关系,分清楚 “编排对象” 和 “服务对象”,理解 Kubernetes 是管理 Pod 以及为 Pod 提供服务的。通过 Pod 我们应该能明白 Kubernetes 是可以想象成操作系统的,为 Pod 提供网络、存储、安全、等服务,而 Pod 则是我们这个系统中的应用程序。

✊ 最后


👏 我是秋意零,欢迎大家一键三连、加入云社区

👋 我们下期再见(⊙o⊙)!!!


参考

参考《深入剖析Kubernetes》作者 张磊

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

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

相关文章

究诸经典,探寻大模型演变之踪迹

编者按&#xff1a;在仅仅五年的时间里&#xff0c;大语言模型、transformers几乎完全改变了自然语言处理领域。 为了便于快速、扎实、深入地学习大语言模型&#xff0c;本文整理一个简单的经典学术资料列表&#xff0c;供正在入门中的机器学习研究人员和开发者参考。 以下是译…

从ChatGPT看爆火技术概念及医疗领域科技与应用场景

作者&#xff1a;京东健康 陈刚 一、前言 最近OpenAI在官网上宣告了多模态大模型 GPT-4 的诞生&#xff0c;它可能是迄今为止最好的多模态模型。 主要更新内容如下&#xff1a; 1. 逻辑分析能力更加全面、「考试」能力大幅提升 2. 拥有了 识图 能力&#xff0c;可以进行更多元…

ChatGPT生成的程序漏洞百出,程序员的饭碗算是保住了

自去年11月Chat GPT概念推出以来&#xff0c;瞬间风靡全球、热度不减&#xff0c;仅用不到两个月的时间就使月活跃用户数达到1亿。凭借1750亿左右的参数量和关注度创造了互联网应用程序的神话。 对于用户来讲&#xff0c;ChatGPT的出现引领传统互联网彻底迈入AI新时代。由于其在…

【ChatGPT追女孩子攻略】见招拆招

使用ChatGPT写情话可以带给我们很多乐趣和惊喜&#xff0c;这种技术可以为你的爱人创作一篇充满真情实感的情书。在使用这项技术时&#xff0c;首先要明确表达的主题和情感。 接着&#xff0c;向ChatGPT输入一些关于自己和恋人之间的故事或细节&#xff0c;让它能够更好地理解…

2023年的深度学习入门指南(2) - 给openai API写前端

2023年的深度学习入门指南(2) - 给openai API写前端 上一篇我们说了&#xff0c;目前的大规模预训练模型技术还避免不了回答问题时出现低级错误。 但是其实&#xff0c;人类犯的逻辑错误也是层出不穷。 比如&#xff0c;有人就认为要想学好chatgpt&#xff0c;就要先学好Pyth…

chatGPT解读(chatGPT前世今生之今生)

12期&#xff1a;chatGPT解读&#xff08;chatGPT前世今生之今生&#xff09; 验 关注该公众号 证 chatGPT解读 我们带着几个问题&#xff0c;一起去看看chatGPT吧。 上周讲了GPT-1&#xff0c;GPT-2&#xff0c; GPT-3的整体演化过程。那么&#xff0c;既然chatGPT是在…

2023年的深度学习入门指南(13) - 写后端

2023年的深度学习入门指南(13) - 写后端 我们前面学习了用python在本机上写前端&#xff0c;也学习了使用HTML在本机写前端。同理&#xff0c;我们可以写Windows应用&#xff0c;mac应用&#xff0c;iOS应用&#xff0c;Android应用等等以适合各种终端。其实&#xff0c;最通用…

小白的GPT入门指南 - 插件篇

前言 GPT爆火小半年了, 早在AI赛道布局的各大厂商也是纷纷宣布产品上线 度娘的 “文心一言” 腾讯的 “HunYuan” 阿里的 “通义” 华为 的“盘古” … 码哥也简单的体验了下已发布的几款AI模型, 实话实讲, 目前还是GPT的更智能一点, 不过GPT需要折腾的问题对小白有点不友好.…

《ChatGPT实用指南》在线版重磅发布,专为小白打造

文 / 高扬&#xff08;微信公众号&#xff1a;量子论&#xff09; 为方便大家阅读&#xff0c;我们对《ChatGPT实用指南》进行了重大改版&#xff0c;抛弃PDF版本&#xff0c;升级为在线阅读版&#xff0c;增加了大量实用的操作和详细的讲解&#xff0c;保证小白可以轻松上手&a…

面向Java开发者的ChatGPT提示词工程(5)

GPT 的局限性 当我们探讨开发大型语言模型应用程序时&#xff0c;必须认识到 GPT 存在一些局限性。这些限制对于我们保持清醒的头脑至关重要。 在 GPT 的训练过程中&#xff0c;虽然注入了大量知识&#xff0c;但它并不能完美地记住所有的信息&#xff0c;同时对这些知识的边…

chatgpt赋能python:Python就业薪资

Python就业薪资 Python是今天全球最受欢迎的编程语言之一&#xff0c;因为其容易的语法&#xff0c;高级工具&#xff0c;丰富的库&#xff0c;简洁的代码语言和易于编写的框架使它成为开发人员的首选语言。在今天的全球招聘市场中&#xff0c;Python开发人员很受欢迎&#xf…

chatgpt赋能python:Python就业需要什么学历?

Python就业需要什么学历&#xff1f; Python编程语言自问世以来&#xff0c;越来越受到IT行业的青睐。Python的广泛应用范围&#xff0c;良好的兼容性和易学易用的特点&#xff0c;让很多人选择从事Python相关工作。 那么&#xff0c;Python就业需要什么学历呢&#xff1f; 学…

人工智能ai在第四次工业革命中起到的作用

人工智能&#xff08;AI&#xff09;被认为是能够引领第四次工业革命的重要技术之一。AI 在许多领域具有广泛的应用潜力&#xff0c;包括自动驾驶、机器人技术、智能制造、医疗保健和能源等。通过AI的技术创新&#xff0c;我们可以实现更高效、更智能的生产方式&#xff0c;提高…

“无所不能”的 ChatGPT,正准备把各行各业打得满地找牙

如果有一天&#xff0c;你遇到的任何问题&#xff0c;都能通过搜索找到答案&#xff0c;那会是什么体验&#xff1f; 这个疯狂的现实正在离我们越来越近。 继AI绘画&#xff0c;AI编程搅得满城风雨后&#xff0c;美国的人工智能团队OpenAI最近又整了个大活—— 他们推出了一…

【ChatGPT】:告别单调对话,我带你体验

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ 解决算法&#xff0c;一个专栏就够了★ ★ 架…

太强了!ChatGPT能上传文件了,文档图片数据集秒理解,代码一键执行!

&#xff08;永久免费&#xff0c;扫码加入&#xff09; 梦晨 发自 凹非寺量子位 | 公众号 QbitAI ChatGPT又出试验型新模式&#xff0c;不少网友陆续收到代码解释器Alpha测试资格。 简单来说&#xff0c;这个模式提供两个功能&#xff1a;执行Python代码&#xff0c;接受文件上…

chatgpt赋能python:Python如何在图片上添加文字

Python如何在图片上添加文字 对于网站的SEO优化而言&#xff0c;图片上的文字也是非常重要的一环。而Python是一种常用的编程语言&#xff0c;可以通过一些Python库来在图片上添加文字。 PIL库介绍 PIL&#xff08;Python Imaging Library&#xff09;是Python中常用的图像处…

ChatGPT 太猖狂?OpenAI 欲打假并研发“文本水印”,网友吐槽:太“鸡肋”!

整理 | 苏宓 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 这到底是人干的&#xff0c;还是 AI 干的&#xff1f; 随着 AIGC 的爆火&#xff0c;在 ChatGPT、Stable Diffusion 模型的推动下&#xff0c;当下想要辨别我们所见的代码、图像、文章、小说、脚本、诗…

chatgpt赋能python:Python去除图片上的文字:技术与应用

Python去除图片上的文字&#xff1a;技术与应用 随着互联网的发展&#xff0c;图片的使用越来越广泛。然而&#xff0c;有些图片上却存在着不必要的文字&#xff0c;影响了用户的阅读体验和SEO效果。在这种情况下&#xff0c;Python可以帮助我们快速、准确地去除图片上的文字&…

软件安全设计(威胁建模实现)

目录 一、实验目的 二、实验软硬件要求 三、实验预习 四、实验内容&#xff08;实验步骤、测试数据等&#xff09; 实验步骤 确定安全目标 创建在线学习系统概况图 分解在线学习系统 确定威胁 威胁评估 确定威胁缓解计划或策略 验证和记录威胁 一、实验目的 熟悉软…