用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解决容器的混乱(上)

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3天前
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&Kubernetes&K8s安全&API&Kubelet未授权访问&容器执行
云上攻防-云原生篇&Kubernetes&K8s安全&API&Kubelet未授权访问&容器执行
|
4天前
|
运维 Kubernetes Cloud Native
云原生时代的技术革命:Kubernetes与容器编排
【6月更文挑战第17天】在数字化转型的浪潮中,云原生技术正成为推动企业IT架构现代化的核心力量。本文将深入探讨Kubernetes作为云原生生态中的佼佼者,如何引领容器编排的技术革命,并分析其在现代应用部署、管理和扩展中的关键作用。通过实例和案例分析,我们将揭示Kubernetes如何助力企业实现更高效、灵活和可靠的云原生应用管理。
|
12天前
|
运维 Kubernetes 持续交付
Docker与Kubernetes:容器化技术的黄金搭档
【6月更文挑战第10天】Docker和Kubernetes是容器化技术的黄金组合,Docker提供轻量级、可移植的容器引擎,简化应用部署,而Kubernetes作为容器编排系统,实现自动化部署、扩展和管理,确保高可用性和可扩展性。两者的协作使得容器化应用更高效、可靠,共同推动软件开发和运维的创新。
|
16天前
|
监控 Kubernetes 网络协议
上云业务的k8s容器排障与思考
本文主要讲述了在完成业务上云后,面临因业务请求量激增导致的系统复杂故障和挑战。作者通过排查分析,发现了一个长时间处于“进行中”状态的异常任务,客户端(APP2)进程卡死,而服务端(APP3)进程正常结束。进一步分析发现,问题出在kube-proxy代理的会话超时机制,由于请求处理延迟,kube-proxy清理了会话记录,导致服务端回包异常,客户端无法识别,从而形成进程假死。 最后,作者强调了在成本控制背景下,通过分析流量增长原因、优化技术架构和调整运营策略来改善系统性能和稳定性的必要性。
291 5
上云业务的k8s容器排障与思考
|
16天前
|
运维 Kubernetes Java
Java一分钟之Kubernetes(K8s):容器编排深入浅出
【6月更文挑战第6天】Kubernetes是容器编排的主流工具,简化分布式系统运维。本文介绍了K8s核心概念:节点、Pod、服务、部署和副本集。讨论了资源不足、依赖服务未就绪等常见问题及其解决策略,并提供创建Deployment的代码示例。学习K8s能提升部署效率和运维灵活性。
118 5
|
25天前
|
弹性计算 Kubernetes 监控
【阿里云弹性计算】阿里云 ECS 与 Kubernetes 集成:轻松管理容器化应用
【5月更文挑战第28天】阿里云ECS与Kubernetes集成,打造强大容器管理平台,简化应用部署,实现弹性扩展和高效资源管理。通过Kubernetes声明式配置在ECS上快速部署,适用于微服务和大规模Web应用。结合监控服务确保安全与性能,未来将深化集成,满足更多业务需求,引领容器化应用管理新趋势。
203 2
|
26天前
|
运维 Prometheus Kubernetes
基于Kubernetes的容器化运维实践
本文将介绍如何在Kubernetes平台上进行容器化运维。首先,我们将了解Kubernetes的基本概念和组件。然后,我们将探讨如何部署和管理应用程序,以及如何使用Kubernetes进行自动化运维。最后,我们将讨论一些最佳实践和常见问题解答。通过阅读本文,您将能够更好地理解Kubernetes在现代IT环境中的重要性,并学会如何有效地利用它来提高运维效率。
|
1月前
|
存储 运维 分布式计算
分布式云容器平台ACK One概述
分布式云容器平台ACK One概述
73 2
|
23小时前
|
Kubernetes 算法 API
K8S 集群认证管理
【6月更文挑战第22天】Kubernetes API Server通过REST API管理集群资源,关键在于客户端身份认证和授权。
|
2天前
|
Kubernetes 前端开发 微服务
实操教程丨如何在K8S集群中部署Traefik Ingress Controller
实操教程丨如何在K8S集群中部署Traefik Ingress Controller