Merge pull request #979 from hangyan/restart-and-service

Add headless service type label
This commit is contained in:
Charlie Drage 2018-04-16 15:20:28 -04:00 committed by GitHub
commit 5fc22fde87
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
54 changed files with 389 additions and 801 deletions

View File

@ -297,12 +297,12 @@ The currently supported options are:
| Key | Value | | Key | Value |
|----------------------|-------------------------------------| |----------------------|-------------------------------------|
| kompose.service.type | nodeport / clusterip / loadbalancer | | kompose.service.type | nodeport / clusterip / loadbalancer / headless |
| kompose.service.expose | true / hostname | | kompose.service.expose | true / hostname |
| kompose.service.expose.tls-secret | secret name | | kompose.service.expose.tls-secret | secret name |
| kompose.volume.size | kubernetes supported volume size | | kompose.volume.size | kubernetes supported volume size |
**Note**: `kompose.service.type` label should be defined with `ports` only, otherwise `kompose` will fail. **Note**: `kompose.service.type` label should be defined with `ports` only (except for headless service), otherwise `kompose` will fail.

View File

@ -33,6 +33,9 @@ const (
LabelServiceExpose = "kompose.service.expose" LabelServiceExpose = "kompose.service.expose"
// LabelServiceExposeTLSSecret provides the name of the TLS secret to use with the Kubernetes ingress controller // LabelServiceExposeTLSSecret provides the name of the TLS secret to use with the Kubernetes ingress controller
LabelServiceExposeTLSSecret = "kompose.service.expose.tls-secret" LabelServiceExposeTLSSecret = "kompose.service.expose.tls-secret"
// ServiceTypeHeadless...
ServiceTypeHeadless = "Headless"
) )
// load environment variables from compose file // load environment variables from compose file
@ -100,8 +103,10 @@ func handleServiceType(ServiceType string) (string, error) {
return string(api.ServiceTypeNodePort), nil return string(api.ServiceTypeNodePort), nil
case "loadbalancer": case "loadbalancer":
return string(api.ServiceTypeLoadBalancer), nil return string(api.ServiceTypeLoadBalancer), nil
case "headless":
return ServiceTypeHeadless, nil
default: default:
return "", errors.New("Unknown value " + ServiceType + " , supported values are 'NodePort, ClusterIP or LoadBalancer'") return "", errors.New("Unknown value " + ServiceType + " , supported values are 'nodeport, clusterip, headless or loadbalancer'")
} }
} }

View File

@ -301,7 +301,12 @@ func (k *Kubernetes) CreateService(name string, service kobject.ServiceConfig, o
servicePorts := k.ConfigServicePorts(name, service) servicePorts := k.ConfigServicePorts(name, service)
svc.Spec.Ports = servicePorts svc.Spec.Ports = servicePorts
if service.ServiceType == "Headless" {
svc.Spec.Type = api.ServiceTypeClusterIP
svc.Spec.ClusterIP = "None"
} else {
svc.Spec.Type = api.ServiceType(service.ServiceType) svc.Spec.Type = api.ServiceType(service.ServiceType)
}
// Configure annotations // Configure annotations
annotations := transformer.ConfigAnnotations(service) annotations := transformer.ConfigAnnotations(service)
@ -311,7 +316,7 @@ func (k *Kubernetes) CreateService(name string, service kobject.ServiceConfig, o
} }
// CreateHeadlessService creates a k8s headless service. // CreateHeadlessService creates a k8s headless service.
// Thi is used for docker-compose services without ports. For such services we can't create regular Kubernetes Service. // This is used for docker-compose services without ports. For such services we can't create regular Kubernetes Service.
// and without Service Pods can't find each other using DNS names. // and without Service Pods can't find each other using DNS names.
// Instead of regular Kubernetes Service we create Headless Service. DNS of such service points directly to Pod IP address. // Instead of regular Kubernetes Service we create Headless Service. DNS of such service points directly to Pod IP address.
// You can find more about Headless Services in Kubernetes documentation https://kubernetes.io/docs/user-guide/services/#headless-services // You can find more about Headless Services in Kubernetes documentation https://kubernetes.io/docs/user-guide/services/#headless-services

View File

@ -364,6 +364,7 @@ func TestServiceWithoutPort(t *testing.T) {
service := kobject.ServiceConfig{ service := kobject.ServiceConfig{
ContainerName: "name", ContainerName: "name",
Image: "image", Image: "image",
ServiceType: "Headless",
} }
komposeObject := kobject.KomposeObject{ komposeObject := kobject.KomposeObject{

View File

@ -725,7 +725,8 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
objects = append(objects, pod) objects = append(objects, pod)
} else { } else {
objects = k.CreateKubernetesObjects(name, service, opt) objects = k.CreateKubernetesObjects(name, service, opt)
// If ports not provided in configuration we will not make service }
if k.PortsExist(name, service) { if k.PortsExist(name, service) {
svc := k.CreateService(name, service, objects) svc := k.CreateService(name, service, objects)
objects = append(objects, svc) objects = append(objects, svc)
@ -734,6 +735,7 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
objects = append(objects, k.initIngress(name, service, svc.Spec.Ports[0].Port)) objects = append(objects, k.initIngress(name, service, svc.Spec.Ports[0].Port))
} }
} else { } else {
if service.ServiceType == "Headless" {
svc := k.CreateHeadlessService(name, service, objects) svc := k.CreateHeadlessService(name, service, objects)
objects = append(objects, svc) objects = append(objects, svc)
} }

View File

@ -384,7 +384,8 @@ func (o *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C
log.Infof("Buildconfig using %s::%s as source.", buildRepo, buildBranch) log.Infof("Buildconfig using %s::%s as source.", buildRepo, buildBranch)
} }
// If ports not provided in configuration we will not make service }
if o.PortsExist(name, service) { if o.PortsExist(name, service) {
svc := o.CreateService(name, service, objects) svc := o.CreateService(name, service, objects)
objects = append(objects, svc) objects = append(objects, svc)
@ -392,11 +393,10 @@ func (o *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C
if service.ExposeService != "" { if service.ExposeService != "" {
objects = append(objects, o.initRoute(name, service, svc.Spec.Ports[0].Port)) objects = append(objects, o.initRoute(name, service, svc.Spec.Ports[0].Port))
} }
} else { } else if service.ServiceType == "Headless" {
svc := o.CreateHeadlessService(name, service, objects) svc := o.CreateHeadlessService(name, service, objects)
objects = append(objects, svc) objects = append(objects, svc)
} }
}
err := o.UpdateKubernetesObjects(name, service, opt, &objects) err := o.UpdateKubernetesObjects(name, service, opt, &objects)
if err != nil { if err != nil {

View File

@ -347,11 +347,12 @@ func TestInitBuildConfig(t *testing.T) {
} }
} }
// TestServiceWithoutPort this tests if Headless Service is created for services without Port. // TestServiceWithoutPort this tests if Headless Service is created for services without Port (with label)
func TestServiceWithoutPort(t *testing.T) { func TestServiceWithoutPort(t *testing.T) {
service := kobject.ServiceConfig{ service := kobject.ServiceConfig{
ContainerName: "name", ContainerName: "name",
Image: "image", Image: "image",
ServiceType: "Headless",
} }
komposeObject := kobject.KomposeObject{ komposeObject := kobject.KomposeObject{

View File

@ -624,10 +624,14 @@ convert::expect_success "$cmd" "/tmp/output-os.json"
# Test the "full example" from https://raw.githubusercontent.com/aanand/compose-file/master/loader/example1.env # Test the "full example" from https://raw.githubusercontent.com/aanand/compose-file/master/loader/example1.env
# Kubernetes # Kubernetes
convert::expect_success_and_warning "kompose convert --stdout -j -f $KOMPOSE_ROOT/script/test/fixtures/v3/docker-compose-full-example.yaml" "$KOMPOSE_ROOT/script/test/fixtures/v3/output-k8s-full-example.json" cmd="kompose convert --stdout -j -f $KOMPOSE_ROOT/script/test/fixtures/v3/docker-compose-full-example.yaml"
sed -e "s;%VERSION%;$version;g" -e "s;%CMD%;$cmd;g" "$KOMPOSE_ROOT/script/test/fixtures/v3/output-k8s-full-example.json" > /tmp/output-k8s.json
convert::expect_success_and_warning "$cmd" "/tmp/output-k8s.json"
# Openshift # Openshift
convert::expect_success_and_warning "kompose convert --provider=openshift --stdout -j -f $KOMPOSE_ROOT/script/test/fixtures/v3/docker-compose-full-example.yaml" "$KOMPOSE_ROOT/script/test/fixtures/v3/output-os-full-example.json" cmd="kompose convert --provider=openshift --stdout -j -f $KOMPOSE_ROOT/script/test/fixtures/v3/docker-compose-full-example.yaml"
sed -e "s;%VERSION%;$version;g" -e "s;%CMD%;$cmd;g" "$KOMPOSE_ROOT/script/test/fixtures/v3/output-os-full-example.json" > /tmp/output-os.json
convert::expect_success_and_warning "$cmd" "/tmp/output-os.json"
### Test for docker-compose files present in Examples Directory ### Test for docker-compose files present in Examples Directory
@ -688,6 +692,7 @@ convert::expect_success "$cmd" "/tmp/output-os.json"
# voting # voting
# Kubernetes # Kubernetes
# This test also contains headless service test (not create by default)
cmd="kompose convert --stdout -j -f $KOMPOSE_ROOT/examples/docker-voting.yaml" cmd="kompose convert --stdout -j -f $KOMPOSE_ROOT/examples/docker-voting.yaml"
sed -e "s;%VERSION%;$version;g" -e "s;%CMD%;$cmd;g" $KOMPOSE_ROOT/script/test/fixtures/examples/output-voting-k8s.json > /tmp/output-k8s.json sed -e "s;%VERSION%;$version;g" -e "s;%CMD%;$cmd;g" $KOMPOSE_ROOT/script/test/fixtures/examples/output-voting-k8s.json > /tmp/output-k8s.json
convert::expect_success "$cmd" "/tmp/output-k8s.json" convert::expect_success "$cmd" "/tmp/output-k8s.json"

View File

@ -3,68 +3,6 @@
"apiVersion": "v1", "apiVersion": "v1",
"metadata": {}, "metadata": {},
"items": [ "items": [
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "foo",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "foo"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "foo"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "foo1",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "foo1"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "foo1"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "DeploymentConfig", "kind": "DeploymentConfig",
"apiVersion": "v1", "apiVersion": "v1",

View File

@ -11,3 +11,5 @@ services:
- redis - redis
redis: redis:
image: redis image: redis
labels:
kompose.service.type: headless

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -75,6 +76,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -75,6 +76,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -75,6 +76,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },

View File

@ -3,37 +3,6 @@
"apiVersion": "v1", "apiVersion": "v1",
"metadata": {}, "metadata": {},
"items": [ "items": [
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "dns",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "dns"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "dns"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "Deployment", "kind": "Deployment",
"apiVersion": "extensions/v1beta1", "apiVersion": "extensions/v1beta1",

View File

@ -3,37 +3,6 @@
"apiVersion": "v1", "apiVersion": "v1",
"metadata": {}, "metadata": {},
"items": [ "items": [
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "dns",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "dns"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "dns"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "DeploymentConfig", "kind": "DeploymentConfig",
"apiVersion": "v1", "apiVersion": "v1",

View File

@ -5,3 +5,5 @@ services:
image: busybox image: busybox
entrypoint: echo entrypoint: echo
command: foo command: foo
labels:
kompose.service.type: headless

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -45,6 +46,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -45,6 +46,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },

View File

@ -33,285 +33,6 @@
"loadBalancer": {} "loadBalancer": {}
} }
}, },
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "hygieia-bitbucket-scm-collector",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "hygieia-bitbucket-scm-collector"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "hygieia-bitbucket-scm-collector"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "hygieia-chat-ops-collector",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "hygieia-chat-ops-collector"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "hygieia-chat-ops-collector"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "hygieia-github-scm-collector",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "hygieia-github-scm-collector"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "hygieia-github-scm-collector"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "hygieia-jenkins-build-collector",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "hygieia-jenkins-build-collector"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "hygieia-jenkins-build-collector"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "hygieia-jenkins-cucumber-test-collector",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "hygieia-jenkins-cucumber-test-collector"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "hygieia-jenkins-cucumber-test-collector"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "hygieia-jira-feature-collector",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "hygieia-jira-feature-collector"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "hygieia-jira-feature-collector"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "hygieia-sonar-codequality-collector",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "hygieia-sonar-codequality-collector"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "hygieia-sonar-codequality-collector"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "hygieia-subversion-scm-collector",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "hygieia-subversion-scm-collector"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "hygieia-subversion-scm-collector"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "hygieia-udeploy-collector",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "hygieia-udeploy-collector"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "hygieia-udeploy-collector"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "Service", "kind": "Service",
"apiVersion": "v1", "apiVersion": "v1",
@ -342,37 +63,6 @@
"loadBalancer": {} "loadBalancer": {}
} }
}, },
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "hygieia-versionone-collector",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "hygieia-versionone-collector"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "hygieia-versionone-collector"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "Service", "kind": "Service",
"apiVersion": "v1", "apiVersion": "v1",

View File

@ -125,37 +125,6 @@
"loadBalancer": {} "loadBalancer": {}
} }
}, },
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "worker",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "worker"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "worker"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "Deployment", "kind": "Deployment",
"apiVersion": "extensions/v1beta1", "apiVersion": "extensions/v1beta1",

View File

@ -125,37 +125,6 @@
"loadBalancer": {} "loadBalancer": {}
} }
}, },
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "worker",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "worker"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "worker"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "DeploymentConfig", "kind": "DeploymentConfig",
"apiVersion": "v1", "apiVersion": "v1",

View File

@ -3,37 +3,6 @@
"apiVersion": "v1", "apiVersion": "v1",
"metadata": {}, "metadata": {},
"items": [ "items": [
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "myservice",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "myservice"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "myservice"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "Deployment", "kind": "Deployment",
"apiVersion": "extensions/v1beta1", "apiVersion": "extensions/v1beta1",

View File

@ -3,37 +3,6 @@
"apiVersion": "v1", "apiVersion": "v1",
"metadata": {}, "metadata": {},
"items": [ "items": [
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "myservice",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "myservice"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "myservice"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "DeploymentConfig", "kind": "DeploymentConfig",
"apiVersion": "v1", "apiVersion": "v1",

View File

@ -3,5 +3,7 @@ version: "3"
services: services:
redis: redis:
image: redis image: redis
labels:
kompose.service.type: headless
healthcheck: healthcheck:
test: echo "hello world" test: echo "hello world"

View File

@ -3,6 +3,8 @@ version: "3"
services: services:
redis: redis:
image: redis image: redis
labels:
kompose.service.type: headless
healthcheck: healthcheck:
test: echo "hello world" test: echo "hello world"
interval: 10s interval: 10s

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -45,6 +46,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -45,6 +46,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -45,6 +46,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -45,6 +46,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },

View File

@ -3,37 +3,6 @@
"apiVersion": "v1", "apiVersion": "v1",
"metadata": {}, "metadata": {},
"items": [ "items": [
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "db",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "db"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "db"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "Deployment", "kind": "Deployment",
"apiVersion": "extensions/v1beta1", "apiVersion": "extensions/v1beta1",

View File

@ -3,37 +3,6 @@
"apiVersion": "v1", "apiVersion": "v1",
"metadata": {}, "metadata": {},
"items": [ "items": [
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "db",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "db"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "db"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "Deployment", "kind": "Deployment",
"apiVersion": "extensions/v1beta1", "apiVersion": "extensions/v1beta1",

View File

@ -3,37 +3,6 @@
"apiVersion": "v1", "apiVersion": "v1",
"metadata": {}, "metadata": {},
"items": [ "items": [
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "db",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "db"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "db"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "DeploymentConfig", "kind": "DeploymentConfig",
"apiVersion": "v1", "apiVersion": "v1",

View File

@ -3,37 +3,6 @@
"apiVersion": "v1", "apiVersion": "v1",
"metadata": {}, "metadata": {},
"items": [ "items": [
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "db",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "db"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "db"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "DeploymentConfig", "kind": "DeploymentConfig",
"apiVersion": "v1", "apiVersion": "v1",

View File

@ -3,37 +3,6 @@
"apiVersion": "v1", "apiVersion": "v1",
"metadata": {}, "metadata": {},
"items": [ "items": [
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "foo",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "foo"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "foo"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "Deployment", "kind": "Deployment",
"apiVersion": "extensions/v1beta1", "apiVersion": "extensions/v1beta1",

View File

@ -3,37 +3,6 @@
"apiVersion": "v1", "apiVersion": "v1",
"metadata": {}, "metadata": {},
"items": [ "items": [
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "foo",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "foo"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "foo"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "DeploymentConfig", "kind": "DeploymentConfig",
"apiVersion": "v1", "apiVersion": "v1",

View File

@ -1,6 +1,8 @@
version: '2' version: '2'
services: services:
mariadb: mariadb:
labels:
kompose.service.type: headless
image: 'bitnami/mariadb:latest' image: 'bitnami/mariadb:latest'
volumes: volumes:
- 'mariadb-data:/bitnami/mariadb' - 'mariadb-data:/bitnami/mariadb'

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -80,6 +81,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -80,6 +81,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },

View File

@ -2,6 +2,8 @@ version: "3"
services: services:
foo: foo:
labels:
kompose.service.type: headless
deploy: deploy:
mode: global mode: global
replicas: 6 replicas: 6

View File

@ -1,6 +1,8 @@
version: '3' version: '3'
services: services:
foo: foo:
labels:
kompose.service.type: headless
image: foo/bar:latest image: foo/bar:latest
environment: environment:
FOO: foo FOO: foo

View File

@ -2,6 +2,8 @@ version: "3"
services: services:
foo: foo:
labels:
kompose.service.type: headless
deploy: deploy:
resources: resources:
limits: limits:

View File

@ -2,6 +2,8 @@ version: "3"
services: services:
foo: foo:
labels:
kompose.service.type: headless
deploy: deploy:
resources: resources:
limits: limits:

View File

@ -1,6 +1,8 @@
version: '3' version: '3'
services: services:
foo: foo:
labels:
kompose.service.type: headless
image: foo/bar:latest image: foo/bar:latest
environment: environment:
- BAR - BAR

View File

@ -3,6 +3,8 @@ version: "3"
services: services:
foobar: foobar:
labels:
kompose.service.type: headless
image: foo/bar:latest image: foo/bar:latest
volumes: volumes:
- /tmp/foo/bar - /tmp/foo/bar

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -45,6 +46,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -45,6 +46,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -45,6 +46,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },

View File

@ -3,37 +3,6 @@
"apiVersion": "v1", "apiVersion": "v1",
"metadata": {}, "metadata": {},
"items": [ "items": [
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "foo",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "foo"
},
"annotations": {
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "headless",
"port": 55555,
"targetPort": 0
}
],
"selector": {
"io.kompose.service": "foo"
},
"clusterIP": "None"
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "Deployment", "kind": "Deployment",
"apiVersion": "extensions/v1beta1", "apiVersion": "extensions/v1beta1",

View File

@ -3,6 +3,149 @@
"apiVersion": "v1", "apiVersion": "v1",
"metadata": {}, "metadata": {},
"items": [ "items": [
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "foo",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "foo"
},
"annotations": {
"com.example.description": "Accounting webapp",
"com.example.empty-label": "",
"com.example.number": "42",
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "3000",
"port": 3000,
"targetPort": 3000
},
{
"name": "3000-TCP",
"port": 3000,
"targetPort": 3000
},
{
"name": "3001",
"port": 3001,
"targetPort": 3001
},
{
"name": "3002",
"port": 3002,
"targetPort": 3002
},
{
"name": "3003",
"port": 3003,
"targetPort": 3003
},
{
"name": "3004",
"port": 3004,
"targetPort": 3004
},
{
"name": "3005",
"port": 3005,
"targetPort": 3005
},
{
"name": "8000",
"port": 8000,
"targetPort": 8000
},
{
"name": "9090",
"port": 9090,
"targetPort": 8080
},
{
"name": "9091",
"port": 9091,
"targetPort": 8081
},
{
"name": "49100",
"port": 49100,
"targetPort": 22
},
{
"name": "8001",
"port": 8001,
"targetPort": 8001
},
{
"name": "5000",
"port": 5000,
"targetPort": 5000
},
{
"name": "5001",
"port": 5001,
"targetPort": 5001
},
{
"name": "5002",
"port": 5002,
"targetPort": 5002
},
{
"name": "5003",
"port": 5003,
"targetPort": 5003
},
{
"name": "5004",
"port": 5004,
"targetPort": 5004
},
{
"name": "5005",
"port": 5005,
"targetPort": 5005
},
{
"name": "5006",
"port": 5006,
"targetPort": 5006
},
{
"name": "5007",
"port": 5007,
"targetPort": 5007
},
{
"name": "5008",
"port": 5008,
"targetPort": 5008
},
{
"name": "5009",
"port": 5009,
"targetPort": 5009
},
{
"name": "5010",
"port": 5010,
"targetPort": 5010
}
],
"selector": {
"io.kompose.service": "foo"
}
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "Pod", "kind": "Pod",
"apiVersion": "v1", "apiVersion": "v1",

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -45,6 +46,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -45,6 +46,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },

View File

@ -3,6 +3,149 @@
"apiVersion": "v1", "apiVersion": "v1",
"metadata": {}, "metadata": {},
"items": [ "items": [
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "foo",
"creationTimestamp": null,
"labels": {
"io.kompose.service": "foo"
},
"annotations": {
"com.example.description": "Accounting webapp",
"com.example.empty-label": "",
"com.example.number": "42",
"kompose.cmd": "%CMD%",
"kompose.version": "%VERSION%"
}
},
"spec": {
"ports": [
{
"name": "3000",
"port": 3000,
"targetPort": 3000
},
{
"name": "3000-TCP",
"port": 3000,
"targetPort": 3000
},
{
"name": "3001",
"port": 3001,
"targetPort": 3001
},
{
"name": "3002",
"port": 3002,
"targetPort": 3002
},
{
"name": "3003",
"port": 3003,
"targetPort": 3003
},
{
"name": "3004",
"port": 3004,
"targetPort": 3004
},
{
"name": "3005",
"port": 3005,
"targetPort": 3005
},
{
"name": "8000",
"port": 8000,
"targetPort": 8000
},
{
"name": "9090",
"port": 9090,
"targetPort": 8080
},
{
"name": "9091",
"port": 9091,
"targetPort": 8081
},
{
"name": "49100",
"port": 49100,
"targetPort": 22
},
{
"name": "8001",
"port": 8001,
"targetPort": 8001
},
{
"name": "5000",
"port": 5000,
"targetPort": 5000
},
{
"name": "5001",
"port": 5001,
"targetPort": 5001
},
{
"name": "5002",
"port": 5002,
"targetPort": 5002
},
{
"name": "5003",
"port": 5003,
"targetPort": 5003
},
{
"name": "5004",
"port": 5004,
"targetPort": 5004
},
{
"name": "5005",
"port": 5005,
"targetPort": 5005
},
{
"name": "5006",
"port": 5006,
"targetPort": 5006
},
{
"name": "5007",
"port": 5007,
"targetPort": 5007
},
{
"name": "5008",
"port": 5008,
"targetPort": 5008
},
{
"name": "5009",
"port": 5009,
"targetPort": 5009
},
{
"name": "5010",
"port": 5010,
"targetPort": 5010
}
],
"selector": {
"io.kompose.service": "foo"
}
},
"status": {
"loadBalancer": {}
}
},
{ {
"kind": "Pod", "kind": "Pod",
"apiVersion": "v1", "apiVersion": "v1",

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -45,6 +46,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },

View File

@ -14,6 +14,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },
@ -45,6 +46,7 @@
}, },
"annotations": { "annotations": {
"kompose.cmd": "%CMD%", "kompose.cmd": "%CMD%",
"kompose.service.type": "headless",
"kompose.version": "%VERSION%" "kompose.version": "%VERSION%"
} }
}, },