二代无服务器:谷歌最新Cloud Run一览

谷歌上周在其Cloud Next ’19会议上推出了Cloud Run,这是一种基于Docker容器运行无服务器应用程序的新解决方案。可以说这是无服务器计算的重要一步——部署到Cloud Run要比在Kubernetes上运行容器容易得多,而且它也没有Lambda功能的架构限制。

什么是谷歌 Cloud Run?

谷歌Cloud Run是一个完全托管的平台,可以获取Docker容器镜像并将其作为无状态的自动扩展HTTP服务运行。

Cloud Run与第一代无服务器平台(例如AWS Lambda、Google Cloud功能或Azure功能)之间的区别在于:它允许你运行为多个端点提供服务的任意应用程序(而不是具有特定接口的小型功能)。

Cloud Run基于Knative,这意味着类似的解决方案可能会出现在其他托管的Kubernetes平台上。

我的项目是否能在Cloud Run上运行?

谷歌发布了一个Container运行时契约,其中列出了对容器的要求,包括:

——容器是为64位Linux编译的;

——容器侦听端口8080上的HTTP请求;

——最高可容纳2GB内存;

——容器实例必须在收到请求后的四分钟内启动HTTP服务器;

——你的应用程序应该工作(容器从0自动缩放到多个运行实例);

——所有计算都是无状态的,并且作用于请求。

只要你的项目符合上述一般要求,你就可以在Cloud Run上运行使用任何编程语言编写的任何应用程序。

请注意,Cloud Run目前处于测试阶段,因此这些要求可能会随时间而变化。

没有workflow(这是一件好事)

已经熟悉Docker或Heroku等传统PaaS解决方案的开发人员会感到十分亲切。

一旦你的应用程序打包在Docker中,只需:

将容器镜像推送到Google Container Registry;

运行gcloud beta run deploy。

几分钟后,Cloud Run将在域下配置一个新的应用程序,你可以自定义并公开。

示例:使用Semaphore进行持续部署

在下面的演示中,我们将使用Semaphore配置无服务器CI / CD管道,用于微服务,它将执行以下任务:

——运行自动化测试;

——构建一个Docker容器;

——将容器镜像推送到Google Container Registry;

——提供一键式手动部署到暂存Cloud Run环境;

——在主Git分支上成功构建之后,自动部署到生产Cloud Run环境。

二代无服务器:谷歌最新Cloud Run一览

你可以在GitHub上找到项目的完整源代码。

启用Cloud Run

谷歌官方快速入门指南提供了Cloud Run入门的路线图。

第一步是:

——在你的帐户中启用Cloud Run API;

——安装Google Cloud SDK;

——使用gcloud组件安装测试版安装测试版组件,或者如果你之前使用gcloud组件更新安装了测试版组件,进行更新。

Docker化应用程序

在该示例中,我们将使用与以下Dockerfile打包在一起的简单Sinatra Web应用程序:

FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y build-essential
ENV APP_HOME /app
RUN mkdir $APP_HOME
WORKDIR $APP_HOME
ADD Gemfile* $APP_HOME/
RUN bundle install --without development test
ADD . $APP_HOME
EXPOSE 8080
CMD ["bundle""exec""rackup""--host""0.0.0.0""-p""8080"]

在调整现有Dockerfile时,确保应用程序在端口8080上运行可能是需要进行的唯一更改。如果不这样做,你可能会看到如下错误:

二代无服务器:谷歌最新Cloud Run一览

使用Google Cloud和Container Registry(GCR)进行身份验证

为了在CI / CD管道中自动将Docker镜像推送到GCR,Semaphore需要使用Google Cloud进行身份验证。为安全起见,我们需要根据Google Cloud服务帐户的身份验证密钥创建Semaphore秘密。

获得身份验证密钥后,使用Semaphore CLI将其作为秘密上传到Semaphore。秘密应该定义一个文件,让我们称之为.secrets.gcp.json:

sem create secret google-cloud-stg --file ~/Downloads/account-name-27f3a5bcea2d.json:.secrets.gcp.json

定义交付管道

现在可以编写一个Semaphore管道来构建、标记并将Docker容器推送到GCR:

# .semaphore/docker-build.yml

# This pipeline runs after semaphore.yml

versionv1.0

nameDocker build

agent:

  machine:

    # Use a machine type with more RAM and CPU power for faster container

    # builds:

    typee1standard4

    os_imageubuntu1804

blocks:

  – nameBuild

    task:

      # Mount a secret which defines an authentication key file.

      # For info on creating secrets, see:

      # – https://docs.semaphoreci.com/article/66-environment-variables-and-secrets

      # – https://docs.semaphoreci.com/article/72-google-container-registry-gcr

      secrets:

        – namegooglecloudstg

      jobs:

      – nameDocker build

        commands:

          # Authenticate using the file injected from the secret

          – gcloud auth activateserviceaccount —keyfile=.secrets.gcp.json

          # Configure access to container registry, silence confirmation prompts with -q

          – gcloud auth configuredocker –q

 

          – checkout

 

          # Tag your images with gcr.io/ACCOUNT_PROJECT_NAME/SERVICE_NAME pattern

          # Use Git SHA to produce unique artifacts

          – docker build –t “gcr.io/semaphore2-stg/semaphore-demo-cloud-run:${SEMAPHORE_GIT_SHA:0:7}” .

          – docker push “gcr.io/semaphore2-stg/semaphore-demo-cloud-run:${SEMAPHORE_GIT_SHA:0:7}”

 

promotions:

  # Deployment to staging can be trigger manually:

  – nameDeploy to staging

    pipeline_filedeploystaging.yml

 

  # Automatically deploy to production on successful builds on master branch:

  – nameDeploy to production

    pipeline_filedeployproduction.yml

    auto_promote_on:

      – resultpassed

deploy-staging.yml和deploy-production.yml中定义的管道运行相同的步骤,区别在于服务的名称。

以下是生产部署的运行方式:

# .semaphore/deploy-production.yml

# This pipeline runs after docker-build.yml

versionv1.0

nameDeploy to production

agent:

  machine:

    typee1standard2

    os_imageubuntu1804

blocks:

  – nameDeploy to production

    task:

      secrets:

        – namegooglecloudstg

      jobs:

      – namerun deploy

        commands:

          – gcloud auth activateserviceaccount —keyfile=.secrets.gcp.json

          – gcloud auth configuredocker –q

          

          # Deploy to Cloud Run, using flags to avoid interactive prompt

          # See https://cloud.google.com/sdk/gcloud/reference/beta/run/deploy

          – gcloud beta run deploy markocidemocloudrun —project semaphore2stg —image gcr.io/semaphore2stg/markocidemocloudrun:${SEMAPHORE_GIT_SHA:0:7} —region uscentral1

上线

本地终端或Semaphore作业中部署日志的最后一行将包含新应用程序所在的URL,例如:

https://semaphore-demo-cloud-run-ud2bmvsmda-uc.a.run.app.

第一次打开URL时,你将看到:

二代无服务器:谷歌最新Cloud Run一览

这是因为还有一个步骤要做,那就是在Cloud Run控制台中公开你的服务。 瞧:

二代无服务器:谷歌最新Cloud Run一览

最后

希望本文能够鼓励你使用运行良好的CI / CD管道为Cloud Run构建和运送内容。接下来就看你的了。

版权声明

文章来源:K8S技术社区 作者:正在报名CKA的

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
动态
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论