Slide 1

Slide 1 text

Kubernetes with Java Kubernetes   Java   #hirojug

Slide 2

Slide 2 text

1 -  - $! +# &(#  - ,%+&", Java),,*,% '*   Twitter-@7richi

Slide 3

Slide 3 text

2 5:)Oracle Code Japan Tour in Hiroshima*;)Cloud Native Java EE*LMJRT7KubernetesD14SFPIVNETHNQD56&,4 .UUU Kubernetes:%16+=@ .-544>'3; 7.CB4-+ =@7/6,9-54;. -54(W?>X 307'Kubernetes:%2A 9;8  ;OTKGTD "16Kubernetes

Slide 4

Slide 4 text

1.  

Slide 5

Slide 5 text

4 ■ Kubernetes.+CE7A-Kubernetes5%)Spring Boot*  %'REST API5%)9D=?6E8<>BE;@D5&4 ■:EA – Kubernetes. – CE7A0Kubernetes.#43"-,4 – Kubernetes5%',9D=?6E8<>BE;@D. ■%,!$+ – 9D=?(Docker)-&4 – Spring Boot.  . – REST API-(!)  . +:EA $$%,!+ 12/Java+/ ,!.*/

Slide 6

Slide 6 text

5 -2/=5 ■Kubernetes& ■<>1; & ■8=30= – Pod#&69<. – Replica Set+69<. – Deployment+69<. – Service& – Service+Blue/Green Deployment ■  – 0>9=4:7>2018? ■  – *# )!$(% – "',

Slide 7

Slide 7 text

2. Kubernetes

Slide 8

Slide 8 text

7 ■miniKube – Windows  exe (minikube-windows-amd64.exe) https://github.com/kubernetes/minikube/releases   

Slide 9

Slide 9 text

8 mOp_uZzizJ n[xFDockerNG1GApachesQ]x\A, :M@5L Uzlx^z\^kdSTOA4L1 nQWwZzj\NEclwQ0O`lczd=L$B;@0YxbeF Uzd\Xzu0 Blue Green Deployment 0 Rolling Update DCF$ N7@5L1 ?DHE2Kubernetes3G0Vt[q(A2%F!32 #y,#3B56 94LB:M12k8s3B:M'*:ML9 51 {8GK8KsF.F N&;@5L| )HG2WzmzfPb\3J2WRifPb\3} KubernetesBG

Slide 10

Slide 10 text

9 ■2014 66 ■2015 76.5*141.0335+ ■2015 76Linux Foundation&Cloud Native Computing Fou ndation(CNCF)%  (AT&TCiscoCoreOSDockerIBMIntelMicrosoftRed HatVM ware$#&%  () ■2017 86AWSCNCF%04.5&/2,- "  )'!& $

Slide 11

Slide 11 text

10 ]udh+O NQR4 Wlq\v_ouOeltXP%N>4) %N*;SQ:NMGF5A

Slide 12

Slide 12 text

11 ■1%PGOCa…frgp} – d„y%YGCPAAWSLBJKXk8s_;GK7A='H]M(RUM `N)&GOC ■j„ru2PGOCj„ru1% – j„ru2%Q8 PZ\Open Container InitiativeEH]D_@0 ■j„ru?Qvqtƒ…g,$† 6!XV‡ – k…xmsbmew€…+Q- ■j„ruQ"*5 – j„ruE`I[Aj„ru_. L4: ■j„ruQ9/ – -Q3j„ruTQagnmw„l„h- ■j„ruQ€o…ma‚i…l~„ – j„ru PCPU€o…mY{|€…€o…mQ - KubernetesR_GKF^]QD

Slide 13

Slide 13 text

12 ■ %   #Ingress $ Kubernetes  Cluster Node Pod " ! Service Ingress internet Node Pod " ! Node Pod " ! Service

Slide 14

Slide 14 text

13 ■Node/Cluster Node^cIk8sbv€„n‡ŽpVlYgbVM`KT24w…bR^J k8sn94Vl‰=dIАxN) Vl \bv€„NRmj Node]@SmlJNodebHnCliuter^e ■Pod k8s]b‡Žpb,!JPodc“ bv€„bH]INode a"FSmlk8s-b0$J Podb3#c&TYv€„c \+aUNodea‡ŽpSmlJRm aik<VlA*b‡Ž{z‘v€„’]1%SmY“Zbo‡uy‹ ]LKnBZQhVPT“ZbH^T\‡Žp/l ‘”…z‡Žry^o‡uy‹Io‡uy‹b†Ž‚^…sq ƒ`_b:W’ – Pod bv€„clocalhost;6]D ]Ol – EMj8(Podfcos{zc/`K – Label:k8s]94Sm\Kl|zc>a[O?7a.I‡ŽpS mlNXbGaŒ~ˆ`N?7a'jmlIXmjnBZQhVPVlY gPoda T\}tnVlR^N/l Kubernetesb5C[1/3]

Slide 15

Slide 15 text

14 ■Service $Pod?8; IPK]hVJ G;Hk8s@"<.!? ServiceB@KRWV3Pod?G 5FIH@ck\lJ%9H6=?EG.ReVY2FNodePortTk`V? KRWV<4C9 ■ LoadBalancer:ReN]bi_MZ@ik]_ejTJ8;)?Tk`VJ* 8C9(minikubeA,) ■ ExternalName:DNS@CNAMEhSk]J&9H6=?EG.ReVY) 5@OM fKVJ9H/6I?A_kUdj1.7@kube-dns3% Kubernetes@'[2/3]

Slide 16

Slide 16 text

15 ■Ingress IngressYServiceW[]ICAdServiceW{€joNaDHTTP €‚vx|nW- MR8LbREa,CL7SXURLyq‚W_a~‚ sfl^SSL43 /VUX<]7FaD\PCIngressYk8sH2M REa0W_QR*6T8HGcaCGCPSYGCPXCAWSSYAWS X0W QPS{€joH Lba ■Replica Set PodX{}i$ƒPodXmsw$„d5!/=Na*6DmswH" MP{}i$_`]VE Y%PWmswd? MCFNJRa Ymswd BM{}i$d5!Na ■Deployment Pod^Replication SetsX:er{t‚u*6d#DDeploymenth zpgkuS(Na.d;@NbZDeployment ControllerH9+M P.W&MRKba OXW]Kubernetes'X)C1>H$Na KubernetesX1>[3/3]

Slide 17

Slide 17 text

3.  

Slide 18

Slide 18 text

17 Minikube"k8s)#&   %'8=.=! $ ;=*:7/=<!VM k8+901!,<24) '$ !-=6(Kubernetes Master)5=3!k8s+901) (' >Minikube " Ingress" ? Minikube" ;=*:7/=< (Linux,Mac OS,Windows) VM(VirtualMachine) Kubernetes(minikube) Kubernetes Master Node (1!#)

Slide 19

Slide 19 text

18 ■ – virtualBox 4Q- – -9IQC)8M<>2%0 – -9IQC):RERER;LQ2 &/ Windows,kubernetes 2%0 $ minikube config set vm-driver virtualbox $ minikube start $ minikube version

Slide 20

Slide 20 text

4. 

Slide 21

Slide 21 text

20 /8*#8 Docker6()-4 Spring Boot REST APIDocker"29(! Kubernetes&8+.#9%)- 69'38!  ■Docker6()-4 – docker.io/uls555/getting-started-k8s-with-java ■,07" /8*#8 Docker Hub 79$51'98 Docker Image  REST API minikube push pull   

Slide 22

Slide 22 text

21  REST API  REST API  Docker Hub   Docker Image   REST API minikube

Slide 23

Slide 23 text

22 /%-Pod,6 4+Pod,@EL86#'04J>M< - GCD9

Slide 24

Slide 24 text

23 nPod Pod [2/2] $ kubectl delete pod rest-api

Slide 25

Slide 25 text

24 Pod/ "$Pod  "$+, /%$ +*) !.*Replica Set/"&+Pod/ #- ■Replica Set+ ( – + 'replicaset.yaml/ – Replica Set/ Replica Set/"$1230[1/2] apiVersion: extensions/v1beta1 kind: ReplicaSet metadata: name: rest-api-rs spec: replicas: 3 template: metadata: labels: app: my-rest-api spec: containers: - image: docker.io/uls555/getting-started-k8s-with-java:v1 imagePullPolicy: Always name: rest-api $ kubectl create -f replicaset.yaml  #-Pod+ Pod+ 

Slide 26

Slide 26 text

25 ■Pod  ■Pod  Replica SetPod " Pod"  Pod – Pod ■Replica Set Replica Set" $%&#[2/2] $ kubectl get pod NAME READY STATUS RESTARTS AGE rest-api-rs-6xpqf 1/1 Running 0 1m rest-api-rs-m1x43 1/1 Running 0 1m rest-api-rs-pbsmk 1/1 Running 0 1m $ kubectl delete pod rest-api-rs-m1x43 $ kubectl get pod NAME READY STATUS RESTARTS AGE rest-api-rs-6xpqf 1/1 Running 0 4m rest-api-rs-m1x43 1/1 Terminating 0 4m rest-api-rs-n92wz 0/1 ContainerCreating 0 5s rest-api-rs-pbsmk 1/1 Running 0 4m !Pod !Pod $ kubectl delete replicaset rest-api-rs

Slide 27

Slide 27 text

26 Replica Set0!/$  k8s&-%Deployment0 !/$&,.6;?2' k8s&/"+'9A4=@& & /$/ ■Deployment' $6;?2 – ' #deployment.yaml0 – 6;?2 Deployment0 "6;?2[1/3] apiVersion: apps/v1beta1 kind: Deployment metadata: name: rest-api-dep spec: replicas: 3 template: metadata: labels: app: my-rest-api spec: containers: - image: docker.io/uls555/getting-started-k8s-with-java:v1 imagePullPolicy: Always name: rest-api <8:357:12>( RepulicsSet$)* $ kubectl create -f deployment.yaml

Slide 28

Slide 28 text

27 ■Pod  ■Deployment  – Replicas  4  Deployment   [2/3] $ kubectl get pods NAME READY STATUS RESTARTS AGE rest-api-rs-6xpqf 1/1 Running 1 9h rest-api-rs-n92wz 1/1 Running 1 9h rest-api-rs-pbsmk 1/1 Running 1 9h apiVersion: apps/v1beta1 kind: Deployment metadata: name: rest-api-dep spec: replicas: 4 template: metadata: labels: app: my-rest-api spec: containers: - image: docker.io/uls555/getting-started-k8s-with-java:v1 imagePullPolicy: Always name: rest-api replica  4 

Slide 29

Slide 29 text

28 ■Deployment – Deployment  ■Pod – Pod14  Deployment [3/3] $ kubectl get pods NAME READY STATUS RESTARTS AGE rest-api-rs-6xpqf 1/1 Running 1 9h rest-api-rs-9b0sl 1/1 Running 0 10s rest-api-rs-fbcdf 0/1 ContainerCreating 0 10s rest-api-rs-pbsmk 1/1 Running 1 9h $ kubectl apply -f deployment.yaml  

Slide 30

Slide 30 text

29 Service7 (,&62- (*Pod7+0/(*8=;97 5..3/#407Pod/)5 ■Service0 . – 0 -service.yaml7 – Service7 ■Service0 Service0 [1/3] kind: Service apiVersion: v1 metadata: name: rest-api-service spec: type: NodePort selector: app: my-rest-api ports: - port: 8080 targetPort: 8080 $ kubectl create -f service.yaml Service01Nodeport7)5 minikube-1LoadBalancer1 Pod0Lavel/ app:my-rest-api!$ '6,"5Pod7%5 )5Service0<=:.Pod0<=:7 %5 $ kubectl get services NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.0.0.1 443/TCP 11h rest-api-service 10.0.0.51 8080:31372/TCP 1m

Slide 31

Slide 31 text

30 ■ Service  – Node IP –   ■Deployment   –  v2  Service [2/3] $ minikube ip 192.168.99.100 http://192.168.99.100:31372 apiVersion: apps/v1beta1 kind: Deployment metadata: name: rest-api-dep spec: replicas: 4 template: metadata: labels: app: my-rest-api spec: containers: - image: docker.io/uls555/getting-started-k8s-with-java:v2 imagePullPolicy: Always name: rest-api v2 

Slide 32

Slide 32 text

31 ■Deployment –  ■ Deployment &)-'!"%+ #/  $*&0' .0,/ $*&0'   –  ■Deployment.0-($ – .0-($ –  Service[3/3] $ kubectl apply -f deployment.yaml deployment "rest-api-dep" replaced $ curl 192.168.99.100:31372 {"message":"Hello World!","version":"v2"} $ kubectl rollout undo deployment/rest-api-dep deployment "rest-api-dep" rolled back $ curl 192.168.99.100:31372 {"message":"Hello World!","version":"v1"}

Slide 33

Slide 33 text

32 Deployment0 #.!'&:<9;31586<7+% )- ,/( Blue/Green Deployment*(0- +Service 0"-. . ■)Deployment0 – * &deployment-v3.yaml0 – 68:2 Service0"$Blue/Green Deployment[1/2] apiVersion: apps/v1beta1 kind: Deployment metadata: name: rest-api-dep-v3 spec: replicas: 3 template: metadata: labels: app: my-rest-api-v3 spec: containers: - image: docker.io/uls555/getting-started-k8s-with-java:v1 imagePullPolicy: Always name: rest-api Deployment* '4 30v3)  $ kubectl create –f deployment-v3.yaml

Slide 34

Slide 34 text

33 – Deployment ■Service – ServicePod  selector  –  ServiceBlue/Green Deployment[2/2] $ kubectl get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE rest-api-dep 4 4 4 4 3h rest-api-dep-v3 4 4 4 4 23m kind: Service apiVersion: v1 metadata: name: rest-api-service spec: type: NodePort selector: app: my-rest-api-v3 ports: - port: 8080 targetPort: 8080 PodLavel app:my-rest-api-v3 Pod  $ kubectl apply -f service.yaml service "rest-api-service" configured $ curl 192.168.99.100:31372 {"message":"Hello World!","version":"v3"}

Slide 35

Slide 35 text

5. 

Slide 36

Slide 36 text

35 ■minikube start%* – Node  –    ”.minikube”!("& minikube  "%#'$* ) $ minikube stop $ minikube delete $ minikube start

Slide 37

Slide 37 text

36 >  ■ WEB1-5 – Using Kubernetes on Google Container Engine https://www.slideshare.net/enakai/using-kubernetes-on-google-container-engine – Docker& %$2 @Kubernetes@ https://oss.sios.com/yorozu-blog/yorozu-20151216 – Docker0=46, )!(Kubernetes http://tech.uzabase.com/entry/2015/02/13/180743 – minikube Windows " Kubernetes , ) http://takaya030.hatenablog.com/entry/2017/04/30/191727 – kubernetes +)23-; 9-.<1?72'!&'! http://sssslide.com/speakerdeck.com/sgeengineer/kubernetesdebian-warukai-fa-sutairu- maikurosabisuziyanakutemoiiziyanai – Kubernetes +*) http://qiita.com/t-yotsu/items/f565b2d788a3b98fe762 ■  – 8