在Linode的Kubernetes中部署应用程序是否绝对需要使用Docker?

104次阅读
没有评论

问题描述

想要了解在Linode的Kubernetes Engine(LKE)中部署应用程序是否需要学习和使用Docker。他希望避免学习这种额外的复杂性。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在Linode的Kubernetes中部署应用程序,首先需要将应用程序运行在一个Docker容器中。
当你的应用程序在Docker容器中运行时,你可以学习Kubernetes的部署和Ingress配置。你可以在Kubernetes集群中运行与本地使用docker相同的Docker容器。
以下是在Docker Compose中实现的步骤:
1. 创建一个Dockerfile文件。
2. 在该文件中定义构建Docker容器所需的步骤和配置。
3. 构建Docker容器后,你可以在Kubernetes集群中使用相同的Docker容器。
下面是一个示例Dockerfile文件:

FROM your_base_image
# 定义构建Docker容器的其他步骤和配置

在上面的示例中,我们使用FROM指令指定了基础镜像,并定义了构建Docker容器的其他步骤和配置。构建完成后,你可以在Kubernetes集群中使用这个Docker容器。

方案2

如果你能找到已经可用的Docker镜像,并且你的项目已经正确打包,你甚至不需要接触Docker或构建文件系统。你可以使用Kubernetes的ConfigMap来替换文件,例如将默认的nginx.conf替换为你的自定义配置文件,它将正常运行。
另一种方法是使用公共的Docker镜像,如果你能找到一个可用的镜像并且你的项目已经正确打包,你不需要接触Docker或构建文件系统。你可以使用Kubernetes的ConfigMap来替换文件,例如将默认的nginx.conf替换为你的自定义配置文件,它将正常运行。对于Python、Java、Go等语言也是一样的。如果你能找到一个可用的镜像并且你的项目已经正确打包,就不需要接触Docker。但是如果文件系统出现问题,你可能需要重新创建一个文件系统来复现问题。
对于你的情况,你可以使用PHP + Apache的Docker镜像,将Apache配置文件和php.ini文件挂载到一个ConfigMap中,将项目文件挂载到另一个ConfigMap中的/some/php/location/www目录,并且如果你想要保留内容作为文件而不仅仅是存储在数据库中,还可以添加一个来自云供应商的卷。
以下是一个示例:
1. 使用php:<version>-apache镜像创建Kubernetes的Deployment配置。
2. 使用ConfigMap作为文件。
3. 查看Linode如何使用Kubernetes PVC with CSI driver。
4. 将项目作为tarball或从Linode卷挂载。

方案3

Kubernetes本身可以与Docker以外的其他容器化技术一起运行。
根据Linode的官方文档和FAQ,他们似乎对这个问题没有明确的回答。在Kubernetes的FAQ中,他们正确地提到Kubernetes可以与多种容器化技术一起运行,但Docker是最常见的。我没有找到他们的官方文档中清晰的描述如何配置其他解决方案的部分。因此,我假设至少Linode的托管Kubernetes解决方案只提供Docker作为容器后端。
但是,你提出这个问题不是出于技术原因,而是因为你想避免学习Docker技术只是为了将一个服务放入Kubernetes环境中。
对于这个问题的答案非常明确:为了所有的目的和意图,为了避免学习的努力,使用非Docker容器系统与Kubernetes一起是没有意义的。Docker是目前最广泛使用和文档化的替代方案,有许多教程、FAQ、最佳实践、示例等。
基本的Docker使用非常简单。编写Dockerfile非常简单,几乎是微不足道的。所有的困难都在于找到正确的命令来构建和运行你的应用程序,并将它们列在一个具有简单语法的文本文件中,而这对于任何容器解决方案来说都是相同的努力。
Docker的困难在于当你在专业级别上运行你的容器时。这正是托管Kubernetes解决方案为你处理的。因此,你不会接触到任何Docker特定的“困难”任务(例如确保你的容器始终运行,获取存储、网络、CPU配额等等)。这一切都由Kubernetes为你处理,你不会注意到是Docker还是其他容器后端驱动你的集群。

正文完