什么是 CaaS–容器即服务?

容器即服务

在本文中,我们将讨论容器即服务(CaaS)。这是一种较新但功能强大的云模式。您将了解其核心功能、优缺点、与其他云模式的比较,以及如何使用容器部署一个简单的应用程序。

主要收获

  • CaaS 通过内置功能促进无缝开发和部署。
  • CaaS 具有高度的可扩展性和可移植性,可减少供应商锁定。
  • CaaS 的局限性包括潜在的安全风险和陡峭的学习曲线。

什么是容器即服务?

CaaS 的定义是 “容器即服务”,它是一种云计算模式,允许开发人员上传、构建、扩展和管理容器。

DevOps 容器是轻量级的独立可执行文件包,其中包含运行应用程序所需的一切。其中包括运行时、代码、库、配置文件等。容器可移植性高、体积小、效率高。

通过使用 CaaS,开发人员和 IT 运营团队不必担心底层基础设施。相反,他们可以站在更高的层面上思考问题。

他们只需对应用程序进行编码、dockerize 并将其推送到云端。云提供商将负责其他一切工作,如扩展、负载平衡和监控!

此外,CaaS 还能促进敏捷开发,支持微服务架构,对于快速构建高度可扩展的应用程序非常有用。

容器即服务的核心功能是什么?

目前还没有官方规范规定 CaaS 必须包含哪些功能。不同的供应商有不同的规定。不过,容器即服务最基本的功能如下:

  • 容器运行时(负责运行容器化应用程序)
  • 容器注册表(允许您存储和分发已构建的 Docker 映像)
  • 自动扩展(根据流量增加或减少容器数量)
  • 内置 CI/CD 系统(从GitHubGitLab 等 VCS 系统提取代码)
  • 负载平衡(在多个容器之间分配流量,以提高性能)
  • 监控和日志记录(提供先进的容器监控功能)

容器即服务有哪些优势?

更快的开发和部署

通过使用 CaaS,您可以大大加快软件开发和部署流程。容器可以让入职开发人员轻松建立本地开发环境。他们只需运行一两个命令,而无需安装大量依赖项或摆弄操作系统设置。

此外,项目一旦容器化,就可以轻松部署到任何 CaaS 供应商。

资源效率

容器具有资源友好的特性。它们旨在有效利用 CPU、内存和存储等系统资源。有了容器,你通常可以用较少的系统资源运行更多的应用程序。与虚拟机相比,容器的资源优化程度更高。

便携性

容器化应用程序不依赖于操作系统或底层硬件,因此具有高度可移植性。使用 CaaS,您再也不会遇到 “它能在我的机器上运行 “的问题。

此外,容器还消除了锁定供应商的风险。如果您对当前的供应商不满意,您可以轻松地从一个供应商切换到另一个供应商,而无需修改太多代码。

可扩展性

容器与 Kubernetes 等编排软件相结合,具有很强的可扩展性。大多数 CaaS 供应商都有内置的自动扩展功能、负载平衡等。这使它们能够容纳任何流量,并在流量高峰结束后迅速缩减。

简化操作

CaaS 在开发和生产环境之间架起了一座桥梁。此外,它还通过提供与 VCS 系统集成的内置 CI/CD 系统,简化了 DevOps 流程。

最重要的是,由于不需要任何系统管理员或 DevOps 工程师,CaaS 将使您大大降低成本。

容器即服务有哪些局限性?

安全问题

与虚拟机相比,容器的隔离性和安全性较低,因为它们共享相同的系统内核。这可能是一个潜在的安全风险。如果你以 root 身份运行 Docker 容器进程,黑客就有可能突破容器的控制,控制主机系统。

缺乏控制

与其他云模式相比,CaaS 平台提供的控制水平通常较低。客户无法对容器运行的机器进行微调,也无法配置应用程序的扩展方式。

学习曲线

与 PaaS 或 BaaS 相比,容器即服务模式更具挑战性。它需要大量有关编程、容器化技术、Docker 等方面的技术知识。它的学习曲线比较陡峭,但掌握它可以帮助你节省大量的时间和金钱。

数据持久性

容器的设计是无状态的。它们不应用于存储文件、数据库或其他任何需要数据持久性的东西。使用 CaaS,您必须使用第三方服务来托管文件,如 AWS S3、Google Cloud Storage 等。关于数据库,您可以使用托管数据库解决方案。

Docker 和 Kubernetes 在 CaaS 平台中扮演什么角色?

Docker 和 Kubernetes 在大多数 CaaS 平台中发挥着至关重要的作用。

Docker 是一个用于构建、部署、运行和管理容器的免费开源平台。它于 2013 年发布,现已成为打包容器化软件的事实标准。

Kubernetes(有时也称为 K8s)是一款编排软件。它比 Docker 更高级。Kubernetes 的目的是确保容器集群能很好地协同工作。它负责扩展、负载平衡、替换损坏的容器等。

容器即服务与其他模式相比有何优势?

在本节中,我们将比较 CaaS 和其他云计算服务,包括 IaaS、PaaS 和 BaaS。它们各有利弊,在部署项目时都应加以考虑。

根据抽象层,CaaS 介于 IaaS 和 PaaS 之间(如下图所示)。

Iaas vs Caas vs PaaS vs BaaS

CaaS 与 IaaS

基础设施即服务(IaaS)是一种灵活的云计算模式,云提供商在虚拟化环境中提供基本的基础设施。其中包括服务器、存储、操作系统和网络。IaaS 是最不抽象的选择,客户可以完全控制自己的基础设施。

与 IaaS 相比,CaaS 的灵活性较差,提供的控制级别也较低。但另一方面,它更易于管理,可扩展性和可移植性也更强。根据经验,如果您需要高级别的控制,请使用 IaaS;如果您需要快速部署可扩展的容器化应用程序,请使用 CaaS。

CaaS 与 PaaS

平台即服务(PaaS)是一种云计算服务,为开发人员提供构建和部署应用程序的工具。PaaS 可让用户专注于自己的应用程序,而不必担心底层基础设施。大多数 PaaS 提供商都能让您只需点击一两下即可运行应用程序!

与 PaaS 相比,CaaS 更灵活、可扩展。CaaS 允许您部署几乎任何东西,而 PaaS 提供商通常仅限于几种编程语言。在软件开发工具和功能方面,PaaS 更先进。PaaS 更适合单体应用程序,而 CaaS 则更适合微服务架构。

要了解有关平台即服务的更多信息,请查看什么是 Paas?

CaaS 与 BaaS

后端即服务(BaaS)是一种云计算模式,它将项目的后端完全抽象化。它包括数据库、文件存储、用户管理、API、SDK、推送通知和身份验证等。BaaS 可让您专注于前端和业务逻辑,而不是将时间和金钱浪费在重复的编程任务上。

CaaS 可用于部署后端和前端,而 BaaS 主要用于部署后端。BaaS 非常容易使用,有时甚至不需要任何代码。而 CaaS 则需要一定的编程、docker 化和 DevOps 等技术知识。

要了解有关后台即服务的更多信息,请查看什么是 BaaS?

哪些是最好的容器即服务提供商?

Back4app Containers

Back4app Containers是一项功能强大的云服务,为在全球分布式容器上部署和扩展应用程序提供 CaaS 平台。

它能让开发人员专注于自己的软件和 docker 化过程,而不必担心 DevOps。该平台内置 CI/CD 系统、GitHub 集成,并支持无停机部署。

最重要的是,它提供免费计划,让您可以在几分钟内运行应用程序!

Amazon Elastic Container Service

Amazon Elastic Container Service(ECS)是一种完全托管的容器协调服务,可简化容器化软件的管理和部署。您所要做的就是描述您的应用程序和所需的资源,然后 AWS 将处理所有其他事宜。

由于 ECS 在后台利用其他 AWS 服务,因此 ECS 不收取独家费用。要有效使用 ECS,您必须熟悉 AWS 生态系统。AWS 还为新客户提供免费层。

Google Cloud Kubernetes

Google Cloud Kubernetes(GKE)是 Google 基于 Kubernetes 的编排平台。它可以让你的容器自动运行,无需管理节点。它提供预构建的 Kubernetes 应用程序和模板、自动扩展功能、多集群管理等!

GKE 性能出众,使用灵活,但需要大量的初始配置。因此不适合初学者使用。与其他两个选项一样,Google 也为新用户提供免费点数。

如何使用容器托管一个简单的应用程序?

在本节中,我们将了解如何构建、dockerize 和部署一个简单的 Python 网络应用程序。本指南专为Back4app Containers 而设计,但类似的步骤也适用于任何其他 CaaS 提供商。

目标

  1. 为应用程序编码。
  2. Dockerize 应用程序并进行测试。
  3. 将源代码推送到 GitHub。
  4. 将应用程序部署到 CaaS。

代码应用程序

为了演示部署过程,我们将使用FastAPI(一个用于构建生产就绪 API 的现代高性能 Python 框架)构建一个简单的 RESTful API。

项目设置

首先为项目创建一个专用文件夹和一个虚拟环境:

$ mkdir fastapi-example && cd fastapi-example
$ python3.9 -m venv env && source env/bin/activate

接下来,安装 FastAPI 及其所有依赖项:

$ pip install "fastapi[all]"

使用额外说明符会安装一些可选的依赖项,如Uvicorn服务器、Jinja2模板引擎等。如果你只想安装最基本的,就不要使用额外的。

创建包含以下内容的main.py文件:

# main.py

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Back4app Containers rocks!"}

这是您可以编写的最基本的 FastAPI 应用程序。我们必须导入FastAPI、初始化它并注册根端点。访问/应该会返回Back4app Containers rocks!消息。

运行和测试

要运行网络应用程序,可以使用内置的UvicornASGI 服务器:

$ uvicorn main:app --reload

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [9528] using WatchFiles
INFO:     Started server process [26308]
INFO:     Waiting for application startup.
INFO:     Application startup complete.  

我们添加了--reload标志,因为我们希望服务器在我们对源代码进行任何修改时重新加载。

使用 cURL 向 API 根目录发送GET请求:

$ curl http://localhost:8000/

{
    "message": "Back4app Containers rocks!"
}

requirements.txt

我们需要做的另一件事是将所有需求冻结到requirements.txt文件中。这样做可以让其他人快速为我们的项目安装所有必要的依赖项。

$ pip freeze > requirements.txt

fastapi==0.97.0
pydantic==1.10.9
python-dotenv==1.0.0
...

我们将在 Docker 镜像构建过程中使用该文件来安装 Python 依赖项。

Dockerize 应用程序

在开始学习之前,请确保你的本地机器上有Docker。检查的最佳方法是在终端运行docker --version

Dockerfile

为了实现项目的 docker 化,我们将使用 Dockerfile。Dockerfile 是一个文本文件,其中包含用户可以执行的所有命令来组装一个镜像。

像这样在项目根目录下创建一个Dockerfile

# Dockerfile

# Use Alpine Linux as the base image
# we're using it since it's tiny in size (~5 MB)
FROM python:3.9.6-alpine

# Set the working directory
WORKDIR /app

# Set environmental variables
ENV PYTHONDONTWRITEBYTECODE 1  # Prevents Python from writing out .pyc files
ENV PYTHONUNBUFFERED 1         # Keeps Python from buffering stdin/stdout

# Copy over the requirements file and install the dependencies
COPY ./requirements.txt .
RUN pip install --no-cache-dir --upgrade -r ./requirements.txt

# Copy over the source code
COPY . .

# Expose the port
EXPOSE 80

# Run the server
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

查看评论,了解不同指令的工作原理。

别担心,你不必记住所有说明。如果遇到问题,可以随时查阅Docker 文档。此外,大多数语言和框架的 Docker 文件都可以在网上找到。你只需复制它们,然后根据自己的需要进行调整即可。

.dockerignore

我们的项目中包含了一些我们不想包含在 Docker 镜像中的文件和目录。要忽略它们,我们可以使用.dockerignore文件。

在项目根目录下创建.dockerignore文件:

# .dockerignore

.git/
.idea/
venv/

欢迎添加其他文件和目录。

构建、运行和测试

在将代码部署到 CaaS 之前,请确保您的项目能在您的机器上成功构建和运行。

首先构建 Docker 映像:

$ docker build -t fastapi-example:1.0 .

论点综述

  1. -t fastapi-example:1.0标记/命名图像。
  2. 定义了构建上下文

接下来,检查镜像是否已成功创建:

$ docker images

REPOSITORY        TAG       ID             CREATED AT      SIZE
fastapi-example   1.0       33feac11707d   4 seconds ago   72.8MB

然后使用新创建的映像来启动一个新容器:

$ docker run -p 80:80 --name fastapi-example -d fastapi-example:1.0

论点综述

  1. -p 80:80公开端口80
  2. --名称 fastapi-example命名容器。
  3. -会以分离模式运行容器(不占用终端)
  4. fastapi-example:1.0指定要使用的图像。

检查运行中的容器:

$ docker ps

ID        IMAGE                 COMMAND                CREATED   PORTS                
e67fdeg   fastapi-example:1.0   "uvicorn main:app.."   9s ago    0.0.0.0:80->80/tcp  

最后,向 API 索引发送GET请求,看看是否能收到信息:

$ curl http://localhost/

{
    "message": "Back4app Containers rocks!"
}

要停止容器,可以使用以下命令:

$ docker kill fastapi-example

推送到 GitHub

接下来的步骤需要您有一个 GitHub 账户。如果没有,请注册。此外,请确保您的计算机上安装配置了 Git

创建存储库

登录 GitHub 账户后,您将被重定向到仪表板。使用屏幕右上方的添加按钮查看版本库创建表单。

GitHub 创建仓库

接下来,给你的版本库起一个描述性的名字,然后点击 “创建版本库 “按钮。

GitHub 创建仓库表单

GitHub 会花一些时间创建仓库。版本库创建完成后,你将被重定向到该版本库。请注意 “远程仓库 URL”。

GitHub 获取远程 URL

推送源代码

继续浏览,返回本地项目。

在对代码进行版本控制之前,最好先创建一个.gitignore文件。.gitignore文件允许你定义哪些文件和目录不应该被添加到版本控制系统中。该文件的作用与.dockerignore文件相同。

在项目根目录下创建一个.gitignore文件,内容如下:

# .gitignore

.idea/
venv/
.env
build/

请根据自己的需要随意修改文件。

接下来,打开终端,运行以下命令初始化本地 Git 仓库:

$ git init

然后将所有文件添加到 VCS,并创建初始提交:

$ git add .
$ git commit -m "my initial commit"

最后,添加远程 GitHub 起源并向其推送源代码:

$ git remote add origin <remote_url>
$ git push origin master

确保将 替换为上一步中的远程 URL。

应该就是这样了。现在查看 GitHub 仓库页面,就会发现所有文件都已成功添加。

部署应用程序

要在Back4app Containers上部署应用程序,您需要一个 Back4app 账户。如果您还没有账户,请注册

登录后,您将看到应用程序列表。点击 “创建新应用 “按钮,启动应用创建流程。

Back4app 创建应用程序

Back4app 允许您部署两种类型的应用程序–后端即服务(BaaS)或容器即服务(CaaS)。由于我们要部署的是容器化应用程序,因此应选择 “容器即服务 “选项。

Back4app 容器即服务

如果还需要链接 GitHub 配置文件并导入我们在上一步中创建的仓库。接下来,选择它。

Back4app 容器选择存储库

Back4app Containers 允许您高度自定义部署。你可以设置部署分支、根目录,切换自动部署,并设置环境变量。

由于我们部署的是一个简单的应用程序,因此不需要这些选项。您只需设置 “应用程序名称”,然后点击 “创建应用程序 “按钮即可。

Back4app 容器 配置应用程序

Back4app Containers 会花一些时间从 GitHub 提取源代码、构建镜像并启动一个新容器。应用程序准备就绪后,状态将变为 “就绪”。

这时,您可以点击屏幕左侧的绿色链接,在浏览器中打开您的应用程序。您可能还会注意到,Back4app Containers 为您的应用程序免费颁发了 SSL 证书。

Back4app 容器部署完成

干得好,就是这样!

结论

总之,您已经了解了 CaaS — 微服务架构的最佳云原生模型之一。您现在知道了它的核心功能、优点、局限性以及最佳 CaaS 供应商。此外,您还学会了如何在Back4app Containers上部署一个简单的 docker 化应用程序。

项目源代码可从back4app-containers-fastapi软件仓库获取。

进一步的步骤

  1. 研究多阶段构建,改进 Dockerfile,使其更易于维护。
  2. 使用非 root 用户运行 Docker 容器进程是一种良好的安全做法。
  3. 查看Back4app Containers 文档,了解如何部署其他编程语言和框架。

常见问题

什么是容器即服务(CaaS)?

容器即服务(CaaS)是一种云计算模型,允许开发人员上传、构建、扩展和管理容器。容器是可以在任何地方轻松部署的小型可执行应用程序包。使用 CaaS,开发人员和 IT 运维团队无需担心底层基础设施,而可以专注于更高层次的开发工作。

容器即服务的优点有哪些?

– 更快的开发与部署
– 资源效率高
– 可移植性强
– 可扩展性
– 简化的运维

容器即服务的缺点有哪些?

– 安全问题
– 缺乏控制
– 学习曲线陡峭
– 数据持久性问题

有哪些优秀的容器即服务提供商?

– Back4app Containers
– Amazon Elastic Container Service (ECS)
– Google Cloud Kubernetes (GKE)

如何使用容器部署应用程序?

1. 编写应用程序代码。
2. 将应用程序 Docker 化,并在本地测试。
3. 将源代码推送到 GitHub
4. 将应用程序部署到 Back4app Containers


Leave a reply

Your email address will not be published.