提升你的容器技能:统一的 Quadlet 管理现在已原生集成到 Podman 中

使用 Podman 在 Linux 上管理容器刚刚有了一个新功能。如果你曾觉得陷入运行简单的 podman run 命令和驾驭像 Kubernetes 这样复杂的编排平台之间,那么你将会有一个惊喜。最新版本的 Podman 通过新的 podman quadlet 命令套件将 Quadlet 管理直接集成到其核心,为开发人员和系统管理员创建了一个无缝且强大的工作流程。

尽管 Quadlets 作为声明式容器管理的强大工具已经存在了一段时间,但这项新集成使其比以往任何时候都更易于访问和统一。让我们深入探讨这对你意味着什么。

那么,Quadlets 到底是什么?

将 Quadlets 想象成你的容器的“食谱”,以声明式风格编写,系统——标准的 Linux 初始化系统——可以理解和管理它们。它们为容器编排提供了一个完美的中间地带。

有了 Quadlets,你可以:

  • 通过简单的 .container、.pod、.volume 或 .network 文件以声明方式定义容器设置
  • 利用 systemd 强大的进程管理 实现自动启动、重启和生命周期控制。
  • 实现与主机操作系统日志和服务管理的深度集成
  • 简化部署,无需完整编排平台的开销。

集成的 podman quadlet 命令套件

以前,使用 Quadlets 需要手动放置文件并直接与 systemd 交互。现在,所有这些都统一在你已经熟悉并喜爱的 podman 命令下。这种集成提供了一套全面的子命令来处理整个 Quadlet 生命周期。

主要子命令

podman quadlet install

从本地路径、目录甚至直接从 URL 安装 Quadlet 文件。

# Install from a local file
podman quadlet install /path/to/myapp.container

# Install from a URL on GitHub
podman quadlet install https://github.com/example/app/raw/main/app.container

# Install an entire application directory
podman quadlet install /path/to/app-directory/

podman quadlet list

通过强大的过滤和格式化选项,清晰地概览所有已安装的 Quadlets。

# List all installed Quadlets
podman quadlet list

# Filter by a name pattern
podman quadlet list --filter name=web*

# Customize the output format
podman quadlet list --format '{{.Name}}\t{{.Status}}'

# Get JSON output for easy scripting
podman quadlet list --format json

podman quadlet print

需要检查已安装 Quadlet 的配置?此命令将显示其内容。

podman quadlet print myapp.container

podman quadlet rm

使用灵活且安全的选项干净地移除 Quadlets。

# Remove a specific Quadlet
podman quadlet rm myapp.container

# Nuke them all
podman quadlet rm --all

# Remove a file but don't error if it's already gone
podman quadlet rm --ignore non-existent.container

你一定会喜欢的颠覆性功能

这项集成不仅仅是为了方便;它引入了一些真正具有革命性的功能。

* 基于 URL 的安装: 轻松共享和分发容器配置。只需将 podman quadlet install 指向一个 URL,即可开始使用。

* 应用程序分组当你从单个目录安装多个 Quadlets 时,Podman 会将它们视为一个有凝聚力的应用程序。如果你删除一个组件,整个应用程序将被干净地卸载,防止出现孤立的容器或卷。

* 自动 systemd 集成:–reload-systemd 选项默认开启,这意味着 systemd 会自动感知你所做的任何更改。你的服务在你安装后即可启动。

* 过滤: 通过基于名称、状态或其他条件过滤 Quadlet 列表,轻松管理大规模部署。

* 灵活的输出格式:支持 JSON 和 Go 模板,你可以将 Quadlet 管理无缝集成到你的自动化脚本和 CI/CD 管道中。

整合所有功能:一个真实世界的例子

让我们看看使用这个新工作流程管理一个简单的 Web 应用程序是多么容易。

# 1. Install a web application directly from its Git repository
podman quadlet install https://raw.githubusercontent.com/example/webapp/main/app.container

# 2. List installed Quadlets to verify it's there
podman quadlet list

# 3. Check the configuration details
podman quadlet print app.container

# 4. Start the service using standard systemd commands
systemctl --user start app.service

# 5. When you're done, remove it cleanly
podman quadlet rm app.container

这对用户有什么好处?

将 Quadlet 管理直接集成到 Podman 中是系统化和易于访问的容器管理迈出的重要一步。它通过提供以下功能弥补了差距:

  1. 统一的工作流程: 不再需要上下文切换。你所需的一切都在 podman 命令下。
  2. 简化的部署: 无需记住复杂的 podman run 标志。在 Quadlet 文件中定义一次,即可随处重用。
  3. 对版本控制友好: 由于 Quadlets 只是文本文件,你可以在 Git 中跟踪它们,审查更改,并与你的团队协作。
  4. 原生系统集成: 开箱即用,获得 systemd 的所有优势——日志记录、监控和强大的服务管理。
  5. 可扩展的管理: 将相关的容器分组为单个应用程序使微服务管理变得轻而易举。
  6. 更低的学习曲线: 如果你了解 Podman,可以立即采用 Quadlets,而无需学习全新的工具链。

几分钟内即可上手

准备好尝试了吗?请确保你已安装最新版本的 Podman。然后,创建你的第一个 Quadlet 文件。

将以下内容保存为 web.container 在一个 TOML 文件中

[Container]
Image=docker.io/library/nginx:alpine
Exec=nginx -g "daemon off;"
PublishPort=8080:80

[Service]
Restart=always

[Install]
WantedBy=default.target

现在,安装并运行它

podman quadlet install web.container
systemctl --user start web.service

就是这样!你现在有一个 Nginx 容器作为 systemd 服务运行。

将 Quadlet 管理集成到 podman 命令中,使得声明式容器功能比以往任何时候都更易于访问和直观。它是 Linux 上现代容器工作负载的简单性与强大功能的完美结合。

接下来是什么?

Quadlet 和新的 podman quadlet 命令也正在开发令人兴奋的新功能。我们的目标是在 Quadlet 中增加对远程 Podman 客户端的支持,这将允许将 Quadlets 集成到 Podman Desktop 中。在不久的将来,一个关键的重点领域是改进文档,使用户更容易理解和有效利用 Quadlets。最后,Quadlets 正在不断改进,你可以在 Podman 5.7 及更高版本中期待这些新功能和其他更改!

准备好深入了解了吗?请查看 官方 Podman 文档以获取更多详细信息和高级示例。

特别感谢我的同事 Matthew Heon 的宝贵贡献并共同撰写了这篇博文。

作者:Aditya R , Matthew Heon

“提升你的容器游戏水平:Podman 现已原生集成统一 Quadlet 管理”的 4 条回复

  1. Viktor Ransmayr Avatar

    “””最后,Quadlets 正在持续改进中,您可以期待 Podman 5.7 及更高版本中的这些新功能和其他更改!”””

    仅在 5.7 版本开始 — 还是 — 已经在 5.6 版本中?

    1. Aditya Avatar

      你好 Viktor,以下功能在 5.6 版本中也可用。

  2. Lima Avatar

    这是一个很棒的新功能!好消息!

    我作为一名随机的 Podman 用户有一些评论
    – 是否计划与 Podman Pods 进行集成?如果能够以简单的方式安装 Pod 及其所有容器,那就太好了。
    – 为了与现有 systemd 逻辑保持一致,是否可以考虑使用 ‘podman quadlet cat’ 作为 ‘podman quadlet print’ 的替代方案?

    谢谢!

    1. Aditya Avatar

      你好 Lima,

      1) 你也可以部署 .kube 文件,因此 Pods 也受支持。
      2) podman quadlet cat 是个好主意,你能否在 https://github.com/containers/podman 上创建一个 issue,以便我们可以在那里讨论?

发表评论

订阅

输入您的电子邮件地址以接收来自本网站的电子邮件更新。

返回

您的消息已发送

警告
警告
警告。

分类


搜索