Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Systemd engine改进 #317

Closed
nyanpassu opened this issue Jan 15, 2021 · 7 comments
Closed

Systemd engine改进 #317

nyanpassu opened this issue Jan 15, 2021 · 7 comments
Assignees

Comments

@nyanpassu
Copy link
Contributor

nyanpassu commented Jan 15, 2021

Systemd engine改进

已经实现的API

  1. Info
  2. VirtualizationCreate
  3. VirtualizationCopyTo
  4. VirtualizationStart
  5. VirtualizationStop
  6. VirtualizationRemove
  7. VirtualizationInspect

可以添加的API

  1. VirtualizationLogs

部署改进 - 把Systemd执行内容打包成标准的分发内容(Docker Image, Tar &&)

  • 如果使用Docker Image,镜像可以作为Container执行,也可以把文件抽离后用Systemd执行
  • 通过Image分发内容(镜像内包含标准化的systemd执行内容)
  1. 实现ImageLocalDigests
  2. 实现ImagePull
  • 通过Docker Image构建出systemd运行内容
  1. 改进VirtualizationCreate
  • 构建Systemd镜像,实现以下API
  1. BuildRefs
  2. BuildContent
  3. ImageBuild
  4. ImageBuildCachePrune
  5. ImageBuildFromExist
  6. ImageList
  7. ImageRemove
  8. ImagesPrune

其他可实现API

  1. VirtualizationResize

其他讨论

  1. 替换ssh client?在目标机器的容器内一定条件下逃逸掉systemctl指令?好处:统一到docker client实现
@jschwinger233
Copy link
Member

不要节操的话, 可以直接无脑往容器化的方向去靠近, 比如:

  1. image pull: 拉下来镜像后直接 tar xf 到本地某个路径, 然后让进程 chroot / pivot_root 到这个目录, 本质就是容器那一套, 只是不引入 overlay fs 什么的. 这样的好处是不必担心镜像里的 bin 是动态链接的, 否则单独抠出 bin 到宿主机可能无法运行.
  2. sdn 的引入: 理论上凭借 system unit file 里的 pre exec hooks 足以建立 sdn, 不过可能需要扩展现有的 cni 插件, 这样 systemd 起来的进程拥有了 calico sdn
  3. exec -it: 这个倒是会复杂一点, 需要大幅修改进程结构了, 会出现一个类似 containerd-shim 的进程作为真正应用进程的父进程, 来管理 pty, pipe, fifo.

不过目前的最大的痛点是:

  1. 不用 sshd, 所以需要写一个 daemon 跑在宿主机上, 这样才能符合公司对安全的要求
  2. image pull 的语义, 因为目前想要 deploy workloads 需要手动在宿主机上部署 binary, 导致整个流程体验不好.

所以第一阶段可以先解决上面两个痛点, 初步部署用起来, eru-agent / barrel / calico-node(?) 迁移上去, 然后再继续补功能.

@tonicmuroq
Copy link
Contributor

tonicmuroq commented Jan 15, 2021

支持直接用 image

  1. 兼容其他各种平台, 还不局限于 docker
  2. 不用自己从头搞一个
  3. 现成的 image 也不少, 并且 build 这一步也可以借助各种工具, 还不局限于 docker

可能存在的问题是 image 里的 binary 无法直接在 host 上运行, 但是这个不算大问题吧, 选择 image 的时候慎重一下就可以了.

@jschwinger233
Copy link
Member

可能存在的问题是 image 里的 binary 无法直接在 host 上运行, 但是这个不算大问题吧, 选择 image 的时候慎重一下就可以了.

像我说的那样直接搞成容器那一套就没问题, 解压镜像, 再在把应用进程 pivot 到路径.. @tonicbupt

@nyanpassu
Copy link
Contributor Author

  1. chroot / pivot_root

写daemon我觉得可以,因为systemd在不同distribution上还有些区别。可以用daemon抹平这个差异。

@jschwinger233
Copy link
Member

写daemon我觉得可以,因为systemd在不同distribution上还有些区别。可以用daemon抹平这个差异。

然后你要用 rust 写哇?

@nyanpassu
Copy link
Contributor Author

写daemon我觉得可以,因为systemd在不同distribution上还有些区别。可以用daemon抹平这个差异。

然后你要用 rust 写哇?

额,用什么语言不是关键。。

@CMGS
Copy link
Contributor

CMGS commented Jan 18, 2021

  • 不统一到 docker client,现在体系可以自由发挥
  • 需要有个 daemon,主要是安全考虑,https/http, grpc with basic auth 都行
  • resize 为啥不实现?这应该是最简单
  • 同意使用 image,甚至可以不用 docker 的 image,采用 buildkit 什么的

@CMGS CMGS closed this as completed Jul 5, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants