2024年底-Sre面试问题总结-持续更新

发布于:2024-12-18 ⋅ 阅读:(96) ⋅ 点赞:(0)

这几个缩写 贴一下是因为真的会有人问:(

SRE “Site Reliability Engineer”
站点可靠性工程师

SLA “Service Level Agreement”
服务可用性协议

CICD “Continuos Integration Continous Deployment”
持续集成 持续部署


3个高频问题

  • K8s生产环境中处理过哪些复杂 or 印象很深的问题?
    答: 举了2个生产案例:
  1. k8s coredns历史调用链路问题, pod -> kube-system(coredns) -> Windows(此时节点出现故障) -> Windows Consul服务失败 | -> localCacheDns -> 优化链路 -> 增加告警

  2. 历史配置规范问题: 内网网关Envoy被打爆1台(共2台)、守护进程自启动后 因历史配置不规范导致, 所有CDS/EDS没有加载起来, 内网一半调用全卡在网关上报后端超时.

有问题就有复盘, 出现问题要快速定位、解决。
恢复后全面复盘: 包括但不限于链路优化、监控、高可用、故障预案、操作规范等等


  • Sre和传统运维的区别?
    答: 个人理解, SLI、SLO 2个重要指标, 50%运维50%开发、消除琐事、 Oncall、故障前、故障后复盘

  • 监控告警中你是怎么定义它的级别的, 为什么它是Warn或Critical?
    答: AlertmanagerRule里的规则大多参考官方, 这块儿内容没有非常细致的区分过, 有些靠个人经验. (其实这个问题 应该反馈出 整个告警与响应流程, 告警规则应该了解的越细越好)



K8s相关

存储

  • 你们之前的k8s都用过哪些存储? 有没有用过分布式存储, 比如 ceph?
    答: 所在场景没用分布式, 常用hostPath、emptyDir、nfs、configmap、secret 以及云盘nas。
  • 如果用到nfs, 那单节点的问题怎么解决?
    答: 生产用的云盘没用nfs, 也做的有异机备份。| 看方案可以这样 client -> keepalived-> nfs (rsync实时同步)

网络

  • k8s svc几种类型?
    答: ClusterIP、NodePort、LoadBalancer、ExternalName
  • svc ipHash了解过吗? 除了ipHash 还有哪些?
    答: 我理解这部分其实是说 Session affinity会话保持(svc .spec.sessionAffinity), 默认为none, 可以配置为ClusterIP 然后设置timeoutSeconds 会话超时时间
  • k8s下不同主机的pod通信是怎么实现的 底层实现原理?
    答: CNI 网络插件, calico、flannel等, 如 Flannel 会在每一个宿主机上运行名为 flanneld 的代理,其负责为宿主机预先分配一个子网,并为 Pod 分配 IP 地址,数据包则通过 VXLAN、UDP 或 host-gw 等后端机制进行转发.
  • svc是怎么找到后端的pod?
    答: svc -> 标签 -> endpoints (pod)
  • 私有化k8s环境下, 如果k8s和外部负载均衡网络通的, 内部服务想暴露到外部 有哪几种实现方式?
    答: nodePort、ingress、istio…

调度

  • k8s原生之上的调度上的处理? 假设要调度1批deployment到指定机器 不干预其他机器应该如何实现?
    答: koordinator-system负载感知 和 节点亲和性调度、污点+容忍实现
  • 有自己写过k8s operator吗?
    答:

迁移 (自建机房会有这个趋势)

  • 如果将自建MySQL迁移上云, 怎样做影响最小?
    答: 云上的MySQL先建好, 数据从自建上拷贝过去, 然后找业务低峰期, 修改一小部分试点项目的配置, 重启切换读取MySQL地址, 跑一段时间, 如果没问题则可以大范围切换
  • 如果将自建K8s集群迁移到阿里云Ack 迁移流程是怎样的?
    答: 1.镜像, 看阿里云上是自建还是直接买服务 自建设计到暴露网络的问题, 2.服务, 采用Velero备份导入到集群的方式
  • 云上K8s集群升级迁移是怎么做的?
    答: *大版本跨度才会出现 升级迁移, 而不是在线升级, 1.测试新集群-高版本下跑服务和组件是否正常 2.新集群准备好所有基础组件 -> 3.再将业务服务备份导入到新集群 -> 4.最后从云负载均衡上迁移流量至新集群 有问题则从入口处切换 *

基础问题

  • 云上维护K8s有多少节点? 大概多少个Pod? 自建的k8s集群什么版本 及方式
    答: 30, 2000Pod, 1.24 3Master/ETCD kubeadm

  • 创建一个Pod的流程?
    答: 详细可以看米开朗基扬, 简而言之: 下图可以看虫师技艺
    CloudNativeX

  • 创建一个Deployment会生成哪些资源?
    答: 容器、Pod、ReplicaSet

  • Deployment 和 Statefulset有什么区别? 有状态就不能扩缩容吗?
    答: 无状态和有状态, 无状态可以随意创建销毁 有状态需要关心各节点的角色和关系, 不能随意替换或重建, 可能影响到数据中断, 影响到服务

  • Deployment几种升级方式?
    答: 滚动升级RollingUpdate 和 重新创建Recreate, 默认滚动

  • ETCD存储哪些东西? 有没有做过增删改查、备份恢复的操作?
    答: k8s元数据、集群状态信息, 比如节点状况, deployment 实际yaml等, 增删改查有接口的, 备份是打snapshot快照

  • k8s如何更新证书?
    答: 生成证书、先更新master、再更新node节点

  • k8s备份怎么做的?
    答: 脚本+异机、Velro

  • k8s中有哪几种健康检查? 为什么要设置3种健康检查方式?
    StartupProbe 启动探针, 3者中优先进行检查 , 确保有足够的启动时间
    ReadinessProbe 就绪探针, 确保是否准备好接收流量, 如果有问题则摘除对应endpoints流量
    LivenessProbe 存活探针, 如果有问题则重启

  • configmap和secret的区别?
    答: 前者存配置信息 后者存密钥且base64加密

  • hpa 应该如何查看? 具体要怎么设置?
    答: kubectl get hpa即可, 具体设置cpu或内存的request值为基数、设置扩容阈值、扩缩容副本数

  • docker中 arm64的镜像是否可以放在amd64机器上运行?
    答: 一般不可以, 除非用工具转换 也不建议转换

  • Helm部署流程? Helm chart的作用? 是否可以将同一个chart部署在不同的pod中? 和configmap的区别? 如何更新配置呢?
    答: 先repo add仓库update更新, 再install , 如果想自己修改配置, 可以pull 版本, 在install ./目录。
    chart 是资源的集合(deploy、svc、rbac…)。
    helm install 指定不同的release即可。
    helm upgrade更新原有配置。

  • Dockerfile 是运维制作的吗? 一个java的Dockerfile应该会涵盖哪些内容? 如果想要批量更新应该怎么做? Dockerfile和K8s如何结合使用?
    答:

  • Deployment、Service这种yaml是开发维护的吗? 还是运维发布维护的?
    答:


实战问题

Pod遇到过哪些起不来的报错? 你会怎样排查?
答:
K8s中如何保留故障现场? 比如4个pod都挂掉了, 我如何将这个现场保留 反馈给研发分析呢?
答:
K8s中如何将不健康节点的流量摘除? pod什么状态下流量会被摘除?
答:
有没有遇到过 创建1个Pod 然后 出现报错, 然后创建了很多的异常pod的情况? 要怎么解决?
答:


todo…

监控、日志、链路追踪相关

监控

  • 如果你有一个干净的K8s ACK 环境, 需要增加 监控和日志 你会怎么做?
  • Prometheus监控体系是怎样的? 用了什么组件? 数据存储多久? 如果想外接存储 365天应该如何实现?
  • Prometheus监控k8s是什么组件?
  • Prometheus监控交换机路由器?

CICD相关

  • 现在Jenkins的流程是怎么样的? 除了Jenkins还用过什么CICD? 或者了解过的?
  • 现有CICD优化具体做了哪些?

Linux基础及中间件相关

  • TCP3次握手
  • TCP之上https建立流程
  • TLS双向认证是什么?
  • https 1年有效期怎么更好的解决?
  • 如果给你一台干净的Linux机器 上边跑java进程, 你会对机器做什么初始化?
  • LVS的几种模式
  • linux 下有个文件, 有10几层目录, 如何快速找到呢?
  • linux 系统内核问题 夯住了, 能ping通, 应该如何提前监控哪些?
  • Calico BGP 了解吗?
  • 网卡bond是mod几? 网卡bond中1个网卡坏掉应该如何切换?
  • MySQL选型是什么? 备份怎么做的?
  • 什么样的文档算是一个好的文档 应该包含哪些内容?

  • Redis相关

    • Redis Clusters为什么需要15台? 多大的数据量?
    • Redis中key是怎么释放? 是直接释放吗?
      • 答: 1.惰性删除(当客户端尝试访问一个Key时,Redis首先会检查该Key是否过期。如果Key已过期,Redis会在访问时立即将其删除,以确保过期数据不再被访问和占用内存)
      • 2.定期删除(根据配置时间 来定期清理)
    • Redis当我set一个key是这个内存是如何分配的?
      • 答: 1.预分配 (会有预留空间, 当实际需要的空间大于预分配的空间时,Redis会自动扩展内存以适应新的需求)
      • 2.惰性释放 (当字符串的长度超过了预分配的空间,Redis会自动释放多余的内存)
  • ES相关

    • ES的索引声明周期管理流程?
    • 答: ILM管理, hot频繁读写、warm只读、cold不在查询、delete删除
    • ES单节点, 如果上限是1000索引, 但是只跑了500 就提示满了是为啥 应该排查哪些?
      • 答: 内存限制、磁盘、文件句柄、参数配置了上限
    • ES有没有被打爆的情况? 原因是什么?


慢慢完善中…欢迎大家指正、交流、探讨:)


网站公告

今日签到

点亮在社区的每一天
去签到