MonteCarloClub / kanban

Create an issue here!
0 stars 0 forks source link

容器调度与管理 Wiki #1

Open KofClubs opened 2 years ago

KofClubs commented 2 years ago

@KofClubs @hillmoonbird 提供负载自主可控高性能区块链的容器基础设施,主要功能是:

KofClubs commented 2 years ago

调度器设计

类比 Kubernetes 把 pod 调度到 node 上,这个调度器将根据需求方对资源的要求,把服务部署到最优容器上。

资源定义文件

资源定义文件可以类比 Kubernetes 对象,我将做大量简化。 例如下列资源定义文件,要求把名为 userdb 的服务部署到标签匹配 mysql 或 gorm 的容器并冗余部署2个副本,这个服务要求宿主机至少提供2 GB 存储空间,最好超过4 GB,另外,它将占用主机的 2022 端口。

name: userdb
kind: deploy
predicates:
  matchLabels: [mysql, gorm]
  storage: 2 GB
priorities:
  storage: 4 GB
requirements:
  container_port: 80
  host_port: 2022
  replicas: 2

调度器将选择最优的容器,根据这个服务的 Dockerfile 把服务部署上去。

过滤器和打分器

选择器将根据资源定义文件的断言(predicates)选择符合要求的容器,打分器将对这些符合要求的容器根据资源定义文件的优先级(priorities)打分,最终把服务部署到分数最高的容器上。

KofClubs commented 2 years ago

容器对主机发布端口

我实现了容器对主机发布端口,支持这样的 YAML 文件,即 test/dao_2048.yml

name: dao-2048-test
kind: deploy
predicate:
  repository: ghcr.io/daocloud/dao-2048
priority:
  tag: 1.1.0-alpha.6
requirement:
  host_port: 8080
  container_port: 80

它表示部署(deploy)名为 dao-2048-test 的服务,容器名必须是 ghcr.io/daocloud/dao-2048,版本号最好是 1.1.0-alpha.6,容器将暴露 80 端口,并发布到主机的 8080 端口。他跟运行下列命令是等效的:

$ docker run -d -p 8080:80 ghcr.io/daocloud/dao-2048:1.1.0-alpha.6

构建和运行方法如下:

$ go build main.go
$ ./main deploy -f test/dao_2048.yml

最终,运行 docker stop 停止容器。 @hillmoonbird @dongliangCai