Kubernetes(简称 K8s)是当前事实标准的容器编排平台,由 Google 基于内部 Borg/Omega 系统的经验设计,2015 年捐赠给云原生计算基金会(CNCF),2018 年成为 CNCF 首个毕业项目。它解决的核心问题是:当容器数量从几台机器上的十几个增长到跨数据中心的上万个时,如何自动完成部署、扩缩容、故障自愈、服务发现与滚动更新。Kubernetes 的核心思路是“声明式 API + 控制循环”:用户描述期望状态(例如“运行 10 个 Nginx 副本”),系统持续对比期望与现实的差异并自动收敛,运维人员不再逐个操作容器。 本文按“速览 → 安装 → 上手 → 原理 → 生产 → 选型 → 场景 → 误区 → 面试”的顺序组织,帮助你从零跑通本地集群,并理解生产环境部署与运维的关键决策点。
对 AI 从业者而言,Kubernetes 是把模型服务从“能跑”推向“能上线”的必修课:GPU 调度、推理服务弹性伸缩、训练与微调任务编排、多集群容灾都建立在容器编排能力之上。
目录
速览卡是工具类内容的固定首屏模块: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 与控制面运维。
# 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 查看系统实际存下来的对象状态。
# 命令式快速演示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
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>
| 维度 | Kubernetes | Docker Swarm | HashiCorp Nomad | Amazon 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 |
| License | Apache 2.0 | Apache 2.0 | BUSL-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.29 | 2023-12 | 移除各云厂商 in-tree cloud provider;ReadWriteOncePod 转正 GA | 云集成必须迁移到外部 cloud-controller-manager;存储访问模式更灵活 |
| v1.30 | 2024-04 | InPlacePodVerticalScaling 转 Beta;Structured Authentication Configurations 转 Beta | Pod 可原地调整 CPU/内存规格,无需重建实例;认证配置支持结构化声明 |
| v1.31 | 2024-08 | AppArmor 支持转正 GA;CRD 字段选择器转 Beta | 安全基线增强,大规模集群调度与可观测性提升 |
| v1.32 | 2024-12 | 首个基于 Go 1.23 构建的版本;kube-apiserver 与调度器性能优化 | 大规模集群下 API 响应与调度延迟下降 |
| v1.33 | 2025-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. 负责对比期望状态与集群实际状态并自动收敛的组件是?
- A.节点上的 kubelet,负责执行 Pod 生命周期
- B.控制面的控制器管理器,负责收敛期望状态← 正确答案
- C.etcd 作为键值存储,保存集群全部状态
- D.kube-proxy 维护 Service 流量转发规则
答案:B。kube-controller-manager 承载各类控制器,是控制循环的执行者。kubelet 只在本节点执行并上报,不做全局收敛;etcd 只存储状态不决策;kube-proxy 只做 Service 数据面的转发。综上正确答案是 B。
Q2. 创建 4 副本 Nginx Deployment 的正确命令是?
- 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 的日志,正确的命令是?
- 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 的正确说法是?
- A.单节点部署即可满足生产,无需备份
- B.保存集群对象状态,需 TLS 且定期备份← 正确答案
- C.仅保存调度结果,不保存对象声明
- D.是无状态缓存,重启后数据即清空
答案:B。etcd 保存集群全部对象状态,是“真源”数据库,生产必须多节点高可用并启用 TLS 加密,同时定期快照备份以便灾难恢复。单节点存在单点故障,对象声明正是保存在 etcd 中,且它是持久化存储而非缓存。因此选 B。
Q5. 需要把服务暴露到公网并由云负载均衡承接流量,应使用哪种 Service 类型?
- A.ClusterIP 类型(仅集群内部可达)
- B.NodePort 类型(暴露节点端口访问)
- C.LoadBalancer 类型(云 LB 承接外部流量)← 正确答案
- D.ExternalName 类型(仅做 DNS 别名)
答案:C。LoadBalancer 类型由云控制器创建负载均衡器并绑定外部 IP,是公网暴露的标准方式。ClusterIP 仅集群内可达;NodePort 暴露的是节点 IP:Port 而非云 LB;ExternalName 只返回 DNS 别名不转发流量。因此选 C。
Q6. HPA 做水平扩缩容时,从哪个组件获取 CPU/内存指标?
- 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 调度,应执行?
- 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. 滚动更新时控制“最多允许同时不可用副本数”的字段是?
- A.spec.replicas 决定滚动更新的最大不可用数
- B.rollingUpdate.maxUnavailable 控制最大不可用副本数← 正确答案
- C.livenessProbe 决定容器何时被计入可用
- D.minReadySeconds 决定最大不可用副本数量
答案:B。spec.strategy.rollingUpdate.maxUnavailable 精确控制更新过程中允许的最大不可用副本数,是滚动发布节奏的关键参数。replicas 只定副本总数;livenessProbe 只管存活重启不参与就绪判断;minReadySeconds 是就绪后等待的秒数,不限制不可用数量。因此选 B。
Q9. 以下哪些属于管理 Pod 生命周期的“工作负载”对象?
- A.Deployment,管理无状态应用副本与滚动更新← 正确答案
- B.StatefulSet,为有状态应用提供稳定标识← 正确答案
- C.Service,负责服务发现与负载均衡转发
- D.Job,执行一次性任务并在完成后退出← 正确答案
答案:ABD。工作负载对象负责创建和运维 Pod,包括 Deployment、StatefulSet、DaemonSet 与 Job/CronJob。Service 属于网络层抽象,只提供访问入口,不管理 Pod 生命周期,因此 C 不选。正确答案为 A、B、D。
Q10. 生产集群安全基线应包括哪些措施?
- A.API Server 与 etcd 开通 TLS 并配置 RBAC← 正确答案
- B.默认网络策略为拒绝,按需显式放行← 正确答案
- C.证书定期轮换且 etcd 数据有备份恢复← 正确答案
- D.使用 privileged 容器并内置明文 Secret
答案:ABC。生产安全基线包括传输加密(TLS)、最小权限(RBAC)、默认拒绝的网络策略、证书轮换与 etcd 备份恢复。privileged 容器与明文 Secret 属于典型反模式,应通过 Pod 安全标准限制特权并改用 Secret 对象加密存储。因此选 A、B、C。
参考来源
- webpageCKA 官方认证官方认证考试与学习路径