# Guestbook Example Guestbook example shows how to bring up the [Guestbook Example](https://github.com/kubernetes/kubernetes/tree/master/examples/guestbook) from Kubernetes using Deployment Manager. It also shows you how to construct and reuse parameterized templates. ## Getting started It is assumed that you have bootstrapped the Deployment Manager on your cluster by following the [README.md][https://github.com/kubernetes/deployment-manager/blob/master/README.md] for bootstrapping the cluster. ## Deploying Guestbook To deploy the Guestbook example, you run the following command. ``` client --name guestbook --service=http://localhost:8001/api/v1/proxy/namespaces/default/services/manager-service:manager examples/guestbook/guestbook.yaml ``` ### Replicated Service Typical pattern for deploying microservices in Kubernetes is to create both a Replication Controller and a Service. We have created a parameterizable type for that called [Replicated Service](https://github.com/kubernetes/deployment-manager/tree/master/examples/replicatedservice) that we use throughout this example. The Guestbook example consists of 2 services, a frontend and a Redis service. Frontend is a replicated service with 3 replicas and is created like so: ``` - name: frontend type: https://raw.githubusercontent.com/kubernetes/deployment-manager/master/examples/replicatedservice/replicatedservice.py properties: service_port: 80 container_port: 80 external_service: true replicas: 3 image: gcr.io/google_containers/example-guestbook-php-redis:v3 ``` Redis is a composite type and consists of two replicated services. A master with a single replica and the slaves with 2 replicas. It's construced as follows: ``` {% set REDIS_PORT = 6379 %} {% set WORKERS = properties['workers'] or 2 %} resources: - name: redis-master type: https://raw.githubusercontent.com/kubernetes/deployment-manager/master/examples/replicatedservice/replicatedservice.py properties: # This has to be overwritten since service names are hard coded in the code service_name: redis-master service_port: {{ REDIS_PORT }} target_port: {{ REDIS_PORT }} container_port: {{ REDIS_PORT }} replicas: 1 container_name: master image: redis - name: redis-slave type: https://raw.githubusercontent.com/kubernetes/deployment-manager/master/examples/replicatedservice/replicatedservice.py properties: # This has to be overwritten since service names are hard coded in the code service_name: redis-slave service_port: {{ REDIS_PORT }} container_port: {{ REDIS_PORT }} replicas: {{ WORKERS }} container_name: worker image: kubernetes/redis-slave:v2 # An example of how to specify env variables. env: - name: GET_HOSTS_FROM value: env - name: REDIS_MASTER_SERVICE_HOST value: redis-master ``` ### Displaying types You can also see what types have been deployed to the cluster: ``` client --action listtypes --service=http://localhost:8001/api/v1/proxy/namespaces/default/services/manager-service:manager ["Service","ReplicationController","redis.jinja","https://raw.githubusercontent.com/kubernetes/deployment-manager/master/examples/replicatedservice/replicatedservice.py"] ``` This shows that there are 2 native types that we have deployed (Service and ReplicationController) and 2 composite types (redis.jinja and one imported from github (replicatedservice.py)). You can also see where the types are being used by getting details on the particular type: ``` client -action gettype --service=http://localhost:8001/api/v1/proxy/namespaces/default/services/manager-service:manager -name 'Service' [{"name":"frontend-service","type":"Service","deployment":"guestbook4","manifest":"manifest-1446682551242763329","path":"$.resources[0].resources[0]"},{"name":"redis-master","type":"Service","deployment":"guestbook4","manifest":"manifest-1446682551242763329","path":"$.resources[1].resources[0].resources[0]"},{"name":"redis-slave","type":"Service","deployment":"guestbook4","manifest":"manifest-1446682551242763329","path":"$.resources[1].resources[1].resources[0]"}] ``` It lists which deployment and manifest as well as JSON path to the type.