如何把应用转移到Kubernetes


Ben Sears

Kubernetes是时下最流行的管理和编排工具,它提供了一个配置驱动的框架,让我们可以通过定义和操作获得整个网络、磁盘和应用,并以可伸缩且易于管理的方式进行。

如果我们还没有完成应用容器化,那么把应用转移到Kubernetes上会是一件高强度的工作,本文目的则是介绍应用与Kubernetes集成的方法。

Step 1 — 将应用容器化

容器是可以独立运行的基本操作单元,不同于传统虚拟机依赖模拟操作系统,容器利用各种内核特性来提供与主机隔离的环境。



对于有经验的技术人员来说,整个容器化过程不算复杂——使用docker,定义一个包含安装步骤和配置(下载包、依赖等等)的dockerfile,最后构建一个可以让开发人员使用的镜像即可。

Step 2 — 采用一个多实例架构



在我们把应用迁移到Kubernetes之前,需要确认向最终用户交付的方式。

传统web应用的多租户结构,是所有用户共享单个数据库实例和应用实例,这种形式在Kubernetes中工作没什么问题,但我们建议考虑把应用改造成多实例架构,以充分利用Kubernetes和容器化应用的优势特性。

采用多实例架构的好处包括:

稳定性——单点故障,不影响其他实例;

可伸缩——通过多实例架构,扩展也就是增加计算资源的事;而对于多租户架构,需要创建集群应用体系结构的部署可能会有些麻烦;

安全性——当您使用单个数据库时,所有数据都在一起,一旦发生安全漏洞,所有用户都会收到威胁,而采用多数据中心,只会有一个用户的数据面临风险;

Step 3 — 确定应用的资源消耗

为了获得成本效益,我们需要确定运行单个应用实例所需的CPU、内存和存储量。

我们可以通过设置限制,精确调整Kubernetes节点需要多少空间、确保节点过载或者不可用等等。

这需要我们反复的尝试和验证,也有一些工具可以替我们达成这一目的。



  • 在确定资源分配之后,我们可以计算Kubernetes节点的最佳资源大小;

  • 将每个实例需要的内存或CPU乘以100(节点可以容纳的最大Pod数),我们可以大概估计你的节点应该有多少内存和CPU;

  • 对应用程序进行压力测试以确保它在满节点时顺利运行。


Step 4 — 与Kubernetes集成

Kubernetes集群运行起来,我们会发现许多DevOps实践水到渠成——

自动缩放Kubernetes节点

节点用满时,通常需要配置更多的节点以便所有实力顺畅运行,自动缩放的Kubernetes节点便派上了用场。

自动缩放应用程序

根据使用情况,某些应用需要按比例缩放,Kubernetes使用可自动缩放部署的触发器来实现,命令:

kubectl autoscale deployment myapp --cpu-percent = 50 --min = 1 --max = 10

如上,当CPU百分比超过50时,将设置myapp部署扩展到10个容器。

在用户操作时自动配置实例

对于多实例架构,最终用户在Kubernetes中部署应用程序,而为了实现这一点,我们应该考虑将应用与Kubernetes API集成,或者使用第三方解决方案来提供请求实例的入口。

通过用户操作定义自定义主机名

最近越来越多的终端用户将其域名附加到应用程序中,而Kubernetes提供了一些工具来使这个过程变得更加简单,甚至到达自助服务的地步(用户按下一个按钮来设置域指向),我们可以使用Nginx Ingress等系统来完成此操作。

最后打个广告

Kubernetes提出的一系列概念抽象,非常符合理想的分布式调度系统。但大量高难度技术概念,同时也形成了一条陡峭的学习曲线,直接拉高了Kubernetes的使用门槛。

好雨云开源PaaS Rainbond则将这些技术概念包装成为“Production-Ready”的应用,可以作为一个Kubernetes面板,开发者不需要特殊学习即可使用。

除此之外,Kubernetes本身是一个容器编排工具,并不提供管理流程,而Rainbond提供现成的管理流程,包括DevOps、自动化运维、微服务架构和应用市场等,可以开箱即用。

进一步了解:https://www.goodrain.com/scene/k8s-docker

0 个评论

要回复文章请先登录注册