我有一个docker-compose.yml
文件,我们一直用它来设置我们的开发环境。
该文件声明了一些服务,所有服务都或多或少遵循相同的模式:
services:
service_1:
image: some_image_1
enviroment:
- ENV_VAR_1
- ENV_VAR_2
depends_on:
- another_service_of_the_same_compose_file
在迁移到kubernetes
时,运行时:
kompose convert -f docker-compose.yml
为每个服务生成一对部署/服务清单。
有关生成部署的两个问题:
1
official documentation中的示例似乎暗示部署需要selector
字段才能了解要管理的广告。
但是,创建的部署清单不包含selector
字段,如下所示:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert -f docker-compose.yml
kompose.version: 1.6.0 (e4adfef)
creationTimestamp: null
labels:
io.kompose.service: service_1
name: service_1
spec:
replicas: 1
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
io.kompose.service: service_1
spec:
containers:
- image: my_image
name: my_image_name
resources: {}
restartPolicy: Always
status: {}
2
生成的部署清单中的apiVersion
为extensions/v1beta1
,但official documentation的Deployments
部分中的示例默认为apps/v1
。
建议似乎是
对于1.9.0之前的版本使用apps / v1beta2
使用哪个版本正确? (使用kubernetes 1.8
)
答案 0 :(得分:0)
让我们首先说 Kubernetes 和 Kompose 是两个不同的独立系统。 Kompose试图将所有依赖性与kubernetes相匹配。
目前所有选择器的字段都是由kubernetes生成的。将来,它可能由我们完成。
如果您想检查您的选择器字段,请使用以下命令
kubectl get deploy
kubectl describe deploy DEPLOY_NAME
在版本k8s 1.9之后,所有长时间运行的对象都将成为 / apps 组的一部分。
我们很高兴地宣布apps / v1 Workloads API的一般可用性(GA),现在默认启用。 Apps Workloads API将DaemonSet,Deployment,ReplicaSet和StatefulSet API组合在一起,为Kubernetes中长期运行的无状态和有状态工作负载奠定了基础。请注意,批处理工作负载API(作业和CronJob)不是此工作的一部分,并且将具有到GA稳定性的单独路径。
我附上了进一步研究的链接
答案 1 :(得分:0)
由于部署不需要选择器字段,并且Kompose不知道您的集群的节点,因此它不会设置选择器(它基本上告诉k8s哪个节点运行pod)。
我不会编辑apiversion因为Kompose假定定义资源的其余部分的版本。此外,如果您使用的是kubernetes 1.8,请阅读1.8文档https://v1-8.docs.kubernetes.io/docs/
答案 2 :(得分:0)
在kubernetes 1.16中,部署的spec.selector
became required。 Kompose(从1.20版开始)尚未自动执行此操作。您必须将其添加到它创建的每个*-deployment.yaml
文件中:
selector:
matchLabels:
io.kompose.service: alignment-processor
如果使用Jetbrains之类的IDE,则可以在放置转换结果的文件夹上使用以下搜索/替换模式:
搜索此多行正则表达式:
io.kompose.service: (.*)
name: \1
spec:
replicas: 1
template:
替换为以下模式:
io.kompose.service: $1
name: $1
spec:
replicas: 1
selector:
matchLabels:
io.kompose.service: $1
template:
(.*)
捕获服务的名称,\1
匹配(第一个也是唯一的)捕获,而$1
将捕获替换为替换。
您还必须将所有extensions/v1beta1
文件中的所有apps/v1
替换为*-deployment.yaml
。
我还发现,秘密必须按摩一下,但这超出了此问题的范围。