【Kubernetes】知识点总结6
59. 什么是CRD,它对K8s有什么重要意义?
答:CRD是K8s提供的一种扩展机制,允许用户通过自定义资源来创建自己的资源类型(就像Pod、Deployment、Service等资源),从而扩展K8s的API功能。
CRD扩展了K8s能力,使K8s不仅仅局限于原生的资源和功能,让K8s能管理和编排业务专属资源(如数据库实例、AI模型、网站托管等);使用户自定义的资源可通过K8s API、kubectl命令行、UI工具(如Dashboard)进行统一操作,降低管理复杂度;用户可结合自定义控制器(Controller)来实现自定义资源的自动化运维,如自动扩缩容等。大大提高了资源管理的灵活性。
60. CRD 的典型应用场景有哪些,举例说明。
答:典型应用场景:1、机器学习工作流管理,将机器学习训练、推理、模型管理等流程定义为K8s资源,实现端到端自动化。
2、CI/CD流水线定义;将代码构建、测试、部署的流水线逻辑定义为 K8s 资源,如定义Pipeline类型的CRD,通过控制器监听Pipeline资源变化,自动创建Pod执行各阶段任务,并将状态同步至CRD实例;
3、数据库即服务(DBaaS);将数据库实例的创建、扩缩容、备份、升级等操作抽象为 K8s 资源,用户只需执行一个yaml文件即可创建数据库,无需手动操作底层资源。
4、特定领域应用管理。如在物联网领域中,定义DeviceControllerCRD,包含设备连接协议(MQTT/CoAP)、数据采集频率、离线阈值等字段。控制器通过CRD配置自动创建边缘代理Pod,连接物联网设备、接收数据并转发至云端,同时在CRD状态中记录设备在线率、数据延迟等指标,实现物联网设备的K8s化管理。
61. 结合教材,解释CRD的完整创建和使用过程。
答:1)首先创建一个YAML文件来定义CRD;其中包含group:定义AP组,通常使用域名格式。versions:定义资源的版本。scope:定义资源的作用域,可以是Namespaced或Cluster。names:定义资源的名称、复数形式、单数形式和简称。
2)用kubectl apply -f 来创建1中定义的CRD;
3)创建并查看CR实例;
62. Gateway API有哪几个核心组件,分别有哪些作用?
答:1)GatewayClass:定义一组具有配置相同的网关,由实现该类的控制器管理。
2)Gateway:定义流量处理基础设施(例如云负载均衡器)的一个实例。
3)HTTPRoute:定义特定于 HTTP 的规则,用于将来自网关监听器的流量映射到后端网络端点的表示形式。这些端点通常表示为一个服务(Service)。
63. 说明PriorityClass是在解决K8s资源争用时的调度决策原理。
答:PriorityClass 通过数值优先级和抢占机制定义Pod的相对重要性(值的通常范围为0-10,000,000),当集群资源不足时,PriorityClass决定哪些Pod应该优先获得资源,并且高优先级Pod可以抢占低优先级Pod的资源。它是是非命名空间资源,是在集群级别定义的,在所有命名空间可见。它不能保证高优先级Pod一定能获得资源。
64. HPA是如何在K8s集群中实现自动扩缩容机制的?
答:HPA 通过 Metrics Server 等组件收集 Pod 的CPU、内存等指标,并根据当前指标值和目标值计算所需 Pod 数量,之后通过 Deployment 或 ReplicaSet 调整 Pod 副本数量,并在达到目标后持续监控指标,确保 Pod 数量始终满足需求。
65. 请谈谈Argo CD的核心架构组件有哪些,分别做简要说明。
答:1. Argo CD API Server:
-提供 RESTful API,用于与 Argo CD 交互。
-处理用户请求(如创建、更新、删除应用)。
-与 Kubernetes API 交互,管理集群资源。
2. Repository Server:
-负责从 Git 仓库中拉取配置(如 Helm Chart、Kustomize 配置)。
-将配置渲染为 Kubernetes 资源。
3. Application Controller:
-持续监控 Git 仓库和 Kubernetes 集群的状态。
-确保集群中的资源与 Git 中的期望状态一致。
-执行同步操作(Sync)和修复操作(Self-Healing)。
4. Redis:-用于缓存数据,提高性能。
5. User Interface (UI):
-提供 Web 界面,方便用户查看应用状态、执行操作。
-支持可视化展示应用的部署状态、健康状态和同步状态。
-执行同步操作(Sync)和修复操作(Self-Healing)。