Slide 1

Slide 1 text

໌೔͔Β࢖͑Δ Kubernetes ೖ໳ ~جૅ͔ΒॳΊͯͷσϓϩΠ~ Supporterz CoLab ษڧձ Jun. 19, 2018 Ӝ໺ ߛҰ / URANO, Koichi (@lanocci) SRE at Adtech Studio, CyberAgent, Inc.

Slide 2

Slide 2 text

໨࣍ 1. ࣗݾ঺հ 2. ຊ೔ͷ͓඼ॻ͖ 3. લఏ஌ࣝͷ͓͞Β͍ 4. Kubernetesͷதͷ֓೦ʢຊ୊ʣ 5. ࣄྫ঺հʢ෭୊ᶃʣ 6. ίϚϯυϥΠϯπʔϧͱ͔ͷ঺հʢ෭୊ᶄʣ

Slide 3

Slide 3 text

ࣗݾ঺հ

Slide 4

Slide 4 text

ࣗݾ঺հ • Ӝ໺ɹߛҰ (@lanocci) • גࣜձࣾαΠόʔΤʔδΣϯτ • Πϯλʔωοτ޿ࠂͷΠϯϑϥ΍ͬͯ·͢ • Kubernetesྺ: GKEͰ໿1೥ • ࡢ೥7݄·Ͱ͸SIerͰέʔϒϧςϨϏاۀͷγεςϜ։ൃɾӡ༻ • CKA (Certified Kubernetes Administrator) ϗϧμʔ(#366) Koichi Urano April 1, 2018 CKA-1800-0366-0100 1 / 1

Slide 5

Slide 5 text

ຊ೔ͷ͓඼ॻ͖

Slide 6

Slide 6 text

ͷલʹͪΐͬͱΞϯέʔτ

Slide 7

Slide 7 text

Assumed Listeners (Readers) • ͜Ε͔ΒKubernetesΛ৮ͬͯΈΑ͏ͱࢥ͍ͬͯΔਓ • KubernetesٴͼGKEΛ৮ͬͯΈ͚ͨͲͳΜ͔Α͘Θ ͔ΒΜͱ͍͏ਓ • KubernetesٴͼGKEʹڵຯ͋Δਓ • ΋͏݁ߏ͍͡ΕΔΑɺͱ͍͏ਓ͸ੋඇஆ͔͍໨Ͱݟ क͍͚ͬͯͨͩΔͱخ͍͠Ͱ͢

Slide 8

Slide 8 text

The Goal of This Talk • ʮKubernetesͬͯͳʹʁΑ͘Θ͔ΒΜʯͱ͍͏ਓ ͕ɺKubernetesͰΞϓϦΛಈ͔͢Πϝʔδ͕ͳΜͱ ͳ͘Ͱ͖ΔΑ͏ʹͳΔ͜ͱ • ʮKubernetes৮ͬͯΈ͚ͨͲ࠳ંͨ͠ʯͱ͍͏ਓ ͕΋͏Ұ౓ϋνϚΩΛకΊ௚͖͔͚ͬ͢ͱͳΔ͜ͱ • ໌೔͔ΒGKEͰ༡ΜͰΈ͍ͯͩ͘͞Ͷʂʂ

Slide 9

Slide 9 text

This Talk Includes … • શ͘Կ΋஌Βͳ͔ͬͨ๻͕Kubernetes্ʹΞϓϦ έʔγϣϯΛߏஙͰ͖ΔΑ͏ʹͳΔ·ͰʹֶΜͩ͜ͱ • Kubernetesͷجຊతͳ֓೦ͱ͔ߏ੒ͱ͔ • KubernetesΛ࢖͏ͨΊͷಓ۩ཱͯ • GKEͷجຊతͳ࢖͍ํ

Slide 10

Slide 10 text

This Talk Doesn’t Include … • ϕετϓϥΫςΟεతͳ࿩Ͱ͸͋Γ·ͤΜ • GCPͷجຊతͳ৮ΓํʢϩάΠϯͱ͔ϓϩδΣ Ϋτ࡞੒ͱ͔ʣ • KubernetesΫϥελࣗମͷΞʔΩςΫνϟৄࡉ • Dockerͷࡉ͔͍࿩

Slide 11

Slide 11 text

Bottom Line First • Kubernetes৮Γ࢝ΊΔΜͩͬͨΒͱΓ͋͑ͣ DeploymentͱService͍ͬͯ͡༡ΜͰΈ· ͠ΐ͏ • ʢGKE࢖͏ͱ؆୯ʹ࢝ΊΒΕΔΑ

Slide 12

Slide 12 text

ࢿྉͱ͔ • ࠓ೔࢖͏αϯϓϧ͸͜͜ʹஔ͍ͯ͋Γ·͢ • https://github.com/lanocci/getting-started-kubernetes • ࢿྉ͸͜͜ʹ͋Γ·͢ • https://speakerdeck.com/lanocci/introduction-to- kubernetes-using-gke

Slide 13

Slide 13 text

લఏ஌ࣝͱ͔

Slide 14

Slide 14 text

What’s Docker Engine? • ʮίϯςφʯͷ࣮ߦ؀ڥΛఏڙ • ϑϨʔϜϫʔΫͷόʔδϣϯͳͲɺ͍ΖΜͳґଘؔ܎Λʮίϯςφʯ ͷதʹด͡ࠐΊΔ͜ͱͰɺҠ২ੑͷߴ͍ΞϓϦέʔγϣϯΛ࡞Δ͜ͱ ͕Ͱ͖Δɹɹ(Build Once, Run Anywhere) ⁶ PaaS • ίϯςφͷ࡞੒ɺ࡟আ͸ߴ଎ͳͷͰෛՙঢ়گʹΑͬͯॊೈʹϦιʔε Λ࢖͍෼͚ΒΕΔͱ͍͏ϝϦοτ͕͋Δ • Docker୯ମͰ͸ಉҰϗετ಺ͷίϯςφ͔͠؅ཧͰ͖ͳ͍ ɹɹɹ→ͪΌΜͱ࢖͏ͳΒΦʔέετϨʔγϣϯγεςϜ͕ඞཁ

Slide 15

Slide 15 text

What’s Kubernetes? • ίϯςφΛ࢖ͬͨΞϓϦέʔγϣϯͷσϓϩΠɺεέʔϧɺ؅ཧΛࣗಈԽ͢ ΔΦʔϓϯιʔεγεςϜ • Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications. (https:// kubernetes.io/) • DockerͰ΋ެࣜαϙʔτ͞ΕͨΓʢDocker for Mac ʹඪ४౥ࡌʣɺઌ೔ AWSͰ΋KubernetesͷαʔϏε͕GA͞ΕͨΓͰɺΦʔέετϨʔγϣϯ πʔϧͷ΄΅σϑΝΫτελϯμʔυͱݴ͑Δײ͡ • Docker Engine౳Λ࢖ͬͯ࡞੒ͨ͠ΞϓϦέʔγϣϯΛෳ਺ͷαʔόʹσϓ ϩΠͯ͠ӡ༻͢ΔͨΊʹඞཁͳػೳΛఏڙͯ͘͠ΕΔ • ΞϓϦέʔγϣϯಉ࢜Λ࿈ܞͤͨ͞ΓɺϚγϯϦιʔεΛ؅ཧͨ͠Γɺ֎෦͔ΒͷΞΫηεํ๏Λఏڙͨ͠ΓɺΞϓϦέʔγϣϯͷΞοϓσʔτख ஈΛఏڙͨ͠Γ • Docker͚ͩ͡Όͳͯ͘rktͱ͔΋࢖͑ΔΒ͍͠

Slide 16

Slide 16 text

What’s GKE? • Google Kubernetes Engineͷུ • ʢࡢ೥຤ࠒ·Ͱ͸Google Container Engineʣ • Google Cloud Platform ͷͳ͔ͰKubernetes Λ࢖ͬͨίϯςφج൫Λఏڙ͢ΔαʔϏε

Slide 17

Slide 17 text

Why GKE? • PCϩʔΧϧ΍ɺGCEͳͲͷVMʹKubernetesΛߏங͢Δ͜ͱ΋Ͱ͖Δ͕ɺ ͦΕΛ͢Δʹ͸Kubernetes಺෦ͷΞʔΩςΫνϟʹର͢Δཧղ͕ඞཁ • ಺෦ωοτϫʔΫͷઃఆ΋ผ్ඞཁͩͬͨΓͯ݁͠ߏͦ͜Ͱ٧·ͬͨΓ͢ Δ • खͬऔΓૣ͘KubernetesΛཧղ͢ΔͨΊʹ͸·ͣɺϚωʔδυαʔϏεΛ ࢖ͬͯΈΔͷ͕ۙಓͩͱࢥ͍·͢ • ͔͠΋ɺGKE͸ແྉ࿮Ͱ݁ߏ৭ʑ͍͡ΕΔͷͰΦεεϝ • $300෼ͷແྉ࿮͕1೥ؒ࢖͑Δ • minikubeͰ΋͍͍͚Ͳtype: loadBalancerͱ͔Ͱ֎෦ެ։Ͱ͖Δͷ͸ศར

Slide 18

Slide 18 text

Concepts of Kubernetes (And Related Ideas)

Slide 19

Slide 19 text

ʢࢀߟʣArchitecture of Kubernetes https://kubernetes.io/docs/concepts/architecture/cloud-controller/ Nodes

Slide 20

Slide 20 text

Components of Kubernetes https://kubernetes.io/docs/tutorials/kubernetes-basics/cluster-intro/

Slide 21

Slide 21 text

جຊ֓೦ᶃ - Cluster • Kubernetesͷ؀ڥΛߏங͢Δ্ͰҰ൪େ͖͍ ୯Ґ • ҰͭͷClusterͷதʹNode, Pod, Service౳ͷ ߏ੒ཁૉΛ࡞͍ͬͯ͘(ޙड़) • (MasterͱNode͔Βߏ੒͞ΕΔ)

Slide 22

Slide 22 text

Components of Kubernetes https://kubernetes.io/docs/tutorials/kubernetes-basics/cluster-intro/

Slide 23

Slide 23 text

جຊ֓೦ᶄ - Master • Kuberentes Clusterͷ؅ཧશൠΛߦ͏ • ΞϓϦέʔγϣϯͷঢ়ଶ؅ཧ΍ͦΕʹԠͨ͡εέδϡʔϦϯά౳ • kubectlίϚϯυ(ޙड़)΍Kubernetes API͸͜ ͜Ͱड͚෇͚ͯॲཧ͞ΕΔ • GKEΛ࢖͏৔߹ɺ͜͜͸ϚωʔδυαʔϏε ʹͳ͍ͬͯΔ

Slide 24

Slide 24 text

Components of Kubernetes https://kubernetes.io/docs/tutorials/kubernetes-basics/cluster-intro/

Slide 25

Slide 25 text

جຊ֓೦ᶅ - Node • ίϯςφ͕഑ஔ͞ΕΔϚγϯ(෺ཧϚγϯ / VM) • ͜ͷNodeʹҰͭҰͭͷPod(ޙड़)ׂ͕Γ౰ͯΒ ΕΔΠϝʔδ • GKEͰ͸ClusterΛ࡞੒͢ΔͱࣗಈͰNodeʹ૬ ౰͢ΔGCEΠϯελϯε͕࡞੒͞ΕΔ

Slide 26

Slide 26 text

Components of Kubernetes https://kubernetes.io/docs/tutorials/kubernetes-basics/cluster-intro/

Slide 27

Slide 27 text

DEMO • Ϋϥελͷ࡞੒ • • image-type: NodeͷOSλΠϓ • machine-type: Node ͷαΠζ(CPU/Mem) • num-nodes: Nodeͷ਺ • preemptible: ҆͘͢ΔͨΊͷ͓·͡ͳ͍ʢpreemptive nodeʣ $ gcloud container clusters create test-cluster \ --image-type=cos \ —-machine-type=n1-standard-1 \ -—preemptible \ -—num-nodes=2

Slide 28

Slide 28 text

جຊ֓೦ᶆ - Pod • ҰͭͷΞϓϦέʔγϣϯΛಈ͔ͨ͢ΊͷίϯςφͱϦιʔ εΛάϧʔϓԽͨ͠΋ͷ • Kubernetesͷߏ੒ཁૉͱͯ͠͸࠷খͷ୯Ґ • Pod͝ͱʹCPUɺϝϞϦɺσΟεΫɺωοτϫʔΫΞυ Ϩε౳ͷϦιʔεΛ࣋ͭͷͰɺʮҰ୆ͷαʔόʯͱݟΔ ͜ͱ΋Ͱ͖Δ • Ϋϥελଆ͔ΒݟΔͱҰͭͷʮϓϩηεʯ

Slide 29

Slide 29 text

ਤ: جຊ֓೦ᶆ - Pod

Slide 30

Slide 30 text

࣮ࡍʹ͍͡Δର৅ - ·ͣ͸͜Ε͚ͩ • Deployment • Service

Slide 31

Slide 31 text

Deployment • Podͷ࡞੒ɺߋ৽Λߦ͏୯ҐΛఆٛ • DeploymentΛ࡞੒͢Δͱ͜Μͳ͜ͱ͕Ͱ͖Δ • Podࣗମͷ࡞੒ • Pod਺ͷઃఆɾมߋ • Deploymentʹଐ͢ΔPodͷΞϓϦέʔγϣϯΛࢭΊͣʹΞοϓ σʔτʢϩʔϦϯάΞοϓσʔτʣ • Serviceʢޙड़ʣ΁ͷΞλον ※ ࡉ͔͍͜ͱΛݴ͏ͱDeployment͸Replica SetΛ؅ཧ͍ͯ͠Δ͕ɺઆ໌͸ׂѪ

Slide 32

Slide 32 text

Deployment Sample(nginx) apiVersion: extensions/v1beta1 kind: Deployment metadata: name: test-deployment spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest resources: limits: cpu: 400m memory: 200Mi requests: cpu: 200m memory: 200Mi ports: - containerPort: 80 σϓϩΠϝϯτ໊ ࡞੒͢Δ1PE਺ ͜ͷϥϕϧ͕͍͍ͭͯΔ1PEΛσϓϩΠϝϯτ͕؅ཧ͢Δ 1PEʹ͚ͭΔϥϕϧ ίϯςφͷ൪ϙʔτΛ։͚Δ ʢࢦఆ͠ͳͯ͘΋։͘ʣ ࢖༻͢ΔEPDLFSΠϝʔδ ׂΓ౰ͯϦιʔε 1PEͷ ఆٛ

Slide 33

Slide 33 text

• Deploymentͷద༻ • yamlϑΝΠϧ͔ΒDeploymentΛద༻͢Δ • ͪΌΜͱͰ͖ͯΔ͔֬ೝ $ kubectl apply -f path/to/the/deployment-manifest.yaml DEMO $ kubectl port-forward test-nginx 8080:80

Slide 34

Slide 34 text

͜͜·ͰͰ • nginxΛಈ͔͢ͱ͜Ζ·Ͱ͸Ͱ͖͚ͨͲɺΫϥε λ಺ͷϓϥΠϕʔτ IP͔͠ৼΒΕͯͳ͍͔ΒɺΫ ϥελͷ֎͔ΒΞΫηεͰ͖ͳ͍ • ϒϥ΢βͰ֬ೝ͚ͨ͠Ε͹kubectlίϚϯυͰPod ͦΕͧΕʹτϯωϦϯά͠ͳ͍ͱ͍͚ͳ͍ • ͜ͷ··Ͱ͸࢖͑ͳ͍͠ɺ͍͍ͪͪΊΜͲ͍

Slide 35

Slide 35 text

Service • Pod΁ͷΞΫηεΛந৅Խ͢Δ • Pod͸ࢮΜͩΓੜ·ΕͨΓ͢Δ΋ͷͳͷͰɺ΋ͬͱந৅తͳ ୯ҐͰ·ͱΊ͓͔ͯͳ͍ͱΫϥΠΞϯτ͔ΒͷΞΫηεઌ͕ ίϩίϩมΘͬͪΌ͏ • ϧʔλ΍ϩʔυόϥϯαʹ૬౰͢ΔػೳͰɺΫϥελ֎ ͔ΒͷΞΫηεΛ஥հ͢Δ • τϥϑΟοΫ੍ޚͷํ๏ʹΑͬͯɺ͍͔ͭ͘ͷλΠϓ͔ Βબ΂Δ

Slide 36

Slide 36 text

Service ਤ:

Slide 37

Slide 37 text

Service (type: LoadBalancer) • L4ϩʔυόϥϯα૬౰ͷػೳΛఏڙ͢ΔʢIP ΞυϨεͰΞΫηεͰ͖Δʣ • ֎෦ΤϯυϙΠϯτ(External IP)Λ΋ͪɺಠࣗ ͷIPΞυϨεΛ࢖ͬͯΞΫηεͤ͞Δ͜ͱ͕Ͱ ͖Δ

Slide 38

Slide 38 text

Service.yml Sample(LoadBalancer) apiVersion: v1 kind: Service metadata: name: test-service spec: ports: - port: 80 targetPort: 80 protocol: TCP loadBalancerIP: xx.xx.xx.xx type: LoadBalancer selector: app: nginx ֎෦͔ΒͷΞΫηεΛड͚෇͚Δ*1ΞυϨε (,&Ͱ͸ࢦఆ͠ͳ͚Ε͹ࣗಈͰׂΓ౰ͯ ΞΫηεΛసૹ͢Δઌͷ 1PEଆͷϙʔτ൪߸ ΞΫηεΛड͚෇͚Δ 4FSWJDFଆͷϙʔτ൪߸ ΞΫηεΛసૹ͢Δઌͷ 1PEΛϥϕϧͰࢦఆ

Slide 39

Slide 39 text

• Serviceͷద༻ • yamlϑΝΠϧ͔ΒServiceΛద༻͢Δ • ͜Μͳ΍Γํ΋͋Δ $ kubectl apply -f path/to/the/service-manifest.yaml DEMO $ kubectl expose deployment test-deployment —-port=80 —-target-port=80

Slide 40

Slide 40 text

Service (type: NodePort) • Nodeͷಛఆͷϙʔτ൪߸΁ͷΞΫηεΛɺಛ ఆͷPodʹసૹ͢Δ • Kubernetesͷ֎ʹϩʔυόϥϯαʔΛ࣋ͪͨ ͍৔߹΍ɺIngress(ޙड़)Λ࢖͍͍ͨ৔߹ʹ͜ ΕΛࢦఆ͢Δ͜ͱ͕ଟ͍ʢͱࢥ͏ʣ

Slide 41

Slide 41 text

Service.yml Sample(NodePort) apiVersion: v1 kind: Service metadata: name: test-service spec: ports: - port: 80 targetPort: 80 nodePort: 30080 protocol: TCP type: NodePort selector: app: nginx ΞΫηεΛసૹ͢Δઌͷ 1PEΛࢦఆ /PEFͷ͜ͷϙʔτ΁ͷΞΫηεΛ͜ͷαʔϏεʹసૹ ࢦఆ͠ͳ͚Ε͹ࣗಈͰׂΓ౰ͯ

Slide 42

Slide 42 text

͜͜·Ͱ • Ͱ͖ͨ͜ͱ • type: loadBalancerͷαʔϏεΛ࢖͏͜ͱͰಠࣗIP Ͱ֎෦͔ΒͷΞΫηεΛड͚෇͚ͨΓ • type: nodePortͰϊʔυͷIP:PortͰ֎෦͔ΒͷΞ ΫηεΛड͚෇͚ͨΓ • WEBαʔϏε࡞Εͦ͏

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

࢖ͬͯΈΔͱศརͳίϯϙʔωϯτ • Config Map • Secret • Ingress • Daemon Set • Cronjob • ʢ͜ͷล͸ຊ൪؀ڥ࡞ΔͳΒඞਢ͔΋͚ͩͲɺݸਓͰ༡Ϳ෼ʹ͸ͳͯ͘΋ͳΜͱ͔ͳΔʣ

Slide 45

Slide 45 text

Config Map • Pod಺෦Ͱ࢖͏؀ڥม਺ΛConfig Mapͱͯ͠ ఆ͓ٛͯ͘͜͠ͱͰɺDeploymentͷҠ২ੑΛ ߴΊΔ͜ͱ͕Ͱ͖Δ • NamespaceͰ؀ڥ͝ͱʹ࢖͏Config MapΛ ੾Γସ͑ͨΓ͢Δ͜ͱ΋Ͱ͖Δ

Slide 46

Slide 46 text

Config Map Sample apiVersion: v1 kind: ConfigMap metadata: name: dev-common-env data: TEST_HOST: “www.testdomain.com" TEST_PORT: "8081" TEST_ID: “test-project" EBUBϑΟʔϧυͷԼʹ ΩʔόϦϡʔΛॻ͘

Slide 47

Slide 47 text

Deployment͔Βͷݺͼग़͠ … envFrom: - configMapRef: name: dev-common-env … … env: - name: DB_ACCESS_POINT valueFrom: configMapKeyRef: name: dev-common—env key: TEST_ID … DPOpHNBQΛؙ͝ͱಡΈग़͠ ͯ؀ڥม਺ʹద༻ DPOpHNBQ͔Β஋ΛҰͭ ಡΈग़ͯ͠؀ڥม਺ʹద༻

Slide 48

Slide 48 text

Secret • ConfigMapͱಉ͡Α͏ʹɺDeploymentఆٛ ͔Β஋Λݺͼग़͢͜ͱ͕Ͱ͖Δ • Config Mapͱ͸ҧ͍ɺ಺෦Ͱ҉߸Խͯ͠ѻ͏ ͷͰɺύεϫʔυͳͲൿີ৘ใΛ֨ೲ͓ͯ͠ ͘ͱ͖ʹద͍ͯ͠Δ

Slide 49

Slide 49 text

Secret Sample --- apiVersion: v1 data: tls.crt: tls.key: kind: Secret metadata: name: domain-certs type: Opaque EBUBϑΟʔϧυͷԼʹ ΩʔόϦϡʔΛॻ͘

Slide 50

Slide 50 text

Deployment͔Βͷݺͼग़͠ … env: - name: AWS_ACCESS_KEY_ID valueFrom: secretKeyRef: name: aws-credential key: aws.access_key_id … TFDSFU͔Β஋ΛҰͭ ಡΈग़ͯ͠؀ڥม਺ʹద༻

Slide 51

Slide 51 text

Ingress • HTTPϕʔεͷϩʔυόϥϯαػೳΛఏڙ͢Δ • HTTPSରԠͷͨΊʹSSLΛऴ୺ͤͨ͞Γɺ໊લ ϕʔεͷόʔνϟϧϗετͷઃఆΛ͢Δ͜ͱ΋ Ͱ͖Δ

Slide 52

Slide 52 text

Ingress Sample --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: test-ingress annotations: kubernetes.io/ingress.global-static-ip-name: dev-console-ingress kubernetes.io/ingress.class: "gce" spec: tls: - secretName: domain-certs backend: serviceName: test-service servicePort: 80 rules: - host: www.test.com http: paths: - path: /* backend: serviceName: test-service servicePort: 80 (,&ͩͱɺOHJOYΛ࢖͏͔ɺ ($1ͷ)551-#Λ࢖͏͔બ΂Δ σϑΥϧτͷόοΫΤϯυͷαʔϏεΛࢦఆ ΞΫηεϧʔϧΛࢦఆͯ͠ όʔνϟϧϗετͷΑ͏ʹ࢖͏͜ͱ΋Ͱ͖Δ ʢ͜ͷCBDLFOEͷࢦఆ͕TQFDCBDLFOEΑΓɹ ɹ༏ઌ͞ΕΔʣ ※ Ingress͕ར༻͢ΔHealth Check͸σϑΥϧτͰbackendͷ/΁ͷΞΫηε ※ มߋ͍ͨ͠৔߹͸PodͷఆٛͰ`readinessProbe`Λઃఆ͢Δඞཁ͕͋Δ 5-4ͷऴ୺΋*OHSFTTͰͰ͖Δ

Slide 53

Slide 53 text

؆୯ͳߏ੒ྫ঺հ ࣌ؒͷ౎߹্ࡉ͔͍࿩͸ʢଟ෼ʣͰ͖·ͤΜͷͰɺ ؾʹͳΔͱ͜Ζͱ͔͸࠙਌ձͰฉ͍͍ͯͩ͘͞

Slide 54

Slide 54 text

αʔϏεͷߏ੒ྫ

Slide 55

Slide 55 text

͜Μͳײ͡ͰCanary Releaseͨ͠Γ

Slide 56

Slide 56 text

ίϚϯυϥΠϯπʔϧ

Slide 57

Slide 57 text

Google Cloud SDK • GCPΛ͍͡ΔͨΊͷίϚϯυϥΠϯπʔϧ • `gcloud` Ͱݺͼग़͢

Slide 58

Slide 58 text

`gcloud container clusters` • ओʹΫϥελͷ࡞੒΍ϩάΠϯઌͷΫϥελͷ ੾Γସ͑ʹ࢖͏ • ଞʹ΋ɺΫϥελΛϦαΠζ͢ΔίϚϯυͱ͔͋Δ͚Ͳࠓ೔͸লུ e.g. (Լઢ෦͸ࣗ͝਎ͷ؀ڥʹஔ͖׵͑ͯ࢖͍ͬͯͩ͘͞) # Ϋϥελͷ࡞੒ ## CPU 0.5core/ Memory 1.7GB ͰcoreosϕʔεͷϚγϯ3୆ΛnodeΫϥελͱͯ͠૊Ή $ gcloud container clusters create test-cluster \ —-project=your-project —-zone=asia-northeast1-a —image-type=cos \ —-machine-type=g1-small --num-nodes=3 # Ϋϥελ΁ͷϩάΠϯ ## ্ͷίϚϯυͰ࡞੒ͨ͠Ϋϥελ΁ϩάΠϯ͠ɺkubectlΛ࢖͑ΔΑ͏ʹ͢Δ $ gcloud container clusters get-credentials test_cluster \ —-project=your-project ——zone=asia-northeast1-a # ࡞ͬͨΫϥελΛ࡟আ $ gcloud container clusters delete test-cluster —-zone=asia-northeast1-a

Slide 59

Slide 59 text

kubectl • KubernetesΛ੍ޚ͢ΔͨΊͷίϚϯυϥΠϯπʔϧ • ҎԼͷૢ࡞Λ͓͚֮͑ͯ͹ͱΓ͋͑ͣ͸࢖͑Δ • (Deployment΍Service౳)֤ίϯϙʔωϯτΛ࡞Δ • ֤ίϯϙʔωϯτΛมߋ͢Δ • ֤ίϯϙʔωϯτΛ࡟আ͢Δ • ֤ίϯϙʔωϯτͷ৘ใΛӾཡ͢Δ(CLI / GUI) • ࣗ෼ͷϩάΠϯ৘ใΛ֬ೝ͢Δ

Slide 60

Slide 60 text

Α͘࢖͏ίϚϯυ # ϑΝΠϧ͔ΒίϯϙʔωϯτΛ࡞੒͢Δ # ಉ໊ͷίϯϙʔωϯτΛߋ৽͢Δͱ͖΋ಉ͡ίϚϯυ $ kubectl apply -f deployment.yml # ཁૉҰཡΛऔಘ (pods /ɹdeployments / services / ingress / configmap …) $ kubectl get pods # লུ΋Ͱ͖ΔΑ pods -> po ͱ͔ services -> svcͱ͔ # ৄࡉΈ͍ͨ৔߹͸ͬͪ͜ $ kubectl describe deployment test-deployment # ίϯςφΠϝʔδΛߋ৽ $ kubectl set image deployment/test-deployment nginx=nginx:latest # ίϯςφͷதʹೖͬͯΈΔ $ kubectl exec -it test-deployment-xxxxxxx —- /bin/bash

Slide 61

Slide 61 text

Others • kubectx Ϋϥελͷ੾Γସ͑ʢίϯςΩετͷ੾Γସ͑ʣ • stern ࢦఆͨ͠จࣈྻΛؚΉPodͷϩάΛ tail ͯ͘͠ΕΔ • ckube kubectl ͰͷϫʔΫϑϩʔΛ؆୯ʹͯ͘͠ΕΔπʔϧ | ࢀߟ:

Slide 62

Slide 62 text

༻ྫ # ίϯςΩετҰཡ $ kubectx # ίϯςΩετ੾Γସ͑ $ kubectx test-cluster # ͋ΔσϓϩΠϝϯτͷlogΛ·ͱΊͯtail $ stern test-deployment # ΠϯλϥΫςΟϒʹ֤ίϯϙʔωϯτͷ৘ใʹΞΫηε $ ckube ls

Slide 63

Slide 63 text

Misc.

Slide 64

Slide 64 text

GKE ͬͯԿͰͰ͖ͯΔͷʁ • Master: ϚωʔδυαʔϏε • Node: GCEΠϯελϯε͕࡞੒͞ΕΔ • Service(type LoadBalancer): Forwarding Rule • Ingress: GCP HTTP(S) Load Balancer

Slide 65

Slide 65 text

·ͱΊ

Slide 66

Slide 66 text

Wrapping Up • GKE࢖ͬͯΔͱجຊతʹ͸ίϯιʔϧૢ࡞ / ίϚϯυ ͳΒҰൃͰ؆୯ʹΫϥελ૊Ίͯߏஙָνϯ • Kubernetes࢖͏ͳΒ·ͣ͸DeploymentͱServiceΛ ԡ͓͚͑ͯ͞͹ΞϓϦಈ͔ͤͯΔײ͡ΛຯΘ͑Δ͔Β ͔ͦ͜Β࢝ΊΔͱ͍͍ͱࢥ͏ • DaemonSetͱ͔ConfigMapͱ͔΋࢖͏ͱΑΓ៉ྷͳ ߏ੒ΛऔΕΔΑ͏ʹͳ͍ͬͯ͘

Slide 67

Slide 67 text

Further Reading • ࠔͬͨΒͱΓ͋͑ͣެࣜʢӳޠͷΈʣ ͜Ε: • ίϯςφج൫ͷσβΠϯύλʔϯ͕Google͔Βެ։͞Ε͍ͯΔͷͰɺڵຯ͕͋ͬͨ ΒͦΕΛࢀߟʹͯ͠ຏ͖Λ͔͚͍ͯ͘ͱྑ͍͔΋ ͜Ε: • ͔ͬ͜Α͘σϓϩΠ͍ͨ͠ਓ޲͚ Helm(ύοέʔδ؅ཧ): : Kubernetes ϚχϑΣετΛύοέʔδͷΑ͏ʹར༻ Spinnaker(CDπʔϧ): : σϓϩΠύΠϓϥΠϯΛߏங Istio (Service Mesh): : Canary Release Ͱ Canary ൛΁ͷτϥϑΟοΫίϯτϩʔϧͱ͔

Slide 68

Slide 68 text

We Are Hiring • ͝ڵຯͷ͋Δํ͸͓ؾܰʹ͓੠͔͚͍ͩ͘͞ • ΦϑΟεݟֶ͚ͩͰ΋େ׻ܴ • ຊ൪؀ڥ Ͱ Kubernetes ࢖͏ϓϩμΫτ΋૿͖͑ͯ·ͨ͠ • ࣾ಺ʹεΩϧΞοϓθϛͱ͍͏੍౓͕͋ͬͯɺKubernetesͷθϛ΋͋Γ·͢ גࣜձࣾαΠόʔΤʔδΣϯτ ΞυςΫελδΦ / ΞυςΫຊ෦