KCNA 模拟考 A
在 Kubernetes 的声明式模型中,哪个最准确地描述了控制器的作用?
- 用户发送的命令按顺序排队并一一执行。
- 继续将期望状态与当前状态进行比较,并采取行动缩小差异。
- 验证清单后,仅保存传入 etcd 的清单并完成。
- 计算节点的资源余量以确定将 Pod 放置在哪个节点上。
Kubernetes 对象的spec 和status 字段之间的正确关系是什么?
- spec由控制平面填写,status由用户填写
- spec 写入用户所需的状态,status 写入系统观察到的当前状态。
- 规格和状态的结构是为了通过冗余存储相同的值来防止损坏。
- status 是终止记录的字段,仅在删除对象时填充。
哪一个仅与不属于命名空间(集群范围)的资源配对?
- 节点和持久卷
- ConfigMap 和 Secret
- 部署和 StatefulSet
- 角色和角色绑定
关于 kubelet 的职责,以下哪一项是正确的?
- 计算将 pod 放置在集群中的哪些节点上
- 将分配给其节点的 Pod 启动到容器运行时并向 apiserver 报告状态。
- 在节点上安装一条规则,将服务的虚拟IP更改为实际的Pod IP。
- 定期备份 etcd 中存储的对象。
什么最准确地描述了 kube-proxy?
- 这是一个用户空间代理进程,所有 Pod 流量都必须经过它。
- 监控Service对象并更新节点的数据包转发规则(iptables或IPVS)
- 它是一个 L7 路由器,通过查看来自外部的 HTTP 请求的路径来选择后端。
- 为 Pod 分配 IP 并在节点之间创建覆盖隧道
对 etcd 的正确描述是什么?
- 它是一个存储度量时间序列的时间序列数据库。
- 它是一个分布式缓存,其中每个节点仅单独存储其部分。
- 它是一个键值存储,通过 Raft 共识来保持一致性,并且是集群状态的唯一来源。
- 这是一个存储容器镜像层的内部注册表。
什么时候适合将多个容器放在一个 Pod 中?
- 当组合需要以不同间隔扩展的两个服务时,例如前端和数据库
- 当你必须同生共死时,像日志收集边车一样共享相同的卷和网络。
- 安装同一应用程序的两个副本,以便在发生故障时可以相互替换。
- 当不相关的任务被分组在一起以节省节点资源时
initContainer 的正确行为是什么?
- 与应用程序容器同时启动并并行处理准备任务
- 应用程序容器仅在每个按定义的顺序完成后启动。
- 每当应用程序容器死亡时,它都会再次一起运行以恢复其状态。
- 它是一个专用容器,总是比应用程序容器保留更多的资源。
如果我将 pod 的restartPolicy设置为Never,kubelet 会如何表现?
- 如果容器发生故障,它不会重新启动,并使 pod 处于 Failed 状态。
- 如果容器失败,删除 pod 并创建一个新的 pod
- 如果容器发生故障,它将以指数退避重新启动。
- 如果容器出现故障,请将 Pod 移至另一个节点并重试。
容器中的resources.requests实际使用在哪里?
- 当容器传递该值时,内核立即终止进程。
- 当调度器选择一个节点时,它作为与剩余可分配资源进行比较的标准。
- 它仅由自动缩放器用来确定 Pod 的数量,不用于放置。
- 当容器启动时,会提前确保足够的内存来填充页面。
CPU限制和内存限制的执行方法有什么区别?
- 当超出时,CPU 会受到限制;当超出内存时,进程会终止。
- 当 CPU 超过限制时,进程将终止,内存将受到限制。
- 如果两者都超出,则 pod 会被驱逐到另一个节点。
- 两者都只留下警告事件,并且实际上不会阻止任何内容。
如果将 ConfigMap 作为环境变量注入并更改 ConfigMap 的值,那么正在运行的 Pod 会发生什么情况?
- kubelet 更新环境变量,新值在下次请求时生效。
- Pod 自动重新启动以读取新值。
- 环境变量在进程启动时固定,因此它们保留旧值,直到重新创建 Pod。
- apiserver 拒绝更改,并且 ConfigMap 修改本身失败。
首先查看kubectl describe pod活动的最合适理由是什么?
- 这是因为事件包含由容器发送到 stdout 的应用程序日志。
- 这是因为Events记录了pod弹出失败的原因,比如调度失败、镜像拉取失败、探测失败等。
- 这是因为事件永久存储在 etcd 中,因此可以查看所有过去的历史记录。
- 这是因为您只能通过查看事件来了解分配给 pod 的 IP 和节点。
以下关于 Kubernetes API 组和版本表示法的哪一项是正确的?
v1指的是核心组,有时有一个组名称,例如apps/v1。- 所有资源都必须以
core/v1格式写入组名称。 - Alpha 版和完整版不能同时存在于同一个集群中
- API 版本始终与集群版本具有相同的编号。
CRD(CustomResourceDefinition)正确的做法是什么?
- 使用 API 注册新的资源类型,以便 kubectl 和 RBAC 将其视为默认资源。
- 还提供了注册资源的操作逻辑,无需单独的控制器。
- 通过覆盖现有资源的架构来添加或删除字段
- 代理集群外部的外部 API 以使用 kubectl 进行调用
kubectl连接到该集群时使用的信息包含在哪里?
- 节点上的
/var/lib/kubelet/config.yaml - 集群·用户·上下文是 kubeconfig 文件的三个部分。
- apiserver 发出的会话 cookie
- 1个环境变量
KUBERNETES_SERVICE_HOST
RBAC 中的 Role 和 ClusterRole 有什么区别?
- Role 只能有读权限,而 ClusterRole 也可以有写权限。
- Role仅在命名空间内有效,而ClusterRole也可以在集群范围的资源上使用。
- Role 只能链接到用户,ClusterRole 只能链接到 ServiceAccount。
- 立即应用角色,并在 apiserver 重新启动后应用 ClusterRole。
什么最准确地描述了 ServiceAccount?
- 这是集群管理员向某人颁发的登录帐户。
- 这是 pod 内的进程用来向 API 服务器证明自己的内部集群身份。
- 这是节点在控制平面注册时使用的引导证书。
- 它是一个专用对象,仅包含用于访问映像注册表的凭据。
Kubernetes 中需要 Service 的根本原因是什么?
- 这是因为每次重新创建 Pod 时 Pod IP 都会发生变化,因此需要固定的联系点。
- 这是因为 Pod 被阻止通过 IP 相互通信。
- 这是因为,如果 Pod 分散在多个节点上,则不可能进行跨节点通信。
- 由于 Pod 无法打开端口,因此只有 Services 可以打开端口。
ClusterIP·NodePort·LoadBalancer类型之间的正确关系是什么?
- 这三种类型是互斥的,所以如果你使用其中一种,其他功能就会丢失。
- NodePort在ClusterIP之上添加了一个节点端口,LoadBalancer在其之上添加了一个外部负载均衡器。
- LoadBalancer不创建ClusterIP,仅暴露外部IP
- NodePort 无法从集群内部访问,只能从外部使用。
哪个组件负责集群内的 DNS 名称解析?
- kube代理
- 核心DNS
- 等
- 库贝莱特
Kubernetes网络模型所需的正确条件是什么?
- 所有 Pod 必须能够通过彼此的 IP 进行通信,无需 NAT
- 只有同一节点上的 Pod 之间才能直接通信,跨节点时必须经过 NAT。
- Pod 必须与节点共享相同的 IP
- Pod 之间的通信必须始终通过 Service
PersistentVolume 的Retain召回政策是什么意思?
- 当 PVC 被删除时,PV 中的数据将被擦除并准备好再次绑定。
- 当删除 PVC 时,PV 和实际存储都会一起删除。
- 即使 PVC 被删除,PV 和数据仍然保留并保持在 Released 状态,直到管理员手动处理。
- 当PVC被删除时,会等待再次创建同名PVC,然后自动反弹。
使用 StorageClass 最合适的目的是什么?
- 当 PVC 请求传入时,让配置程序自动创建卷。
- 只需按性能级别对已创建的 PV 进行分类即可。
- 限制 PVC 在每个命名空间上可以请求的最大容量。
- 使用快照定期备份卷数据。
如果我应用相同的清单两次,为什么kubectl apply会产生相同的结果?
- 这是因为 apply 总是在执行之前删除现有对象并创建新对象。
- 这是因为发送了声明的最终状态,并且服务器仅反映与当前状态的差异。
- 这是因为 apiserver 会放置一个缓存,以便在检测到相同请求时忽略该请求。
- 这是因为 kubectl 在本地留下了先前运行的记录,从而跳过了第二次运行。
Kubernetes 标签和注释有什么区别?
- 可以使用选择器选择标签,注释包含不受选择影响的附加信息。
- 标签只能由人类读取,注释只能由控制器读取。
- 标签对值长度没有限制,注释的长度限制为 63 个字符。
- 标签创建后无法更改,但注释可以随时更改。
与没有编排器的时代相比,Kubernetes 承担了哪些新任务?
- 当一个节点死亡时,其上的工作负载将在另一个节点上重新启动。
- 查找并自动修复应用程序代码中的错误
- 维护声明的副本数量
- 逐步替换和分发新版本
如果Deployment中的maxSurge和maxUnavailable都设置为0怎么办?
- 这是最安全的设置,可确保不间断的部署。
- Kubernetes自动恢复默认值并正常运行。
- 删除所有旧 Pod 并立即创建新 Pod
- 无法继续推出,因为无法创建新 pod,也无法减少旧 pod。
kubectl rollout undo恢复到之前版本的依据是什么?
- 这是因为 Deployment 留下的 ReplicaSet 与 revisionHistoryLimit 一样多
- 这是因为 kubectl 将旧清单保留在本地磁盘上。
- 这是因为 etcd 无限期地存储所有对象的更改历史记录。
- 因为容器注册表会自动恢复以前的映像。
StatefulSet 和 Deployment 有什么区别?
- Pod 始终锚定到同一节点,并且永远不会移动到另一个节点。
- 水平扩展是不可能的,因为只能有一个副本。
- 卷无法写入,状态只能存在于内存中。
- Pod 名称从 0 开始按顺序固定,每个 Pod 继续携带自己的 PVC。
如果Job的completions设置为6,parallelism设置为2,它如何运行?
- 同时启动 6 个 Pod,只有 2 个成功。
- 两个 Pod 各重启 6 次
- 按顺序一一运行 6 个 Pod
- 继续一次轮换最多 2 个 Pod,直到成功的 Pod 总数达到 6 个。
CronJob中的concurrencyPolicy: Forbid是什么意思?
- 如果上一次运行尚未完成,则跳过本次运行。
- 强制退出之前的运行并开始新的运行
- 最多只允许同时执行两次。
- 如果计划重叠,后续执行将排队并按顺序运行。
关于将污点应用于节点时会发生什么,正确的是?
- 该节点上的所有 Pod 都会立即移动到另一个节点。
- 该节点将从集群中删除,并且 kubelet 已停止。
- 该节点上只允许使用 DaemonSet pod。
- 没有相应容忍度的 Pod 不会在该节点上重新调度。
nodeSelector 和affinity 之间的正确区别是什么?
- nodeSelector 是一个简单的条件,标签必须完全匹配,而affinity 允许您使用首选项条件和表达式。
- nodeSelector 处理 pod 之间的关系,affinity 处理与节点的关系。
- 调度程序可以忽略nodeSelector,并且必须尊重关联性。
- nodeSelector 还会移动已经运行的 pod,亲和力仅适用于新的 pod
HorizontalPodAutoscaler 正确的做法是什么?
- 根据观察到的值调整 Pod 的 CPU 和内存请求。
- 如果节点不够,则向云端请求额外的节点。
- 查看指标以增加或减少工作负载的副本数量
- 将 Pod 迁移到有空闲资源的节点
当 Pod 在 Pending 状态下不动时,最困难的原因是什么?
- 没有节点可以处理所请求的资源。
- PVC尚未绑定
- 容器应用程序一旦启动,就会发出错误并终止。
- 无法容忍节点污染
ImagePullBackOff该情况难以归因于什么?
- 图片名称或标签写得不正确。
- 它是一个私有注册表,但未添加 imagePullSecrets。
- 从节点到注册表的网络被阻止。
- 容器超出其内存限制并因 OOM 终止。
当 kubelet 由于节点上的内存压力而驱逐 pod 时,哪个优先级最高(首先被淘汰)?
- 保证 Pod 的请求和限制设置为相同
- 仅指定请求并指定更大限制的可突发 Pod。
- 未指定请求或限制的 BestEffort pod
- 驱逐顺序是随机确定的。
对于kubectl drain正确的做法是什么?
- 将节点标记为不可调度并安全弹出其上的 Pod
- 立即从集群中删除该节点并清除其 etcd 历史记录。
- 清除节点磁盘以清理图像缓存。
- 保持节点上的所有 Pod 完好无损,并且仅阻止新的 Pod
PodDisruptionBudget 保护的正确情况是什么?
- 当节点突然断电、pod消失时
- 当容器因 OOM 而死亡时
- 如果因为无法下载镜像而没有出现 Pod
- Pod 由于计划中断而大量消失,例如管理员疏散节点。
DaemonSet 最适合什么工作负载?
- 需要根据请求量增加或减少副本的Web API
- 每天仅在设定时间运行一次的结算批次
- 漂浮在每个节点上并收集该节点的日志和指标的代理。
- 需要序列号和专用卷的数据库集群
如果 Deployment 选择器和 Pod 模板标签不匹配会发生什么?
- 创建失败,因为 apiserver 拒绝验证。
- 创建了,但是selector找不到自己的pod,副本数量无限增加。
- Kubernetes 会自动调整模板标签以匹配选择器。
- 它运行正常,只留下警告并忽略选择器。
当我们说 Kubernetes “自我修复”应用程序时,到底是什么意思?
- 查找容器镜像中的漏洞并自动修补它们
- 如果请求失败,则会代表应用程序创建并返回响应。
- 如果数据库损坏,会自动从备份中恢复。
- 重新启动失败的容器并重新创建丢失的副本,将其返回到其声明的状态。
Helm 图表比一堆清单更好的原因在于它最准确?
- 您可以跟踪已安装的版本并恢复到以前的状态。
- 自动验证清单并纠正任何语法错误
- 包含容器映像,因此不需要注册表
- 当应用于集群时,会自动慷慨地创建 RBAC 权限。
关于 Kustomize 采用与 Helm 不同的方法,以下哪一项是正确的?
- 默认是从图表存储库下载并安装包。
- 仅当服务器组件安装在集群中时它才有效。
- 通过在原始 YAML 上重叠补丁来创建特定于环境的转换,而无需使用模板语言。
- 使用专用 DSL 而不是 YAML 描述资源
GitOps 中的“和解”是什么意思?
- 开发人员在管道中运行 kubectl apply 的步骤
- 通过合并多个开发人员的分支来解决冲突
- 部署后运行集成测试并报告结果
- 代理不断将 Git 声明与集群的实际状态进行比较,并反转差异。
蓝绿部署和金丝雀部署有什么区别?
- 蓝绿没有为新版本提供单独的环境,而金丝雀则运行两个环境。
- 蓝绿是不可逆的,只有金丝雀可以回滚。
- 蓝绿一次性转化流量,而金丝雀只发送部分流量到新版本,提高比例。
- Blue-Green只能用在有状态服务上,Canary只能用在无状态服务上。
如果您只创建了一个 Ingress 资源而没有发生任何事情,您的第一个怀疑是什么?
- 无法附加 Ingress,因为服务类型为 ClusterIP。
- Ingress 只能跨命名空间操作,因此不应放置在同一命名空间中。
- Ingress 仅支持 HTTPS,因此没有证书就无法工作。
- 集群中没有安装Ingress控制器
Gateway API 最适合解决哪个问题来补充 Ingress?
- Ingress 根本不支持 TLS 终止
- 一个集群中只能存在一个Ingress的问题
- 由于填写了 Ingress 无法使用特定于供应商的注释来表达的功能,因此破坏了可移植性。
- 仅以非 YAML 格式定义 Ingress 的问题
创建容器镜像时使用多阶段构建的主要原因是什么?
- 一次为多个架构创建映像
- 尝试强制使缓存无效以减少构建时间。
- 通过将映像层合并为一个来提高注册表兼容性
- 我想通过从最终映像中卸载构建工具和源来减小尺寸和攻击面。
CI 和 CD 角色之间最准确的区别是什么?
- CI是开发人员手动完成的集成,CD是它的自动化。
- CI负责分配运行环境,CD负责分配测试环境。
- CI 是关于频繁集成变更并自动构建和验证它们,而 CD 是关于将验证的输出导出到环境。
- CI和CD是同一个东西,只是根据工具不同名称不同。
为什么使用latest作为镜像标签在部署中会出现问题?
- Kubernetes 根本不下载带有最新标签的镜像
- 最新的标签会自动从注册表中删除。
- 使用最新标签会增加图像大小。
- 相同的标签在不同的时间指向不同的图像,因此无法知道哪个版本正在流传。
什么最准确地描述了操作员模式?
- 它指的是人们直接管理工作负载而不是 Kubernetes 的传统操作方法。
- 它是一种从一个控制台管理多个集群的商业产品的名称。
- 操作员之前重复的过程被编码到自定义资源和控制器中,以便集群可以执行它们。
- 这是一种在设定的时间运行在 pod 内执行的 shell 脚本的方法。
在设计自动扩展时,从云原生的角度来看,最重要的假设是什么?
- 当所有副本都聚集在同一节点上时,延迟会减少。
- 扩展标准必须仅是 CPU 利用率
- 扩展时必须重建应用程序
- 工作负载不应在实例内保留任何状态,因此任何副本都应该能够为请求提供服务。
无服务器模型最准确的特征是什么?
- 没有服务器,因此没有基础设施成本。
- 一个功能始终存在,因此即使是第一个请求也会立即处理。
- 服务器管理和容量规划由平台负责,并根据使用情况分配资源。
- 无法使用容器镜像,只能上传代码片段。
划分微服务时最合适的价格是多少?
- 每个服务的语言必须统一,减少技术选择的范围。
- 只部署一项服务是不可能的,因此必须一起部署所有服务。
- 由于数据库必须合并为一个,联盟就会变得更加强大。
- 以前的函数调用变成了网络调用,您总是必须处理失败和延迟。
CNCF 景观中项目成熟度阶段的正确顺序是什么?
- 孵化→沙盒→毕业
- 毕业→孵化→沙盒
- 沙盒→孵化→毕业
- 沙盒 → 毕业 → 孵化
开放标准在云原生生态系统中如此重要的最恰当原因是什么?
- 因为遵循标准总是会带来更快的性能。
- 因为如果有标准,就不存在安全漏洞。
- 因为符合标准的产品必须免费提供
- 即使实现发生变化,接口也是相同的,从而防止您与特定供应商绑定。
云原生架构中基于角色的访问控制(RBAC)最恰当的含义是什么?
- 加密网络流量以防止窃听
- 验证容器镜像的签名以确保其来源
- 通过在 API 级别强制执行最小权限原则来缩小侵权范围
- 在节点之间均匀分配负载
仅使用命名空间实现多租户有哪些限制?
- 创建多个命名空间会使集群性能降低一半。
- 如果命名空间不同,Pod 就无法通过网络进行通信。
- 每个命名空间都需要一个单独的 etcd 实例。
- 命名空间只是API对象的边界,但内核和节点仍然是共享的。