Kompose - 架构 - Kompose 中文

架构和内部设计

kompose 有 3 个阶段:加载程序转换器输出程序。每个阶段都应具有定义良好的界面,以便轻松编写新的加载程序、转换器或输出程序并将其插入。目前,仅定义了加载程序和转换器的界面。

Design Diagram

加载程序

加载程序读取输入文件(目前 kompose 支持 Compose v1、v2)并将其转换为 KomposeObject。

加载程序由加载程序界面表示

type Loader interface {
      LoadFile(file string) kobject.KomposeObject
}

每个加载程序“实现”都应置于 kompose/pkg/loader(如 compose)中。未来将支持更多输入格式。更多详细信息,请访问

KomposeObject

KomposeObject 是 Kompose 加载自输入文件的所有容器的内部表示。第一版本的 KomposeObject 如下所示(源代码:kobject.go

// KomposeObject holds the generic struct of Kompose transformation
type KomposeObject struct {
    ServiceConfigs map[string]ServiceConfig
}

// ServiceConfig holds the basic struct of a container
type ServiceConfig struct {
    ContainerName string
    Image         string
    Environment   []EnvVar
    Port          []Ports
    Command       []string
    WorkingDir    string
    Args          []string
    Volumes       []string
    Network       []string
    Labels        map[string]string
    Annotations   map[string]string
    CPUSet        string
    CPUShares     int64
    CPUQuota      int64
    CapAdd        []string
    CapDrop       []string
    Entrypoint    []string
    Expose        []string
    Privileged    bool
    Restart       string
    User          string
}

转换器

转换器获取 KomposeObject 并将其转换为目标/输出格式(目前有一组 Kubernetes/OpenShift 对象)。与加载程序类似,转换器由转换器界面表示

type Transformer interface {
     Transform(kobject.KomposeObject, kobject.ConvertOptions) []runtime.Object
}

如果你希望添加包含不同类型对象的更多提供程序,则可将转换器作为重点。目前,Kompose 支持 Kubernetes(默认)和 OpenShift 提供程序。有关详细信息,请访问

输出程序

输出程序获取转换器结果并在给定动作上执行动作。例如,动作可将结果显示到 stdout 或直接将制品部署到 Kubernetes/OpenShift。