深入构建Kubernetes基础架构

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 深入构建Kubernetes基础架构

目录

架构

入口点:DNS

内容分发网络(CDN)

负载均衡器

网络和安全架构

Kubernetes

站点可靠性工程(SRE)

存储

镜像仓库

CI/CD体系结构

结论


 

 

在本博客中,我们将探讨构建基础架构的最佳方法,并根据约束条件做出各种决策。


架构

首先,建议你的架构尽可能模块化,以便在将来有需要时可以灵活地进行增量更改。


入口点:DNS

在任何典型的基础架构中(无论是否为云原生),DNS服务器都必须首先解析请求消息以返回服务器的IP地址。

设置DNS应该基于所需的可用性。如果你需要更高的可用性,则要根据可用性级别,将服务器分布在多个云提供商中。


内容分发网络(CDN)

在某些情况下,你可能需要为用户提供尽可能短的延迟,并减少服务器上的负载。这是内容分发网络(CDN)发挥主要作用的地方。

客户端是否经常从服务器请求一组静态资源?你是否需要提高向用户交付内容的速度,同时减少服务器上的负载?在这种情况下,为一组静态资源提供服务的CDN有助于减少用户的延迟和服务器上的负载。

你所有的内容都是动态的吗?你是否需要以一定程度的延迟为用户提供内容以降低复杂性?还是你的应用流量很少?在这种情况下,使用CDN可能没有太大意义,你可以将所有流量直接发送到Global Load Balancer。

CDN提供商包括 Cloudfare CDN, Fastly, Akamai CDN, Stackpath,以及云提供商–Google云平台的Cloud CDN ,亚马逊的 CloudFront , 微软的Azure CDN 等 。

 


负载均衡器

如果有你的CDN无法满足的请求,则该请求将接下来到达你的负载均衡器。负载均衡器是具有区域性的IP,也可以是全局性的Anycast IP。在某些情况下,你还可以使用负载均衡器来管理内部流量。

除了将流量路由和代理到适当的后端服务之外,负载均衡器还可以负责SSL终止,与CDN集成甚至管理网络流量的某些方面。

尽管确实存在硬件负载均衡器,但软件负载均衡器提供了更大的灵活性,低成本和可伸缩性。

与CDN相似,云提供商也提供负载均衡(例如GCP的GLB,AWS的ELB,Azure的ALB等)。

尽管你应该始终从小做起,但是负载均衡器将允许你逐步扩展:

 


网络和安全架构

在你的体系结构中要注意的下一件重要事情是网络本身。如果要提高安全性,则可能需要使用私有集群。在那里,你可以管理入站和出站流量,在NAT之后屏蔽IP地址,隔离跨VPC具有多个子网的网络,等等。

设置网络的方式通常取决于你需要的灵活性程度以及实现方式。建立正确的网络关系就是尽可能减少攻击面,同时仍然允许常规操作。

使用网络来保护你的基础架构还涉及使用正确的规则和限制来设置防火墙,以便你仅允许进出各自后端服务的入站和出站流量。

在许多情况下,可以通过设置堡垒机来保护这些专用集群,因为你需要向公共网络公开的只有堡垒机(通常是在与集群相同的网络)。

一些云提供商还提供了针对零信任安全性的定制解决方案。例如,GCP为用户提供了身份识别代理(IAP),可以代替典型的VPN

一旦处理完所有这些,联网的下一步就是根据你的情况在集群本身内设置联网。

它可能涉及以下任务:

关于云中网络的有趣之处在于,还可以根据需要选择跨多个地区的多个提供商,这就是KubefedCrossplane等项目可以提供帮助的地方。

如果你想在设置VPC,子网和整个网络时进一步探索一些最佳实践,我建议你仔细阅读本页面,同样的概念也适用于你所使用的任何云提供商。


Kubernetes

如果你使用的是GKE,EKS,AKS,AKS等托管集群,则Kubernetes会自动进行管理,从而使用户摆脱了很多麻烦。

如果你自己管理Kubernetes,则需要注意很多事情,例如备份和加密etcd存储,在集群中的各个节点之间建立网络,定期为节点打补丁,管理集群升级。仅当你有足够的能力进行此工作时,才建议这样做。


站点可靠性工程(SRE)

当你维护复杂的基础架构时,拥有正确的可观察性非常重要,这样你就可以提前发现错误,并预测可能的变化,识别异常,深入探究问题所在。

现在,这将需要你使用代理。这些代理公开应用程序的指标。如果你将服务网格与Sidecar一起使用,它们通常会附带指标而无需你自己进行任何自定义开发。

在任何这种情况下,像Prometheus这样的工具都可以充当时间序列数据库来为你收集所有指标,而像OpenTelemetry这样的工具可以通过内置导出程序从应用程序和各种工具中获取指标。Alertmanager之类的工具可以将通知和警报发送到多个渠道,而Grafana将提供仪表板以在一处可视化所有内容,从而使用户可以整体了解整个基础架构。

总而言之,以下涉及Prometheus的可观察性系统:

 

具有这样的复杂系统还需要使用日志聚合系统,以便将所有日志都可以流式传输到单个位置,以便于调试。在这里,人们倾向于将ELK或EFK堆栈与LogstashFluentD一起使用,以根据你的约束为你进行日志聚合和过滤。在这个领域中也有新工具出现,例如LokiPromtail

使用FluentD这样的日志聚合系统可以简化我们的基础架构:

 

但是如何跟踪跨越多个微服务和工具的请求呢?在这里,分布式跟踪也变得非常重要,特别是考虑到微服务所带来的复杂性。ZipkinJaeger等工具一直是该领域的先驱,最近进入该领域的是Tempo

虽然日志聚合可以提供来自各种来源的信息,但不一定提供请求的上下文,这在进行跟踪时真正有用。但是请记住,添加跟踪会增加请求的开销,因为上下文必须与请求一起在服务之间传播。

典型的分布式跟踪:

 

但是,站点的可靠性并不仅限于监视,可视化和警报。你必须准备好使用常规备份和故障转移来处理系统任何部分中的任何故障,以便不丢失数据或将数据丢失的程度降至最低。这就是Velero等工具发挥主要作用的地方。

Velero可以帮助你维护集群中各个组件的定期备份,包括工作负载,存储等。Velero的架构如下所示:

 

如你所注意到的,有一个备份控制器定期备份对象,并根据你设置的时间表将它们推送到特定的目的地。由于几乎所有对象都已备份,因此可以将其用于故障转移。


存储

有许多不同的存储供应商和文件系统可用,而且在云提供商之间可能有很大的不同。这就需要像容器存储接口(CSI)这样的标准,从而使大多数数据卷插件易于集成、维护和发展而不会成为核心瓶颈。

CSI支持各种存储插件:

 

集群存储,扩展以及分布式存储附带的其他各种问题,如何解决呢?

这就需要Ceph类的文件系统,但是考虑到Ceph并不是在考虑Kubernetes的情况下构建的,并且很难部署和管理,就需要使用Rook这样的项目中也。

尽管Rook没有与Ceph耦合,并且还支持EdgeFS,NFS等其他文件系统,但是Rook与Ceph CSI就像是天作之合。

 

如你所见,Rook负责在Kubernetes集群中安装,配置和管理Ceph。根据用户首选项,存储空间自动分配。所有这一切都不会使应用程序面临任何复杂性。


镜像仓库

镜像仓库为你提供了一个用户界面,你可以在其中管理各种用户帐户,推送/拉取镜像,管理配额,通过Webhooks接收事件通知,进行漏洞扫描,对推送的镜像进行签名以及处理镜像或镜像复制等操作。多个镜像仓库。

如果你使用云提供商,则很有可能他们已经将镜像仓库作为一项服务(例如GCRECRACR等),这消除了很多复杂性。如果你的云服务提供商不提供服务,那么你也可以使用Docker HubQuay等第三方镜像仓库。

但是,如果你想托管自己的镜像仓库怎么办?

如果你要在本地部署镜像仓库,想要对镜像仓库本身进行更多控制,或者想减少与漏洞扫描等操作相关的成本,则可能需要使用像Harbor这样的私有镜像仓库。

 

Harbor是一个由OCI兼容的镜像仓库,由各种开源组件组成,包括Docker镜像仓库V2,Harbor UI,ClairNotary


CI/CD体系结构

Kubernetes是一个很好的平台,可以托管任何规模的各种类型的工作负载,但这也要求采用简单便捷的持续集成/持续交付(CI/CD)工作流程来部署应用程序。

 

一些第三方服务(例如Travis CICircle CIGitlab CIGithub Actions) 包括自己的CI运行程序。你只需定义要构建的流水线中的步骤。这通常涉及:构建镜像,扫描镜像以查找可能的漏洞,运行测试并将其推送到镜像仓库,在某些情况下还提供预览功能。


结论

如上所述,各种工具可解决基础架构的不同问题。它们就像乐高积木一样,每个积木都着眼于特定的问题,为你节省了很多复杂性。

这使用户可以使用增量方式利用Kubernetes,而不必一次全部使用,而仅使用整个系统中所需的工具,具体取决于你的需求。


译文链接: https://thenewstack.io/a-deep-dive-into-architecting-a-kubernetes-infrastructure/



相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
4天前
|
敏捷开发 监控 数据管理
构建高效微服务架构的五大关键策略
【4月更文挑战第20天】在当今软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发团队以灵活、可扩展的方式构建应用程序。本文将探讨构建高效微服务架构的五大关键策略,包括服务划分、通信机制、数据管理、安全性考虑以及监控与日志。这些策略对于确保系统的可靠性、可维护性和性能至关重要。
|
17天前
|
API 数据库 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第8天】 随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性、维护性和敏捷性的挑战。为了解决这些问题,微服务架构应运而生,并迅速成为后端开发领域的一股清流。本文将深入探讨微服务架构的设计原则、实施策略及其带来的优势与挑战,为后端开发者提供一种全新视角,以实现更加灵活、高效和稳定的系统构建。
23 0
|
19天前
|
Kubernetes API 调度
k8s 到底是什么,架构是怎么样的?
Kubernetes(k8s)是Google开源的容器集群管理系统,它通过YAML文件自动化应用部署、扩展和管理。k8s架构包含控制平面(API Server、Scheduler、Controller Manager和etcd)和工作节点(Node,含kubelet、Container runtime、Kube Proxy等)。控制平面负责调度和管理,Node执行任务。kubectl是命令行工具,用于与k8s交互。k8s通过Ingress暴露服务,并通过Pod作为最小调度单位管理容器。Docker通常与k8s结合使用,提供容器化应用,但二者并非同一概念。
47 4
k8s 到底是什么,架构是怎么样的?
|
5天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的进阶之路
【4月更文挑战第20天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构作为一种新兴的分布式系统设计方式,以其独立部署、易于扩展和维护的特点,成为解决这一问题的关键。本文将深入探讨微服务的核心概念、设计原则以及在后端开发实践中如何构建一个高效的微服务架构。我们将从服务划分、通信机制、数据一致性、服务发现与注册等方面入手,提供一系列实用的策略和建议,帮助开发者优化后端系统的性能和可维护性。
|
15天前
|
Kubernetes 安全 Java
构建高效微服务架构:从理论到实践
【4月更文挑战第9天】 在当今快速迭代与竞争激烈的软件市场中,微服务架构以其灵活性、可扩展性及容错性,成为众多企业转型的首选。本文将深入探讨如何从零开始构建一个高效的微服务系统,覆盖从概念理解、设计原则、技术选型到部署维护的各个阶段。通过实际案例分析与最佳实践分享,旨在为后端工程师提供一套全面的微服务构建指南,帮助读者在面对复杂系统设计时能够做出明智的决策,并提升系统的可靠性与维护效率。
|
2天前
|
监控 API 持续交付
构建高效微服务架构:后端开发的新趋势
【4月更文挑战第23天】 随着现代软件开发实践的不断演进,微服务架构已经成为企业追求敏捷、可扩展和弹性解决方案的首选。本文深入探讨了如何构建一个高效的微服务架构,涵盖了关键的设计原则、技术选型以及实践建议。通过分析微服务的独立性、分布式特性和容错机制,我们将揭示如何利用容器化、服务网格和API网关等技术手段,来优化后端系统的可维护性和性能。文章旨在为后端开发人员提供一套全面的指南,以应对不断变化的业务需求和技术挑战。
|
4天前
|
Cloud Native API 持续交付
构建未来:云原生架构在企业数字化转型中的关键作用
【4月更文挑战第21天】 随着企业加速其数字化转型的步伐,云原生技术已迅速成为推动创新和实现敏捷性的基石。本文深入探讨了云原生架构的核心组件,包括容器化、微服务、持续集成/持续部署(CI/CD)以及声明式API。通过分析这些技术的协同效应,揭示了它们如何共同促进系统的可伸缩性、弹性和维护性,进而支持企业在不断变化的市场环境中保持竞争力。
10 1
|
4天前
|
敏捷开发 Cloud Native 持续交付
构建未来:云原生架构的进化之路
【4月更文挑战第21天】随着数字化转型的深入,企业对IT基础设施的要求日益提高。云原生技术以其灵活性、可扩展性和敏捷性成为推动创新的重要力量。本文将探讨云原生架构的核心组件,分析其如何助力企业实现快速迭代和高效运营,并预测云原生技术的发展趋势。
|
7天前
|
监控 持续交付 开发者
构建高效微服务架构:后端开发的新趋势
【4月更文挑战第18天】在数字化转型的浪潮中,微服务架构已成为企业提升系统灵活性、加速产品迭代的关键。此文深入探讨了构建高效微服务架构的实践方法,包括服务划分原则、容器化部署、持续集成/持续部署(CI/CD)流程以及监控与日志管理等关键技术点。通过分析具体案例,揭示了微服务在提高开发效率、降低维护成本及促进团队协作方面的显著优势。
|
7天前
|
Cloud Native 持续交付 云计算
构建未来:云原生架构在企业数字化转型中的关键作用
【4月更文挑战第18天】 随着企业加速迈向数字化,云原生架构成为推动创新与效率的催化剂。本文深入探讨了云原生技术如何助力企业实现敏捷开发、自动化运维和无缝可扩展性,以及它如何塑造着云计算的未来。我们将通过具体案例分析,揭示云原生架构在处理复杂系统时的灵活性和可靠性,并展望其对业务连续性和安全性的积极影响。
13 1