kubernetes在生产环境中常用架构

dev0ps dev0ps     2022-11-30     268

关键词:

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调度在同一个节点上。

在没有 Kubernetes 的本地开发环境中运行 Ambassador

】在没有Kubernetes的本地开发环境中运行Ambassador【英文标题】:RunAmbassadorinlocaldevenvironmentwithoutKubernetes【发布时间】:2021-03-2217:48:12【问题描述】:我正在尝试在我的本地开发环境中运行AmbassadorAPI网关,因此我将模拟我最终将在... 查看详情

kubernetes-整体概述和架构详解

一、Kubernetes是什么Kubernetes是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过Kubernetes能够进行应用的自动化部署和扩缩容。在Kubernetes中,会将组成应用的容器组合成一个逻辑单元以更易管理和发现。Kubernetes... 查看详情

生产环境容器落地最佳实践-jfrog内部k8s落地旅程(代码片段)

引言Kubernetes已经成为市场上事实上领先的编配工具,不仅对技术公司如此,对所有公司都是如此,因为它允许您快速且可预测地部署应用程序、动态地伸缩应用程序、无缝地推出新特性,同时有效地利用硬件资源。本期我们将... 查看详情

kubernetes编排工具(代码片段)

Kubernetes编排工具K8S是一种以容器未中心的基础架构,提供集群内:容器部署、容器扩展、容器管理的开源平台Kubernetes是一个以容器为中心的基础架构,可以实现在物理集群或虚拟机集群上调度和允许容器,提供容器自动部署、扩展... 查看详情

如何为 Kubernetes 创建本地开发环境?

】如何为Kubernetes创建本地开发环境?【英文标题】:HowtocreatealocaldevelopmentenvironmentforKubernetes?【发布时间】:2015-06-2702:55:30【问题描述】:Kubernetes似乎就是将容器部署到集群云中。它似乎没有触及的是开发和登台环境(或类似... 查看详情

建设kubernetes生产环境的16条建议(代码片段)

Kubernetes是用于构建高度可扩展系统的强大工具。结果,许多公司已经开始或正在计划使用它来协调生产服务。不幸的是,像大多数强大的技术一样,Kubernetes也很复杂。我们整理了以下清单,以帮助你生产环境最佳实践Kubernetes(Ku... 查看详情

生产环境中常用的命令

一般情况下,买了一台新机器。为了安全考虑,登录系统后把密码先修改了。[[email protected]~]#sudopasswdrootChangingpasswordforuserroot.NewUNIXpassword: 新的密码BADPASSWORD:itdoesnotcontainenoughDIFFERENTcharactersRetypenewUNIXpasswo 查看详情

springcloud微服务电商系统在kubernetes集群中上线详细教程(代码片段)

Kubernetes集群部署Springcloud微服务商务系统文章目录Kubernetes集群部署Springcloud微服务商务系统1.微服务架构及理论概述1.1.单体架构与微服务架构的区别1.2.微服务组件架构图1.3.微服务注册中心1.4.不同的部署环境对于程序配置文件如... 查看详情

dockermesos在生产环境的实践

...部署的应用部署包,push到各自对应的仓库中,并打Tag。生产环境发布过程中,同时发布到Mesos集群和原有的虚拟机集群上,两套集群网络是打通的。网络架构在网络架构选型时,会考虑一下几个原则:dockerbridge使 查看详情

如何为 PostgreSQL 设置 Kubernetes CPU 和内存

】如何为PostgreSQL设置KubernetesCPU和内存【英文标题】:HowtosetupKubernetesCPUandMemoryforPostgreSQL【发布时间】:2021-09-1022:09:07【问题描述】:我有一个带有Patroni的三个节点的PostgreSQL集群。集群管理着非常高的工作负载,因此,它在裸... 查看详情

生产和本地 Kubernetes、SaltStack 和 Docker 中的源代码更改

】生产和本地Kubernetes、SaltStack和Docker中的源代码更改【英文标题】:Sourcecodechangesinkubernetes,SaltStack&Dockerinproductionandlocally【发布时间】:2014-12-2814:17:02【问题描述】:这是一个抽象的问题,我希望我能够描述清楚。基本上;... 查看详情

Kubernetes环境中的API网关

】Kubernetes环境中的API网关【英文标题】:APIgatewayinkubernetesenvironment【发布时间】:2021-08-1409:58:57【问题描述】:我仍在学习微服务架构,并不清楚如何解决给定的问题。假设我有一个k8s集群,其中部署了一些BE微服务、FE应用程... 查看详情

使用 Kubernetes 的多个环境(暂存、QA、生产等)

】使用Kubernetes的多个环境(暂存、QA、生产等)【英文标题】:Multipleenvironments(Staging,QA,production,etc)withKubernetes【发布时间】:2017-08-2923:37:51【问题描述】:什么被认为是使用K8S管理多个环境(QA、Staging、Production、Dev等)的良好... 查看详情

是否建议在生产环境中使用数据库作为容器?

】是否建议在生产环境中使用数据库作为容器?【英文标题】:IsitrecommendedtouseDatabaseasacontainerinProductionenvironment?【发布时间】:2018-07-0823:40:54【问题描述】:假设我们正在为产品使用微服务架构,并且我们决定使用“每个服务... 查看详情

如何从生产环境中更新 Redshift dev/qa 环境

】如何从生产环境中更新Redshiftdev/qa环境【英文标题】:HowtofreshRedshiftdev/qaenviromentfromproduction【发布时间】:2017-05-3122:33:12【问题描述】:我们有Redshift作为我们的数据仓库,我们有不同的环境,例如生产、QA(阶段)和开发。由... 查看详情

kubernetes日志采集工具log-pilot使用

...方介绍log-pilot镜像地址log-pilot官方搭建log-pilot解决问题:kubernetes1.15以上版本官方tomcat实例在本方案的Elasticsearch场景下,环境变量中的name即是catalina和access。Log-Pilot支持声明式日志配置,可以依据容器的Label或者ENV来动态地生成... 查看详情

微服务面试常用题

...都围绕具体的业务进行构建,并且能够独立地部署到生产环境、类生产环 查看详情

微服务面试常用题

...都围绕具体的业务进行构建,并且能够独立地部署到生产环境、类生产环 查看详情