云原生Kubernetes容器编排开发工具CLI【免费下载链接】komposeConvert Compose to Kubernetes项目地址https://gitcode.com/gh_mirrors/ko/kompose点击查看免费下载KomposeKubernetes Compose是 Kubernetes 生态中的 Compose 转换工具可以把docker-compose.yaml一键转换为 Kubernetes 或 OpenShift 资源清单。本文将带你从安装、转换到部署走通完整流程并结合仓库源码讲解其 Loader–Transformer–Outputter 三阶段架构与kompose convert的底层原理让你既能上手实操也能理解转换背后的设计。什么是 KomposeKompose 是一款面向容器编排平台Kubernetes 或 OpenShift的 Compose 转换工具。它接收一份符合 Compose 规范的文件将其翻译为 Kubernetes 资源对象。项目 README 中的定位描述为kompose是一个帮助熟悉docker-compose的用户迁移到 Kubernetes 的工具它读取 Compose 规范文件并将其翻译为 Kubernetes 资源。这种转换非常适合从本地 Compose 环境迁移到 Kubernetes 的场景转换结果可能并不与原始 Compose 完全等价但对于在 Kubernetes 上首次部署应用而言它能极大降低迁移成本。开发者喜爱它的核心原因有两个先用 Compose 简化开发流程再把容器部署到生产集群一条命令kompose convert即可完成转换。Its as simple as 1-2-3三步完成部署官方首页给出了极简的三步走流程这也是 Kompose 的核心使用范式准备一份示例docker-compose.yaml文件或使用你自己的 Compose 文件执行kompose convert生成 Kubernetes 资源清单执行kubectl apply然后在集群中检查新部署的容器。完整的命令序列如下$ wget https://raw.githubusercontent.com/kubernetes/kompose/master/examples/docker-compose-v3.yaml -O docker-compose.yaml $ kompose convert $ kubectl apply -f . $ kubectl get po NAME READY STATUS RESTARTS AGE frontend-591253677-5t038 1/1 Running 0 10s redis-master-2410703502-9hshf 1/1 Running 0 10s redis-replica-4049176185-hr1lr 1/1 Running 0 10s从输出可以看到kompose convert把 Compose 中的每个服务分别生成为 Deployment 和 Service 两类资源kubectl apply -f .一次性应用当前目录下的全部清单文件后Pod 随即进入 Running 状态。如果你希望获得更详细的实战指引可以参考仓库中的 Getting Started 指南其中覆盖了 Minikube、Minishift 与 RHEL 三种环境下的完整部署过程。在 Linux、macOS 或 Windows 上安装 Kompose安装 Kompose 最直接的方式是下载官方发布的二进制文件# Linux curl -L https://github.com/kubernetes/kompose/releases/download/v1.25.0/kompose-linux-amd64 -o kompose # macOS curl -L https://github.com/kubernetes/kompose/releases/download/v1.25.0/kompose-darwin-amd64 -o kompose chmod x kompose sudo mv ./kompose /usr/local/bin/komposeWindows 用户则下载kompose-windows-amd64.exe后将二进制所在目录加入 PATH 即可。注意上表二进制版本以仓库文档中记录的 v1.25.0 为例。发布节奏为约三周一个版本安装时建议到 release 页面获取最新版本号并替换 URL 中的版本号。除二进制安装外仓库 安装文档 还整理了更多安装途径包括Go 安装go install github.com/kubernetes/komposelatest拉取 main 分支的最新开发代码CentOS启用 EPEL 仓库后执行sudo yum -y install komposemacOSbrew install komposeHomebrew或 MacPortsWindowschoco install kubernetes-komposeChocolatey或winget install Kubernetes.komposeDocker/Podman 镜像方式docker build -t kompose https://github.com/kubernetes/kompose.git#main构建后用docker run --rm -it -v $PWD:/opt -w /opt kompose kompose convert挂载当前目录运行。kompose convert 的底层原理Loader → Transformer → Outputterkompose convert并非魔法它背后是一套清晰的三阶段流水线。仓库 架构文档 明确说明 Kompose 包含三个阶段Loader加载器、Transformer转换器和 Outputter输出器每个阶段都有定义良好的接口便于后续扩展新的加载格式或目标平台。阶段一Loader 读取输入文件Loader 负责读取输入文件当前支持 Compose 规范并将其转换为 Kompose 内部的统一数据结构KomposeObject。接口定义如下// pkg/loader/loader.go type Loader interface { LoadFile(files []string, profiles []string, noInterpolate bool) (kobject.KomposeObject, error) }KomposeObject是 Kompose 对容器编排意图的抽象表示核心结构源码位于 pkg/kobject/kobject.gotype KomposeObject struct { ServiceConfigs map[string]ServiceConfig } 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 CapAdd []string CapDrop []string Entrypoint []string Expose []string Privileged bool Restart string User string }从源码结构可以看出Compose 文件中的image、ports、command、volumes、labels、environment等字段都会被解析并映射到ServiceConfig的对应字段上。阶段二Transformer 生成目标平台对象Transformer 接收KomposeObject将其转换为目标平台Kubernetes 或 OpenShift的对象。接口定义// pkg/transformer/transformer.go type Transformer interface { Transform(kobject.KomposeObject, kobject.ConvertOptions) ([]runtime.Object, error) }在 pkg/app/app.go 的getTransformer中根据--provider参数选择实现默认 provider 使用kubernetes.KubernetesOpenShift 实现openshift.OpenShift内嵌继承了 Kubernetes 转换器。OpenShift 转换器会在 Kubernetes 资源基础上额外生成 DeploymentConfig 与 ImageStream 等 OpenShift 特有对象。阶段三Outputter 输出结果Outputter 对 Transformer 的产出执行最终动作可以打印到 stdout也可以写为 YAML/JSON 文件。在 pkg/app/app.go 的Convert主流程中转换完成后调用kubernetes.PrintList(objects, opt)完成输出。一条命令背后的完整调用链汇总 main.go、cmd/root.go 与 cmd/convert.go 的源码kompose convert的实际执行链为main.go调用cmd.Execute()进入 cobra 命令框架cmd/root.go的PersistentPreRun校验 provider 必须是kubernetes或openshift默认kubernetes并处理--verbose、--suppress-warnings等全局参数cmd/convert.go的PreRun组装kobject.ConvertOptions调用app.ValidateFlags与app.ValidateComposeFile做参数与输入文件校验——若未指定-f则依次探测compose.yaml、compose.yml、docker-compose.yaml、docker-compose.yml见 pkg/app/app.go 的DefaultComposeFilesRun调用app.Convert(ConvertOpt)依次执行 Loader 加载、Transformer 转换与 PrintList 输出。常用命令参数与输出格式kompose convert支持丰富的参数下面整理自 cmd/convert.go 的命令行定义参数说明默认值-f, --file指定 Compose 文件全局参数可多次指定实现多文件合并无自动探测默认文件名--provider目标平台kubernetes或openshift全局参数kubernetes-o, --out指定输出文件名或目录当前目录--stdout将转换结果打印到标准输出false-j, --json输出 JSON 格式false-y, --yaml输出 YAML 格式当前默认格式已标记为废弃true--controller输出控制器类型deployment、daemonSet、replicationControllerdeployment--replicas生成资源规格中的副本数1--volumes卷类型persistentVolumeClaim、emptyDir、hostPath、configMappersistentVolumeClaim--pvc-request-size指定 PVC 存储请求大小空-n, --namespace指定生成资源的命名空间空--generate-network-policies是否生成 NetworkPolicyfalse--with-kompose-annotation是否在生成资源上添加 kompose 注解true--no-interpolate保留 Compose 文件中的环境变量名不做插值false--profile指定要使用的 profile可多次使用空-v, --verbose详细输出调试日志false--indent生成 YAML 的缩进空格数2一些值得注意的使用要点多文件输入kompose -f first.yaml -f second.yaml convert可合并多个 Compose 文件输出到 stdoutkompose convert --stdout便于管道处理且与--out互斥源码 pkg/app/app.go 有显式校验控制器选择--deployment、--daemon-set、--replication-controller等旧参数已标记废弃官方推荐使用--controller统一指定Kubernetes 与 OpenShift 参数隔离--chart、--controller等为 Kubernetes 专属--build-repo、--build-branch、--deployment-config等为 OpenShift 专属混用会直接报错见ValidateFlags的 provider 分支校验版本兼容转换仅支持 Compose v1/v2 输入未指定文件时使用DefaultComposeFiles中列出的默认文件名。结合仓库示例文件实战仓库 examples/compose.yaml 提供了一个包含三个服务redis-leader、redis-replica、web的示例 Compose 文件。直接运行转换即可得到 6 个清单文件$ kompose convert INFO Kubernetes file frontend-service.yaml created INFO Kubernetes file redis-leader-service.yaml created INFO Kubernetes file redis-replica-service.yaml created INFO Kubernetes file frontend-deployment.yaml created INFO Kubernetes file redis-leader-deployment.yaml created INFO Kubernetes file redis-replica-deployment.yaml created注示例 Compose 中实际服务名为 redis-leader、redis-replica、web仓库文档中输出示例沿用了旧版 frontend 命名实际文件名以你本机运行结果为准。如果你倾向 OpenShift 平台则改用kompose convert --provideropenshift输出中会额外生成*-deploymentconfig.yaml与*-imagestream.yaml文件转换后同样可以用kubectl apply部署到 OpenShift 集群。另外仓库 script/test/fixtures 目录下存放了大量输入/输出配对用例覆盖 volumes、configmap、secrets、cronjob、hpa、statefulset 等场景是了解各类 Compose 特性转换行为的最佳参考素材。总结Kompose 的价值在于打通了「Compose 本地开发」与「Kubernetes 生产部署」之间的鸿沟。通过kompose convert这一条命令开发者可以快速获得可部署的 Kubernetes 清单而理解其 Loader–Transformer–Outputter 的分层设计则有助于你在遇到转换不符合预期时顺着 pkg/loader 与 pkg/transformer 的源码定位问题根源。进一步的深入资料可参考仓库中的 架构文档、转换文档 与 用户指南。赞分享云原生Kubernetes容器编排开发工具CLI【免费下载链接】komposeConvert Compose to Kubernetes项目地址https://gitcode.com/gh_mirrors/ko/kompose点击查看免费下载相关推荐如何快速集成React Native Material Dropdown5分钟实现Material Design下拉菜单如何快速集成React Native Material Dropdown5分钟实现Material Design下拉菜单 React Native MaterDocker Compose bridge convert 命令详解将 Compose 文件转换为 Kubernetes 清单与 Helm ChartDocker Compose bridge convert 命令详解将 Compose 文件转换为 Kubernetes 清单与 Helm Chart Doc云原生容器编排DevOpsCLI抖音批量下载实战教程douyin-downloader 免费工具从零到下载完成抖音批量下载实战教程douyin downloader 免费工具从零到下载完成 收藏夹里攒了几百条抖音链接想整批存到本地却还得一个个长按另存douyin网页爬虫CLI上一篇终极指南如何在Mac上快速免费备份你的微信聊天记录下一篇如何将Windows电脑变成免费无线热点VirtualRouter完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
