这份指南为准备SRE、DevOps或平台工程师职位的您而设计。内容涵盖了从容器化、服务编排、主流中间件到大模型部署等现代运维领域的核心技术。面试官不仅希望了解您“会不会用”,更关心您是否理解其“核心原理”以及在复杂场景下的“排错和优化能力”。
核心原理:Docker 利用 Linux 内核的 Namespace (资源隔离) 和 Cgroups (资源限制) 技术实现轻量级虚拟化。与虚拟机(VM)相比,它不虚拟化硬件,而是共享宿主机内核,因此启动更快、资源占用更少。
# 镜像操作
docker images # 列出本地镜像
docker pull [image] # 拉取镜像
docker build -t [name:tag] . # 构建镜像
docker rmi [image_id] # 删除镜像
# 容器操作
docker ps # 列出正在运行的容器
docker ps -a # 列出所有容器
docker run -d -p 80:80 [image] # 后台运行容器并映射端口
docker stop [container_id] # 停止容器
docker start [container_id]# 启动容器
docker rm [container_id] # 删除容器
docker logs [container_id] # 查看容器日志
docker exec -it [container_id] /bin/bash # 进入容器交互
# 使用官方的 OpenJDK 11 作为基础镜像
FROM openjdk:11-jre-slim
# 设置工作目录
WORKDIR /app
# 将构建好的 jar 包复制到容器的 /app 目录下
COPY target/my-app-1.0.jar my-app.jar
# 声明容器对外暴露的端口
EXPOSE 8080
# 容器启动时执行的命令
ENTRYPOINT ["java", "-jar", "my-app.jar"]
核心原理:K8s 是一个用于自动部署、扩展和管理容器化应用程序的开源平台。其核心是声明式 API 和控制器模式。用户通过 YAML 文件“声明”期望的系统状态(如:我需要3个 Nginx 副本),K8s 的各种控制器 (Controller) 会持续工作,将系统的“实际状态”调整为用户期望的“最终状态”。
kube-apiserver: 暴露 K8s API,是所有组件交互的统一入口,负责处理和验证请求。etcd: 高可用的键值存储系统,保存了整个集群的所有状态数据。kube-scheduler: 负责 Pod 的调度,当一个新 Pod 被创建时,Scheduler 会根据资源需求、亲和性等策略为其选择一个合适的 Worker 节点。kube-controller-manager: 运行所有控制器,如节点控制器、副本控制器等,负责维护集群状态。kubelet: 在每个 Worker 节点上运行的代理,负责与 Master 通信,管理本机上的 Pod 生命周期。kube-proxy: 负责实现 K8s Service 的网络通信和负载均衡。Container Runtime: 容器运行时,如 Docker 或 containerd,负责真正地运行容器。
Deployment: 最常用,用于管理无状态应用。它支持滚动更新、回滚、扩缩容。Pod 的名称是随机的,也没有稳定的网络标识。StatefulSet: 用于管理有状态应用,如数据库。它能保证 Pod 拥有稳定的、唯一的网络标识(如 `pod-0`, `pod-1`)和持久化存储。部署、更新和删除都是按顺序进行的。DaemonSet: 确保在每个 (或部分) Worker 节点上都运行一个 Pod 副本。常用于部署日志收集、节点监控等集群级别的守护进程。
ClusterIP: (默认) 只在集群内部可见,通过一个虚拟 IP 提供服务。NodePort: 在每个节点的同一个端口上暴露服务,可以通过 `<NodeIP>:<NodePort>` 从集群外部访问。LoadBalancer: 在 NodePort 的基础上,向云服务商(如 AWS, GCP)申请一个外部负载均衡器来转发流量到 Service。ExternalName: 将 Service 映射到 DNS 名称,常用于集群内服务访问外部服务。
# 查看资源
kubectl get pods/svc/deploy -n [namespace] -o wide
kubectl describe pod [pod_name] # 查看 Pod 详细信息和事件
# 操作资源
kubectl apply -f [yaml_file] # 创建或更新资源
kubectl delete -f [yaml_file] # 删除资源
kubectl delete pod [pod_name] --force --grace-period=0 # 强制删除
# 调试排错
kubectl logs [pod_name] -c [container_name] # 查看日志
kubectl exec -it [pod_name] -- /bin/sh # 进入容器
kubectl port-forward [pod_name] 8080:80 # 端口转发
# 集群管理
kubectl top pod/node # 查看资源使用情况
kubectl cordon/uncordon [node_name] # 标记节点不可调度/可调度
kubectl drain [node_name] # 驱逐节点上的 Pod
核心原理:MySQL 是一个流行的关系型数据库管理系统。其核心存储引擎 InnoDB 支持事务、行级锁和外键。数据通过 B+ 树索引来优化查询速度。主从复制 (Replication) 是实现读写分离和高可用的基础。
核心原理:Redis 是一个基于内存的高性能键值存储系统。它之所以快,主要因为:1. 纯内存操作;2. 单线程模型,避免了多线程上下文切换和锁的开销;3. 采用 I/O 多路复用技术 (epoll) 处理并发连接。
核心原理:Zookeeper 是一个为分布式应用提供一致性服务的软件。它提供了一个类似文件系统的树形数据结构 (ZNode),并保证了对这些 ZNode 操作的原子性和顺序一致性。其核心算法是 ZAB (Zookeeper Atomic Broadcast),保证了主备节点之间数据同步和一致性。
核心原理:Elasticsearch 是一个基于 Lucene 库的分布式搜索和分析引擎。其核心是倒排索引 (Inverted Index)。倒排索引记录了词 (Term) 到包含该词的文档 (Document) 的映射关系,从而可以极快地响应全文检索请求。
核心原理:Ansible 是一个自动化运维工具,用于应用部署、配置管理、任务编排等。其特点是无客户端 (Agentless),通过 SSH 协议与被管理节点通信。它使用 YAML 语言描述任务,易于读写,并遵循幂等性原则,即一个操作执行一次和执行多次的效果是相同的。
---
- name: Install and start Nginx
hosts: webservers
become: yes # 使用 sudo 执行任务
tasks:
- name: Install Nginx using yum
yum:
name: nginx
state: present
- name: Ensure Nginx service is running and enabled
service:
name: nginx
state: started
enabled: yes
核心概念:大模型部署的核心挑战在于巨大的模型体积、高昂的计算和显存需求。运维需要关注的不再仅仅是 CPU 和内存,而是以 GPU/NPU 等加速器为核心的异构算力资源的管理、调度和监控。
apiVersion: v1
kind: Pod
metadata:
name: cuda-pod
spec:
containers:
- name: my-container
image: nvidia/cuda:11.0-base
resources:
limits:
nvidia.com/gpu: 1 # 申请1个GPU卡
祝你面试成功,拿到心仪的 Offer!