用Kubernetes解决容器的混乱(上)

简介: 存在的问题。你需要精心准备比Dockerfiles更多的东西来将其应用于生产——管理所有容器的容器编排系统。 问题 让我们来看一个相对简单的应用程序,一个使用PHP和MySQL的、数据库驱动的Web应用程序。

存在的问题。你需要精心准备比Dockerfiles更多的东西来将其应用于生产——管理所有容器的容器编排系统。

问题 

让我们来看一个相对简单的应用程序,一个使用PHP和MySQL的、数据库驱动的Web应用程序。你想到的第一个解决方案可能是分解所有HTTP职责,例如将API和前端用户界面(UI)投放到一个容器中,将所有后端存储投放到另一个容器中。

那么,你看下面两个图:


如果要扩展这个架构,很容易,你可以添加前端容器的更多副本。 接下来的两个图显示具有单个后端的单个前端,以及具有单个后端的多个前端:


这时有人过来告诉你这不是好的微服务架构。他是对的,因为你真的需要分担责任。从同一个容器提供PHP驱动的API和HTML / JS / CSS UI不是最佳做法。 最好将它们分成两个容器:
PHP和NGINX提供API
NGINX提供HTML / JS / CSS


还有人指出,在临时容器上运行MySQL持久性数据存储是次优的,因为当容器关闭时你就丢失了数据。 要解决这个问题,你可以向位于该容器外部的一个容器添加持久存储卷。 运行MySQL的容器可以关闭而不会带走你的数据。


现在,你可以扩展容器解决方案,并使用更多的容器来处理更大的负载。


现在你有一个很棒的容器解决方案,能够处理大量的流量,但它是基于一个谎言的。说成谎言可能有点不公平,那就说它是基于抽象的。容器仍然在拥有有限资源的机器上运行,因此我们希望该工作在多个机器之间分割。 如果其中一台机器出现故障,需要移动容器,该怎么办?


现在的设置增加了很多复杂性,但你仍然需要维护单个的机器,处理正常运行时间和移动资源。

解决方案:容器编排

你喜欢用一种系统来管理所有需要运行容器的裸机或虚拟机。你也会喜欢这样的系统——它可以管理你的容器,在底层机器上启动容器,确保容器是分布式的,并保持容器的健康。这是被称为容器编排系统的系统,Kubernetes就是一个这样的系统。

当讨论容器和Kubernetes时,有两个概念非常重要。

一、临时计算

服务器故障。堆栈溢出。当你每天为数百万个请求提供服务时,总会有问题发生。不要试图避免问题,你应该设计应用程序来处理问题。所以你应该明白在容器中运行的任何东西都可能离开,并被该容器的另一个新版本替换。

有很多隐喻来形容这种情况,最常见的是“宠物与牛”——宠物是指服务器,它们像养的狗、猫等。你给它们取名,好好照顾,当它们半夜生病时,你照顾它们。用容器时你可不想这样。相反,你想要的服务器是可以像牛一样的:可以大量运行,不用每个有名字,生病了不用那么费神。

二、期望状态

期望状态是所谓的命令式指令的对应物,它是一个很长的脚本语言。当我们写脚本时,事情发生,因为我们列出具体的步骤,等待它们完成。你可以创建新的:

带有代码更新的图像
SQL数据库
API服务器
前端服务器

如果有一个步骤失败,该进程停止,应用程序不启动。如果其中一台机器在启动后发生故障,必须重新启动它。

期望状态(或声明)意味着:“描述你想要什么设置,系统将使它发生”。所以,不是写出步骤,而是告知:

“我想要1个数据库的副本。
我想要2个API服务器的副本。
我想要3个前端服务器副本。”

声明性系统确保始终有许多副本在运行。如果一个发生故障,系统重新启动另一个。如果太多副本正在运行,系统会杀死多余的。现在你必须改变应用程序。如果API服务器在SQL数据库之前启动,你可能会遇到SQL连接错误。你希望确保向系统添加渐进重试。但这些变化是直接的,在许多情况下已经是最佳实践。

本文转移K8S技术社区-用Kubernetes解决容器的混乱(上)

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
6月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
982 108
|
5月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
588 2
|
5月前
|
Kubernetes Devops Docker
Kubernetes 和 Docker Swarm:现代 DevOps 的理想容器编排工具
本指南深入解析 Kubernetes 与 Docker Swarm 两大主流容器编排工具,涵盖安装、架构、网络、监控等核心维度,助您根据团队能力与业务需求精准选型,把握云原生时代的技术主动权。
384 1
|
11月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
319 0
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
|
12月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
244 1
|
12月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
11月前
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
12月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。

推荐镜像

更多