\\\本文要点
\\
- 随着微服务架构的出现,软件行业正向着云原生应用程序开发和部署发展。\\t
- Docker和Kubernetes是现代化云原生部署自动化的关键要素。\\t
- 目前常见的做法是借助容器创建可复制的应用程序包,但是,这涉及手工编写(和维护)YAML部署描述文件。\\t
- Metaparticle、Ballerina和Pulumi是三个开源项目,分别提供了自己的方法,解决Docker和Kubernetes应用程序部署中的应用打包问题。\\t
- 本文探讨了使用每种框架部署一个简单的“HelloWorld”应用所需要的步骤。\
随着微服务架构的出现,软件行业正向着云原生应用程序开发和部署发展。双披萨团队、敏捷性、再现性、CI/CD在当前生产力快速创新的软件行业中扮演越来越重要的角色。
\\Docker和Kubernetes是现代化云原生部署自动化的关键要素。常见的做法是借助容器把开发出的应用程序创建成可复制的应用程序包。Docker使开发人员能够创建可重复的运行时环境,并在其中使用一个简单、可重复的方式定义依赖和配置应用程序。Kubernetes是一个开源容器编排平台,使这些应用程序容器可以跨多个主机部署,并且提供了可扩展性和高可用性。这需要编写Dockerfile和Kubernetes YAML部署描述文件,这很痛苦,而且容易出错。
\\Metaparticle、Ballerina和Pulumi是三个开源项目,分别提供了自己解决这个问题的方法。最近,我发现了三个讨论这些方法的推特。
\\第一个是Andress Guisado介绍Metaparticle如何提供一个标准库用于创建可直接部署到Kubernetes的云原生应用程序。Brendan Burns在年初的KubeCon大会上宣布了Metapaticle,Andress那时就认为这将是2018年的一大焦点。
\\在Istio社区聚会上接触到Ballerina之后,Dan Ciruli就发推特说,Ballerina是一门有趣的语言,因为它可以自动生成Kubernetes和Istio YAML,作为构建过程的一部分。他进一步表示,这是一个很棒的主意,他认为其他框架也将采用这种方式。
\\第三个是Ustun Ozgur在推特上说,与繁琐的YAML文件相比,Pulumi把基础设施定义成代码所做的工作对于DevOps而言就像React针对Web开发所做的工作。
\\在本文中,我将比较这三个项目如何帮助你在像Kubernetes这样的容器编排平台中自动化应用程序代码部署,而不必手工编写YAML。下文将详细介绍这些方法。
\\Metaparticle
\\Metaparticle/Package简化了构建和部署容器镜像的任务。这一个库集合使程序员可以使用他们熟悉的代码构建和部署容器。目前,它支持Java、.NET core、Javascript(NodeJS)、Go、Python和Ruby编程语言。
\\让我们看下如何使用Metaparticle把Java代码部署到Kubernetes中。
\\前提条件:
\\- Docker/ Kubernetes\\t
- 命令行工具mp-compiler\\t
- maven依赖io.metaparticle:metaparticle-package\
下面的代码启动一个Kubernetes pod,其中包含一个打印“Hello World!”的HTTP服务:
\\\package io.metaparticle.tutorial;\\import io.metaparticle.annotations.Package;\import io.metaparticle.annotations.Runtime;\\import static io.metaparticle.Metaparticle.Containerize;\\import java.io.IOException;\import java.io.OutputStream;\import java.net.InetSocketAddress;\\import com.sun.net.httpserver.HttpExchange;\import com.sun.net.httpserver.HttpHandler;\import com.sun.net.httpserver.HttpServer;\\public class Main {\ private static final int port = 8080;\\ @Runtime(ports = {port},\ replicas = 4,\ publicAddress = true,\ executor = \"metaparticle\"\ )\ @Package(repository = \"docker.io/lakwarus\