kubernetes:kompose

时间:2017-12-21 12:16:11

标签: kubernetes

我有一个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

生成的部署清单中的apiVersionextensions/v1beta1,但official documentationDeployments部分中的示例默认为apps/v1。 建议似乎是

  

对于1.9.0之前的版本使用apps / v1beta2

使用哪个版本正确? (使用kubernetes 1.8

3 个答案:

答案 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稳定性的单独路径。

我附上了进一步研究的链接

kubernetes-19-workloads

答案 1 :(得分:0)

  1. 由于部署不需要选择器字段,并且Kompose不知道您的集群的节点,因此它不会设置选择器(它基本上告诉k8s哪个节点运行pod)。

  2. 我不会编辑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

我还发现,秘密必须按摩一下,但这超出了此问题的范围。

相关问题