1. 什么是Kubernetes?它的核心功能是什么?
答案:Kubernetes是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。核心功能包括:
- 自动化容器调度与负载均衡
- 自我修复(自动重启失败的容器)
- 水平扩展(根据负载动态调整实例数量)
- 服务发现与负载均衡
- 滚动更新与回滚
2. 解释Pod和Deployment的区别
答案:
- Pod:K8s的最小调度单元,包含一个或多个共享网络/存储的容器。
- Deployment:更高层抽象,用于管理Pod的声明式更新(如滚动升级)、副本数和回滚,确保应用的高可用性。
3. 如何排查Pod一直处于Pending
状态的问题?
答案:可能原因及排查步骤:
- 资源不足 :
kubectl describe pod <pod-name>
查看事件,检查节点资源是否足够。 - 节点选择器/污点 :检查Pod的
nodeSelector
或tolerations
是否匹配节点标签。 - 存储卷挂载失败:检查PV/PVC是否绑定成功。
4. 什么是Service?ClusterIP、NodePort和LoadBalancer有什么区别?
答案:
- Service :为一组Pod提供稳定的网络端点。
- ClusterIP:默认类型,仅在集群内部访问。
- NodePort:通过节点IP和静态端口暴露服务(范围30000-32767)。
- LoadBalancer:通过云提供商的负载均衡器对外暴露服务。
5. 如何在不中断服务的情况下更新Deployment的镜像版本?
答案:使用滚动更新策略:
bash
kubectl set image deployment/<deployment-name> <container-name>=<new-image> --record
或修改Deployment的YAML文件后apply
。K8s会逐步替换旧Pod,确保服务可用。
6. 解释ConfigMap和Secret的作用及区别
答案:
- ConfigMap:存储非敏感配置(如环境变量、配置文件)。
- Secret :存储敏感数据(如密码、密钥),以Base64编码(需注意编码≠加密)。
两者均可通过环境变量或卷挂载到Pod中。
7. 什么是Ingress?它与Service有何不同?
答案:
- Ingress:管理外部访问集群服务的规则(如HTTP路由、域名绑定),需配合Ingress Controller(如Nginx、Traefik)使用。
- Service:提供内部服务发现和负载均衡,Ingress是其上层代理。
8. 如何限制Pod的资源使用?
答案 :在Pod的resources
字段中设置请求(requests
)和限制(limits
):
yaml
resources:
requests:
cpu: "100m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "1Gi"
9. 解释K8s的架构,包括Master和Worker节点组件
答案:
- Master节点 :
- API Server:处理所有集群操作请求。
- Scheduler:将Pod调度到合适节点。
- Controller Manager:维护集群状态(如副本数)。
- etcd:键值存储集群数据。
- Worker节点 :
- kubelet:管理Pod生命周期。
- kube-proxy:处理网络规则。
- 容器运行时(如Docker/containerd)。
10. 如何备份和恢复K8s集群?
答案:
-
备份etcd :
bashetcdctl snapshot save /backup/etcd-snapshot.db
-
备份资源YAML :
bashkubectl get all --all-namespaces -o yaml > cluster-backup.yaml
-
恢复 :通过etcd快照或重新
apply
YAML文件。
附加建议
- 根据面试者经验调整难度(如问Helm、Operator、HPA等进阶问题)。
- 结合场景题考察实战能力(如"如何设计一个高可用K8s集群?")。
希望这些问题能帮助你准备面试!