本文只是笔者针对 Kubernetes 在生产环境运行的一些关于架构设计和实现方案的总结。
首先,我们来梳理下 Kubernetes 生产架构,其设计适用于绝大多数环境。如下图所示。
在该架构中,我们可以将其分为四层,如下:
下面,我们分别来谈谈各层的具体实现方案。
1. Kubernetes 平台
2. Ceph / NFS 数据存储 Kubernetes 平台的数据持久化存储,可以使用 Ceph、NFS 等存储方案。其中,Ceph 适用于有其技术背景或大容量存储需求的公司;而 NFS 适用于存储容量需求相对较小,无专业存储技术背景的公司。
外部客户端访问 K8s 集群内的服务、负载均衡和路由规则定义使用 Traefik Ingress 实现。此外,应当实现 Ingress 服务 HA 高可用,可以想象在 K8s 集群中,大量的出入口流量都进过 Ingress,其负载是非常大的,其重要程度不言而喻,因此实现 HA 就非常重要。Ingress Controller 节点(无论是基于 Nginx 还是 Traefik 实现)应当至少为 2 个节点,并在这些节点上,部署Keepalived 和 HAproxy 共同维护一个 VIP 地址,将其提供给 Ingress使用。
架构如下图所示:
在该架构中,Ingress 节点一般使用独立的服务器,即只做将集群外部流量接入到集群内部。除了使用 external IP来暴露 Ingress 的 Service 到集群外部,还可以使用 hostNetwork,如果是公有云,还可以使用 LoadBalance。这样Ingress Controller 将监听节点的 80 和 443 端口,通过热备的形式部署多个 Ingress 节点,并在每个节点上部署 Keepalived,多个节点共同维护一个 VIP,实现 Ingress 服务的高可用。
如上图所示,部署两个 Ingress 节点 172.16.10.11 和 172.16.10.12。公网 IP 映射或转发到内网的 VIP 地址 172.16.10.10 上(如果 VIP 本身是公网 IP 则可以不用转发)。Ingress Controller 的副本数 ReplicaCount 为 2,将被调度到 Node1 和 Node2 这两个节点上。同时,使用 Pod 反亲和性禁止 Ingress Pod 调度在同一个节点上。
来源:xuchao's blog 原文:http://t.cn/ESLD9fa 题图:来自谷歌图片搜索 版权:本文版权归原作者所有 投稿:欢迎投稿,投稿邮箱: editor@hi-linux.com
今日思想
如果容许我再过一次人生,我愿意重复我的生活。因为,我从来就不后悔过去,不惧怕将来。
—— 蒙田
推荐阅读