Kubernetes(简称 K8s)是当前事实标准的容器编排平台,由 Google 基于内部 Borg/Omega 系统的经验设计,2015 年捐赠给云原生计算基金会(CNCF),2018 年成为 CNCF 首个毕业项目。它解决的核心问题是:当容器数量从几台机器上的十几个增长到跨数据中心的上万个时,如何自动完成部署、扩缩容、故障自愈、服务发现与滚动更新。Kubernetes 的核心思路是“声明式 API + 控制循环”:用户描述期望状态(例如“运行 10 个 Nginx 副本”),系统持续对比期望与现实的差异并自动收敛,运维人员不再逐个操作容器。 本文按“速览 → 安装 → 上手 → 原理 → 生产 → 选型 → 场景 → 误区 → 面试”的顺序组织,帮助你从零跑通本地集群,并理解生产环境部署与运维的关键决策点。

岗位关联

对 AI 从业者而言,Kubernetes 是把模型服务从“能跑”推向“能上线”的必修课:GPU 调度、推理服务弹性伸缩、训练与微调任务编排、多集群容灾都建立在容器编排能力之上。

目录
  1. 为什么需要 Kubernetes:从手工管容器到声明式编排
  2. 安装与环境配置:4 步就绪
  3. 快速上手:15 分钟跑通部署、发布与扩容
  4. 核心能力详解:5 大支柱
  5. 生产部署与监控:从上线到运维
  6. 版本迭代
  7. AI 应用场景
  8. 常见误区
  9. 面试题
  10. 参考来源
工具类型
容器编排平台(开源)
开发商
CNCF(云原生计算基金会)·源自 Google Borg
开源协议
Apache License 2.0
GitHub Stars
无
主要语言
Go
当前版本
v1.33(2025-04 发布)
安装方式
kubectl + kind / minikube / kubeadm,或云厂商托管集群
下载地址
官方文档
上手难度
★★★★☆(较高)
适合人群
平台/SRE/DevOps 工程师·AI 基础设施团队
同类工具
Docker Swarm · HashiCorp Nomad · Amazon ECS

速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。

为什么需要 Kubernetes:从手工管容器到声明式编排

当容器数量只有几十个时,docker run 加几段脚本勉强能管;一旦超过这个规模,就会出现一连串问题:进程崩溃无人拉起、流量增长只能手动扩容、发布需要停机窗口、节点间端口冲突、跨机器服务发现困难。胶水脚本把状态散落在各处,脚本本身反而成了新的故障源,排障时无法回答“现在系统实际是什么状态”。

Kubernetes 的解法是把“期望状态”固化为 API 对象(Pod、Deployment、Service 等)。控制面(Control Plane)由 API Server、etcd、Controller Manager、Scheduler 组成闭环:etcd 是分布式键值存储,保存集群全部对象状态;Controller Manager 中的各控制器反复比对“期望状态”与“实际状态”并自动收敛;Scheduler 为新 Pod 挑选合适节点;每个节点上的 kubelet(节点代理)保证容器按照清单运行。自愈、扩缩容、滚动更新都变成“改声明,系统自己收敛”,这正是它与脚本管理方式最根本的差异。

与 Docker Swarm、Nomad 等同类工具相比,Kubernetes 的气质是优先保证工程化的扩展性与生态统一:API 即契约,CRD(自定义资源)+ Operator(用控制器管理特定应用的模式)让任意领域都能以 Kubernetes 的方式自动化管理。代价是概念多、学习曲线陡,因此它的价值也随集群规模增长而放大。

安装与环境配置:4 步就绪

最少需要三样东西:kubectl(命令行客户端)、一个本地集群运行时、以及 Docker(kind 依赖它创建节点)。

步骤一:安装 kubectl。 macOS 用 Homebrew,Linux 用官方二进制脚本,安装后验证版本。

步骤二:安装 kind(Kubernetes in Docker)。 kind 用容器模拟节点,几分钟就能起一个多节点集群,适合学习和 CI;若需要更接近真实节点的体验可改用 minikube。

步骤三:创建集群。 kind create cluster 默认创建单节点集群,也可通过配置文件指定 control-plane 与 worker 节点数量。

步骤四:验证。 kubectl cluster-info 检查 API Server 连通性,kubectl get nodes 确认节点 Ready。

生产或需要模拟生产的环境建议用 kubeadm(官方安装器)或直接使用云托管集群,前者负责初始化 control plane 与加入 worker 节点,后者免去 etcd 与控制面运维。

bash13 行
# 1. 安装 kubectl(macOS;Linux 用 curl 下载官方 stable 二进制)brew install kubectlcurl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" # 2. 安装 kindbrew install kind # 3. 创建本地集群(kind 会先创建 Docker 网络与节点容器)kind create cluster --name k8s-demo # 4. 验证kubectl cluster-infokubectl get nodes -o wide

快速上手:15 分钟跑通部署、发布与扩容

最小可用流程的思路:用 Deployment(管理无状态应用副本与滚动更新的工作负载对象)声明“我要 3 个 Nginx 副本”,用 Service(为一组 Pod 提供稳定访问入口的对象)暴露访问,再用 kubectl 走一遍扩容和升级,理解“声明一旦改变,系统自动收敛”。

步骤一:创建 Deployment。 执行 kubectl create deployment nginx --image=nginx:1.26 --replicas=3,Kubernetes 会自动创建对应的 ReplicaSet(负责维护副本数的控制器对象)与 3 个 Pod。

步骤二:确认 Pod 状态。 kubectl get pods -o wide 查看 Pod 所在节点与 IP;状态为 Running 且 READY 列为 1/1 即就绪。

步骤三:暴露 Service。 执行 kubectl expose deployment nginx --port=80 --type=NodePort,为 Pod 组创建稳定入口。

步骤四:本地访问。 另开终端执行 kubectl port-forward svc/nginx 8080:80,浏览器访问 http://localhost:8080 应看到 Nginx 欢迎页。

步骤五:滚动发布与扩容。 kubectl set image 修改镜像版本,kubectl rollout status 观察滚动过程——旧 Pod 逐个下线、新 Pod 逐个就绪,全程不中断服务;kubectl scale 调整副本数。

所有命令操作的都是 API 对象,因此更推荐把声明写成 YAML 文件提交,便于版本化管理与代码评审。

将上述 YAML 保存为 deployment.yaml 后执行 kubectl apply -f deployment.yaml,即可用声明式方式创建同一份工作负载。进阶技巧:用 kubectl explain deployment.spec 查看字段说明,用 kubectl get deployment nginx-web -o yaml 查看系统实际存下来的对象状态。

bash10 行
# 命令式快速演示kubectl create deployment nginx --image=nginx:1.26 --replicas=3kubectl get pods -o widekubectl expose deployment nginx --port=80 --type=NodePortkubectl port-forward svc/nginx 8080:80   # 另开终端访问 http://localhost:8080kubectl set image deployment/nginx nginx=nginx:1.27kubectl rollout status deployment/nginxkubectl scale deployment nginx --replicas=5kubectl delete deployment nginxkind delete cluster --name k8s-demo
yaml19 行
apiVersion: apps/v1kind: Deploymentmetadata:  name: nginx-webspec:  replicas: 3  selector:    matchLabels:      app: nginx-web  template:    metadata:      labels:        app: nginx-web    spec:      containers:        - name: nginx          image: nginx:1.26          ports:            - containerPort: 80

核心能力详解:5 大支柱

支柱一:声明式 API 与控制循环。 所有变更都通过 API Server 写入 etcd——分布式键值存储,相当于整个集群的“期望状态数据库”;Controller Manager 内的控制器(控制器是不断对比期望与现实的循环程序)持续工作,Deployment 控制器负责副本数,Node 控制器负责节点状态。这套机制让“自愈”变成基础设施行为而不是运维动作。

支柱二:调度与资源管理。 Scheduler 为新 Pod 挑选节点,先过滤(如资源是否够、是否满足亲和性),再打分择优。用户在容器里声明 requests(资源预留,调度依据)与 limits(资源上限,运行时限制),配合 LimitRange(命名空间级资源范围约束)与 ResourceQuota(命名空间级资源配额)防止单个应用挤占集群。GPU 需先部署 NVIDIA device plugin,节点才会暴露 nvidia.com/gpu 资源供调度。

支柱三:自愈与滚动发布。 kubelet 通过三类探针判断容器状态:livenessProbe 决定是否重启,readinessProbe 决定是否把流量打进来,startupProbe 用于慢启动应用。滚动更新由 strategy.rollingUpdate 控制,maxUnavailable 限制最大不可用数、maxSurge 限制最大超卖数,配合 minReadySeconds 保证新版本先稳定再继续推进。

支柱四:服务发现与流量治理。 Service 提供四种暴露方式:ClusterIP(集群内虚拟 IP)、NodePort(节点端口)、LoadBalancer(云负载均衡)、ExternalName(DNS 别名);集群内 DNS 让 Service 名即域名。Pod 间网络由 CNI(容器网络接口)插件提供,常见选择 Calico(网络策略成熟)、Cilium(基于 eBPF,性能好)、Flannel(简单);七层流量治理用 Ingress 控制器(如 ingress-nginx)按域名/路径转发。注意网络策略 NetworkPolicy 默认不生效,需要显式声明“允许谁访问谁”。

支柱五:弹性伸缩。 水平扩缩容 HPA 从 metrics-server(提供节点与 Pod CPU/内存指标的组件)读取数据,按“当前值/目标值向上取整”计算副本数;垂直扩缩容 VPA 建议或直接调整 Pod 资源规格,原地修改 CPU/内存的能力(InPlacePodVerticalScaling)自 v1.30 起为 Beta,调整时无需重建 Pod;节点层面的伸缩由 Cluster Autoscaler 等外部组件完成。CronJob 则负责定时任务,如定期清理或批处理。

生产部署与监控:从上线到运维

部署方式一:云托管集群(EKS/GKE/AKS)。 控制面(API Server、etcd、Controller Manager)由云厂商托管,自动完成版本升级与安全补丁,节点组按需扩缩。适合大多数生产业务:省去 etcd 备份、证书轮换、控制面高可用等最重的运维负担,同时保留完整的 Kubernetes API 兼容性。注意节点池仍需配置合理机型(如 GPU 实例)与自动伸缩策略。

部署方式二:自建高可用集群(kubeadm)。 生产建议 3 个 control-plane 节点 + 至少 2 个 worker 节点,用 kubeadm init 初始化后用 kubeadm join 加入;etcd 与 apiserver 之间启用 TLS,etcd 定期用 etcdctl snapshot save 备份;证书由 kubeadm cert renew 轮换。CNI 选型决定网络策略与性能,无特殊需求首选 Calico;升级必须逐 minor 版本推进,先对照官方 Deprecated API 迁移指南检查清单文件。

可观测性: 指标用 Prometheus 生态(kube-state-metrics 暴露对象状态、node-exporter 采集节点指标、Alertmanager 告警);日志用 EFK(Elasticsearch/Fluentd/Kibana)或 Loki 按命名空间与标签聚合;链路追踪用 OpenTelemetry 采集、Jaeger/Tempo 存储。日常排障先跑 kubectl top node/pod 看资源水位,再用 kubectl get events --sort-by=.lastTimestamp 与 kubectl describe 定位事件,最后进入容器用 kubectl logs -f 确认应用层问题。

<p class="para-label">避坑清单:</p>

<ul class="dash-list"><li>版本与 API 兼容:Kubernetes 每个 minor 版本都会清理已弃用 API,升级前不检查 deprecated API 列表,存量 YAML 会在升级后 apply 失败,建议用 kubectl convert 或官方迁移文档先行转换。</li><li>不设 requests/limits:未声明资源上限的 Pod 可能打爆节点引发 CPU 节流与 OOMKilled,生产命名空间必须用 LimitRange 与 ResourceQuota 兜底。</li><li>漏配 readiness 探针:滚动更新时 Service 可能把流量打进未就绪的新 Pod,造成请求 502;探针与 minReadySeconds 应作为发布流程的强制项。</li><li>自建集群用 LoadBalancer 类型却不部署实现组件:没有云负载均衡或 MetalLB 这类方案时 Service 的 external-ip 会一直 Pending,排查时先确认集群是否具备 LoadBalancer 提供能力。</li></ul>

维度KubernetesDocker SwarmHashiCorp NomadAmazon ECS
定位通用容器编排与集群管理平台(CNCF 毕业项目)Docker 原生集群模式,主打简单轻量面向容器/虚拟机/批处理的多工作负载调度器AWS 托管的容器编排服务
编排范式声明式 API + 控制器循环声明式 Service 定义,Docker 原生驱动声明式 Job 规约,调度器扁平云 API 声明式任务与服务定义
调度能力丰富:亲和性、污点/容忍、GPU、拓扑分布简单:节点约束与标签多数据中心、批量与长运行混合调度由 AWS 托管,支持 Fargate/EC2 容量提供方
学习曲线陡峭:Pod/Controller/CRD 概念多平缓:几小时上手中等:单一二进制,概念更少中等:理解任务定义与 IAM 即可
生态集成CNCF 全家桶:Helm、Prometheus、Operator与 Docker 工具链一体化与 Consul/Vault 深度整合与 IAM、CloudWatch、ALB 深度集成
生产部署企业级标准,需持续运维升级与证书轻量但功能有限,官方维护投入减少部署简便但生态较窄控制面免运维,但绑定 AWS
LicenseApache 2.0Apache 2.0BUSL-1.1(HashiCorp 变更后)闭源(SaaS,按量计费)
适合谁需要多云、大规模、CD 深度集成的团队小规模集群、教学或快速原型混合负载且已有 HashiCorp 生态的团队AWS 全栈用户,追求省运维

选型建议:追求生态、多云与长期演进,选 Kubernetes,它是目前唯一有完整 CNCF 生态支撑的选项;Swarm 只适合小规模或教学场景;Nomad 适合工作负载混杂且已在用 Consul 的团队;AWS 全栈且不想碰控制面运维时,ECS/Fargate 是务实选择,但要注意厂商锁定。

版本迭代

Kubernetes 自 2015 年 v1.0 以来保持一年 3 个 minor 版本的节奏(约 4 月、8 月、12 月),每个版本通常包含数十项特性增强与 API 调整。版本演进主线是从“跑起来”走向“工程化”:v1.29 完成云厂商代码剥离,v1.30 将原地调整 Pod 资源的 beta 能力落地,v1.31 起安全相关特性(如 AppArmor)转正,v1.32 完成工具链升级,v1.33 持续推进稳定化。官方维护最近 3 个 minor 版本,约为 14 个月支持窗口。

版本时间变化提升
v1.292023-12移除各云厂商 in-tree cloud provider;ReadWriteOncePod 转正 GA云集成必须迁移到外部 cloud-controller-manager;存储访问模式更灵活
v1.302024-04InPlacePodVerticalScaling 转 Beta;Structured Authentication Configurations 转 BetaPod 可原地调整 CPU/内存规格,无需重建实例;认证配置支持结构化声明
v1.312024-08AppArmor 支持转正 GA;CRD 字段选择器转 Beta安全基线增强,大规模集群调度与可观测性提升
v1.322024-12首个基于 Go 1.23 构建的版本;kube-apiserver 与调度器性能优化大规模集群下 API 响应与调度延迟下降
v1.332025-04延续季度节奏,推进多项长期 Beta 特性转正 GA稳定性与安全基线持续迭代(调研机数据截至 v1.33,以官方发布页为准)
结论

Kubernetes 没有类似 LLM 的公共基准评测分数,性能通常用 kube-burner 等压测工具按集群规模评估,社区反馈 v1.30 之后大集群的 API 稳定性与调度延迟改善明显。选型建议:生产环境优先使用当前最新 minor 版本的 GA API,升级前逐一对照 Deprecated API 迁移清单;新特性(如 Pod 原地调整资源)先在测试集群验证再推广。

AI 应用场景

模型推理服务的高可用部署与弹性伸缩

阶段:推理服务部署与弹性伸缩

解决的问题:单机部署 GPU 推理服务无法自动故障恢复,流量波动时只能人工扩容,发布新版本需要中断服务。Kubernetes 用 Deployment 管理多副本推理 Pod,配合探针自动摘除异常实例,HPA 按 QPS 或 GPU 利用率自动扩缩容,滚动更新保证发版不中断。

具体案例:将基于 vLLM 的推理服务封装为无状态 Deployment,接入 HPA 按每秒请求数扩缩容,节点层由 Cluster Autoscaler 补充 GPU 实例。典型效果:高峰扩容从人工操作约 30 分钟缩短到自动完成约 5 分钟,单实例故障恢复时间从小时级降到分钟级(探测 + 重新调度)。

训练与批处理任务的统一编排

阶段:训练作业与批处理任务编排

解决的问题:多组微调任务共享 GPU 时互相抢占资源,任务失败需要人工重跑。Kubernetes 原生 Job 负责“执行完即退出”的一次性任务,配合队列(如 Volcano)实现 GPU 排队与抢占控制,失败任务自动重启并限制重试次数。

具体案例:将一批模型微调任务封装为 K8s Job,用队列串行使用 2 张 A100,避免多个任务同时抢卡导致 OOM;任务失败由 Job 控制器自动重建,常见实践可将 GPU 利用率从约 40% 提升到 70% 以上,且训练产出(checkpoint)通过 PVC(持久卷声明,Pod 使用的持久化存储抽象)落盘不随 Pod 销毁。

多云与混合云基础设施标准化

阶段:基础设施抽象与统一管理

解决的问题:AI 平台在自建机房和公有云分别部署时,脚本、监控、发布流程各写一套,迁移成本高。Kubernetes API 作为统一抽象层,让应用与具体云厂商解耦。

具体案例:同一套 Helm Chart(Kubernetes 的打包部署格式)与 Prometheus 监控栈在私有云与公有云集群各跑一套,发布与监控脚本零改动;配合 GitOps 工具(如 Argo CD)实现两套集群的配置一致性,集群迁移时只需更换存储与负载均衡相关配置。

常见误区

误区以为 Kubernetes 是更高级的容器运行时,可以替代 Docker Engine,甚至觉得“有了 K8s 就不需要镜像了”。

正解Kubernetes 是容器编排层,不负责构建镜像也不直接运行容器;容器由容器运行时(containerd、CRI-O)执行,Docker 镜像依然是被部署和编排的对象。两者的关系是:kubectl 下发声明 → kubelet 调用容器运行时拉取并运行镜像。Docker 引擎只是众多实现之一,且自 v1.24 起 kubelet 默认使用 containerd。

为何常见:K8s 与 Docker 总是同时出现在教程里,Docker 公司又长期主导 K8s 生态,初学者容易把“编排平台”和“运行时”混为一谈。

误区以为像 Heroku 一样 push 代码就能部署,或者把 MySQL、Redis 直接丢进 Deployment 就完事。

正解Kubernetes 不构建应用、不提供数据库、不管理应用级配置中心,它提供的是通用编排原语。无状态应用用 Deployment,有状态应用要用 StatefulSet(为有状态应用提供稳定网络标识与存储的控制器)或专门的 Operator(如 etcd-operator、Kafka Operator);数据库的备份、主从切换等逻辑仍需应用自身或 Operator 实现。

为何常见:Kubernetes 能力覆盖太广,让人误以为它是完整的应用平台,实际它刻意保持“平台中立、组件化”。

误区容器重启后数据丢了,以为 Pod 和虚拟机一样有持久的磁盘和数据。

正解Pod 是“短暂可替换”的,调度、重启、节点迁移都会重建它;写入容器可写层的数据随 Pod 销毁而消失。持久化必须显式使用 PV/PVC(持久卷与持久卷声明),并设计成“无状态 + 外部存储”的架构,这也是 Kubernetes 官方文档反复强调的最佳实践。

为何常见:从虚拟机思维迁移到容器编排时,最容易沿用“一台机器一个应用、数据都在本地盘”的惯性。

误区以为部署了 Calico 或 Cilium 后,集群网络就自动开启了 Pod 间隔离。

正解网络策略 NetworkPolicy 默认不生效,Kubernetes 网络模型默认是“全放通”——任意 Pod 可以访问任意 Pod。要隔离必须显式创建 NetworkPolicy 对象声明允许规则,且所选 CNI 插件必须支持 NetworkPolicy(Flannel 不支持)。生产集群的安全基线是“默认拒绝,按需放行”。

为何常见:防火墙上“默认隔离”的运维经验被直接套用,而 Kubernetes 为了易用性选择了相反的默认值。

面试题

Q1. 负责对比期望状态与集群实际状态并自动收敛的组件是?

单选题 · easy

  • A.节点上的 kubelet,负责执行 Pod 生命周期
  • B.控制面的控制器管理器,负责收敛期望状态← 正确答案
  • C.etcd 作为键值存储,保存集群全部状态
  • D.kube-proxy 维护 Service 流量转发规则

答案:B。kube-controller-manager 承载各类控制器,是控制循环的执行者。kubelet 只在本节点执行并上报,不做全局收敛;etcd 只存储状态不决策;kube-proxy 只做 Service 数据面的转发。综上正确答案是 B。

Q2. 创建 4 副本 Nginx Deployment 的正确命令是?

单选题 · easy

  • A.kubectl create deployment web --image=nginx --replicas=4← 正确答案
  • B.kubectl run web --image=nginx --replicas=4
  • C.kubectl scale deployment web --replicas=4 --image=nginx
  • D.kubectl rollout start deployment web --replicas=4 --image=nginx

答案:A。A 是标准用法。现代 kubectl 的 run 只创建单个 Pod 且已移除 --replicas;scale 不接收 --image;rollout 子命令只有 status/history/undo/restart/pause/resume,没有 start。因此选 A。

Q3. 想按标签读取多个 Pod 的日志,正确的命令是?

单选题 · easy

  • A.kubectl logs -l app=nginx(按标签选择多 Pod 聚合日志)← 正确答案
  • B.kubectl exec -it <pod> —— sh(进入容器交互会话)
  • C.kubectl get events --sort-by=.lastTimestamp(查看事件)
  • D.kubectl describe pod <pod>(查看 Pod 详情)

答案:A。kubectl logs 支持 -l 按标签选择器聚合多个 Pod 的日志,适合排查同组副本的异常。B 是进入容器执行命令,C 看的是集群事件,D 看的是对象元数据与事件,均非日志输出。因此选 A。

Q4. 关于 etcd 的正确说法是?

单选题 · mid

  • A.单节点部署即可满足生产,无需备份
  • B.保存集群对象状态,需 TLS 且定期备份← 正确答案
  • C.仅保存调度结果,不保存对象声明
  • D.是无状态缓存,重启后数据即清空

答案:B。etcd 保存集群全部对象状态,是“真源”数据库,生产必须多节点高可用并启用 TLS 加密,同时定期快照备份以便灾难恢复。单节点存在单点故障,对象声明正是保存在 etcd 中,且它是持久化存储而非缓存。因此选 B。

Q5. 需要把服务暴露到公网并由云负载均衡承接流量,应使用哪种 Service 类型?

单选题 · mid

  • A.ClusterIP 类型(仅集群内部可达)
  • B.NodePort 类型(暴露节点端口访问)
  • C.LoadBalancer 类型(云 LB 承接外部流量)← 正确答案
  • D.ExternalName 类型(仅做 DNS 别名)

答案:C。LoadBalancer 类型由云控制器创建负载均衡器并绑定外部 IP,是公网暴露的标准方式。ClusterIP 仅集群内可达;NodePort 暴露的是节点 IP:Port 而非云 LB;ExternalName 只返回 DNS 别名不转发流量。因此选 C。

Q6. HPA 做水平扩缩容时,从哪个组件获取 CPU/内存指标?

单选题 · mid

  • A.metrics-server(经 Metrics API 供 HPA 调用)← 正确答案
  • B.kube-state-metrics(输出集群状态指标)
  • C.cAdvisor(内置于节点 kubelet 采集容器指标)
  • D.cloud-controller-manager(云负载相关指标)

答案:A。HPA 通过 Metrics API 读取指标,标准实现是 metrics-server,它从各节点 kubelet 内置的 cAdvisor 汇总资源使用量。kube-state-metrics 输出的是对象状态而非资源用量;cAdvisor 不是独立 API 服务;cloud-controller-manager 与资源指标无关。因此选 A。

Q7. 维护节点时需要驱逐已有 Pod 并禁止新 Pod 调度,应执行?

单选题 · hard

  • A.kubectl cordon 只禁止新调度,存量 Pod 保留
  • B.kubectl drain 驱逐存量并禁止新调度,可维护节点← 正确答案
  • C.kubectl taint 使新 Pod 不再调度到该节点
  • D.kubectl delete node 直接从集群移除节点对象

答案:B。kubectl drain 会先 cordon 节点再驱逐其上的 Pod(DaemonSet 需 --ignore-daemonsets),是节点维护的标准操作。cordon 只阻止新调度不驱逐存量;taint 只影响未来的调度决策;delete node 直接删除节点对象且不驱逐工作负载。因此选 B。

Q8. 滚动更新时控制“最多允许同时不可用副本数”的字段是?

单选题 · hard

  • A.spec.replicas 决定滚动更新的最大不可用数
  • B.rollingUpdate.maxUnavailable 控制最大不可用副本数← 正确答案
  • C.livenessProbe 决定容器何时被计入可用
  • D.minReadySeconds 决定最大不可用副本数量

答案:B。spec.strategy.rollingUpdate.maxUnavailable 精确控制更新过程中允许的最大不可用副本数,是滚动发布节奏的关键参数。replicas 只定副本总数;livenessProbe 只管存活重启不参与就绪判断;minReadySeconds 是就绪后等待的秒数,不限制不可用数量。因此选 B。

Q9. 以下哪些属于管理 Pod 生命周期的“工作负载”对象?

多选题 · mid

  • A.Deployment,管理无状态应用副本与滚动更新← 正确答案
  • B.StatefulSet,为有状态应用提供稳定标识← 正确答案
  • C.Service,负责服务发现与负载均衡转发
  • D.Job,执行一次性任务并在完成后退出← 正确答案

答案:ABD。工作负载对象负责创建和运维 Pod,包括 Deployment、StatefulSet、DaemonSet 与 Job/CronJob。Service 属于网络层抽象,只提供访问入口,不管理 Pod 生命周期,因此 C 不选。正确答案为 A、B、D。

Q10. 生产集群安全基线应包括哪些措施?

多选题 · hard

  • A.API Server 与 etcd 开通 TLS 并配置 RBAC← 正确答案
  • B.默认网络策略为拒绝,按需显式放行← 正确答案
  • C.证书定期轮换且 etcd 数据有备份恢复← 正确答案
  • D.使用 privileged 容器并内置明文 Secret

答案:ABC。生产安全基线包括传输加密(TLS)、最小权限(RBAC)、默认拒绝的网络策略、证书轮换与 etcd 备份恢复。privileged 容器与明文 Secret 属于典型反模式,应通过 Pod 安全标准限制特权并改用 Secret 对象加密存储。因此选 A、B、C。

参考来源