Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

GitLab FAQ

一、Kubernetes 基础概念

1. 什么是 Kubernetes?它解决了什么问题?

Kubernetes 是自动化容器编排系统,主要解决:

要解决的问题 Kubernetes 提供的能力
服务数量多、手动部署麻烦 自动部署 Deployment
服务需要水平扩缩容 HPA、ReplicaSet
服务会故障 自动自愈(重启 Pod、漂移节点)
服务之间需要通信 Service / DNS
需要跨机房部署 控制平面 + 广义调度
应用需要可观测性 Events、Logs、Metrics

2. Pod 是什么?为什么不是直接管理容器?

Pod 是 Kubernetes 最小调度单位,封装一个或多个共享网络、共享存储的容器。

原因:

  1. 容器之间需要共享 IP、端口、Volume。
  2. Kubernetes 调度的基本单位是 Pod,而不是容器。
  3. Sidecar 模式(如 envoy、log-agent)必须在同一个 Pod 才能共享资源。

3. Deployment、StatefulSet、DaemonSet 区别?

Workload 使用场景 特点
Deployment Web、API 服务 无状态、随意扩缩、滚动更新
StatefulSet DB、MQ、Redis、ElasticSearch 有序部署、有持久存储、稳定DNS
DaemonSet 日志收集、监控、网络插件 每个节点都部署一个

什么时候用 StatefulSet?

当 Pod 需要稳定身份、独立存储、顺序部署时。

二、调度、Node、Taint / Toleration

4. Kubernetes 调度流程?

  1. Filter(预选):能跑的节点?(资源、污点、亲和性)
  2. Score(打分):哪个节点更适合?
  3. Bind(绑定):把 Pod 指定到节点

5. 节点不可调度怎么处理?

可能状态:

  • NotReady
  • MemoryPressure
  • DiskPressure
  • NetworkUnavailable

排查:

kubectl describe node nodex
journalctl -u kubelet -f

6. Taint / Toleration 是什么?

Taint:给节点设置限制

Toleration:Pod 的容忍策略

使用场景:

  • 让部分节点只跑特定业务
  • GPU 节点隔离
  • master 节点隔离

命令:

kubectl taint nodes node1 key=value:NoSchedule

三、Service / 网络 / Ingress

7. ClusterIP、NodePort、LoadBalancer 区别?

类型 适用场景 特点
ClusterIP 集群内部通信 默认类型
NodePort 外部访问 占用 node 端口
LoadBalancer 云厂商负载均衡 依赖云平台

8. Service 为什么能自动负载均衡?

  • kube-proxy 维护 iptables/ipvs 规则
  • 每次 Service 更新,kube-proxy 重写转发规则
  • 客户端访问 Virtual IP(VIP)自动轮询 Endpoints

Pod 重建后 IP 变了怎么办?

Service 永久不变,Pod 的 IP 自动更新到 Endpoints。

9. Ingress 是做什么的?和 Service 有什么关系?

  • Service 是“L4”,Ingress 是“L7”
  • Ingress 控制器负责:
  • URL 路由
  • HTTPS(TLS)
  • 反向代理
  • 七层负载均衡

四、存储

10. PV / PVC / StorageClass 区别?

概念 角色 类比
PV 持久卷 云盘
PVC 持久卷申请 云盘申请订单
StorageClass 自动创建 PV 的模板 云盘规格(SSD、HDD)

11. StatefulSet 和 PVC 的关系?

  • 每个 Pod 会自动创建自己的 PVC
  • PVC 不会因为 Pod 重建而删除
  • 有顺序性 0 -> 1 -> 2

五、Deployment / 更新 / 回滚

12. Deployment 滚动更新原理?

  1. 创建新的 ReplicaSet(RS)
  2. 按策略(maxUnavailable / maxSurge)滚动替换
  3. 替换完成旧 RS 保留(用于回滚)

13. 如何强制更新 latest 镜像?

imagePullPolicy: Always

kubectl rollout restart deploy/myapp

14. Pod 生命周期

  • Pending
  • Running
  • Succeeded
  • Failed
  • Unknown

容器状态:

  • Waiting(拉镜像)
  • Running
  • Terminated(退出码)

六、安全、RBAC、TLS

15. RBAC 是什么?有什么作用?

基于角色的访问控制。

对象:

  • Role / ClusterRole
  • RoleBinding / ClusterRoleBinding
  • ServiceAccount

例如:

kubectl auth can-i get pods --as=system:serviceaccount:dev:tester

16. 为什么访问 apiserver 会出现 x509 错误?

原因:证书 SAN 不包含访问的 IP/域名。

解决:

kubeadm init --apiserver-cert-extra-sans="api.example.com,10.0.0.10"

七、故障排查

17. Pod 一直处于 Pending?

常见原因:

  1. PVC 无法绑定(无可用 PV)
  2. 无可调度节点(资源不足、污点)
  3. 节点 Label 不匹配
  4. 节点 NotReady

检查:

kubectl describe pod pod-name
kubectl get events --sort-by=.metadata.creationTimestamp

18. Pod CrashLoopBackOff 如何排查?

  1. 查看日志:

    kubectl logs pod --previous
    
  2. 查看容器启动命令:

    kubectl describe pod
    
  3. 是否探针失败(liveness/readiness):

    kubectl describe pod | grep -i probe
    

19. ImagePullBackOff 如何排查?

  • 镜像不存在
  • Docker Hub 限流
  • 私有仓库 Secret 错误
kubectl describe pod | grep -A3 "Image"

20. Node NotReady 的原因?

  • kubelet 链不上 API Server
  • 磁盘压力
  • 内存压力
  • 网络断开
  • containerd/cri dockerd 失败

八、网络(进阶)

21. Pod 网络是如何实现的?

Calico 示例:

  • 每个 Pod 拥有独立 IP(来自 CNI 插件)
  • CNI 负责创建 Pod veth pair
  • 路由管理统一由 Linux 内核 + CNI 组件维护
  • Service 由 kube-proxy 提供转发(iptables/ipvs)

22. Calico、Flannel、Cilium 区别?

网络插件 特点 技术
Calico(推荐) 高性能、BGP、eBPF 路由为主
Flannel 简单、兼容性高 VXLAN、封包
Cilium eBPF、L7、网络安全 eBPF

23. iptables 和 ipvs 区别?

iptables ipvs
性能 中等
连接跟踪
功能 单机防火墙 四层负载均衡
适用 小规模 中大型集群

九、etcd / 控制平面

24. etcd 作用是什么?为什么不能满磁盘?

  • Kubernetes 所有状态信息都存储在 etcd
  • 满磁盘会导致:
  • 写入失败
  • Leader 选举失败
  • API Server 无法读写

25. kube-apiserver、controller-manager、scheduler 职责?

组件 职责
kube-apiserver 所有请求入口,认证、授权、准入
kube-controller-manager 副本控制、自愈、Service、Node 控制
kube-scheduler 选择最优节点
kubelet 管理本机 Pod
kube-proxy 维护 Service 转发规则

十、运维 / 生产

26. 如何优雅关闭一个 Pod?

  • SIGTERM(grace period)
  • readiness probe fail -> 从 LB 移除
  • 等待 preStop
  • SIGKILL(到达 timeout)

27. 如何隔离生产与测试环境?

  • Namespace
  • Taint/Toleration
  • NetworkPolicy
  • RBAC
  • 节点池

28. 如何限制 Pod 的资源消耗?

resources:
  requests:
    cpu: 500m
  limits:
    cpu: 1
  • requests 决定调度
  • limits 决定上限

十一、云原生

29. 什么是 Sidecar?有哪些用途?

典型用途:

  • Envoy / Istio(服务网格)
  • 日志收集(fluentd)
  • 监控 agent
  • 数据同步

30. 为什么生产环境最好不用 latest?

  • 不可预期
  • 不可回滚
  • 会导致节点缓存混乱
  • CICD 无法管理版本