【云原生 Kubernetes 系列】项目实战 一文吃透 Docker Compose 文件转换成 Kubernetes 资源_kompose转换



WARN Unsupported key networks - ignoring
WARN Unsupported key build - ignoring
INFO Kubernetes file “worker-svc.yaml” created
INFO Kubernetes file “db-svc.yaml” created
INFO Kubernetes file “redis-svc.yaml” created
INFO Kubernetes file “result-svc.yaml” created
INFO Kubernetes file “vote-svc.yaml” created
INFO Kubernetes file “redis-deployment.yaml” created
INFO Kubernetes file “result-deployment.yaml” created
INFO Kubernetes file “vote-deployment.yaml” created
INFO Kubernetes file “worker-deployment.yaml” created
INFO Kubernetes file “db-deployment.yaml” created


查看转换之后的文件:



$ ls


转换结果:



db-deployment.yaml docker-compose.yml docker-gitlab.yml redis-deployment.yaml result-deployment.yaml vote-deployment.yaml worker-deployment.yaml
db-svc.yaml docker-voting.yml redis-svc.yaml result-svc.yaml vote-svc.yaml worker-svc.yaml


当然,你也可以同时提供多个 **docker-compose** 文件进行转换:



$ kompose -f docker-compose.yml -f docker-guestbook.yml convert



INFO Kubernetes file “frontend-service.yaml” created
INFO Kubernetes file “mlbparks-service.yaml” created
INFO Kubernetes file “mongodb-service.yaml” created
INFO Kubernetes file “redis-master-service.yaml” created
INFO Kubernetes file “redis-slave-service.yaml” created
INFO Kubernetes file “frontend-deployment.yaml” created
INFO Kubernetes file “mlbparks-deployment.yaml” created
INFO Kubernetes file “mongodb-deployment.yaml” created
INFO Kubernetes file “mongodb-claim0-persistentvolumeclaim.yaml” created
INFO Kubernetes file “redis-master-deployment.yaml” created
INFO Kubernetes file “redis-slave-deployment.yaml” created


查看转换之后的文件:



$ ls


转换结果:



mlbparks-deployment.yaml mongodb-service.yaml redis-slave-service.jsonmlbparks-service.yaml
frontend-deployment.yaml mongodb-claim0-persistentvolumeclaim.yaml redis-master-service.yaml
frontend-service.yaml mongodb-deployment.yaml redis-slave-deployment.yaml
redis-master-deployment.yaml


当提供多个 **docker-compose** 文件时,配置将会合并。任何通用的配置都将被后续文件覆盖。


### 2.2、OpenShift kompose convert 实战


方式千千万,唯有命令最简单:



$ kompose --provider openshift --file docker-voting.yml convert



WARN [worker] Service cannot be created because of missing port.
INFO OpenShift file “vote-service.yaml” created
INFO OpenShift file “db-service.yaml” created
INFO OpenShift file “redis-service.yaml” created
INFO OpenShift file “result-service.yaml” created
INFO OpenShift file “vote-deploymentconfig.yaml” created
INFO OpenShift file “vote-imagestream.yaml” created
INFO OpenShift file “worker-deploymentconfig.yaml” created
INFO OpenShift file “worker-imagestream.yaml” created
INFO OpenShift file “db-deploymentconfig.yaml” created
INFO OpenShift file “db-imagestream.yaml” created
INFO OpenShift file “redis-deploymentconfig.yaml” created
INFO OpenShift file “redis-imagestream.yaml” created
INFO OpenShift file “result-deploymentconfig.yaml” created
INFO OpenShift file “result-imagestream.yaml” created


**kompose** 还支持为服务中的构建指令创建 **buildconfig**。 默认情况下,它使用当前 **git** 分支的 **remote** 仓库作为源仓库,使用当前分支作为构建的源分支。 你可以分别使用 `--build-repo 和 --build-branch` 选项指定不同的源仓库和分支。



$ kompose --provider openshift --file buildconfig/docker-compose.yml convert



WARN [foo] Service cannot be created because of missing port.
INFO OpenShift Buildconfig using git@github.com:rtnpro/kompose.git::master as source.
INFO OpenShift file “foo-deploymentconfig.yaml” created
INFO OpenShift file “foo-imagestream.yaml” created
INFO OpenShift file “foo-buildconfig.yaml” created


## 三、其他转换方式


默认的 **kompose** 转换会生成 yaml 格式的 Kubernetes Deployment 和 Service 对象。 也可以选择通过 `-j` 参数生成 json 格式的对象。 也可以替换生成 Replication Controllers 对象、 Daemon Sets 或 Helm charts。



$ kompose convert -j


![在这里插入图片描述](https://img-blog.csdnimg.cn/79da5e26f30d46f9aa15cc9005153723.png)


`*-deployment.json` 文件中包含 Deployment 对象。



$ kompose convert --replication-controller


![在这里插入图片描述](https://img-blog.csdnimg.cn/c17676e106c847fcbf955cb16a3e0d70.png)


`*-replicationcontroller.yaml` 文件包含 Replication Controller 对象。 如果你想指定副本数(默认为 1),可以使用 --replicas 参数: `kompose convert --replication-controller --replicas 3`



$ kompose convert --daemon-set


![在这里插入图片描述](https://img-blog.csdnimg.cn/63c90f340ce947d1be8757d41a49c1a6.png)


`*-daemonset.yaml` 文件包含 DaemonSet 对象。


如果你想生成 **Helm** 可用的 **Chart**, 只需简单的执行下面的命令:



$ kompose convert -c


![在这里插入图片描述](https://img-blog.csdnimg.cn/fff16ceec2f24973bb675acf0bb747f5.png)



$ tree docker-compose/



docker-compose
├── Chart.yaml
├── README.md
└── templates
├── redis-deployment.yaml
├── redis-svc.yaml
├── web-deployment.yaml
└── web-svc.yaml


这个 Chart 结构旨在为构建 Helm Chart 提供框架。


## 四、标签


**kompose** 支持 d`ocker-compose.yml` 文件中用于 Kompose 的标签,以便 在转换时明确定义 Service 的行为。


* **kompose.service.type** 定义要创建的 Service 类型。



version: “2”
services:
nginx:
image: nginx
dockerfile: foobar
build: ./foobar
cap_add:
- ALL
container_name: foobar
labels:
kompose.service.type: nodeport


* **kompose.service.expose** 定义是否允许从集群外部访问 Service。 如果该值被设置为 “true”,提供程序将自动设置端点, 对于任何其他值,该值将被设置为主机名。 如果在 Service 中定义了多个端口,则选择第一个端口作为公开端口。
* + 如果使用 Kubernetes 驱动,会有一个 Ingress 资源被创建,并且假定 已经配置了相应的 Ingress 控制器。
* + 如果使用 OpenShift 驱动,则会有一个 route 被创建。



version: “2”
services:
web:
image: tuna/docker-counter23
ports:
- “5000:5000”
links:
- redis
labels:
kompose.service.expose: “counter.example.com”
redis:
image: redis:3.0
ports:
- “6379”


当前支持的选项有:




| 键 | 值 |
| --- | --- |
| kompose.service.type | nodeport / clusterip / loadbalancer |
| kompose.service.expose | true / hostname |


`提示`:**kompose.service.type** 标签应该只用 **ports** 来定义,否则 **kompose** 会失败。


## 总结


如果 Docker Compose 文件中的服务名包含 `_`(例如 web\_service), 那么将会被替换为 `-`,服务也相应的会重命名(例如 web-service)。 Kompose 这样做的原因是 “**Kubernetes**” 不允许对象名称中包含 `_`。


本篇文章,主要讲解了 Kompose,以及 **Kompose convert** 的两种使用方式,文中还穿插了一些其他的转换方式,干货还是比较多的。








![img](https://img-blog.csdnimg.cn/img_convert/91f7b90d302c4c33f67d44c1e7450a27.png)
![img](https://img-blog.csdnimg.cn/img_convert/08db7f4f80826dda7f950c59569baed8.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

tZq-1714440935790)]
[外链图片转存中...(img-bi7HRbIL-1714440935790)]

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值