Skip to content

Commit 9888eaf

Browse files
committed
simplifying instructions, removing redundant sections, fixing arun-gupta#59
1 parent 7fdc59f commit 9888eaf

1 file changed

Lines changed: 103 additions & 118 deletions

File tree

chapters/docker-kubernetes.adoc

Lines changed: 103 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -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
122119
kubernetes> ./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
+
192212
It 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
+
194214
Our 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
206226
replicationcontrollers/mysql
207227
----
208228
+
@@ -213,17 +233,19 @@ It uses the following configuration file:
213233
kind: ReplicationController
214234
apiVersion: v1beta3
215235
metadata:
216-
name: mysql-server
236+
name: mysql
217237
labels:
218-
name: mysql-server
238+
name: mysql
239+
context: docker-k8s-lab
219240
spec:
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
264296
replicationcontrollers/wildfly
265297
----
266298
+
@@ -274,6 +306,7 @@ metadata:
274306
name: wildfly
275307
labels:
276308
name: wildfly
309+
context: docker-k8s-lab
277310
spec:
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

308366
http://<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

Comments
 (0)