@@ -116,17 +116,18 @@ NAME LABELS STATUS
116116+
117117[source, text]
118118----
119- > ./cluster/kubectl.sh get nodes
120- NAME LABELS STATUS
121- 10.245.1.3 kubernetes.io/hostname=10.245.1.3 Ready
122119kubernetes> ./cluster/kubectl.sh get po
123- POD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS CREATED MESSAGE
124- kube-dns-v1-jnvez 172.17.0.2 10.245.1.3/10.245.1.3 k8s-app=kube-dns,kubernetes.io/cluster-service=true,version=v1 Running 6 minutes
125- skydns gcr.io/google_containers/skydns:2015-03-11-001 Running 4 minutes last termination: exit code 2
126- kube2sky gcr.io/google_containers/kube2sky:1.7 Running 4 minutes
127- etcd gcr.io/google_containers/etcd:2.0.9 Running 5 minutes
128- kube-scheduler-kubernetes-master kubernetes-master/ <none > Pending 2 seconds
129- kube-scheduler gcr.io/google_containers/kube-scheduler:d1f640dfb379f64daf3ae44286014821
120+ POD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS CREATED MESSAGE
121+ etcd-server-kubernetes-master kubernetes-master/ <none > Running 2 minutes
122+ etcd-container gcr.io/google_containers/etcd:2.0.9 Running 2 minutes
123+ kube-apiserver-kubernetes-master kubernetes-master/ <none > Running 2 minutes
124+ kube-apiserver gcr.io/google_containers/kube-apiserver:465b93ab80b30057f9c2ef12f30450c3 Running 2 minutes
125+ kube-dns-v1-lxdof 10.245.1.3/ k8s-app=kube-dns,kubernetes.io/cluster-service=true,version=v1 Pending 2 minutes
126+ etcd gcr.io/google_containers/etcd:2.0.9
127+ kube2sky gcr.io/google_containers/kube2sky:1.7
128+ skydns gcr.io/google_containers/skydns:2015-03-11-001
129+ kube-scheduler-kubernetes-master kubernetes-master/ <none > Running 2 minutes
130+ kube-scheduler gcr.io/google_containers/kube-scheduler:d1f640dfb379f64daf3ae44286014821 Running 2 minutes
130131----
131132+
132133 . Check the list of services running:
@@ -174,35 +175,54 @@ Any Service that a Pod wants to access must be created before the Pod itself, or
174175./cluster/kubectl.sh create -f ../../attendees/kubernetes/mysql-service.yaml
175176----
176177+
178+ It uses the following configuration file:
179+ +
180+ [source, yaml]
181+ ----
182+ id: mysql
183+ kind: Service
184+ apiVersion: v1beta3
185+ metadata:
186+ name: mysql
187+ labels:
188+ name: mysql
189+ context: docker-k8s-lab
190+ spec:
191+ ports:
192+ - port: 3306
193+ selector:
194+ name: mysql
195+ labels:
196+ name: mysql
197+ ----
198+ +
177199 . Check that the service is created:
178200+
179201[source, text]
180202----
181- > ./cluster/kubectl.sh get se
182- NAME LABELS SELECTOR IP(S) PORT(S)
183- kube-dns k8s-app=kube-dns,kubernetes.io/cluster-service=true,kubernetes.io/name=KubeDNS k8s-app=kube-dns 10.247.0.10 53/UDP
184- 53/TCP
185- kubernetes component=apiserver,provider=kubernetes <none > 10.247.0.2 443/TCP
186- kubernetes-ro component=apiserver,provider=kubernetes <none > 10.247.0.1 80/TCP
187- mysql name=mysql name=mysql 10.247.82.83 3306/TCP
203+ > ./cluster/kubectl.sh get se -l context=docker-k8s-lab
204+ NAME LABELS SELECTOR IP(S) PORT(S)
205+ mysql context=docker-k8s-lab,name=mysql name=mysql 10.247.141.208 3306/TCP
188206----
189207+
190- . When a Pod is run on a node, the kubelet adds a set of environment variables for each active Service.
208+ Note that the label used during the creation is used to query the service.
209+ +
210+ When a Pod is run on a node, the kubelet adds a set of environment variables for each active Service.
191211+
192212It supports both Docker links compatible variables and simpler `{SVCNAME}_SERVICE_HOST` and `{SVCNAME}_SERVICE_PORT` variables, where the Service name is upper-cased and dashes are converted to underscores.
193213+
194214Our service name is ``mysql'' and so ` MYSQL_SERVICE_HOST` and ` MYSQL_SERVICE_PORT` variables are available to other pods.
195215
196- TODO: Consider adding DNS support as explained at: https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/services.md#dns
216+ Send a Pull Request for https://github.com/javaee-samples/docker-java/issues/62[#62].
197217
198218#### Start MySQL Replication Controller
199219
200220. Start MySQL replication controller as:
201221+
202222[source, text]
203223----
204- > ./cluster/kubectl.sh create --v=5 -f ../../attendees/kubernetes/mysql.yaml
205- I0616 13:46:49.767091 4376 defaults.go:174] creating security context for container mysql
224+ > ./cluster/kubectl.sh --v=5 create -f ../../attendees/kubernetes/mysql.yaml
225+ I0616 19:41:55.441461 8346 defaults.go:174] creating security context for container mysql
206226replicationcontrollers/mysql
207227----
208228+
@@ -213,17 +233,19 @@ It uses the following configuration file:
213233kind: ReplicationController
214234apiVersion: v1beta3
215235metadata:
216- name: mysql-server
236+ name: mysql
217237 labels:
218- name: mysql-server
238+ name: mysql
239+ context: docker-k8s-lab
219240spec:
220241 replicas: 1
221242 selector:
222- name: mysql-server
243+ name: mysql
223244 template:
224245 metadata:
225246 labels:
226- name: mysql-server
247+ name: mysql
248+ context: docker-k8s-lab
227249 spec:
228250 containers:
229251 - name: mysql
@@ -238,19 +260,29 @@ spec:
238260 - name: MYSQL_ROOT_PASSWORD
239261 value: supersecret
240262 ports:
241- - containerPort: 3360
263+ - containerPort: 3306
264+ hostPort: 3306
242265----
243266+
267+ Once again, the ``docker-k8s-lab'' label is used. This simplifies querying the created pods later on.
268+ +
244269. Verify MySQL replication controller as:
245270+
246271[source, text]
247272----
248- > ./cluster/kubectl.sh get rc
249- CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
250- kube-dns-v1 etcd gcr.io/google_containers/etcd:2.0.9 k8s-app=kube-dns,version=v1 1
251- kube2sky gcr.io/google_containers/kube2sky:1.7
252- skydns gcr.io/google_containers/skydns:2015-03-11-001
253- mysql-server mysql mysql:latest name=mysql-server 1
273+ > ./cluster/kubectl.sh get rc -l context=docker-k8s-lab
274+ CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
275+ mysql mysql mysql:latest name=mysql 1
276+ ----
277+ +
278+ . Check the status of MySQL pod as:
279+ +
280+ [source, text]
281+ ----
282+ > ./cluster/kubectl.sh get po -l context=docker-k8s-lab
283+ POD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS CREATED MESSAGE
284+ mysql-7lq67 10.245.1.3/ context=docker-k8s-lab,name=mysql Pending About a minute
285+ mysql mysql:latest
254286----
255287
256288#### Start WildFly Replication Controller
@@ -259,8 +291,8 @@ mysql-server mysql mysql:latest n
259291+
260292[source, text]
261293----
262- > ./cluster/kubectl.sh --v=5 create -f ../../attendees/kubernetes/wildfly.yaml
263- I0605 16:25:41.990260 66897 defaults.go:174] creating security context for container wildfly
294+ > ./cluster/kubectl.sh --v=5 create -f ../../attendees/kubernetes/wildfly.yaml
295+ I0616 18:59:00.563099 7849 defaults.go:174] creating security context for container wildfly
264296replicationcontrollers/wildfly
265297----
266298+
@@ -274,6 +306,7 @@ metadata:
274306 name: wildfly
275307 labels:
276308 name: wildfly
309+ context: docker-k8s-lab
277310spec:
278311 replicas: 1
279312 selector:
@@ -282,27 +315,52 @@ spec:
282315 metadata:
283316 labels:
284317 name: wildfly-server
318+ context: docker-k8s-lab
285319 spec:
286320 containers:
287321 - name: wildfly
288322 image: arungupta/wildfly-mysql-javaee7:k8s
289323 ports:
290324 - containerPort: 8080
325+ hostPort: 8080
291326----
292327+
293- . Verify WildFly replication controller as:
328+ . Verify WildFly replication controller using ``docker-k8s-lab'' label as:
294329+
295330[source, text]
296331----
297- > ./cluster/kubectl.sh get rc
298- CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
299- kube-dns-v1 etcd gcr.io/google_containers/etcd:2.0.9 k8s-app=kube-dns,version=v1 1
300- kube2sky gcr.io/google_containers/kube2sky:1.7
301- skydns gcr.io/google_containers/skydns:2015-03-11-001
302- mysql-server mysql mysql:latest name=mysql-server 1
303- wildfly wildfly arungupta/wildfly-mysql-javaee7:knetes name=wildfly-server 1
332+ > ./cluster/kubectl.sh get rc -l context=docker-k8s-lab
333+ CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
334+ mysql mysql mysql:latest name=mysql 1
335+ wildfly wildfly arungupta/wildfly-mysql-javaee7:k8s name=wildfly-server 1
336+ ----
337+ +
338+ . Check the status of WildFly pod as:
339+ +
340+ [source, text]
341+ ----
342+ > ./cluster/kubectl.sh get pod -l context=docker-k8s-lab
343+ POD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS CREATED MESSAGE
344+ mysql-7lq67 10.245.1.3/ context=docker-k8s-lab,name=mysql Pending 3 minutes
345+ mysql mysql:latest
346+ wildfly-o0nw6 10.245.1.3/ context=docker-k8s-lab,name=wildfly-server Pending 45 seconds
347+ wildfly arungupta/wildfly-mysql-javaee7:k8s
348+ ----
349+
350+ Make sure the status of both WildFly and MySQL pod is changed to ``running'' . It will look like:
351+
352+ [source, text]
353+ ----
354+ > ./cluster/kubectl.sh get pod -l context=docker-k8s-lab
355+ POD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS CREATED MESSAGE
356+ mysql-7lq67 172.17.0.9 10.245.1.3/10.245.1.3 context=docker-k8s-lab,name=mysql Running 14 minutes
357+ mysql mysql:latest Running 10 minutes
358+ wildfly-o0nw6 172.17.0.10 10.245.1.3/10.245.1.3 context=docker-k8s-lab,name=wildfly-server Running 11 minutes
359+ wildfly arungupta/wildfly-mysql-javaee7:k8s Running 26 seconds
304360----
305361
362+ NOTE: Takes a while for all the pods to start. It took ~25 minutes on a 16 GB, i7 Mac OS X.
363+
306364### Access Java EE Application
307365
308366http://<pod_ip>:8080/employees/resources/employees
@@ -314,7 +372,7 @@ http://<pod_ip>:8080/employees/resources/employees
314372
315373### Application Logs
316374
317- . Login to the Minion-1 VM:
375+ . Login to Minion-1 VM:
318376+
319377[source, text]
320378----
@@ -357,41 +415,13 @@ docker logs <CID>
357415
358416### Delete Kubernetes Resources
359417
360- . Delete WildFly repliation controller as:
361- +
362- [source, text]
363- ----
364- > ./cluster/kubectl.sh --v=5 delete -f ../../attendees/kubernetes/wildfly.yaml
365- I0605 16:39:09.152694 67149 defaults.go:174] creating security context for container wildfly
366- replicationcontrollers/wildfly
367- ----
368- +
369- . Delete MySQL replication controller as:
370- +
371- [source, text]
372- ----
373- > ./cluster/kubectl.sh --v=5 delete -f ../../attendees/kubernetes/mysql.yaml
374- I0605 17:54:26.042191 67742 defaults.go:174] creating security context for container mysql
375- replicationcontrollers/mysql-server
376- ----
377- +
378- . Delete MySQL service as:
379- +
380- [source, text]
381- ----
382- > ./cluster/kubectl.sh --v=5 delete -f ../../attendees/kubernetes/mysql-service.yaml
383- services/mysql
384- ----
385-
386- Alternatively, all services and replication controllers can be assigned a label and deleted as:
418+ Individual resources (service, replication controller, or pod) can be deleted by using `delete` command instead of `create` command. Alternatively, all services and replication controllers can be deleted using a label as:
387419
388420[source, text]
389421----
390- kubectl delete -l services,pods name =docker-lab
422+ kubectl delete -l se,po context =docker-k8s -lab
391423----
392424
393- Send a PR for the last code: https://github.com/javaee-samples/docker-java/issues/59
394-
395425### Stop Kubernetes Cluster
396426
397427[source, text]
@@ -447,50 +477,5 @@ b1809bdabd9c gcr.io/google_containers/pause:0.8.0
447477+
448478. Log out of master.
449479
450- #### Kubernetes Minion
451480
452- . Check the minions:
453- +
454- [source, text]
455- ----
456- kubernetes> ./cluster/kubectl.sh get minions
457- ----
458- +
459- This is not giving the expected output and filed as https://github.com/GoogleCloudPlatform/kubernetes/issues/9271.
460- +
461- . Docker and Kubelet are running in minion and can be verified by logging in.
462- +
463- Log in to the minion as:
464- +
465- [source, text]
466- ----
467- cluster> vagrant ssh minion-1
468- Last login: Thu Jun 4 19:30:03 2015 from 10.0.2.2
469- [vagrant@kubernetes-minion-1 ~]$
470- ----
471- +
472- . Check the status of Docker:
473- +
474- [source, text]
475- ----
476- [vagrant@kubernetes-minion-1 ~]$ sudo systemctl status docker
477- docker.service - Docker Application Container Engine
478- Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
479- Active: active (running) since Thu 2015-06-04 19:29:44 UTC; 1h 24min ago
480- Docs: http://docs.docker.com
481- Main PID: 2651 (docker)
482- CGroup: /system.slice/docker.service
483- └─2651 /usr/bin/docker -d --selinux-enabled
484-
485- Jun 04 20:53:41 kubernetes-minion-1 docker[2651]: time="2015-06-04T20:53:41Z" level="info" msg="-job containers() = OK (0)"
486- Jun 04 20:53:41 kubernetes-minion-1 docker[2651]: time="2015-06-04T20:53:41Z" level="info" msg="GET /containers/json"
487- Jun 04 20:53:41 kubernetes-minion-1 docker[2651]: time="2015-06-04T20:53:41Z" level="info" msg="+job containers()"
488- Jun 04 20:53:41 kubernetes-minion-1 docker[2651]: time="2015-06-04T20:53:41Z" level="info" msg="-job containers() = OK (0)"
489- Jun 04 20:53:42 kubernetes-minion-1 docker[2651]: time="2015-06-04T20:53:42Z" level="info" msg="GET /containers/json"
490- Jun 04 20:53:42 kubernetes-minion-1 docker[2651]: time="2015-06-04T20:53:42Z" level="info" msg="+job containers()"
491- Jun 04 20:53:42 kubernetes-minion-1 docker[2651]: time="2015-06-04T20:53:42Z" level="info" msg="-job containers() = OK (0)"
492- Jun 04 20:53:46 kubernetes-minion-1 docker[2651]: time="2015-06-04T20:53:46Z" level="info" msg="GET /version"
493- Jun 04 20:53:46 kubernetes-minion-1 docker[2651]: time="2015-06-04T20:53:46Z" level="info" msg="+job version()"
494- Jun 04 20:53:46 kubernetes-minion-1 docker[2651]: time="2015-06-04T20:53:46Z" level="info" msg="-job version() = OK (0)"
495- ----
496481
0 commit comments