2025面试总结

1、Kubernetes(K8s)创建一个Pod的详细流程

  1. 用户通过REST API创建一个Pod。
  2. API Server接收到请求后,将其写入etcd。etcd是Kubernetes的分布式键值存储系统,用于存储所有集群状态的信息。
  3. 调度器检测到未绑定Node的Pod,开始调度并更新Pod的Node绑定。调度器根据一系列复杂的算法来选择合适的节点,如资源可用性、标签匹配、预选和亲和性约束等。
  4. Kubelet通过与Node节点上的container runtime(如Docker或containerd)交互,检测到有新的Pod调度过来,并运行该Pod。Kubelet会根据Pod的配置文件创建容器,并将容器运行在指定的Node节点上。
  5. Kubelet通过container runtime获取Pod的状态,并将其更新到API Server中。API Server将Pod的状态信息存储在etcd中。
  6. 所有组件通过API Server的Watch接口监测资源变化情况,并对资源作相应的操作。例如,Controller Manager通过Watch接口监测资源的状态变化,并根据资源状态的变化执行相应的控制逻辑。Scheduler通过Watch接口监测新创建的Pod,并根据调度算法选择合适的节点进行调度。

总之,Kubernetes通过API Server、etcd、Kubelet、Controller Manager和Scheduler等组件的协同工作,实现了Pod的创建、调度和运行。所有组件通过REST API和Watch接口进行通信,共同维护集群的状态和资源的运行状况。

2、网站访问慢排查和解决办法?

1.服务器出口带宽不够用

2.服务器负载过大,导致响应不过来

3.数据库瓶颈

1)查看每个host的当前连接数和总连接数

SELECT * FROM performance_schema.hosts;

2)查看数据库连接数

show processlist;

3)查看MySQL数据库状态

show slave status;

4.网站开发代码没有优化好

3、服务器cpu突然激增,怎么解决

 1、快速监控与定位高CPU进程

  • 工具使用:top、htop
  • 分析进程是用户态还是内核态

1、分析服务器

用户态:通过工具分析、应用日志

内核态:查看系统日志

2、网络分析

2.1:定时任务检查

2.2:外部流量/请求突增

临时缓解与长期优化

  • 应急措施
    • 使用 cpulimit 限制进程CPU:cpulimit -p <PID> -l 50(限制为50%)。
    • 调整容器资源(如Docker --cpus 参数)。
    • 重启服务或扩容实例(视业务场景)。
  • 根本解决
    • 修复代码(如优化循环、避免阻塞操作)。
    • 调整配置(如线程池大小、JVM参数)。
    • 加强监控(如设置CPU阈值告警)。

回答示例

"当服务器CPU突增时,我会分步骤处理:

  1. 定位高负载进程:用 top 快速找到占用CPU最高的进程,观察是用户进程还是系统进程。
  2. 线程级分析:结合 jstack 或 perf 分析相关线程,确认是否存在死循环或锁竞争。
  3. 检查日志和安全:查看应用错误日志和安全日志,排除代码Bug或恶意攻击。
  4. 关联流量/任务:确认是否有突发流量或定时任务导致。例如之前遇到一个案例,是定时脚本未限制并发,导致CPU打满。
  5. 应急与修复:短期用 cpulimit 限流,长期优化代码逻辑,并完善监控告警。"

4、请简述kubernetes组件有哪些,k8s网络是怎么通信的

Kubernetes 组件概述
Kubernetes 的核心组件分为控制平面(Master)和工作节点(Node)两类:

  1. 控制平面组件(Master)
    • API Server
      集群的唯一入口,提供 REST API,负责与其他组件及用户请求的交互。
    • etcd
      分布式键值存储数据库,保存集群的所有状态和配置数据。
    • Scheduler
      负责将 Pod 分配到合适的 Node 节点,基于资源需求和调度策略决策。
    • Controller Manager
      运行多种控制器(如 Deployment、ReplicaSet、Node 控制器等),确保集群实际状态与期望状态一致。
  2. 工作节点组件(Node)
    • kubelet
      管理 Node 上的 Pod 生命周期,如创建、删除容器,并监控容器状态。
    • kube-proxy
      维护节点网络规则(如 iptables/ipvs),实现 Service 的负载均衡和网络路由。
    • 容器运行时
      如 Docker、containerd,负责运行容器。

Kubernetes 网络通信机制
Kubernetes 网络模型的核心原则是:Pod 间可直接通信,无需 NAT,具体实现依赖 CNI(Container Network Interface)插件。通信流程如下:

  1. Pod 内部通信
    • 每个 Pod 拥有唯一 IP,内部容器共享网络命名空间(通过 localhost 通信)。
  2. Pod 到 Pod 通信
    • 同节点:通过同一节点的虚拟网桥(如 Docker 的 docker0 或 CNI 插件创建的 cni0)直接通信。
    • 跨节点:由 CNI 插件实现(如 Calico、Flannel 等),通过 Overlay 网络(如 VXLAN)或路由策略,确保不同节点 Pod 的 IP 可全局路由。
  3. Service 到 Pod 通信
    • Service 是虚拟 IP(ClusterIP),通过 kube-proxy 维护的 iptables/ipvs 规则将请求负载均衡到后端 Pod。
    • Endpoint 跟踪 Service 对应的 Pod 变化,动态更新代理规则。
  4. 外部访问 Service
    • NodePort:通过节点的端口暴露 Service,流量转发到 Pod。
    • Ingress:通过 HTTP/HTTPS 路由(如 Nginx Ingress Controller)暴露服务,支持域名和路径规则。
  5. DNS 服务
    • CoreDNS 为 Service 和 Pod 提供域名解析,例如:<service-name>.<namespace>.svc.cluster.local

总结
Kubernetes 通过控制平面组件管理集群状态,工作节点运行容器和网络代理。网络通信依赖 CNI 插件实现跨节点 Pod 直连、Service 负载均衡和 DNS 解析,确保整个集群的高效连通性。网络策略(如 NetworkPolicy)可进一步控制流量安全性。

5、请简述cicd执行流程有那些

CI/CD执行流程的核心步骤如下:

  1. 代码提交与触发
    • 开发者将代码推送到版本控制系统(如Git),触发CI流程。通常通过Webhook或定时任务启动。
  2. 持续集成(CI)阶段
    • 代码静态分析:运行代码规范检查(如ESLint)、安全扫描(如SonarQube)。
    • 自动化测试:执行单元测试、集成测试,确保代码质量。
    • 构建(Build):编译代码并生成制品(如JAR包、Docker镜像)。
    • 归档制品:将构建产物存储到制品库(如Nexus、Docker Registry)。
  3. 持续交付(CD)阶段
    • 部署到测试环境:将制品部署到测试环境,进行更复杂的测试(如端到端测试、性能测试)。
    • 人工确认(可选):测试通过后,由人工审批决定是否进入生产环境(持续交付),或全自动部署(持续部署)。
  4. 生产环境部署
    • 滚动发布/蓝绿部署:采用零宕机策略更新生产环境。
    • 监控与反馈:结合监控工具(如Prometheus)实时观察系统状态,发现问题自动触发告警或回滚。
  5. 回滚机制
    • 若生产环境出现故障,快速回滚到上一个稳定版本(如通过Kubernetes的Rollback功能)。