# Kubernetes + Compose = Kompose What's Kompose? It's a conversion tool for all things compose (namely Docker Compose) to container orchestrators (Kubernetes or OpenShift). In three simple steps, we'll take you from Docker Compose to Kubernetes. __1. Take a sample docker-compose.yaml file__ ```yaml version: "2" services: redis-master: image: gcr.io/google_containers/redis:e2e ports: - "6379" redis-slave: image: gcr.io/google_samples/gb-redisslave:v1 ports: - "6379" environment: - GET_HOSTS_FROM=dns frontend: image: gcr.io/google-samples/gb-frontend:v4 ports: - "80:80" environment: - GET_HOSTS_FROM=dns labels: kompose.service.type: LoadBalancer ``` __2. Run `kompose up` in the same directory__ ```bash $ kompose up We are going to create Kubernetes Deployments, Services and PersistentVolumeClaims for your Dockerized application. If you need different kind of resources, use the 'kompose convert' and 'kubectl create -f' commands instead. INFO Successfully created Service: redis INFO Successfully created Service: web INFO Successfully created Deployment: redis INFO Successfully created Deployment: web Your application has been deployed to Kubernetes. You can run 'kubectl get deployment,svc,pods,pvc' for details. ``` __Alternatively, you can run `kompose convert` and deploy with `kubectl`__ __2.1. Run `kompose convert` in the same directory__ ```bash $ kompose convert INFO Kubernetes file "frontend-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 "redis-master-deployment.yaml" created INFO Kubernetes file "redis-slave-deployment.yaml" created ``` __2.2. And start it on Kubernetes!__ ```bash $ kubectl create -f frontend-service.yaml,redis-master-service.yaml,redis-slave-service.yaml,frontend-deployment.yaml,redis-master-deployment.yaml,redis-slave-deployment.yaml service "frontend" created service "redis-master" created service "redis-slave" created deployment "frontend" created deployment "redis-master" created deployment "redis-slave" created ``` __3. View the newly deployed service__ Now that your service has been deployed, let's access it. If you're already using `minikube` for your development process: ```bash $ minikube service frontend ``` Otherwise, let's look up what IP your service is using! ```sh $ kubectl describe svc frontend Name: frontend Namespace: default Labels: service=frontend Selector: service=frontend Type: LoadBalancer IP: 10.0.0.183 LoadBalancer Ingress: 123.45.67.89 Port: 80 80/TCP NodePort: 80 31144/TCP Endpoints: 172.17.0.4:80 Session Affinity: None No events. ``` If you're using a cloud provider, your IP will be listed next to `LoadBalancer Ingress`. ```sh $ curl http://123.45.67.89 ```