从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了…

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

作者 |Lakmal Warusawithana

译者 |弯月 责编 | 徐威龙

封图|CSDN 下载于视觉中国

早些时候,开发人员只需编写程序、构建,然后运行。如今,开发人员还需要考虑各种运行方式,作为可执行文件在机器上运行(很有可能是虚拟机),还是打包到容器中;将容器部署到Kubernet~ q l D c f Ies中,还是部署到serverless的环境8 [ v X N L + o中或服务网格中。然而,这些部署方式并不是A H M { J i ?开发人员编程经验J Z w B的一部分。开发人员必须以某种方式编写代码才能在特定的执行环境中正常工作,因此编程时不考虑这些问题是不行的。

Ballerina是一种开放源代码编程语言,专门用于将代码迁移到,同时提供独特的开发人员体验。它的编译器可以扩展为读取源代码中定义的注释,并生成成果物将代码部署到不同的中。这些成果物包m m M ) k - g括Dockerfile、Docker镜像、Kubernetes YAML文件或serverless的函数。

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

从代码到Docker

敏捷是基于微服务的应用程序开发带来的最大好处,而Docker在这里起着主要作用。Docker可以帮助我们将应用程序及其依赖项打包到一个二进制镜像中,这个镜像可以在本地、公共云或私有云中运行。

如果想创建Docker镜像,开发人7 6 / O X员必须选择合适的基础镜像、打包捆绑所有依赖项、复制应用程序二进制文件,并设置具有适当权限的执行命令来创建Dockerfile。如果想创建优化的镜像,开发人员必须遵循一系列最佳实践,否则,构建的镜像就会很大,安全性较低,且存在许多其他缺点。

Bal$ y ; J h W 9 K elerina编译器能够从应用程序源x z V F , y代码中w ` g O - i o F创建优化的Docker镜像。以下代码说明了如何将Ballerina hello服务打包成D+ ] 2ocker容器并运行。

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

将@docker:Config {} 添加到服务中,即可生成Dockerfile和Docker镜像。在listen0 g ver对象中添加@docker:Expose {},即可公开端口让流量进入容器。

下面,让我们来构建源文件。

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

创建Coder镜像:

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

生成Dockerfile:

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

创建的Docker镜像遵循镜像构建最佳实践,并且开发人员只需使用docker run命令! y A即可运行Docker容器。

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

Ba] / m b Pllerina全面支持DockI 1 J X U fer功能:

  • 更改Docke_ ] m o 0 ?r镜N 7 o V C b 6 : O像的标签和仓库

  • 将DoR w T g o { & ocker镜像推送到Do1 . 9 2cker镜像库

  • 使用Docker远程调试Ballerina服务

  • 将文件复制到Docker镜像

  • 带有Docker注释的多个模块

  • 使用Docker在HTTP和HTTPS中运行Ballerina服务

  • 覆盖生成的Dockerfile CMD= y 6 ;

  • Docker Helloa y 7 N World Main函数

  • 使用MK 7 - , rain函数复制文件

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

从代码到Kubernetes

Docker可以帮助我们打包应用程序,并执行一些开发人员测试。但是,如果想在生产环境中运行具有多个微服务的应用程序,我建议使用像Kubernetes这样的平台。Kubernetes是一个开源平台,用于自动化. + p k T qv D y署、扩展和管理容器化的应用程序。Kubernetes定义了一套M 7 B J v # Q q (独特的基本模块,提供了部署、维护和扩展应用程序的机制。Pod是一组逻辑的容器,可保证在主m s ] 6 ? % g g =机上的同一位置运行。Kubernetes服务为其构成的Pod集提供发现、路由和负载平衡等功能。Kuberg , j p vnetes部署是一组Pod,包含定义好的副本集、运行状况检查和滚动更新等机制。所有这些Kubernetes对象都I o f D r f R需要定义成YAML文件,并部署到Kubernetes集群中。

尽管开发人员希望在Kubernetes平台上运行应用程序,但在许多情况下,创建这些YAML文件的工作让开发人员十分头疼。Ballerina编译器能够在编译源代码时创建这些YAML文件。让我们修改上述示例,生成Kubernetes的对象。

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

将@kubernetes:Deployment{}O W w 3 0 a C * &添加到BalleriU r { $ h % :na服务,就可以生成Kubernetes部署的Y] K ` l ? h 6AML,将hello应用, ; N程序部署到Kubernetes时这是必需的。添加@kubernetes:Service{}注释即可生成Kubernetes服务的YAML。在这个例子中,我们将service s , 9 o g LType设置为NodeNode,通过j ? @ s w i R u CnodeIP:Port访问hello服务。

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

除了hello.jar二进制文件外,Ballerina编译器还会生成DocC r 6 o mkerfile、Docker镜像、hello.yaml文件/ i B f C ; $(带有Kubernete? L W z M |s部署和服务)以及helm图表的YAML文件。

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

生成的hello.yaml文件:

---
apiVersion:"v1"
kind:"Service"
metadata:
annotations:{}
labels:
app:"heT F ] [ n G Mllo"
name:"helloworldep-svc"
spec:
ports:
-name:"http-helloworldep-sS C ( O C r R :vc"
port:9090
protocol:"TCPg K f y $"
targetPort:9090
selector:
app:"hello"
type:"NS j 8 l 8 /odePort"
---
apiVersion:"s h ] $ = v ) U Capps/v1"
kind:"Deployment"
metadata:
annotations:{}
labels:
app:E S 0 ? J j j"hello"
name:"hell# s k 5 # C J Doworld"
spec:
replicas:1
selector:
matchLabels:
app:"p y dhello"
template:
metadata:
annotations:{}
labels:
app:"hello"
spec:
containers:
-image:"hel& 7 p K 9 8 (lo:latest"
imagePullPolicy:"IT % u } y ZfNotPresent"
name:j S P m 8"helloworld"
ports:
-co W U 0 x o T =ntainerPort:9090
protocol:"TCP"
nodeSelectN ? i I a } y Por:{}

开发人员可以使用这些生成的KuberneJ O T i O p 0 ^tes对象,在Kubernetes平台上部署应用程序。

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

Ballerina为保证在Kubernetes平台上运行应用程序提供全面的支持:

  • 带有存活探针和和主机名映射的Kubernetes Hello World

  • 在多个端口中运行的多种服务的Ball) | ~ z # k ^ ) Oerina程序

  • $ { ! u % I 全的Kubernetes Hello World

  • 具有HTTP和HTTPS端点的Ballerina服务

  • Google云环境中的Kubernete_ 7 ds Hello World

  • 将Secr8 o 4 h + & P ket挂载到部署

  • 将配置7 H z & L s S映射卷挂载到部署

  • 将持久卷声明挂载到部署

  • 带有Kubernetes注释的Ballerina模块

  • 带有Ballerina函数6 V 2的Kubernetes Hellv y J { 5 4 bo World

  • 将外部文件复制到Docker镜像中

  • 带有依赖性的B@ k ] ) Fallerina模块

  • 在命名空间中部署Ballerina服务

  • 命名空间的资源配额

除了常见的Kubernetes] ~ d e J W支持之外,如果你- Q A + 1 K E i V还想将Ballerina应用程序部署到OpenShift中,那么可以参照这个示例。

ht5 p 4 G $ ; Htps://github.com/ballerinax/kubernetes/tree/master/samples/sample17

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

从代码到Istio

微服务架构为开发人员提供了许多敏捷开发的优势,有助于加快创新。但是微服务架构也有自身的复杂性。Docker和Kubernetes解决了其中一l { M j . ;些复杂性。服务网格是一种现代的软件体系结构,可以降低Kubernetes等平台的复杂性。1 3 V tIstio是一个开源p [ J ! ] ! i服务网格实现。主要关注领域包I T A 0 X n括:服务发现、负载平衡、c / k u故障恢复、指标和监视。Istio还支持复杂的操作要求,例如A/B测试、金丝雀发布、速率限制、访问控制和端到端身份验证等。

除了Kubernetes对象之外,Istio还引入了一些其他独特的概念,其中最主要的是VirtualService和Gateway。VirtualService定义了一组流量路由} a 0 H _ b规则,以实现上述复杂的操作要求。Istio Gateway是一个负载均衡器,在网格的边缘运行,以接收传入或传出的HTTP/TCP连接。

如果在Ballerina listener对象上添加两个注释,Balerina就s H ~ Y H ]能够生成部署VirtualService和Gateway的对象。下面的代码片段显示了两个定义Istio支持的注释:

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

构建这w j g段源代码即可生成Istio VirtualService和Gateway( l , E o的对象。

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

从代码到Knative

Knative是serverless平台,最初由Google创建,现已得到50多家公司的支持。KnatiR k _ 2 Q ;ve使用Kubernetes平台功能构建了一个serverlW L E C F dess平台,帮助开发人员专注于编写代码,而不必担心构建、部署和管理应[ R J +用程序等“无聊却很困难”的工g 7 H * - T ;作。Knative的主要功能之一是从零个副本自动扩展,并根据需求调整工作负载。

Knative也有自己的对j F }象模型。Knative服务由路由和配置定义,它们与YAML文件中包h t W Z U H e H i含的服务同名。每次更新配置时,都会创建一个新的修订版。

Ballerina能够在编译源代码时生成这些必要的对象,唯一的要求是在代码中添加一个& s t #简单的注释。

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

加入这个注释可以生成在Knative集群中以serverless模式T W J 5 Q h / I部署应用程序所需的对象。

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

为Knative部署生成的hello.yam3 9 [ fl。

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

从代码到8 , h L 1 K _ j 5AWS Lambda

AWS Lambda是一个2 q A B I = ^ N事件驱动的serverless计算平台。你只需添加@awslambda:Function即可在AWS Lambda中部署m g & r C , +Ballerin! 0 * q # 6a函数。J 2 P ^ P 5 V S

  • CI/CD与GiE D ? 4 X J ? : ]tHub Ac V ~ & ? % (tion

在微服务架构中,持续集成和持续交付(CI/CD)对于不断改进系统的敏捷环M - y I v n Q W境至关重要。提供CI/CD功能的技术有多种,最近GitHub引入了GitHub Actions。GitHub Actions提供了一种便捷的机制,可以在GitHub代码库中使用其工作流概念来实现CI/CD% z 5管道。

我们可以通过Ballerina GitHub Action(GitHub Ma& # a = u - } Qrketplace中有提供)创建带有CI/CD的Baller& : P 4 Dinav C l 5 r R 5 T开发环境。

  • 支持SaaS连接器

我们已经讨论了6 G : 3 w 9 w OBallerina支持不同的技术来自动化云部署。为了获得云的全部功能,应用程序应该能够与不同云供应商提供的软件即服务(SaaS)k v B V 2 x集成。

Ballerina提供了一个简单的工作流来连接和集成这些SaaS服务。例如,以下代码片段显示了如何使用Twitter SaaS服务初始化和发送推文:

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

Ballerina有许多现成的SaaS连接器:

  • 从Ballerina连接到Google Spreadsheets

  • 从Ballerina连接到Gmail

  • 从Ballerina连接到Bigquery

  • H N S过Ballerina连接到Azu) 3 Sre CV服务

  • 从Ballerina连接到Amazon S3

  • 从Ballerina连接到Amazon SQS服务

  • 从Ballerina连接到Salesforce

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

总结

  • 以前,开发人员只需编写、构建并运行程序。然而,如今开发人员面临多种运行方式的选择。

  • Docker、Kubernetes、服务网格和Serverless等云原生平台在支持部署自动化的现代平B b h台中扮演着重要角色。

  • 然而,对于开发人员而言,这些部署并不属于编程。

  • Ballerina5 L 4是一种开放源代码编程语言,专门用于从代码迁移到云,同时提供独特的开发人员体验。

  • Ballerir $ I ana的编译器可以通过扩展,读取源代码中定义的注释,并生成A H C z T . 4 ~ $将代码部署到/ j y G % N ) D不同的云环境中的对象,其中包括Dockerfile、Docker镜像、Kubernetes YAML文件或Serverless函数等。

原文:httO 4 M mps://hackernoon.com/rethinking-progr^ v 2 ,amming-from-code- p u Z H bto-cloud-fy273yer

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

为了让大家更好@ : ! 3 B P N地了解开发者,CSDN特发起“开发者与AI大2 B r #调查”活动。点击阅读原文,填写调查问卷,您将获得价值299元的「2020 AI 开发L Z c R者万人大会」在线直播门票一张哟~

从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...

推荐阅读:为何你的 SaaS 想法总是失败?没想清楚这 4 个原因可能会继续失败!
如何给女朋友解释什么是撞库、脱库和洗库?
开源的未来 10 年:中[ P v I国开源社区建立是关键
万字好文:智能合约编写之Solidity的编程攻略,建议收藏!
Python 爬取疫情期间全球股市走向,笑不出来......
无代码时代来临,程序员如何保住饭碗?
真香,朕在看了!