Feature: declarative host-service lifecycle for system-container workloads
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 5/5
- 预计耗时
- 一周以上
- 新手友好度
- 35/100
- Issue 类型
- 功能
- 描述清晰度
- 基本清楚
- 活跃度
- 冷清
- 技术栈
- docker, docker-compose, linux, rust
调研方向
阅读 os/common/rootfs/app-compose.service、os/common/rootfs/app-compose.sh、dstack/host-api/proto/host_api.proto 和 os/mkosi/mkosi.skeleton/usr/lib/tmpfiles.d/dstack-image.conf,以了解现有的主机机制和命名空间行为。根据列出的验收标准定义并审查受限的声明式契约:重启恢复、持久资源与启动范围资源、原子回滚,以及不允许由应用管理在 host-root 中进行安装。
由索引模型根据 Issue 内容生成。
描述
Summary
We run Incus/LXC system containers inside a DStack CVM. For our storage, cgroup, and reboot semantics, the Incus daemon runs as a PID 1-owned host systemd service rather than as an ordinary application container.
The integration works, but the application currently owns an imperative host-service installer and its complete reboot, readiness, update, and rollback protocol. We would like DStack to provide a constrained, declarative lifecycle contract for this class of host service.
Existing DStack mechanisms
DStack already provides host execution mechanisms; this request does not claim otherwise.
At current next commit 312dc605ebaaf93372534ffb135ea011533d28e9:
app-compose.serviceis a host systemd oneshot that runsapp-compose.shand remains active after the script exits.app-compose.shsupports a pre-launch script, Docker or nerdctl Compose, and a bash runner.- The vsock
HostApiexposesInfo,Notify, andGetSealingKey.
These are useful imperative building blocks, but the current public contract does not describe a typed host-service declaration with persistent/boot-scoped resources, service ownership, readiness, or rollback semantics.
Why an ordinary Compose service is insufficient for this workload
For our required deployment model, the Incus daemon must:
- own a delegated cgroup subtree for nested system containers;
- use host-native ZFS state under
/dstack/persistent; - remain a PID 1-owned service independently of the finite installer; and
- receive explicit persistent and boot-scoped binds into a content-addressed userspace root.
Our current integration therefore uses a finite privileged Compose job with host PID/root access. One centralized nsenter --target 1 boundary verifies a pinned payload, materializes a boot-scoped root, installs runtime systemd units, binds persistent state and boot-scoped resources, starts the daemon, and checks readiness. A mismatch or partial generation fails closed.
This is workable, but every consumer of this pattern must implement and secure its own installer, convergence, reboot recovery, update, and rollback logic.
Requested capability
Please consider a constrained host-service declaration that can express:
- a content-addressed and authenticated payload;
- explicit persistent state and boot-scoped runtime mounts;
- bounded systemd unit properties, capabilities, cgroup delegation, and ordering;
- readiness and health conditions; and
- atomic update, reboot recovery, and rollback behavior.
The declaration should be authenticated and capability-scoped. We are not requesting unrestricted host command execution, and the implementation need not extend HostApi; a parallel mechanism would be equally suitable.
Namespace-safe host resources
One concrete edge case is resolver projection. On the released image, /etc/resolv.conf was an absolute symlink chain ending under /run/systemd/resolve. Reading it through a container's /host root bind resolves the absolute target in the container mount namespace and misses the host file. Current mkosi source similarly creates /etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf.
Our installer handles this inside the PID 1 mount namespace. A declarative contract should instead document or provide a namespace-safe projection for host resources consumed by the declared service. We are not requiring resolv.conf to be a regular file.
Suggested acceptance criteria
- A declared service is restored to ready state after an unchanged CVM reboot.
- Persistent state survives reboot and application update, while boot-scoped resources are reconstructed.
- A failed update leaves or restores the last ready generation.
- The application does not need a host-root bind or
nsenterto install and reconcile the declared service.
Scope
This is a feature request, not a report that DStack Compose or HostApi is broken. Incus networking/kernel compatibility is tracked separately.
- 主要语言
- Rust
- 星标
- 555
- 派生
- 97
- 平均合并
- 1 天 3 小时
- 30 天内合并 PR
- 195
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
Dstack-TEE/dstack 的其他 Issue
-
难度 5/5 一周以上 新手友好度 35/100
Dstack-TEE/dstack#1384 ·
维护者通常 1 天内回复
-
难度 5/5 一周以上 新手友好度 30/100
Dstack-TEE/dstack#1301 ·
维护者通常 1 天内回复
-
难度 3/5 1-2 天 新手友好度 55/100
Dstack-TEE/dstack#1300 ·
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 48/100
Dstack-TEE/dstack#1299 ·
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 48/100
Dstack-TEE/dstack#1298 ·
维护者通常 1 天内回复
查看 Dstack-TEE/dstack 的全部 Issue
相似的 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 82/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 85/100
wardian-app/Wardian#1603 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 70/100
维护者通常 2 天内回复
-
bug
难度 1/5 1-3 小时 新手友好度 72/100
peteonrails/voxtype#844 ·
维护者通常 1 天内回复
-
feature
难度 1/5 1 小时以内 新手友好度 85/100
维护者通常 4 天内回复