1、在k8s 中定义副本数量的关键字是那个?处于那个模块下?
关键字:replicas
模块:spec下
2、在k8s中,有状态应用和无状态应用的区别?创建有状态和无状态应用分别使用哪种资源对象类型?
(1)区别:
有状态应用:需要持久化存储,保持唯一标识和稳定网络标识(如数据库)
无状态应用:不需要持久化存储,各实例可互换(如web前端)
(2)资源对象类型:
有状态:StatefulSet
无状态:Deployment
3、使用deployment 更新时,使用那个参数方便后续的回滚更新?
--record=true(记录历史版本)
4、查看deployment回滚的指令是?
kubectl rollout history deployment/<deployment-name>
5、deployment 指定回滚版本的命令是?
kubectl rollout undo deployment/<deployment-name> --to-revision=<revision-number>
6、deployment 任务,扩缩容可以通过哪些方式实现?
命令方式:kubectl scale deployment/<name> --replicas=<number>
修改yaml文件后apply
自动扩缩容:Horizontal Pod Autoscaler (HPA)
7、哪种services 不会产生集群ip(clusterip)?
Headless Service (ClusterIP设置为None)
8、查看statefulset 的指令是?
kubectl get statefulset
或查看详细信息:kubectl describe statefulset/<name>
9、deployment 和statefulset 创建pod 时,那个是有序创建的?
StatefulSet(按顺序创建,从0开始编号)
10、statefulset 级联删除和非级联删除的区别?
级联删除(默认):删除StatefulSet时同时删除所有Pod
非级联删除:kubectl delete statefulset/<name> --cascade=false,只删除StatefulSet对象,保留Pod
11、daemonset 的作用?
确保集群中每个节点(或符合选择器的节点)都运行一个Pod副本(常用于日志收集、监控等系统级应用)
12、k8s中,定义节点,pod 标签的方法,查询标签的方法,使用标签的方法,删除标签的方法?
(1)定义/添加标签:
节点:kubectl label nodes <node-name> <label-key>=<label-value>
Pod:在metadata.labels中定义或kubectl label pods <pod-name> <label-key>=<label-value>
(2)查询标签:
kubectl get <resource> --show-labels
或筛选:kubectl get <resource> -l <label-key>=<label-value>
(3)使用标签:通过selector字段在Service/Deployment等资源中匹配
(4)删除标签:
kubectl label <resource> <resource-name> <label-key>-
13、k8s 定义的yaml 文件中,筛选节点标签和筛选pod标签使用的关键字是什么?
筛选节点标签:nodeSelector
筛选Pod标签:selector.matchLabels
14、简述污点,容忍度,亲和性的作用;
污点(Taint):是节点上设置的属性,用于阻止某些Pod被调度到该节点上。它相当于节点的"排斥标签",确保只有特定的Pod才能在该节点上运行。
容忍度(Toleration):是Pod的属性,允许Pod被调度到带有匹配污点的节点上。它相当于Pod的"抗排斥能力"。
亲和性(Affinity):是Pod的属性,用于控制Pod应该被调度到哪些节点上(节点亲和性)或与其他Pod如何共同调度(Pod间亲和性/反亲和性)。它使调度更符合用户期望的拓扑结构。
15、污点的模式有几种,分别是什么,实现什么功能?
污点有三种模式:
(1)NoSchedule:除非Pod具有匹配的容忍度,否则不会被调度到该节点(新Pod不会调度过来)
(2)PreferNoSchedule:调度器尽量避免将Pod调度到该节点,但不是强制要求(软性限制)
(3)NoExecute:不仅影响调度,还会影响已运行的Pod。如果节点上已有Pod不能容忍该污点,则会被驱逐(已运行的Pod也可能被驱逐)
16、怎么查看节点是否设置有污点;
kubectl describe node <节点名称> | grep Taints
17、亲和力分成那几种类型?
亲和力主要分为两种类型:
(1)节点亲和性(Node Affinity):定义Pod希望被调度到哪些节点上
(2)Pod间亲和性/反亲和性(Pod Affinity/Anti-affinity):
Pod亲和性:定义Pod希望与哪些其他Pod在同一节点或同一拓扑域
Pod反亲和性:定义Pod不希望与哪些其他Pod在同一节点或同一拓扑域
18、软亲和力和硬亲和力的区别?
主要区别在于强制性与非强制性,以及调度失败时的处理方式。
(1)硬亲和力(requiredDuringSchedulingIgnoredDuringExecution):
是强制性要求,调度器必须满足这些条件才能调度Pod
如果没有节点满足条件,Pod将保持未调度状态
适用于严格的调度要求
(2)软亲和力(preferredDuringSchedulingIgnoredDuringExecution):
是偏好性要求,调度器会尽量满足但不强制
即使没有节点满足条件,Pod仍可能被调度
适用于优化调度但不影响最终结果的场景
19、简述pod 创建流程;
(1)用户提交请求:通过 kubectl apply/create 或 API 提交 Pod 的 YAML/JSON 文件。
(2)写入存储:APIServer 将 Pod 配置写入 etcd。
(3)调度:Scheduler 根据资源、节点选择规则等,将 Pod 绑定到合适节点,并更新 etcd。
(4)节点创建:目标节点的 kubelet 监听到新 Pod,调用容器运行时(如 Docker)创建容器。
(5)状态上报:kubelet 监控 Pod 状态,并持续同步给 APIServer。
20、通过那个指令 可以查看定义 pod 可以用到的参数;
kubectl explain pod
21、简述常见的pod状态有哪些?
Pending:调度中或镜像下载中。
Running:至少一个容器在运行。
Succeeded:所有容器成功退出(一次性任务)。
Failed:至少一个容器异常退出(非零状态)。
CrashLoopBackOff:容器崩溃后等待重启。
Unknown:节点失联,状态无法上报。
22、pod 镜像拉取策略分别是什么,并说明;
Always:总是拉取最新镜像(默认策略,当标签为 latest 或未指定时)。
IfNotPresent:本地不存在时才拉取(节省资源)。
Never:仅使用本地镜像(需提前手动拉取)。
23、pod 创建时,定义的yaml 有问题,导致启动容器失败,但是失败后,容器并没有重启,请问该容器的重启策略是那个?
该容器的重启策略是Never
Pod 的重启策略(restartPolicy)有三种:
Always(失败必重启,默认策略)。
OnFailure(非零退出才重启)。
Never(永不重启,题目描述符合此情况)。
24、pod探针分为那几种?
Startup Probe:检测应用是否启动完成(适合慢启动应用)。
Liveness Probe:检查容器是否存活(失败会重启容器)。
Readiness Probe:检查是否就绪(失败会从 Service 流量中剔除)。
25、pod 生命周期的流程是什么?请简述
(1)初始化阶段(如果有 Init 容器):按顺序运行初始化任务,全部成功才进主容器。
(2)启动阶段:
主容器启动,执行 postStart 钩子(如果有)。
探针开始检测(如 startupProbe 确认启动完成)。
(3)运行阶段:
通过 readinessProbe 接收流量,livenessProbe 防止死锁。
(4)终止阶段:
收到删除命令后,执行 preStop 钩子(如果有)。
发送 SIGTERM 信号,等待优雅终止(超时则强制 SIGKILL)。