Kubernetes Ingress Controller 高可靠部署最佳实践

简介: 在Kubernetes集群中,Ingress作为集群流量接入层,Ingress的高可靠性显得尤为重要,今天我们主要探讨如何部署一套高性能高可靠的Ingress接入层。

背景简介

在Kubernetes集群中,Ingress是授权入站连接到达集群服务的规则集合,为您提供七层负载均衡能力,您可以通过 Ingress 配置提供外部可访问的 URL、负载均衡、SSL、基于名称的虚拟主机等。作为集群流量接入层,Ingress Controller的高可用性显得尤为重要,今天我们主要探讨如何部署一套高性能高可靠的Ingress Controller接入层。

高可用部署架构

高可用性首先要解决的就是单点故障问题,一般常用的是采用多副本部署的方式,我们在Kubernetes集群中部署高可用Ingress Controller接入层同样采用多节点部署架构,同时由于Ingress作为集群流量接入口,建议采用独占Ingress节点的方式,以避免业务应用与Ingress服务发生资源争抢。
image
如上述部署架构图,由多个独占Ingress实例组成统一接入层承载集群入口流量,同时可依据后端业务流量水平扩缩容Ingress节点。当然如果您前期的集群规模并不大,也可以采用将Ingress服务与业务应用混部的方式,但建议进行资源限制和隔离。

在阿里云容器服务集群中部署高可用Ingress接入层

当我们通过阿里云容器服务控制台成功申请一个Kubernetes集群后,默认集群内部已经部署了一套拥有2个Pod副本的Nginx Ingress Controller服务,其前端挂载在一个公网SLB实例上,通过如下命令可以查看到:

  ~ # 1> 查看nginx-ingress-controller pod副本
  ~ kubectl -n kube-system get pod | grep nginx-ingress-controller
nginx-ingress-controller-674c96ffbc-7h4nt                    1/1       Running   0          4h
nginx-ingress-controller-674c96ffbc-rvfcw                    1/1       Running   0          4h
  ~
  ~
  ~ # 2> 查看nginx-ingress-lb服务对应的公网SLB IP
  ~ kubectl -n kube-system get svc nginx-ingress-lb
NAME               TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)                      AGE
nginx-ingress-lb   LoadBalancer   172.19.6.38   47.96.222.140   80:30990/TCP,443:30076/TCP   4h

随着集群业务规模的逐渐扩大,我们需要同时扩容Ingress接入层以保证集群接入层的高性能高可用,因此我们通过如下几种方式来完成:

1、调整Replica数量

我们可以通过简单地调整Nginx Ingress Controller Deployment的Replica数量来快速扩缩容Ingress接入层规模:

  ~ # 1> 这里通过scale命令来扩容到3个Pod副本(可依据具体业务流量来设置为合适的值)
  ~ kubectl -n kube-system scale --replicas=3 deployment/nginx-ingress-controller
deployment.extensions "nginx-ingress-controller" scaled
  ~ 
  ~
  ~ # 2> 查看当前Pod副本情况
  ~ kubectl -n kube-system get pod | grep nginx-ingress-controller
nginx-ingress-controller-674c96ffbc-7h4nt                    1/1       Running   0          4h
nginx-ingress-controller-674c96ffbc-rvfcw                    1/1       Running   0          4h
nginx-ingress-controller-674c96ffbc-xm8dw                    1/1       Running   0          12s

2、指定节点部署

我们知道,负载均衡软件是一种高计算型和高网络IO型的资源,通常情况下建议选择高主频高网络IO的机器来部署,因此当我们集群中同时存在不同规格的节点实例时,假若我们希望将Nginx Ingress Controller仅仅运行在指定的一些高配置的节点上,我们可以通过节点打标的方式来完成:

  ~ # 1> 查看当前集群节点情况
  ~ kubectl get node
NAME                                 STATUS    ROLES     AGE       VERSION
cn-hangzhou.i-bp109znbuf1b19ik17i2   Ready     <none>    4h        v1.11.2
cn-hangzhou.i-bp109znbuf1b19ik17i3   Ready     <none>    4h        v1.11.2
cn-hangzhou.i-bp109znbuf1b19ik17i4   Ready     <none>    4h        v1.11.2
cn-hangzhou.i-bp14p7rlsw8mc28w5wof   Ready     master    4h        v1.11.2
cn-hangzhou.i-bp1845cet96qo07msekf   Ready     master    4h        v1.11.2
cn-hangzhou.i-bp19420uhlyv2e5k4kmh   Ready     master    4h        v1.11.2
  ~
  ~
  ~ # 2> 若我们希望部署在cn-hangzhou.i-bp109znbuf1b19ik17i3和cn-hangzhou.i-bp109znbuf1b19ik17i4两个节点上,
  ~ #    我们可以先给这两个节点打上标 node-role.kubernetes.io/ingress="true"
  ~ kubectl label nodes cn-hangzhou.i-bp109znbuf1b19ik17i3 node-role.kubernetes.io/ingress="true"
node "cn-hangzhou.i-bp109znbuf1b19ik17i3" labeled
  ~ kubectl label nodes cn-hangzhou.i-bp109znbuf1b19ik17i4 node-role.kubernetes.io/ingress="true"
node "cn-hangzhou.i-bp109znbuf1b19ik17i4" labeled
  ~
  ~
  ~ # 3> 然后我们更新deployment增加nodeSelector配置
  ~ kubectl -n kube-system patch deployment nginx-ingress-controller -p '{"spec": {"template": {"spec": {"nodeSelector": {"node-role.kubernetes.io/ingress": "true"}}}}}'
deployment.extensions "nginx-ingress-controller" patched
  ~
  ~
  ~ # 4> 最后我们查看Pod部署情况,发现已经部署在指定的两个节点上
  ~ kubectl -n kube-system get pod -o wide | grep nginx-ingress-controller
nginx-ingress-controller-7cc9b5956c-fs8kf                    1/1       Running   0          50s       172.16.2.4      cn-hangzhou.i-bp109znbuf1b19ik17i4
nginx-ingress-controller-7cc9b5956c-xd77k                    1/1       Running   0          1m        172.16.2.131    cn-hangzhou.i-bp109znbuf1b19ik17i3

注意:1)确保打标节点数不少于Pod副本数以尽量规避多个Pod运行在同一个节点上;2)不建议部署到master节点上;

全方位监控

集群Ingress接入层的监控是必不可少的,您可以通过阿里云容器服务监控以及阿里云云监控对Ingress Pod和Ingress Node进行全方位监控。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
9月前
|
存储 Kubernetes 开发工具
使用ArgoCD管理Kubernetes部署指南
ArgoCD 是一款基于 Kubernetes 的声明式 GitOps 持续交付工具,通过自动同步 Git 存储库中的配置与 Kubernetes 集群状态,确保一致性与可靠性。它支持实时同步、声明式设置、自动修复和丰富的用户界面,极大简化了复杂应用的部署管理。结合 Helm Charts,ArgoCD 提供模块化、可重用的部署流程,显著减少人工开销和配置错误。对于云原生企业,ArgoCD 能优化部署策略,提升效率与安全性,是实现自动化与一致性的理想选择。
589 0
|
8月前
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
9月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
884 33
|
9月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
519 19
|
9月前
|
存储 测试技术 对象存储
使用容器服务ACK快速部署QwQ-32B模型并实现推理智能路由
阿里云最新发布的QwQ-32B模型,通过强化学习大幅度提升了模型推理能力。QwQ-32B模型拥有320亿参数,其性能可以与DeepSeek-R1 671B媲美。
|
10月前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
578 12
|
10月前
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
590 5
|
Kubernetes 容器
《基于Kubernetes的互联网Ingress实践》电子版地址
基于Kubernetes的互联网Ingress实践
195 0
《基于Kubernetes的互联网Ingress实践》电子版地址
|
2月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
292 1
|
2月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
260 89

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多