Upgrade to Pro — share decks privately, control downloads, hide ads and more …

knative-serving

 knative-serving

2021/03/09 Kubernetes Novice Tokyo #9

61748c5d26ae54a57b478f9c792bc2f7?s=128

mochizuki875

March 01, 2021
Tweet

Transcript

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

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

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

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

  5. "HFOEB ,VCFSOFUFTͰΞϓϦΛσϓϩΠެ։͢Δέʔε ,OBUJWFͷ֓ཁ <σϞ>,OBUJWF4FSWJOHͰΞϓϦΛσϓϩΠެ։͢Δέʔε ɹɹ,OBUJWF4FSWJOHϦιʔε ɹɹθϩεέʔϧ <σϞ>࣮ӡ༻Λ૝ఆͨ͠έʔε <σϞ>ϚΠΫϩαʔϏεΛσϓϩΠ͢Δέʔε ࢀߟ ɹɹ0CTFSWBCJMJUZ

    ɹɹ಺෦తͳ࢓૊Έͷ࿩ ·ͱΊ
  6. σϞͰ༻͍Δࢿࡐ ˗αϯϓϧΞϓϦ ɹNPDIJ[VLJTQSJOHCPPUXFC ɹIUUQTHJUIVCDPNNPDIJ[VLJTQSJOHCPPUXFC ˗σϞ ͷࢿࡐ ɹNPDIJ[VLJLOBUJWFTFSWJOHEFNP ɹIUUQTHJUIVCDPNNPDIJ[VLJLOBUJWFTFSWJOHEFNP ˗σϞͷࢿࡐ ɹNPDIJ[VLJCPPLJOGPLOBUJWF

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

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

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

  10. ˗ଟ͘ͷ,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ͰΞϓϦΛσϓϩΠެ։͢Δέʔε
  11. ˗ଟ͘ͷ,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ͰΞϓϦΛσϓϩΠެ։͢Δέʔε
  12. ,VCFSOFUFTͰΞϓϦΛσϓϩΠެ։͢Δέʔε

  13. ,OBUJWFͷ֓ཁ ˗(PPHMF$MPVE/FYU`Ͱൃද ɹIUUQTZPVUVCF-U&-[QXM. ˗$/$'-BOETDBQFͰ4FSWFSMFTTΧςΰϦʹؚ·ΕΔ ˗ݱࡏ͸1SFSFMFBTFʢWʣঢ়ଶ ˗($1ͷαʔόϨεαʔϏεͰ͋Δ$MPVE3VOͰ༻͍ΒΕ͍ͯΔʢ("ʣ ˗ػೳ ɹ͍ͣΕͷػೳ΋,VCFSOFUFT্ͷίϯϙʔωϯτͱͯ͠ಈ࡞ ɹɾ4FSWJOH ɹɹ,VCFSOFUFT্΁ͷίϯςφσϓϩΠެ։ΛϥΫʹͯ͘͠ΕΔػೳ

    ɹɹ*TUJPͳͲͷ/8ιϦϡʔγϣϯΛ׆༻ ɹɾ&WFOUJOH ɹɹԿ͔Λܖػʹ,VCFSOFUFT্ʹ1PEΛσϓϩΠͯ͠ॲཧΛ࣮ߦ͢Δػೳ ɹɹʢྫʣ0#4ʹը૾ϑΝΠϧ͕ஔ͔ΕͨΒϦαΠζ
  14. ˗,OBUJWFΠϯετʔϧखॱ ɹIUUQTLOBUJWFEFWEPDTJOTUBMMBOZLVCFSOFUFTDMVTUFS ˗,OBUJWF޲͚*TUJPΠϯετʔϧखॱ ɹIUUQTLOBUJWFEFWEPDTJOTUBMMJOTUBMMJOHJTUJP ,OBUJWFͷ֓ཁ

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

    ɹ,VCFSOFUFT্Ͱͷෳࡶ͞Λந৅Խ͢Δ΋ͷͱ͍͏ཧղΛ͍ͯ͠·͢ɻ ɹݴ͍׵͑Ε͹͜ΕΒͷػೳΛར༻ͯ͠"84-BNCEBͷ༷ͳ'BB4΋࣮ݱͰ͖Δͱ͍͏͜ͱʹͳΓ·͢ɻ
  16. <σϞ> ,OBUJWF4FSWJOHͰΞϓϦΛσϓϩΠެ։͢Δέʔε

  17. ,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ϦιʔεͷఆٛͷΈͰྑ͍
  18. ❯❯❯ 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 <none> 443/TCP 19d service/spring-boot-web ExternalName <none> knative-local-gateway.istio-system.svc.cluster.local 80/TCP 10s service/spring-boot-web-00001 ClusterIP 10.99.90.143 <none> 80/TCP 26s service/spring-boot-web-00001-private ClusterIP 10.110.150.217 <none> 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ͰΞϓϦΛσϓϩΠެ։͢Δέʔε
  19. ֎෦͔ΒͷΞΫηε֬ೝ४උ ˗ΞΫηεΤϯυϙΠϯτͷऔಘ ɹ,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 <none> 15020/TCP,80/TCP,443/TCP 18d istio-ingressgateway LoadBalancer 10.100.235.103 <pending> 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ͰΞϓϦΛσϓϩΠެ։͢Δέʔε
  20. ֎෦͔ΒͷΞΫηε֬ೝ 3PVUFͰ෷͍ग़͞Εͨ63-ʹϒϥ΢β͔ΒΞΫηε͢ΔͱҎԼͷ༷ʹσϓϩΠͨ͠ΞϓϦʹΞΫηεͰ͖Δɻ ΞΫηε63-ɿIUUQTQSJOHCPPUXFCEFGBVMUFYBNQMFDPN ,OBUJWF4FSWJOHͰΞϓϦΛσϓϩΠެ։͢Δέʔε

  21. IUUQTLOBUJWFEFWEPDTTFSWJOH ɾίϯςφͷىಈઃఆΛఆٛ ɾίϯςφͱͯ͠ಈ͘ΞϓϦͷ࣮ମ ɾ$PO fi HVSBUJPOߋ৽ຖʹ࡞੒͞ΕΔ ɾJNNVUBCMF ɾΞΫηε༻63-Λൃߦ ɾ3FWJTJPO΁ͷτϥϑΟοΫ؅ཧ ɾ3PVUFͱ$PO

    fi HVSBUJPOΛ·ͱΊͯఆٛ ,OBUJWF4FSWJOHͰΞϓϦΛσϓϩΠެ։͢Δࡍ͸ओʹҎԼͭͷϦιʔεΛ؅ཧ ,OBUJWFϦιʔε
  22. ઌͷྫͰ͸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Ϧιʔε
  23. ,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 ˡϦΫΤετͳ͠ ˡϦΫΤετൃੜ ˡϦΫΤετͳ͠ঢ়ଶͰҰఆ࣌ؒܦա θϩεέʔϧ ˡϨεϙϯεฦ٫
  24. σϞͷ·ͱΊ ˗,OBUJWF4FSWJOHΛ༻͍ΔͱϥΫʹΞϓϦέʔγϣϯΛσϓϩΠެ։Ͱ͖Δ ɹɾجຊίϯςφΠϝʔδͱ؀ڥม਺ͷࢦఆͷΈ ɹɾΦʔτεέʔϧΛࣗಈͰઃఆ ɹɾࣗಈͰ֎෦ެ։༻ͷ63-͕෷͍ग़͞ΕΔ ɹɾ,VCFSOFUFT୯ମͱൺֱͯ͠:".-هࡌྔ໿ݮɺґଘؔ܎هࡌՕॴݮ  έʔεʹΑͬͯ͸3PVUFͱ3FWJTJPOΛඥ෇͚Δඞཁ͋ΓʢσϞʣ ˗θϩεέʔϧͷಈ࡞ ɹɾσϑΥϧτͩͱθϩεέʔϧ͕༗ޮʹͳ͓ͬͯΓϦΫΤετ͕ແ͍ͱىಈ1PE਺͕୆ʹͳΔ

    ɹɾॳճ͸ଟগϨεϙϯε஗Ԇ͕ൃੜ͢Δ
  25. σϞ ࣮ӡ༻Λ૝ఆͨ͠έʔε

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

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

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

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

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

  34. ᶆ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ͷΞϓϦʹΞΫηεͰ͖·͢ɻ ࣮ӡ༻Λ૝ఆͨ͠έʔε
  35. ɹσϑΥϧτͰ͸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υϝΠϯͷઃఆ
  36. ᶇҰ෦ͷτϥϑΟοΫΛWʹ੾Γସ͑Δ WΞϓϦ͕ਖ਼ৗʹಈ࡞͍ͯ͠Δ͜ͱΛ֬ೝͰ͖ͨͷͰɺ͍Α͍Α֎෦ެ։༻63-͔Β΋WΞϓϦʹ ΞΫηεͰ͖ΔΑ͏ʹ͠·͢ɻ ͜͜Ͱ͸Ұؾʹ੾Γସ͑Λߦ͏#MVF(SFFOͰ͸ͳ͘ฒߦظؒΛڬΜͰ੾Γସ͑Λߦ͏ $BOBSZ3FMFBTFํࣜΛ࠾༻͠·͢ɻ ࣮ӡ༻Λ૝ఆͨ͠έʔε

  37. ᶇҰ෦ͷτϥϑΟοΫΛ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͕֬཰తʹ੾ΓସΘͬͯ දࣔ͞ΕΔ͜ͱ͕෼͔Γ·͢ɻ ࣮ӡ༻Λ૝ఆͨ͠έʔε
  38. ᶈશͯͷτϥϑΟοΫΛWʹ੾Γସ͑Δ ࠷ޙʹ׬શ੾Γସ͑ͱ͍͏͜ͱͰશͯͷϦΫΤετ͕WΞϓϦసૹ͞ΕΔ༷ʹ͠·͢ɻ ࣮ӡ༻Λ૝ఆͨ͠έʔε

  39. ᶈશͯͷτϥϑΟοΫΛ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ઃఆΛมߋ͢Δ͜ ͱͰ؆୯ʹ੾Γ໭͠Λߦ͏͜ͱ͕Ͱ͖·͢ɻ ࣮ӡ༻Λ૝ఆͨ͠έʔε
  40. ˗σϓϩΠͱτϥϑΟοΫͷ؅ཧͰϦιʔεΛ෼͚ͯѻ͏͜ͱ͕Ͱ͖Δ ɹɾσϓϩΠͷ؅ཧɿ$PO fi HVSBSJPOͱ3FWJTJPO ɹɾτϥϑΟοΫͷ؅ཧɿ3PVUF ˗τϥϑΟοΫͷ؅ཧΛϥΫʹߦ͑Δ ɹɾ֤όʔδϣϯʢ3FWJTJPOʣ΁ͷτϥϑΟοΫ੍ޚΛ3PVUFઃఆͰ؆ܿʹߦ͑Δ ɹɾ$BOBSZ3FMFBTFɺ#MVF(SFFOΛಠࣗͰ࢓૊ΈΛߟ͑ͣʹ࣮ݱͰ͖Δ σϞͷ·ͱΊ

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

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

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

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

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

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

  48. ʢࢀߟʣ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
  49. ʢࢀߟʣ0CTFSWBCJMJUZ 4QBO৘ใͷૹ৴Λ༗ޮԽ͢Δ͜ͱͰҎԼͷ༷ʹ5SBDJOH৘ใΛࢀর͢Δ͜ͱ͕Ͱ͖·͢ɻ +BFHFSʢ*TUJPEPDTʣ IUUQTJTUJPJPMBUFTUEPDTPQTJOUFHSBUJPOTKBFHFSJOTUBMMBUJPO "DDFTTJOHSFRVFTUUSBDFT IUUQTLOBUJWFEFWEPDTTFSWJOHBDDFTTJOHUSBDFT +BFHFSʹΑΔ5SBDJOHͷྫ

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

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

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

    ɹɾҰํ$MPVE3VOͷΑ͏ͳΫϥ΢υαʔϏεʢىಈ࣌ؒ՝ۚʣͰ͸ίετޮՌ͕͋Γͦ͏ ɹɹɾ$MPVE3VOͰ͸8BSN6Qͱ͍͏࢓૊Έ͕͋Δ໛༷
  53. 5IBOL:PV