面试宝典(纯享版)-- k8s篇

打印 上一主题 下一主题

主题 2048|帖子 2048|积分 6144

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x

目次


  • 底子概念
  • 架构与焦点组件
  • Pod 与工作负载
  • 服务与网络
  • 存储管理
  • 安全与 RBAC
  • 运维与监控
  • 高级特性
  • 故障排查
  • 开放设计题

一、底子概念

1. 什么是 Kubernetes?它的焦点价值是什么?

答案
Kubernetes(K8s)是开源的容器编排平台,焦点能力包括:


  • 自动化运维:自动扩缩容、滚动更新、自愈(如 Pod 故障重启)。
  • 声明式配置:通过 YAML/JSON 界说应用终态(如 Deployment、Service)。
  • 资源隔离与优化:通过定名空间(Namespace)和资源配额(Resource Quota)管理多租户资源。
  • 跨环境一致性:支持混合云、边缘盘算等复杂部署场景。
2. Kubernetes 与 Docker Swarm 的对比

对比维度KubernetesDocker Swarm适用场景大规模生产环境、复杂应用架构小规模快速部署扩展性支持 CRD、Operator 深度定制原生功能有限,扩展依赖插件网络模型需配合 CNI 插件(如 Calico)内置 Overlay 网络存储管理PV/PVC/StorageClass 体系Volume 驱动简单社区生态CNCF 主导,云厂商广泛支持Docker 官方维护,生态较小 3. 为什么需要 Pod 而不是直接部署容器?

答案


  • 资源共享:Pod 内多个容器共享网络定名空间(同一 IP)、存储卷(Volume)和 IPC。
  • 原子调度:紧密耦合的容器(如主应用+日记网络 Sidecar)必须部署在同一节点。
  • 生命周期一致性:Pod 作为最小调度单位,确保关联容器同时启停。

二、架构与焦点组件

1. Master 节点焦点组件

组件职责API Server集群操作的唯一入口,RESTful API 处理,权限校验,数据持久化到 etcdetcd分布式键值存储,生存集群所有状态数据(如 Pod、Service 配置)Scheduler根据资源需求和束缚,将 Pod 调度到符合 NodeController Manager运行控制器逻辑(如 Node Controller、Deployment Controller) 2. Node 节点焦点组件

组件职责Kubelet管理 Pod 生命周期,与容器运行时(如 Docker)交互,上报节点状态Kube-proxy维护节点网络规则(如 iptables/IPVS),实现 Service 的负载均衡Container Runtime运行容器的底层软件(如 Docker、Containerd) 3. 哀求从 kubectl 到 APIServer 的流程


  • 用户实行 kubectl apply -f pod.yaml
  • kubectl 将 YAML 转换为 JSON 发送给 APIServer
  • APIServer 验证哀求权限并写入 etcd
  • Scheduler 检测到未绑定的 Pod,选择符合 Node
  • Kubelet 监听到 Pod 绑定事件,拉取镜像并启动容器

三、Pod 与工作负载

1. Pod 的生命周期状态

状态触发条件PendingPod 已被 APIServer 接受,但未调度或镜像下载中RunningPod 已绑定到 Node,至少一个容器正在运行Succeeded所有容器正常退出(退出码为 0)Failed至少一个容器异常退出(非零退出码)Unknown无法获取 Pod 状态(通常因 Node 失联) 2. Deployment vs StatefulSet

特性DeploymentStatefulSet适用场景无状态应用(如 Web 服务)有状态应用(如 MySQL、ZooKeeper)网络标识随机 Pod 名称与 IP稳定的 Pod 名称(如 web-0)和 DNS 记录存储暂时存储或共享 Volume持久化 Volume(每个 Pod 独立 PV)扩缩容次序无序次序扩缩(从索引 0 到 N-1) 3. 怎样包管应用高可用?

答案


  • 副本机制:通过 Deployment 设置 replicas: 3 分散 Pod 到不同节点。
  • 反亲和性:配置 podAntiAffinity 克制 Pod 会合到同一节点。
  • PDB(PodDisruptionBudget):界说最小可用副本数,防止维护时不测停止。

四、服务与网络

1. Service 范例详解

范例用途ClusterIP集群内访问的虚拟 IP(默认范例)NodePort通过 NodeIPort 暴露服务(端口范围 30000-32767)LoadBalancer自动创建云厂商负载均衡器(如 AWS ALB)ExternalName将服务映射到外部 DNS(CNAME 记录) 2. Ingress 工作原理

答案


  • Ingress 规则示例
  1. apiVersion: networking.k8s.io/v1
  2.   kind: Ingress
  3.   metadata:
  4.     name: example-ingress
  5.   spec:
  6.     rules:
  7.     - host: foo.example.com
  8.       http:
  9.         paths:
  10.         - path: /bar
  11.           pathType: Prefix
  12.           backend:
  13.             service:
  14.               name: service1
  15.               port:
  16.                 number: 80
复制代码


  • ** Ingress Controller:根据规则配置反向代理(如 Nginx 的 nginx.conf)。**
3. 怎样实现跨定名空间服务访问?

答案
使用全限定域名(FQDN):<service-name>.<namespace>.svc.cluster.local。
示例:service1.default.svc.cluster.local。
五、存储管理

1. PV 生命周期管理

阶段** 形貌**AvailablePV 已创建,未绑定到 PVCBoundPV 已与 PVC 绑定ReleasedPVC 被删除,但 PV 仍保留数据(需手动清理)FailedPV 自动接纳失败 2. 动态卷配置示例

  1. apiVersion: storage.k8s.io/v1
  2. kind: StorageClass
  3. metadata:
  4.   name: fast
  5. provisioner: kubernetes.io/aws-ebs
  6. parameters:
  7.   type: gp3
  8. ---
  9. apiVersion: v1
  10. kind: PersistentVolumeClaim
  11. metadata:
  12.   name: mypvc
  13. spec:
  14.   storageClassName: fast
  15.   accessModes:
  16.     - ReadWriteOnce
  17.   resources:
  18.     requests:
  19.       storage: 100Gi
复制代码

六、安全与 RBAC

1. ServiceAccount 的作用

答案
为 Pod 中的进程提供身份标识,用于与 APIServer 交互。每个定名空间默认有一个 default ServiceAccount。
2. RBAC 配置示例

  1. # 创建 Role(限定在 default 命名空间)
  2. apiVersion: rbac.authorization.k8s.io/v1
  3. kind: Role
  4. metadata:
  5.   namespace: default
  6.   name: pod-reader
  7. rules:
  8. - apiGroups: [""]
  9.   resources: ["pods"]
  10.   verbs: ["get", "watch", "list"]
  11. # 绑定 Role 到用户
  12. apiVersion: rbac.authorization.k8s.io/v1
  13. kind: RoleBinding
  14. metadata:
  15.   name: read-pods
  16.   namespace: default
  17. subjects:
  18. - kind: User
  19.   name: alice
  20.   apiGroup: rbac.authorization.k8s.io
  21. roleRef:
  22.   kind: Role
  23.   name: pod-reader
  24.   apiGroup: rbac.authorization.k8s.io
复制代码

七、运维与监控

1. 怎样优雅升级集群?

答案


  • kubeadm 升级步调:

    • 升级主节点:kubeadm upgrade apply v1.25.0
    • 排空节点:kubectl drain <node> --ignore-daemonsets
    • 升级 kubelet:apt-get upgrade kubelet
    • 排除节点掩护:kubectl uncordon <node>

2. Prometheus 监控指标范例

范例形貌示例Counter只增不减的累积值HTTP 哀求总数Gauge可增减的瞬时值当前内存使用量Histogram采样观测值分布(如相应时间)哀求延长分布(P50/P90/P99)Summary客户端盘算的百分位数(与 Histogram 类似,但盘算方式不同) 八、高级特性

1. CustomResourceDefinition (CRD)

答案
答应用户自界说资源范例,扩展 Kubernetes API。
示例:界说一个 CronTab 资源:
  1. apiVersion: apiextensions.k8s.io/v1
  2. kind: CustomResourceDefinition
  3. metadata:
  4.   name: crontabs.stable.example.com
  5. spec:
  6.   group: stable.example.com
  7.   versions:
  8.     - name: v1
  9.       served: true
  10.       storage: true
  11.       schema: {...}
  12.   scope: Namespaced
  13.   names:
  14.     plural: crontabs
  15.     singular: crontab
  16.     kind: CronTab
复制代码
2. Horizontal Pod Autoscaler (HPA)

答案
根据 CPU/内存或自界说指标自动扩缩 Pod 数量。
配置示例:
  1. apiVersion: autoscaling/v2
  2. kind: HorizontalPodAutoscaler
  3. metadata:
  4.   name: myapp-hpa
  5. spec:
  6.   scaleTargetRef:
  7.     apiVersion: apps/v1
  8.     kind: Deployment
  9.     name: myapp
  10.   minReplicas: 2
  11.   maxReplicas: 10
  12.   metrics:
  13.   - type: Resource
  14.     resource:
  15.       name: cpu
  16.       target:
  17.         type: Utilization
  18.         averageUtilization: 50
复制代码

九、故障排查

1. Pod 处于 CrashLoopBackOff 状态的可能缘故原由及办理方案

答案
缘故原由现象办理方案容器启动命令错误容器启动后立即退出(Exit Code ≠ 0)查抄容器日记:kubectl logs <pod-name> -c <container-name>资源配额不足事件显示 OutOfMemory 或 CPUThrottling调整 Pod 的 resources.limits 或增加节点资源存储卷挂载失败事件显示 FailedMount查抄 PVC/PV 绑定状态:kubectl get pvc,验证存储后端可用性依赖服务不可用日记显示连接超时(如数据库)验证 Service/DNS 配置:kubectl exec -it <pod-name> -- nslookup <service> 2. 怎样诊断网络不通问题?

排查步调

  • Pod 内部网络测试
    1. kubectl exec -it <pod-name> -- ping <目标IP>
    2. kubectl exec -it <pod-name> -- curl -v http://<service-name>:<port>
    复制代码
  • 查抄 NetworkPolicy
    1. kubectl get networkpolicy -n <namespace>  # 确认是否有流量拦截策略
    复制代码
  • 验证 CNI 插件状态
    1. kubectl get pods -n kube-system | grep -E 'calico|flannel'  # 检查网络插件 Pod 是否健康
    复制代码
  • 节点防火墙规则
    1. iptables -L -n -v | grep DROP  # 检查是否有异常规则阻断流量
    复制代码
      

十、开放设计题

1. 设计一个混合云 Kubernetes 集群方案

焦点设计点:



  • 集群联邦(Kubefed)

    • 在 AWS 和 Azure 分别部署独立集群,通过 Kubefed 实现统一管理。
    • 使用 FederatedDeployment 同步应用副本到多云环境。

  • 跨云网络互通

    • 通过 VPN 或云厂商专线(如 AWS Direct Connect)打通 VPC/VNet。
    • 使用 Cilium ClusterMesh 实现跨集群服务发现。

  • 数据同步与灾备

    • 使用 Velero 备份集群状态到跨云对象存储(如 AWS S3 和 Azure Blob)。
    • 部署 Crossplane 管理多云资源(如数据库、负载均衡器)。

2. 怎样实现零宕机升级 Kubernetes 集群?

实行步调:



  • 滚动升级 Master 节点

    • 使用 kubeadm upgrade plan 查抄可升级版本。
    • 逐个隔离 Master 节点并升级组件(kube-apiserver、etcd、kube-controller-manager)。

  • 工作节点升级策略

    • 创建新节点池(Node Pool),逐步迁移 Pod 到新节点。
    • 使用 kubectl drain --ignore-daemonsets 安全排空旧节点。

  • 关键组件验证

    • 查抄集群状态:kubectl get componentstatuses
    • 验证焦点应用:kubectl rollout status deployment/<app-name>

  • 回滚预案

    • 保留旧版本 etcd 快照:etcdctl snapshot save backup.db
    • 配置 Argo Rollouts 自动回滚机制(基于 Prometheus 监控指标)。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美食家大橙子

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表