Slide 1

Slide 1 text

!NPDIJ[VLJ ,OBUJWFͰ,VCFSOFUFTΛϥΫʹ͢Δ ,VCFSOFUFT/PWJDF5PLZP

Slide 2

Slide 2 text

ɾܝࡌ಺༰͸ݸਓͷݟղͰ͋Γɺॴଐ͢Δاۀ΍૊৫ͷཱ৔ɺઓུɺҙݟΛ ɹ୅ද͢Δ΋ͷͰ͸͋Γ·ͤΜ ɾهࡌ͞Ε͍ͯΔձ໊ࣾɺ঎඼໊ɺ·ͨ͸αʔϏε໊͸ɺ֤ࣾͷ঎ඪొ࿥·ͨ͸঎ඪͰ͢

Slide 3

Slide 3 text

XIPBNJ !NPDIJ[VLJ /BNF ,FJUB.PDIJ[VLJʢNPDIJ[VLJʣ 8PSL $MPVE"SDIUFDU $POUBJOFS3%

Slide 4

Slide 4 text

એ఻ 2JJUBʹͯ,VCFSOFUFTೝఆࢿ֨$,"$,"%डݧ5JQTͷهࣄΛࣥච ͍͖ͤͯͨͩ͞·ͨ͠ɻ ΑΖ͚͠Ε͹͝׆༻͍ͩ͘͞ɻ 💧 💧 ੋඇ-(5.Լ͍͞🙏🙏🙏 IUUQTRJJUBDPNNPDIJ[VLJJUFNTBEDEGCCEG

Slide 5

Slide 5 text

"HFOEB ,VCFSOFUFTͰΞϓϦΛσϓϩΠެ։͢Δέʔε ,OBUJWFͷ֓ཁ <σϞ>,OBUJWF4FSWJOHͰΞϓϦΛσϓϩΠެ։͢Δέʔε ɹɹ,OBUJWF4FSWJOHϦιʔε ɹɹθϩεέʔϧ <σϞ>࣮ӡ༻Λ૝ఆͨ͠έʔε <σϞ>ϚΠΫϩαʔϏεΛσϓϩΠ͢Δέʔε ࢀߟ ɹɹ0CTFSWBCJMJUZ ɹɹ಺෦తͳ࢓૊Έͷ࿩ ·ͱΊ

Slide 6

Slide 6 text

σϞͰ༻͍Δࢿࡐ ˗αϯϓϧΞϓϦ ɹNPDIJ[VLJTQSJOHCPPUXFC ɹIUUQTHJUIVCDPNNPDIJ[VLJTQSJOHCPPUXFC ˗σϞ ͷࢿࡐ ɹNPDIJ[VLJLOBUJWFTFSWJOHEFNP ɹIUUQTHJUIVCDPNNPDIJ[VLJLOBUJWFTFSWJOHEFNP ˗σϞͷࢿࡐ ɹNPDIJ[VLJCPPLJOGPLOBUJWF ɹIUUQTHJUIVCDPNNPDIJ[VLJCPPLJOGPLOBUJWF

Slide 7

Slide 7 text

,VCFSOFUFT͸ίϯςφΦʔέετϨʔγϣϯϓϥοτϑΥʔϜͱͯ͠ ൚༻ੑ͕ߴ͍͕ίϯςφԽͨ͠ΞϓϦέʔγϣϯΛσϓϩΠެ։͢Δ ج൫ͱͯ͠͸೉қ౓͕ߴ͍ ,VCFSOFUFTͰΞϓϦΛσϓϩΠެ։͢Δέʔε ίϯςφ׬શʹཧղͨ͠ʂ ͸ʁϚδͳΜͳͷʁ ʢϩΰ͸ੈքҰΧοίΠΠ͚Ͳɾɾɾʣ

Slide 8

Slide 8 text

,VCFSOFUFT͸ίϯςφΦʔέετϨʔγϣϯϓϥοτϑΥʔϜͱͯ͠ ൚༻ੑ͕ߴ͍͕ίϯςφԽͨ͠ΞϓϦέʔγϣϯΛσϓϩΠެ։͢Δ ج൫ͱͯ͠͸೉қ౓͕ߴ͍ ίϯςφ׬શʹཧղͨ͠ʂ ͸ʁϚδͳΜͳͷʁ ʢϩΰ͸ੈքҰΧοίΠΠ͚Ͳɾɾɾʣ ܝࡌ಺༰͸ݸਓͷݟղͰ͋Γɺॴଐ͢Δاۀ΍૊৫ͷཱ৔ɺઓུɺҙݟΛ ୅ද͢Δ΋ͷͰ͸͋Γ·ͤΜ ,VCFSOFUFTͰΞϓϦΛσϓϩΠެ։͢Δέʔε

Slide 9

Slide 9 text

˗ଟ͘ͷ,VCFSOFUFTͷϦιʔεʹର͢Δཧղ΍Ϧιʔεؒͷؔ࿈෇͚͕ඞཁ ɹˠֶशίετɺ:".-هࡌྔ૿Ճ ˗ΞϓϦͷόʔδϣϯΛ੾Γସ͑ΔࡍͷτϥϑΟοΫ੍ޚ ɹˠ੾Γସ͑ํ๏Λج൫ར༻ऀͰ޻෉ ˞֎෦͔ΒͷΞΫηεΤϯυϙΠϯτ͸*OHSFTTΤϯυϙΠϯτʢ֎෦-#΍֎෦ެ։͞Εͨ*OHSFTT$POUSPMMFS౳ʣ ,VCFSOFUFTͰΞϓϦΛσϓϩΠެ։͢Δέʔε

Slide 10

Slide 10 text

˗ଟ͘ͷ,VCFSOFUFTͷϦιʔεʹର͢Δཧղ΍Ϧιʔεؒͷؔ࿈෇͚͕ඞཁ ɹˠֶशίετɺ:".-هࡌྔ૿Ճ ˗ΞϓϦͷόʔδϣϯΛ੾Γସ͑ΔࡍͷτϥϑΟοΫ੍ޚ ɹˠ੾Γସ͑ํ๏Λج൫ར༻ऀͰ޻෉ ˞֎෦͔ΒͷΞΫηεΤϯυϙΠϯτ͸*OHSFTTΤϯυϙΠϯτʢ֎෦-#΍֎෦ެ։͞Εͨ*OHSFTT$POUSPMMFS౳ʣ apiVersion: apps/v1 kind: Deployment metadata: labels: app: spring-boot-web name: spring-boot-web spec: replicas: 3 selector: matchLabels: app: spring-boot-web template: metadata: labels: app: spring-boot-web spec: containers: - image: keitamochizuki/spring-boot-web name: spring-boot-web env: - name: APP_VERSION value: v1 resources: requests: cpu: "250m" apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: spring-boot-web-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: spring-boot-web minReplicas: 3 maxReplicas: 5 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 EFQMPZNFOUZNM IQBZNM ,VCFSOFUFTͰΞϓϦΛσϓϩΠެ։͢Δέʔε

Slide 11

Slide 11 text

˗ଟ͘ͷ,VCFSOFUFTͷϦιʔεʹର͢Δཧղ΍Ϧιʔεؒͷؔ࿈෇͚͕ඞཁ ɹˠֶशίετɺ:".-هࡌྔ૿Ճ ˗ΞϓϦͷόʔδϣϯΛ੾Γସ͑ΔࡍͷτϥϑΟοΫ੍ޚ ɹˠ੾Γସ͑ํ๏Λج൫ར༻ऀͰ޻෉ ˞֎෦͔ΒͷΞΫηεΤϯυϙΠϯτ͸*OHSFTTΤϯυϙΠϯτʢ֎෦-#΍֎෦ެ։͞Εͨ*OHSFTT$POUSPMMFS౳ʣ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: spring-boot-web annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: "spring-boot-web.example.com" http: paths: - path: "/" pathType: Prefix backend: service: name: spring-boot-web port: number: 8080 JOHSFTTZNM apiVersion: v1 kind: Service metadata: name: spring-boot-web spec: selector: app: spring-boot-web ports: - protocol: TCP port: 8080 targetPort: 8080 TFSWJDFZNM ,VCFSOFUFTͰΞϓϦΛσϓϩΠެ։͢Δέʔε

Slide 12

Slide 12 text

,VCFSOFUFTͰΞϓϦΛσϓϩΠެ։͢Δέʔε

Slide 13

Slide 13 text

,OBUJWFͷ֓ཁ ˗(PPHMF$MPVE/FYU`Ͱൃද ɹIUUQTZPVUVCF-U&-[QXM. ˗$/$'-BOETDBQFͰ4FSWFSMFTTΧςΰϦʹؚ·ΕΔ ˗ݱࡏ͸1SFSFMFBTFʢWʣঢ়ଶ ˗($1ͷαʔόϨεαʔϏεͰ͋Δ$MPVE3VOͰ༻͍ΒΕ͍ͯΔʢ("ʣ ˗ػೳ ɹ͍ͣΕͷػೳ΋,VCFSOFUFT্ͷίϯϙʔωϯτͱͯ͠ಈ࡞ ɹɾ4FSWJOH ɹɹ,VCFSOFUFT্΁ͷίϯςφσϓϩΠެ։ΛϥΫʹͯ͘͠ΕΔػೳ ɹɹ*TUJPͳͲͷ/8ιϦϡʔγϣϯΛ׆༻ ɹɾ&WFOUJOH ɹɹԿ͔Λܖػʹ,VCFSOFUFT্ʹ1PEΛσϓϩΠͯ͠ॲཧΛ࣮ߦ͢Δػೳ ɹɹʢྫʣ0#4ʹը૾ϑΝΠϧ͕ஔ͔ΕͨΒϦαΠζ

Slide 14

Slide 14 text

˗,OBUJWFΠϯετʔϧखॱ ɹIUUQTLOBUJWFEFWEPDTJOTUBMMBOZLVCFSOFUFTDMVTUFS ˗,OBUJWF޲͚*TUJPΠϯετʔϧखॱ ɹIUUQTLOBUJWFEFWEPDTJOTUBMMJOTUBMMJOHJTUJP ,OBUJWFͷ֓ཁ

Slide 15

Slide 15 text

ิ଍ Ҏલ͸΋͏Ұͭ#VJMEͱ͍͏ػೳؚ͕·Ε͍ͯͨ ɹ೥·Ͱ͸4FSWJOHɺ&WFOUJOHͱ͍͏ػೳʹՃ͑ɺίϯςφΠϝʔδͷϏϧυΛࣗಈԽ͢ΔCVJME ɹͱ͍͏ػೳؚ͕·Ε͍ͯ·ͨ͠ɻ ɹ͔͠͠ݱࡏ͸ඇਪ঑ͱͳΓɺUFLUPOΛ༻͍Δ͜ͱ͕ਪ঑͞Ε͍ͯ·͢ɻ ɹ˞ڪΒ͘$*$%͸ύΠϓϥΠϯπʔϧʹ੹೚Λ࣋ͨͤΔͱ͍͏ࢥ૝ʁ ɹIUUQTHJUIVCDPNLOBUJWFCVJME ,OBUJWF㱠'BB4 ɹΑ͘,OBUJWF'BB4ͱ͍͏ޡղ͕ͳ͞Ε·͢ɻʢࣗ਎΋࠷ॳ͸͜ͷޡղΛ͍ͯ͠·ͨ͠ʣ ɹ,OBUJWFࣗମ͸͋͘·Ͱ΋4FSWJOHɺ&WFOUJOHͱ͍͏4FSWFSMFTTΛ࣮ݱ͢ΔͨΊͷػೳΛఏڙ͠ɺ ɹ,VCFSOFUFT্Ͱͷෳࡶ͞Λந৅Խ͢Δ΋ͷͱ͍͏ཧղΛ͍ͯ͠·͢ɻ ɹݴ͍׵͑Ε͹͜ΕΒͷػೳΛར༻ͯ͠"84-BNCEBͷ༷ͳ'BB4΋࣮ݱͰ͖Δͱ͍͏͜ͱʹͳΓ·͢ɻ

Slide 16

Slide 16 text

<σϞ> ,OBUJWF4FSWJOHͰΞϓϦΛσϓϩΠެ։͢Δέʔε

Slide 17

Slide 17 text

,OBUJWF4FSWJOHͰΞϓϦΛσϓϩΠެ։͢Δέʔε ˞֎෦͔ΒͷΞΫηεΤϯυϙΠϯτ͸֎෦ެ։͞Εͨ*OHSFTT(BUFXBZ TFSWJDFTQSJOHZNM apiVersion: serving.knative.dev/v1 kind: Service metadata: name: spring-boot-web spec: template: spec: containers: - image: keitamochizuki/spring-boot-web env: - name: APP_VERSION value: "v1" ˗࠷΋γϯϓϧʹσϓϩΠެ։͢Δ৔߹͸4FSWJDFϦιʔεͷఆٛͷΈͰྑ͍

Slide 18

Slide 18 text

❯❯❯ kubectl apply -f service-spring.yml service.serving.knative.dev/spring-boot-web created ❯❯❯ kubectl get all NAME READY STATUS RESTARTS AGE pod/spring-boot-web-00001-deployment-7ccd57c85d-vjm84 2/2 Running 0 25s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 443/TCP 19d service/spring-boot-web ExternalName knative-local-gateway.istio-system.svc.cluster.local 80/TCP 10s service/spring-boot-web-00001 ClusterIP 10.99.90.143 80/TCP 26s service/spring-boot-web-00001-private ClusterIP 10.110.150.217 80/TCP,9090/TCP,9091/TCP,8022/TCP 26s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/spring-boot-web-00001-deployment 1/1 1 1 26s NAME DESIRED CURRENT READY AGE replicaset.apps/spring-boot-web-00001-deployment-7ccd57c85d 1 1 1 25s NAME URL LATESTCREATED LATESTREADY READY REASON service.serving.knative.dev/spring-boot-web http://spring-boot-web.default.example.com spring-boot-web-00001 spring-boot-web-00001 True NAME LATESTCREATED LATESTREADY READY REASON configuration.serving.knative.dev/spring-boot-web spring-boot-web-00001 spring-boot-web-00001 True NAME CONFIG NAME K8S SERVICE NAME GENERATION READY REASON revision.serving.knative.dev/spring-boot-web-00001 spring-boot-web spring-boot-web-00001 1 True NAME URL READY REASON route.serving.knative.dev/spring-boot-web http://spring-boot-web.default.example.com True 4FSWJDFϦιʔεͷ࡞੒ͱ֬ೝ Ϧιʔεͷ࡞੒ 4FSWJDFϦιʔεΛ࡞੒͢ΔͱҎԼͷ༷ʹ,OBUJWFͷ$3%͓ΑͼͦΕʹ෇ਵͯ͠,VCFSOFUFTϦιʔε͕ ࡞੒͞ΕΔɻ˞͜͜Ͱ4FSWJDFͱ͸,VCFSOFUFTͷ΋ͷͰͳ͘,OBUJWFͷ$3%Λࢦ͠·͢ ❯❯❯ kn service list NAME URL LATEST AGE CONDITIONS READY REASON spring-boot-web http://spring-boot-web.default.example.com spring-boot-web-00001 8m54s 3 OK / 3 True ~/w/k/k/s/s/service ❯❯❯ kn route list NAME URL READY spring-boot-web http://spring-boot-web.default.example.com True ~/w/k/k/s/s/service ❯❯❯ kn revision list NAME SERVICE TRAFFIC TAGS GENERATION AGE CONDITIONS READY REASON spring-boot-web-00001 spring-boot-web 100% 1 9m29s 3 OK / 4 True ҎԼͷ༷ʹ,OBUJWF$-*Λ࢖ͬͨ֬ೝ΋ՄೳͰ͢ɻ ,OBUJWF4FSWJOHͰΞϓϦΛσϓϩΠެ։͢Δέʔε

Slide 19

Slide 19 text

֎෦͔ΒͷΞΫηε֬ೝ४උ ˗ΞΫηεΤϯυϙΠϯτͷऔಘ ɹ,OBUJWFͰσϓϩΠͨ͠ΞϓϦʹ֎෦͔ΒΞΫηε͢ΔࡍͷΤϯυϙΠϯτ͸,OBUJWFΠϯετʔϧ࣌ʹ ɹ࡞੒͢Δ*TUJP(BUFXBZͱͳΓ·͢ɻ ɹ*TUJP(BUFXBZ͸5ZQF-PBE#BMBODFSͰ֎෦ެ։͞Ε·͕͢ࠓճ͸ϩʔΧϧͰͷݕূͱͳΔͨΊ/PEF1PSU ɹͰ୅༻͠·͢ɻ ❯❯❯ kubectl get svc -n istio-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cluster-local-gateway ClusterIP 10.105.184.8 15020/TCP,80/TCP,443/TCP 18d istio-ingressgateway LoadBalancer 10.100.235.103 15021:32326/TCP,80:30134/TCP,443:31454/TCP,15012:31018/TCP,15443:30837/TCP 18d ˗໊લղܾ ɹ,OBUJWFσϑΥϧτͰ͸ΞϓϦ΁ͷΞΫηε63-͕ ɹɹIUUQTFSWJDFOBNFTQBDFFYBNQMFDPN ɹͱ͍͏໋໊نଇͰࣗಈൃߦ͞Ε·͢ɻ˞มߋՄೳ ɹຊདྷ͸ ɹɹFYBNQMFDPN"JTUJPJOHSFTTHBUFXBZ&YUFSOBM*1/PEF*1 ɹͷܗͰ%/4ొ࿥͓ͯ͘͠΂͖ͳͷͰ͕͢ɺ ɹࠓճͷݕূͰ͸͋Β͔͡Ί෷͍ग़͞ΕΔ63-޲͚ϨίʔυΛFUTIPTUTʹ௚઀هࡌ͍ͯ͠·͢ɻ ❯❯❯ cat /etc/hosts 192.168.2.154 spring-boot-web.default.example.com 192.168.2.154 spring-boot-web.default.example.com 192.168.2.154 spring-boot-web-stg.default.staging.org 192.168.2.154 v1-spring-boot-web.default.example.com 192.168.2.154 v2-spring-boot-web.default.example.com ,OBUJWF4FSWJOHͰΞϓϦΛσϓϩΠެ։͢Δέʔε

Slide 20

Slide 20 text

֎෦͔ΒͷΞΫηε֬ೝ 3PVUFͰ෷͍ग़͞Εͨ63-ʹϒϥ΢β͔ΒΞΫηε͢ΔͱҎԼͷ༷ʹσϓϩΠͨ͠ΞϓϦʹΞΫηεͰ͖Δɻ ΞΫηε63-ɿIUUQTQSJOHCPPUXFCEFGBVMUFYBNQMFDPN ,OBUJWF4FSWJOHͰΞϓϦΛσϓϩΠެ։͢Δέʔε

Slide 21

Slide 21 text

IUUQTLOBUJWFEFWEPDTTFSWJOH ɾίϯςφͷىಈઃఆΛఆٛ ɾίϯςφͱͯ͠ಈ͘ΞϓϦͷ࣮ମ ɾ$PO fi HVSBUJPOߋ৽ຖʹ࡞੒͞ΕΔ ɾJNNVUBCMF ɾΞΫηε༻63-Λൃߦ ɾ3FWJTJPO΁ͷτϥϑΟοΫ؅ཧ ɾ3PVUFͱ$PO fi HVSBUJPOΛ·ͱΊͯఆٛ ,OBUJWF4FSWJOHͰΞϓϦΛσϓϩΠެ։͢Δࡍ͸ओʹҎԼͭͷϦιʔεΛ؅ཧ ,OBUJWFϦιʔε

Slide 22

Slide 22 text

ઌͷྫͰ͸4FSWJDFϦιʔεͱͯ͠3PVUF $PO fi HVSBUJPOϦιʔεΛ·ͱΊͯѻ͍ͬͯ·͕ͨ͠ɺ ҎԼͷΑ͏ʹͦΕͧΕ෼͚ͯѻ͏͜ͱ΋ՄೳͰ͢ɻ σϞͰ͸ͦΕͧΕΛ෼͚ͯѻ͍·͢ɻ apiVersion: serving.knative.dev/v1 kind: Service metadata: name: spring-boot-web namespace: default spec: template: metadata: name: spring-boot-web-v1 spec: containers: - image: keitamochizuki/spring-boot-web env: - name: APP_VERSION value: "v1" traffic: - percent: 100 revisionName: spring-boot-web-v1 tag: v1 TFSWJDFTQSJOHZNM apiVersion: serving.knative.dev/v1 kind: Configuration metadata: name: spring-boot-web spec: template: metadata: name: spring-boot-web-v1 # ࡞੒͢Δrevision໊ spec: containers: - image: keitamochizuki/spring-boot-web env: - name: APP_VERSION value: "v1" apiVersion: serving.knative.dev/v1 kind: Route metadata: name: spring-boot-web spec: traffic: - percent: 100 revisionName: spring-boot-web-v1 DPO fi HVSBUJPOTQSJOHZNM SPVUFTQSJOHZNM ˞ઌͷྫͰ͸͔ͳΓলུͨ͠TFSWJDFఆٛͰ͕ͨ͠ ɹਖ਼֬ʹهࡌ͢Δͱ্هͷΑ͏ʹͳΓ·͢ ,OBUJWFϦιʔε

Slide 23

Slide 23 text

,OBUJWFσϑΥϧτͰ͸,1"ͱ͍͏࢓૊ΈʹΑΓαʔϏεʢ1PEʣͷΦʔτεέʔϧΛߦ͍·͢ɻ ಛʹσϑΥϧτͰ͸αʔϏεʹରͯ͠ϦΫΤετ͕͋ͬͨࡍʹ1PEΛىಈ͠ɺ ͠͹Β͘ϦΫΤετ͕ͳ͔ͬͨΒࣗಈతʹ1PEΛఀࢭ͢Δʢ୆·ͰεέʔϧΠϯ͢Δʣͱ͍͏ಈ࡞Λ͠·͢ɻ ͜ͷಈ࡞ʹΑΓॳճΞΫηε࣌͸1PEىಈ͕࣌ؒ0)ͱͳΓϨεϙϯεʹएׯͷ஗Ԇ͕ൃੜ͠·͢ɻ ˞ৗ࣌ىಈ͢Δઃఆ΋Մೳ ˞θϩεέʔϧ͢Δ·Ͱͷ࣌ؒࢦఆ΋Մೳ ❯❯❯ kubectl get po No resources found in default namespace. ~/w/k/k/s/s/service ❯❯❯ kubectl get po -w NAME READY STATUS RESTARTS AGE spring-boot-web-00001-deployment-7ccd57c85d-rp6gl 0/2 Pending 0 0s spring-boot-web-00001-deployment-7ccd57c85d-rp6gl 0/2 Pending 0 0s spring-boot-web-00001-deployment-7ccd57c85d-rp6gl 0/2 ContainerCreating 0 1s spring-boot-web-00001-deployment-7ccd57c85d-rp6gl 0/2 ContainerCreating 0 2s spring-boot-web-00001-deployment-7ccd57c85d-rp6gl 1/2 Running 0 3s spring-boot-web-00001-deployment-7ccd57c85d-rp6gl 2/2 Running 0 8s spring-boot-web-00001-deployment-7ccd57c85d-rp6gl 2/2 Terminating 0 70s spring-boot-web-00001-deployment-7ccd57c85d-rp6gl 1/2 Terminating 0 97s spring-boot-web-00001-deployment-7ccd57c85d-rp6gl 1/2 Terminating 0 117s spring-boot-web-00001-deployment-7ccd57c85d-rp6gl 0/2 Terminating 0 119s ˡϦΫΤετͳ͠ ˡϦΫΤετൃੜ ˡϦΫΤετͳ͠ঢ়ଶͰҰఆ࣌ؒܦա θϩεέʔϧ ˡϨεϙϯεฦ٫

Slide 24

Slide 24 text

σϞͷ·ͱΊ ˗,OBUJWF4FSWJOHΛ༻͍ΔͱϥΫʹΞϓϦέʔγϣϯΛσϓϩΠެ։Ͱ͖Δ ɹɾجຊίϯςφΠϝʔδͱ؀ڥม਺ͷࢦఆͷΈ ɹɾΦʔτεέʔϧΛࣗಈͰઃఆ ɹɾࣗಈͰ֎෦ެ։༻ͷ63-͕෷͍ग़͞ΕΔ ɹɾ,VCFSOFUFT୯ମͱൺֱͯ͠:".-هࡌྔ໿ݮɺґଘؔ܎هࡌՕॴݮ έʔεʹΑͬͯ͸3PVUFͱ3FWJTJPOΛඥ෇͚Δඞཁ͋ΓʢσϞʣ ˗θϩεέʔϧͷಈ࡞ ɹɾσϑΥϧτͩͱθϩεέʔϧ͕༗ޮʹͳ͓ͬͯΓϦΫΤετ͕ແ͍ͱىಈ1PE਺͕୆ʹͳΔ ɹɾॳճ͸ଟগϨεϙϯε஗Ԇ͕ൃੜ͢Δ

Slide 25

Slide 25 text

σϞ ࣮ӡ༻Λ૝ఆͨ͠έʔε

Slide 26

Slide 26 text

࣮ӡ༻Λ૝ఆͨ͠έʔε ᶃWΞϓϦΛσϓϩΠ͢Δ ᶄWΞϓϦΛ֎෦ެ։͢Δ ᶅWΞϓϦΛσϓϩΠ͢Δ ᶆWΞϓϦ֬ೝ༻63-Λൃߦͯ͠ಈ࡞֬ೝ͢Δ ᶇҰ෦ͷτϥϑΟοΫΛWʹ੾Γସ͑Δ ᶈશͯͷτϥϑΟοΫΛWʹ੾Γସ͑Δ ˞ࠓճ͸ϨεϙϯελΠϜΛߟྀͯ͠θϩεέʔϧ͸ߦΘͳ͍ઃఆʹ͢Δ ੾Γସ͑લʹWΞϓϦΛαʔϏε֬ೝ

Slide 27

Slide 27 text

·ͣ͸$PO fi HVSBUJPOϦιʔεΛ࡞੒͠ɺΞϓϦͷ࣮ଶͱͳΔW3FWJTJPOΛ࡞੒͠·͢ɻ ͜ͷ࣌఺Ͱ͸·ͩΞϓϦΛσϓϩΠ͚ͨͩ͠ͳͷͰ֎෦͔ΒͷΞΫηε͸ߦ͑·ͤΜɻ ᶃWΞϓϦΛσϓϩΠ͢Δ ࣮ӡ༻Λ૝ఆͨ͠έʔε

Slide 28

Slide 28 text

apiVersion: serving.knative.dev/v1 kind: Configuration metadata: name: spring-boot-web spec: template: metadata: annotations: # Φʔτεέʔϧؔ࿈ύϥϝʔλ autoscaling.knative.dev/minScale: "1" # ࠷খεέʔϧ਺(default 0) autoscaling.knative.dev/maxScale: "4" # ࠷େεέʔϧ਺(default 0 unlimited) autoscaling.knative.dev/metric: "rps" # Φʔτεέʔϧͷࢦඪͱ͢ΔϝτϦΫεΛࢦఆ(default concurrency) autoscaling.knative.dev/target: "3" # ΦʔτεέʔϧͷϝτϦΫε஋soft ௒աͯ͠΋ϦΫΤετ͸ड͚෇͚Δ(default 100) name: spring-boot-web-v1 # ࡞੒͢Δrevision໊ spec: containers: - image: keitamochizuki/spring-boot-web env: - name: APP_VERSION value: "v1" DPO fi HVSBUJPOTQSJOHWZNM ࠓճ͸$PO fi HVSBUJPOͷϚχϑΣετ಺ͰΦʔτεέʔϧͷύϥϝʔλΛઃఆ͍ͯ͠·͢ɻ ઃఆ͠ͳͯ͘΋σϓϩΠࣗମ͸ߦ͑·͕͢ɺσϞ޲͚ʹઃఆ͍ͯ͠·͢ɻ ಛʹ࠷খεέʔϧ਺ʢNJO4DBMFʣΛͱ͢Δ͜ͱͰθϩεέʔϧΛߦΘͳ͍༷ʹ͍ͯ͠·͢ɻ ᶃWΞϓϦΛσϓϩΠ͢Δ ❯❯❯ kubectl apply -f configuration-spring-v1.yml configuration.serving.knative.dev/spring-boot-web created ࣮ӡ༻Λ૝ఆͨ͠έʔε

Slide 29

Slide 29 text

ݱঢ়͸WΞϓϦ͕3FWJTJPOͱͯ͠σϓϩΠ͞ΕͨͷΈͰɺ֎෦͔ΒΞϓϦʹΞΫηε͢ΔͨΊͷ 3PVUF͕͋Γ·ͤΜɻ W3FWJTJPO΁ͷ3PVUFΛ࡞੒͠ɺ֎෦͔ΒΞΫηεͰ͖Δ༷ʹ͠·͢ɻ ᶄWΞϓϦΛ֎෦ެ։͢Δ ࣮ӡ༻Λ૝ఆͨ͠έʔε

Slide 30

Slide 30 text

apiVersion: serving.knative.dev/v1 kind: Route metadata: name: spring-boot-web spec: traffic: - percent: 100 revisionName: spring-boot-web-v1 SPVUFTQSJOHWZNM 3PVUFϦιʔεͰ͸ᶃͷ$PO fi HVSBUJPOʹΑΓ࡞੒͞Εͨ3FWJTJPOʢTQSJOHCPPUXFCWʣʹ શͯͷτϥϑΟοΫΛసૹ͢Δ༷ʹઃఆΛߦ͍ͬͯ·͢ɻ ࠓճ͸3PVUFʹΑͬͯIUUQSPVUF໊OBNFTQBDFFYBNQMFDPNͱ͍͏63-͕ൃߦ͞ΕΔ༷ʹ ઃఆ͍ͯ͠·͢ɻ˞มߋՄೳ ᶄWΞϓϦΛ֎෦ެ։͢Δ ❯❯❯ kubectl apply -f route-spring-v1.yml route.serving.knative.dev/spring-boot-web created ❯❯❯ kubectl get route NAME URL READY REASON spring-boot-web http://spring-boot-web.default.example.com True 3PVUFϦιʔεͷ࡞੒͕׬ྃ͢ΔͱҎԼͷ༷ʹ63-͕ൃߦ͞Ε·͢ɻ ͜͜ʹ֎෦͔ΒΞΫηε͢ΔͱᶃͰσϓϩΠͨ͠W3FWJTJPOͷΞϓϦʹΞΫηεͰ͖·͢ɻ ࣮ӡ༻Λ૝ఆͨ͠έʔε

Slide 31

Slide 31 text

ଓ͍ͯ$PO fi HVSBUJPOϦιʔεΛߋ৽͠ɺW3FWJTJPOΛ࡞੒͠·͢ɻ ͜͜Ͱ͸·ͩ3PVUFઃఆΛมߋ͍ͯ͠ͳ͍ͨΊɺ֎෦͔Β͸Wʹ͔͠ΞΫηεͰ͖ͳ͍ঢ়ଶͰ͢ɻ ᶅWΞϓϦΛσϓϩΠ͢Δ ࣮ӡ༻Λ૝ఆͨ͠έʔε

Slide 32

Slide 32 text

ᶅWΞϓϦΛσϓϩΠ͢Δ WͰ༻͍ͨ$PO fi HVSBUJPOϦιʔεͷϚχϑΣετΛʹͯ؀ڥม਺ΛWͱ͍͏஋ʹมߋ͍ͯ͠·͢ɻ ͜ΕΛద༻͢Δ͜ͱͰ$PO fi HVSBUJPO͕ߋ৽͞Εɺ৽ͨʹW3FWJTJPO͕࡞੒͞Ε·͢ɻ apiVersion: serving.knative.dev/v1 kind: Configuration metadata: name: spring-boot-web spec: template: metadata: annotations: # Φʔτεέʔϧؔ࿈ύϥϝʔλ autoscaling.knative.dev/minScale: "1" # ࠷খεέʔϧ਺(default 0) autoscaling.knative.dev/maxScale: "4" # ࠷େεέʔϧ਺(default 0 unlimited) autoscaling.knative.dev/metric: "rps" # Φʔτεέʔϧͷࢦඪͱ͢ΔϝτϦΫεΛࢦఆ(default concurrency) autoscaling.knative.dev/target: "3" # ΦʔτεέʔϧͷϝτϦΫε஋soft ௒աͯ͠΋ϦΫΤετ͸ड͚෇͚Δ(default 100) name: spring-boot-web-v2 # ࡞੒͢Δrevision໊ spec: containers: - image: keitamochizuki/spring-boot-web env: - name: APP_VERSION value: "v2" DPO fi HVSBUJPOTQSJOHWZNM ❯❯❯ kubectl apply -f configuration-spring-v2.yml configuration.serving.knative.dev/spring-boot-web configured ࣮ӡ༻Λ૝ఆͨ͠έʔε

Slide 33

Slide 33 text

ᶆWΞϓϦ֬ೝ༻63-Λൃߦͯ͠ಈ࡞֬ೝ͢Δ ৽όʔδϣϯΛ͍͖ͳΓ֎෦ެ։༻63-Ͱެ։͢Δͷ͸ා͍ͷͰɺ ·ͣ͸֬ೝ༻63-Ͱ֎෦ެ։͠αʔϏε֬ೝΛߦ͍·͢ɻ ࣮ӡ༻Λ૝ఆͨ͠έʔε

Slide 34

Slide 34 text

ᶆWΞϓϦ֬ೝ༻63-Λൃߦͯ͠ಈ࡞֬ೝ͢Δ apiVersion: serving.knative.dev/v1 kind: Route metadata: name: spring-boot-web-stg labels: # ϥϕϧͰ͜ͷrouteʹׂΓ౰ͯΔυϝΠϯΛࢦఆ domain: stg spec: traffic: - percent: 100 revisionName: spring-boot-web-v2 SPVUFTQSJOHTUHWZNM WΛ֬ೝ༻63-Ͱ֎෦ެ։͢ΔͨΊʹެ։༻ͱ͸ผʹ֬ೝ༻3PVUFϦιʔεΛ࡞੒͠·͢ɻ ࠓճ͸,OBUJWFͷઃఆͰϥϕϧʢNFUBEBUBMBCFMTEPNBJOTUHʣΛࢦఆ͢Δͱ4UBHJOH༻υϝΠϯ͕ 63-ʹׂΓ౰ͯΒΕΔΑ͏ʹͯ͋͠Γ·͢ɻʢ࣍ϖʔδࢀরʣ ❯❯❯ kubectl apply -f route-spring-v2-stg.yml route.serving.knative.dev/spring-boot-web-stg created ❯❯❯ kubectl get route NAME URL READY REASON spring-boot-web http://spring-boot-web.default.example.com True spring-boot-web-stg http://spring-boot-web-stg.default.staging.org True ҎԼͷ༷ʹ৽نͰ3PVUFϦιʔε͕࡞੒͞ΕɺTUBHJOHPSHυϝΠϯͷ63-͕ൃߦ͞Ε·͢ɻ ͜͜ʹ֎෦͔ΒΞΫηε͢ΔͱᶅͰσϓϩΠͨ͠W3FWJTJPOͷΞϓϦʹΞΫηεͰ͖·͢ɻ ࣮ӡ༻Λ૝ఆͨ͠έʔε

Slide 35

Slide 35 text

ɹσϑΥϧτͰ͸SPVUFͰൃߦ͞ΕΔ63-ʹFYBNQMFDPNͱ͍͏υϝΠϯׂ͕Γ౰ͯΒΕΔΑ͏ʹ ɹͳ͍ͬͯ·͢ɻ ɹDPO fi HEPNBJOͱ͍͏$PO fi H.BQΛॻ͖׵͑Δ͜ͱͰ͜ͷυϝΠϯΛมߋͨ͠Γɺ ɹ3PVUFʹ෇༩ͨ͠λάʹԠͯ͡೚ҙͷυϝΠϯΛ༻͍Δ͜ͱ͕Ͱ͖·͢ɻ apiVersion: v1 kind: ConfigMap metadata: name: config-domain namespace: knative-serving data: # σϑΥϧτͰ෇༩͢ΔυϝΠϯ example.com: "" # domain=devͷϥϕϧΛ࣋ͭrouteʹ෇༩͢ΔυϝΠϯ development.org: | selector: domain: dev # domain=stgͷϥϕϧΛ࣋ͭrouteʹ෇༩͢ΔυϝΠϯ staging.org: | selector: domain: stg DPO fi HEPNBJOZNM ❯❯❯ kubectl apply -f config-domain.yml ࣮ӡ༻Λ૝ఆͨ͠έʔε ʢࢀߟʣ3PVUFυϝΠϯͷઃఆ

Slide 36

Slide 36 text

ᶇҰ෦ͷτϥϑΟοΫΛWʹ੾Γସ͑Δ WΞϓϦ͕ਖ਼ৗʹಈ࡞͍ͯ͠Δ͜ͱΛ֬ೝͰ͖ͨͷͰɺ͍Α͍Α֎෦ެ։༻63-͔Β΋WΞϓϦʹ ΞΫηεͰ͖ΔΑ͏ʹ͠·͢ɻ ͜͜Ͱ͸Ұؾʹ੾Γସ͑Λߦ͏#MVF(SFFOͰ͸ͳ͘ฒߦظؒΛڬΜͰ੾Γସ͑Λߦ͏ $BOBSZ3FMFBTFํࣜΛ࠾༻͠·͢ɻ ࣮ӡ༻Λ૝ఆͨ͠έʔε

Slide 37

Slide 37 text

ᶇҰ෦ͷτϥϑΟοΫΛWʹ੾Γସ͑Δ apiVersion: serving.knative.dev/v1 kind: Route metadata: name: spring-boot-web spec: traffic: - percent: 70 revisionName: spring-boot-web-v1 tag: v1 - percent: 30 revisionName: spring-boot-web-v2 tag: v2 SPVUFTQSJOHWWZNM ެ։༻3PVUFϦιʔεΛߋ৽͠·͢ɻʢᶄͰ࡞੒ͨ͠΋ͷʣ ݱঢ়͸W3FWJTJPOʹͷτϥϑΟοΫΛసૹ͢Δઃఆʹͳ͍ͬͯ·͕͢ɺ ҎԼͷઃఆΛద༻͢Δ͜ͱͰWͱWͷ3FWJTJPOʹͦΕͧΕ͓ΑͼͷτϥϑΟοΫΛ సૹ͢Δ༷ʹͳΓ·͢ɻ ❯❯❯ kubectl apply -f route-spring-v1v2.yml route.serving.knative.dev/spring-boot-web configured 3PVUFϦιʔεͷߋ৽ޙʹެ։༻63-ʹ֎෦͔ΒΞΫηε͢ΔͱɺWͱW͕֬཰తʹ੾ΓସΘͬͯ දࣔ͞ΕΔ͜ͱ͕෼͔Γ·͢ɻ ࣮ӡ༻Λ૝ఆͨ͠έʔε

Slide 38

Slide 38 text

ᶈશͯͷτϥϑΟοΫΛWʹ੾Γସ͑Δ ࠷ޙʹ׬શ੾Γସ͑ͱ͍͏͜ͱͰશͯͷϦΫΤετ͕WΞϓϦసૹ͞ΕΔ༷ʹ͠·͢ɻ ࣮ӡ༻Λ૝ఆͨ͠έʔε

Slide 39

Slide 39 text

ᶈશͯͷτϥϑΟοΫΛWʹ੾Γସ͑Δ ެ։༻3PVUFϦιʔεΛߋ৽͠·͢ɻ ҎԼͷઃఆΛద༻͢Δ͜ͱͰશͯͷτϥϑΟοΫ͕Wͷ3FWJTJPOʹసૹ͞ΕΔ༷ʹͳΓ·͢ɻ apiVersion: serving.knative.dev/v1 kind: Route metadata: name: spring-boot-web spec: traffic: - percent: 100 revisionName: spring-boot-web-v2 SPVUFTQSJOHWZNM ❯❯❯ kubectl apply -f route-spring-v2.yml route.serving.knative.dev/spring-boot-web configured 3PVUFϦιʔεͷߋ৽ޙʹެ։༻63-ʹ֎෦͔ΒΞΫηε͢ΔͱɺWͷը໘ͷΈ͕දࣔ͞ΕΔ༷ʹ ͳͬͨ͜ͱ͕෼͔Γ·͢ɻ ·ͨສҰW3FWJTJPOͷΞϓϦʹෆ۩߹͕ݟ͔ͭΓWʹ໭͍ͨ͠৔߹͸࠶౓3PVUFઃఆΛมߋ͢Δ͜ ͱͰ؆୯ʹ੾Γ໭͠Λߦ͏͜ͱ͕Ͱ͖·͢ɻ ࣮ӡ༻Λ૝ఆͨ͠έʔε

Slide 40

Slide 40 text

˗σϓϩΠͱτϥϑΟοΫͷ؅ཧͰϦιʔεΛ෼͚ͯѻ͏͜ͱ͕Ͱ͖Δ ɹɾσϓϩΠͷ؅ཧɿ$PO fi HVSBSJPOͱ3FWJTJPO ɹɾτϥϑΟοΫͷ؅ཧɿ3PVUF ˗τϥϑΟοΫͷ؅ཧΛϥΫʹߦ͑Δ ɹɾ֤όʔδϣϯʢ3FWJTJPOʣ΁ͷτϥϑΟοΫ੍ޚΛ3PVUFઃఆͰ؆ܿʹߦ͑Δ ɹɾ$BOBSZ3FMFBTFɺ#MVF(SFFOΛಠࣗͰ࢓૊ΈΛߟ͑ͣʹ࣮ݱͰ͖Δ σϞͷ·ͱΊ

Slide 41

Slide 41 text

σϞ ϚΠΫϩαʔϏεΛσϓϩΠ͢Δέʔε

Slide 42

Slide 42 text

ϚΠΫϩαʔϏεΛσϓϩΠ͢Δέʔε IUUQTJTUJPJPMBUFTUEPDTFYBNQMFTCPPLJOGP 1SPEVDUQBHF4FSWJDF %FUBJMT4FSWJDF 3FWJFXT4FSWJDF 3BUJOHT4FSWJDF σϞ Ͱ͸୯ҰαʔϏεΛ,OBUJWF4FSWJOHͰσϓϩΠ͠·͕ͨ͠ɺ *TUJPCPPLJOGPͷ༷ͳϚΠΫϩαʔϏεΛσϓϩΠ͢Δ͜ͱ΋ՄೳͰ͢ɻ

Slide 43

Slide 43 text

IUUQTJTUJPJPMBUFTUEPDTFYBNQMFTCPPLJOGP ϚΠΫϩαʔϏεΛσϓϩΠ͢Δέʔε

Slide 44

Slide 44 text

,OBUJWF4FSWJOHͷ࢓૊ΈΛ༻͍ͯϚΠΫϩαʔϏεCPPLJOGPΛσϓϩΠ͢Δͱ ҎԼͷ༷ͳߏ੒ʹͳΓ·͢ɻ ͳ͓͜͜Ͱ͸θϩεέʔϧΛ༗ޮʹ͍ͯ͠·͢ɻ ϚΠΫϩαʔϏεΛσϓϩΠ͢Δέʔε

Slide 45

Slide 45 text

࣮ࡍʹ63-ʹΞΫηεͯ͠ΈΔͱCPPLJOGPͷը໘͕දࣔ͞ΕΔ͜ͱ͕֬ೝͰ͖·͢ɻ ॳճΞΫηεͰ͸ҎԼͷ༷ʹ֤αʔϏεʹ͓͍ͯθϩεέʔϧঢ়ଶ͔Βͷىಈ͕ൃੜ͢ΔͨΊɺ Ϩεϙϯεʹ࣌ؒΛཁ͠·͢ɻ ϚΠΫϩαʔϏεΛσϓϩΠ͢Δέʔε ❯❯❯ kubectl get po -n bookinfo -w NAME READY STATUS RESTARTS AGE bookinfo-productpage-v1-deployment-757c7cc77b-qwtp2 0/2 Pending 0 0s bookinfo-productpage-v1-deployment-757c7cc77b-qwtp2 0/2 Pending 0 0s bookinfo-productpage-v1-deployment-757c7cc77b-qwtp2 0/2 ContainerCreating 0 0s bookinfo-productpage-v1-deployment-757c7cc77b-qwtp2 0/2 ContainerCreating 0 1s bookinfo-productpage-v1-deployment-757c7cc77b-qwtp2 1/2 Running 0 3s bookinfo-details-v1-deployment-d56fb557b-2xsfz 0/2 Pending 0 0s bookinfo-details-v1-deployment-d56fb557b-2xsfz 0/2 Pending 0 0s bookinfo-details-v1-deployment-d56fb557b-2xsfz 0/2 ContainerCreating 0 0s bookinfo-details-v1-deployment-d56fb557b-2xsfz 0/2 ContainerCreating 0 2s bookinfo-details-v1-deployment-d56fb557b-2xsfz 1/2 Running 0 4s bookinfo-reviews-v3-deployment-66cdd7f69d-76bl9 0/2 Pending 0 0s bookinfo-reviews-v3-deployment-66cdd7f69d-76bl9 0/2 Pending 0 0s bookinfo-reviews-v3-deployment-66cdd7f69d-76bl9 0/2 ContainerCreating 0 0s bookinfo-reviews-v3-deployment-66cdd7f69d-76bl9 0/2 ContainerCreating 0 1s bookinfo-productpage-v1-deployment-757c7cc77b-qwtp2 2/2 Running 0 11s bookinfo-reviews-v3-deployment-66cdd7f69d-76bl9 1/2 Running 0 3s bookinfo-details-v1-deployment-d56fb557b-2xsfz 2/2 Running 0 12s bookinfo-reviews-v3-deployment-66cdd7f69d-76bl9 2/2 Running 0 17s bookinfo-ratings-v1-deployment-6976b4ccf7-d2ts2 0/2 Pending 0 0s bookinfo-ratings-v1-deployment-6976b4ccf7-d2ts2 0/2 Pending 0 0s bookinfo-ratings-v1-deployment-6976b4ccf7-d2ts2 0/2 ContainerCreating 0 0s bookinfo-ratings-v1-deployment-6976b4ccf7-d2ts2 0/2 ContainerCreating 0 2s bookinfo-ratings-v1-deployment-6976b4ccf7-d2ts2 1/2 Running 0 5s bookinfo-ratings-v1-deployment-6976b4ccf7-d2ts2 2/2 Running 0 9s

Slide 46

Slide 46 text

SFWJFXTTFSWJDFͷॳճىಈ͕ ϨεϙϯελΠϜͷ໿Λ઎ΊΔ ,OBUJWF͸;JQLJO"1*΁ͷ4QBO৘ใͷૹ৴ʹରԠ͍ͯ͠ΔͨΊɺΞϓϦʹมߋΛՃ͑ͣʹ ;JQLJO+BFHFSͱ͍ͬͨπʔϧʹΑΓ5SBDJOH৘ใΛࢀর͢Δ͜ͱ͕ՄೳͰ͢ɻ ҎԼʹ+BFHFSͰࠓճͷCPPLJOGPʹ͍ͭͯ5SBDJOH৘ใΛऔಘͨ݁͠ՌΛࣔ͠·͢ɻ ϚΠΫϩαʔϏεΛσϓϩΠ͢Δέʔε

Slide 47

Slide 47 text

˗ϚΠΫϩαʔϏεΞʔΩςΫνϟͷ৔߹Ͱ΋,OBUJWF4FSWJOHͷԸܙΛड͚ΒΕΔ ɹɾ୯ҰαʔϏεͱಉ͡উखͰσϓϩΠެ։Ͱ͖Δ ˗θϩεέʔϧʹର͢Δߟྀ͕ඞཁ ɹɾىಈ࣌ؒʹΑΔϨεϙϯε஗ԆʢಛʹϚΠΫϩαʔϏεΞʔΩςΫνϟͰ͸Өڹ͕ݦஶʣ ɹɾΞϓϦଆͰλΠϜΞ΢τͷߟྀ͕ඞཁʢ୹͗͢Δͱॲཧ͕ਖ਼ৗʹߦ͑ͳ͍ʣ ɹɾඞཁ༗ແͷݕ౼ ˗,OBUJWFͰ͸5SBDJOH৘ใͷࢀর͕Մೳ ɹɾϚΠΫϩαʔϏεΞʔΩςΫνϟͰ͸ϘτϧωοΫͷಛఆʹ༗ޮ σϞͷ·ͱΊ

Slide 48

Slide 48 text

ʢࢀߟʣ0CTFSWBCJMJUZ ˗.FUSJDT ɹ1SPNFUIFVT(SBGBOBͳͲҰൠతͳ,VCFSOFUFTϝτϦΫεऩूελοΫʹΑΓ࣮ݱɻ ˗-PHHJOH ɹ'MVFOU#JU΍(SBGBOB-PLJͳͲҰൠతͳ,VCFSOFUFTϩάऩूελοΫʹΑΓ࣮ݱɻ ɹಛʹ,OBUJWFͰ͸1PE͕θϩεέʔϧ͢ΔͨΊ͜ΕΒͷελοΫΛ༻ҙ͓ͯ͘͜͠ͱ͸ ɹ௨ৗͷ,VCFSOFUFTར༻ͱൺ΂ͯ΋ॏཁʹͳΔɻ ɹ$PMMFDUJOH-PHTXJUI'MVFOUCJU ɹIUUQTLOBUJWFEFWEPDTJOTUBMMDPMMFDUJOHMPHT ˗5SBDJOH ɹ,OBUJWFͰ͸4JEFDBSͱͯ͠1PEʹ*OKFDU͞ΕΔRVFVFQSPYZ͕;JQLJO͓Αͼ ɹ($14UBDLESJWFS΁ͷ4QBO৘ใૹ৴ʹରԠɻ ɹ*TUJP4FSWJDF.FTIಉ༷ΞϓϦέʔγϣϯʹखΛՃ͑Δ͜ͱͳ͘;JQLJO΍+BFHFSΛ༻͍ͯ ɹ5SBDJOH৘ใͷऩूࢀর͕Մೳɻ ɹ"DDFTTJOHSFRVFTUUSBDFT ɹIUUQTLOBUJWFEFWEPDTTFSWJOHBDDFTTJOHUSBDFT

Slide 49

Slide 49 text

ʢࢀߟʣ0CTFSWBCJMJUZ 4QBO৘ใͷૹ৴Λ༗ޮԽ͢Δ͜ͱͰҎԼͷ༷ʹ5SBDJOH৘ใΛࢀর͢Δ͜ͱ͕Ͱ͖·͢ɻ +BFHFSʢ*TUJPEPDTʣ IUUQTJTUJPJPMBUFTUEPDTPQTJOUFHSBUJPOTKBFHFSJOTUBMMBUJPO "DDFTTJOHSFRVFTUUSBDFT IUUQTLOBUJWFEFWEPDTTFSWJOHBDDFTTJOHUSBDFT +BFHFSʹΑΔ5SBDJOHͷྫ

Slide 50

Slide 50 text

ʢࢀߟʣ಺෦తͳ࢓૊Έͷ࿩ ˞͜͜Ͱ͸ؔ࿈͢ΔϦιʔεͷΈͷهࡌʹཹΊ͍ͯ·͢ 3PVUF $PO fi HVSBUJPOϦιʔεͷ಺෦ߏ଄͸ҎԼͷ༷ʹͳ͍ͬͯ·͢ɻ ɾ*TUJPͷ(BUFXBZͱ7JSUVBM4FSWJDFͷ࢓૊ΈʹΑΓτϥϑΟοΫ੍ޚ ɾঢ়گʹԠͯ͡4FSWJDF&OEQPJOUΛ෇͚ସ͑ ɾBDUJWBUPSʹΑΓόοϑΝϦϯάϝτϦΫεૹ৴ ɾBVUPTDBMFSʹΑΓ1PEىಈ؅ཧ

Slide 51

Slide 51 text

,OBUJWF4FSWJOHͰىಈ͞ΕΔ1PEʹ͸4JEF$BSͱͯ͠RVFVFQSPYZ͕*OKFDU͞Ε·͢ɻ *TUJPͱಉ༷4JEF$BSͱͯ͠1SPYZΛૠೖ͢ΔํࣜͰ͕͢ɺ*TUJPͷΑ͏ʹ&OWPZΛ༻͍͓ͯΒͣ (P࣮૷ͷRVFVFQSPYZͱ͍͏ಠࣗ1SPYZ͕༻͍ΒΕ͍ͯ·͢ɻ ͳ͓ɺ͜ͷRVFVFQSPYZ΋JTUJPQSPYZͱಉ༷ʹ4QBO৘ใͷૹ৴ʹରԠ͍ͯ͠ΔͨΊ5SBDF৘ใͷऔಘ͕ ՄೳͰ͢ɻʢ೥ʹରԠʣ LOBUJWFTFSWJOHDNERVFVF IUUQTHJUIVCDPNLOBUJWFTFSWJOHUSFFNBTUFSDNERVFVF ʢࢀߟʣ಺෦తͳ࢓૊Έͷ࿩

Slide 52

Slide 52 text

·ͱΊ ˗,OBUJWF4FSWJOHΛ༻͍Δ͜ͱͰΞϓϦͷσϓϩΠެ։͕ϥΫʹͳΔ ɹɾ,OBUJWFಠࣗϦιʔεʢ4FSWJDFɺ$PO fi HVSBUJPOɺ3PVUFʣʹΑΔந৅Խ ɹɾͨͩ͠,OBUJWFࣗମ͸·ͩ1SF3FMFBTFͷͨΊ঎༻ར༻ʹ͸೉͋Γ ɹɾҰํϚωʔδυ,OBUJWFͷ$MPVE3VO͸("͓ͯ͠Γಋೖࣄྫ͋Γ ˗ಛ௃ͷͭͰ͋Δθϩεέʔϧ͸ѻ͍ʹ஫ҙ͕ඞཁ ɹɾॳճىಈ࣌ʹ͸ϨεϙϯελΠϜͷ0)ʹͳΔ ɹɾΦϯϓϨӡ༻Ͱ͸ݕূ༻్Λআ͖ಛʹඞཁͳ͍ͷͰ͸ʁ ɹɾҰํ$MPVE3VOͷΑ͏ͳΫϥ΢υαʔϏεʢىಈ࣌ؒ՝ۚʣͰ͸ίετޮՌ͕͋Γͦ͏ ɹɹɾ$MPVE3VOͰ͸8BSN6Qͱ͍͏࢓૊Έ͕͋Δ໛༷

Slide 53

Slide 53 text

5IBOL:PV