Kubernetes 在生产环境中常用架构

Kubernetes 在生产环境中常用架构

首先,我们来梳理下Kubernetes生产架构,其设计适用于绝大多数环境。如下图所示

在该架构中,我们可以将其分为四层,如下:

  • Client层:即Kubernetes集群外部用户、客户端等;
  • 服务访问层:即由Traefik ingress实现服务发现、负载均衡和路由规则定义等;
  • 业务应用层:即基于Kubernetes平台构建和运行企业业务应用,如CI/CD持续集成、微服务项目、监控告警和日志管理、私有镜像仓库等服务;
  • 基础设施层:即由Kubernetes容器管理平台和Ceph数据持久化存储等系统组成的基础设施服务。

下面,我们分别来谈谈各层的具体实现方案。

基础设施层

Kubernetes平台

  • 部署管理:Kubernetes平台除了直接使用公有云如阿里云、AWS等云服务提供商的K8s服务外,我们还可以自己部署和管理等,如使用Kubespray工具。
  • 网络通信:在容器和容器之间、容器和主机网络方面,可以使用Calico或Flannel等方案。
  • HA高可用:Kubernetes节点分为Master和Node两种类型节点,前者负责运行集群相关的控制管理服务,而后者负责运行Pod容器。在多Node节点模式下,由于Kubernetes Pod具有天然的容灾冗余HA高可用实现,因此,我们并不需要关心Node节点的HA高可用,而只需关心Master节点的HA即可,Master节点的HA高可用,通过多Master节点+HAProxy方案实现即可。从Kubernetes 1.12版本起,kube-proxy服务默认使用ipvs实现,取消了之前的iptables。这有助于提升K8s大规模集群环境下的性能和稳定性。
  • Docker和操作系统优化:在生产环境中,Docker和操作系统版本应当使用较新的release版本。并且,主机操作系统应当做一定程度的优化配置,如关闭swap内存交换分区,预留一定的CPU核数和内存资源给宿主机使用等。

Ceph/NFS数据存储

Kubernetes平台的数据持久化存储,可以使用Ceph、NFS等存储方案。其中,Ceph适用于有其技术背景或大容量存储需求的公司;而NFS适用于存储容量需求相对较小,无专业存储技术背景的公司。

业务应用层

  • 镜像管理:使用Harbor私有镜像仓库服务;
  • 日志管理:使用Elasticsearch、Filebeat 和 Kibana技术栈;
  • 监控告警管理:使用Cadvisor、Prometheus和Grafana技术栈;
  • 微服务架构:使用Service Mesh服务网格中的Istio方案;
  • Devops:使用Gitlab、Jenkins等持续集成工具;
  • 单体应用:无状态类服务使用deployment,有状态类服务则使用Statefulset,如果关联的服务较多且复杂则使用Helm。
  • 规划好Namespace:应当做到每个namespace专属用于某类型的应用,如monitor namespace统一管理诸如监控告警和日志管理方面的pod、service、pvc、ingress等资源。这样,可以较为方便的管理和区分K8s上的各种应用。

服务访问层

外部客户端访问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调度在同一个节点上。

原文地址:https://www.cnblogs.com/Dev0ps/p/10771765.html

时间: 2024-10-20 15:46:39

Kubernetes 在生产环境中常用架构的相关文章

生产环境中常用的命令

一般情况下,买了一台新机器.为了安全考虑,登录系统后把密码先修改了. [[email protected] ~]# sudo passwd root Changing password for user root. New UNIX password: 新的密码 BAD PASSWORD: it does not contain enough DIFFERENT characters Retype new UNIX password: 重新输入新的密码 passwd: all authentic

生产环境中的PHP WEB 简单架构

使用三台虚拟机器, Ubuntu1(nginx) 192.168.226.128 Ubuntu2(php-fpm+memcached)192.168.226.132 CentOS(MySQL)192.169.226.130 PHP 框架使用CakePHP,这个是很常用的MVC 框架,基于事件的分发模型 当然需要注意的是框架代码要部署在php-fpm机器上,需要在nginx 中配置的配置如下 余下的内容: 1. CakePHP 框架代码 2. PHP 内核 3. Nginx内核 4. 数据库设计模

Dubbo Mesh 在闲鱼生产环境中的落地实践

本文作者至简曾在 2018 QCon 上海站以<Service Mesh 的本质.价值和应用探索>为题做了一次分享,其中谈到了 Dubbo Mesh 的整体发展思路是"借力开源.反哺开源",也讲到了 Service Mesh 在阿里巴巴的发路径将经历以下三大阶段: 撬动做透价值***实现技术换代Dubbo Mesh 在闲鱼生产环境的落地,分享的是以多语言为撬动点的阶段性总结. 文章首发于「QCon」,阿里巴巴中间件授权转载. 闲鱼场景的特点闲鱼采用的编程语言是 Dart,思

[virtualenv]生产环境中使用virtualenv

virtualenv 对于python开发和部署都是好工具,可以隔离多个python版本和第三方库的版本,这里作者总结了几个常用python服务怎么样结合virtual部署 原文链接 Python 中我最喜欢的东西之一就是可以使用 virtualenv 去创建隔离的环境.非常简单的就可以在不同的项目中部署不同的python类库. 有一个比较棘手的问题就是在生产环境中使用virtualenv 部署几个不同的服务有一些配置上的不同. 于是我就从我的项目中收集了几种不同的服务的不同配置方式. 可以肯定

理解Docker(6):若干企业生产环境中的容器网络方案

本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 cgroups 限制容器使用的资源 (5)Docker 网络 (6)若干企业生产环境中的容器网络方案 Docker 在早期只有单机上的网络解决方案,在 1.19 版本引入了原生的 overlay 网络解决方案,但是它的性能损耗较大,可能无法适应一些生产环

linux生产环境中替换jdk

声明一下,为了给大家演示以及对生产环境的保密,我在本地vm中搭建了跟生产环境一模一样的虚拟机来给大家操作,其中截图来自本地虚拟机.操作步骤严格按照生产环境替换来做. 首先,给大家介绍下生产环境的大体架构,前端采用nginx分发,后端两个tomcat处理请求应用服务器,这只是最基本也是最常见的负载均衡架构. 下面开始实际操作:(注:请使用root账户操作) 第一步:首先看一下系统的java版本.系统采用openJDK,并且为1.7.0_85版本 第二步:安装sunjdk 1使用命令新建一个文件夹s

明白生产环境中的jvm参数

明白生产环境中的jvm参数 写代码的时候,程序写完了,发到线上去运行,跑一段时间后,程序变慢了,cpu负载高了--一堆问题出来了,所以了解一下生产环境的机器上的jvm配置是有必要的.比如说: JDK版本是多少?采用何种垃圾回收器? 程序启动的时候默认分配堆内存空间是多少?随着程序的运行,程序最多能使用多大的内存空间? 程序中使用了多少个线程?目前的java进程又处于何种状态? 了解了这些,会对程序的运行有一个更好的了解.本文结合生产实践,记录一下我常用的一些操作. 注意:如果没有特殊说明,下面所

Docker在生产环境中的应用--开篇

Docker是什么?(官方定义)Docker是一个开源的引擎,可以轻松地为任何应用创建一个轻量级的.可移植的.自给自足的容器,开发者在笔记本上编译测试通过的容器,可以批量地在生产环境中部署,包括VMS(虚拟机).bare metal.OpenStack集群和其它应用平台. Docker通常应用到以下几种场景: 1.web应用的自动化打包和发布: 2.自动化测试和集成.发布: 3.在服务型环境中部署和调整数据库或其它的后台应用: 4.从头编译或者扩展现有的OpenShift或Cloud Found

13.生产环境中的 redis 是怎么部署的?

作者:中华石杉 面试题 生产环境中的 redis 是怎么部署的? 面试官心理分析 看看你了解不了解你们公司的 redis 生产集群的部署架构,如果你不了解,那么确实你就很失职了,你的 redis 是主从架构?集群架构?用了哪种集群方案?有没有做高可用保证?有没有开启持久化机制确保可以进行数据恢复?线上 redis 给几个 G 的内存?设置了哪些参数?压测后你们 redis 集群承载多少 QPS? 兄弟,这些你必须是门儿清的,否则你确实是没好好思考过. 面试题剖析 redis cluster,10