面试官:有做过高可用的K8S集群部署方案吗?

本文详述了如何搭建高可用的K8S集群,包括LVS、HAProxy、etcd集群和Kubernetes Master Worker的部署,强调了7层负载均衡和etcd的故障容忍度。还讨论了Master节点的高可用策略,以及硬件配置和验证步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文已收录GitHub,更有互联网大厂面试真题,面试攻略,高效学习资料等

一、涉及到的内容

  • LVS
  • HAProxy
  • Harbor
  • etcd
  • Kubernetes (Master Worker)

二、整体拓补图

以上是最小生产可用的整体拓补图(相关节点根据需要进行增加,但不能减少)

按功能组划分

  • SLB
    • LVS
    • HAProxy
  • etcd
  • K8S Node (Master / Worker)

三、SLB

LVS 、HAProxy 被规划为基础层,主要提供了一个高可用的7层负载均衡器。

由LVS keepalived 提供一个高可用的VIP(虚拟IP)。

这个VIP DR模式转发到后端的HAProxy服务器。

HAProxy反代了K8S Master服务器,提供了K8S Master API的高可用和负载均衡能力。

1. 可以使用Nginx代替HAProxy吗

是可以的,这边使用HAproxy是因为k8s文档中出现了HAproxy,且后续可能会有4层反代的要求,从而使用了HAProxy。

2. 可以直接从LVS转发到Master吗

理论上可行,我没有试验。

如果不缺两台机器推荐还是架设一层具有7层代理能力的服务。

k8s apiserver、harbor、etcd都是以HTTP的方式提供的api,如果有7层代理能力的服务后续会更容易维护和扩展。

3. 推荐配置

四、etcd

etcd是一个采用了raft算法的分布式键值存储系统。

这不是k8s专属的是一个独立的分布式系统,具体的介绍大家可以参考官网,这边不多做介绍。

我们采用了 static pod的方式部署了etcd集群。

1. 失败容忍度

最小可用节点数:(n/2)+1,下面是一个参考表格,其中加粗的是推荐的节点数量:

2. 推荐配置

括号内是官方推荐的配置

五、Kubernetes集群

kubernetes集群主要有两种类型的节点:Master和Worker。

  • Master则是集群领导。
  • Worker是工作者节点。

可以看出这边主要的工作在Master节点,Worker节点根据具体需求随意增减就好了。

Master节点的高可用拓补官方给出了两种方案。

  1. Stacked etcd topology(堆叠etcd)
  2. External etcd topology(外部etcd)

可以看出最主要的区别在于etcd的部署方式。

第一种方案是所有k8s Master节点都运行一个etcd在本机组成一个etcd集群。

第二种方案则是使用外部的etcd集群(额外搭建etcd集群)。

1. Master节点的组件

  • apiserver
  • controller-manager
  • scheduler

一个master节点主要含有上面3个组件 ( 像cloud-controller-manager这边就不多做说明了,正常不会用到 )

  • apiserver: 一个api服务器,所有外部与k8s集群的交互都需要经过它。(可水平扩展)
  • controller-manager: 执行控制器逻辑(循环通过apiserver监控集群状态做出相应的处理)(一个master集群中只会有一个节点处于激活状态)
  • scheduler: 将pod调度到具体的节点上(一个master集群中只会有一个节点处于激活状态)

可以看到除了apiserver外都只允许一个 实例处于激活状态(类HBase)运行于其它节点上的实例属于待命状态,只有当激活状态的实例不可用时才会尝试将自己设为激活状态。
这边牵扯到了领导选举(zookeeper、consul等分布式集群系统也是需要领导选举)

2. Master高可用需要几个节点?失败容忍度是多少

k8s依赖etcd所以不存在数据一致性的问题(把数据一致性压到了etcd上),所以k8s master不需要采取投票的机制来进行选举,而只需节点健康就可以成为leader。

所以这边master并不要求奇数,偶数也是可以的。

那么master高可用至少需要2个节点,失败容忍度是(n/0)+1,也就是只要有一个是健康的k8s master集群就属于可用状态。(这边需要注意的是master依赖etcd,如果etcd不可用那么master也将不可用)

3. 硬件配置

六、高可用验证

至此生产可用的k8s集群已“搭建完成”。为什么打引号?因为还没有进行测试和验证,下面给出我列出的验证清单

还有涉及的BGP相关的验证不在此次文章内容中,后续会为大家说明。

七、写在最后

还有一点需要注意的是物理机的可用性,如果这些虚拟机全部在一台物理机上那么还是存在“单点问题”。这边建议至少3台物理机以上

为什么需要3台物理机以上

主要是考虑到了etcd的问题,如果只有两台物理机部署了5个etcd节点,那么部署了3个etcd的那台物理机故障了,则不满足etcd失败容忍度而导致etcd集群宕机,从而导致k8s集群宕机。

### 关于使用Prometheus监控Kubernetes集群的面试问题 #### 了解基本概念 对于任何涉及Prometheus和Kubernetes的技术讨论,理解两者的基础知识至关重要。 - **什么是Prometheus?** Prometheus是一个开源系统监控和警报工具包[^1]。它通过HTTP拉取指标数据并存储时间序列数据。 - **为什么选择Prometheus来监控Kubernetes集群?** 由于其强大的查询语言(PromQL),易于配置以及良好的社区支持,Prometheus成为Kubernetes环境中理想的监控解决方案之一。 #### 配置与集成方面的问题 深入探讨如何具体实施Prometheus以有效监视Kubernetes环境中的资源和服务状态。 - **怎样安装Prometheus Operator到现有的Kubernetes集群上?** 可以利用Helm图表简化部署过程;另外也可以直接应用官方提供的YAML文件完成安装操作。 ```yaml apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: example-app-monitoring spec: selector: matchLabels: app.kubernetes.io/name: "example-app" endpoints: - port: web ``` - **解释下ServiceMonitor的作用及其工作原理是什么样的?** `ServiceMonitor`定义了一组服务端点作为目标供Prometheus抓取度量标准。当创建一个新的`ServiceMonitor`对象时,Operator会自动发现符合条件的服务并将它们注册为目标给指定版本下的Prometheuses实例去定期获取最新统计信息。 #### 故障排除及优化建议 针对可能出现的问题提供解决思路和技术手段。 - **如果遇到内存泄漏的情况应该怎么办呢?** 考虑到Dokku这样的平台可以通过插件形式启用Prometheus度量功能,则应当激活该特性以便收集必要的性能指标用于分析定位潜在瓶颈所在之处。此外还可以考虑定时重启表现不佳的应用程序组件从而缓解短期压力[^2]。 - **能否举例说明一些常见的告警规则设置方式吗?** 当然可以。比如CPU利用率过高、Pod异常终止次数过多等情况都可以设定相应的阈值触发通知机制提醒运维人员及时处理: ```yaml groups: - alert: HighCpuUsage expr: sum(rate(container_cpu_usage_seconds_total{job="kubernetes-cadvisor"}[5m])) by (namespace,pod_name) > 0.8 for: 5m labels: severity: warning annotations: summary: "{{ $labels.namespace }}/{{ $labels.pod_name }} CPU usage is above 80%" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值