Slide 1

Slide 1 text

ΦϯϓϨͩͬͯ͜͜·ͰͰ͖Δ KubernetesͰ࡞ΔࣗલPaaS Takaaki Yuhara Infrastructure Service Group Gurunavi, Inc. 2018.12.04 Japan Container Days v18.12

Slide 2

Slide 2 text

Takaaki Yuhara Infrastructure Engineer 2014~ ͙Δͳͼ ɹ͙ΔͳͼશͯͷαΠτΠϯϑϥͷߏஙͱӡ༻ ɹVirtualization/OS/Middleware/Container/k8s…ϨΠϠʔΛ୲౰ ɹΠϯϑϥͷίʔυԽɾࣗಈԽɺ؂ࢹ΍ςετͷ࠷దԽ etc…

Slide 3

Slide 3 text

ΦϯϓϨKubernetes kubeadm, Rancher, RKEͳͲɺखܰʹΦϯϓ ϨϛεͰ΋ߏஙͰ͖ΔΑ͏ʹͳΓ·ͨ͠ɻ ςʔϚɿΦϯϓϨKubernetesΛͲͷΑ͏ʹ׆༻͢Δ͔

Slide 4

Slide 4 text

Kubernetesに詳しくなくても誰でも簡単に使えるプラットフォーム

Slide 5

Slide 5 text

γεςϜ֓ཁ Generator API Management Console Load Barancer Ingress Service Deployment Namespace

Slide 6

Slide 6 text

γεςϜ֓ཁ Generator API Management Console Load Barancer ར༻ऀ͸Management Console͔ Βඞཁࣄ߲Λೖྗ͠ར༻։࢝Ϙλϯ ΛΫϦοΫ

Slide 7

Slide 7 text

γεςϜ֓ཁ Generator API Management Console Load Barancer Generator APIͷ֤छδϣϒʹϦΫ Τετ͕౉Δ

Slide 8

Slide 8 text

γεςϜ֓ཁ Generator API Management Console Load Barancer Ingress Service Deployment Namespace Kubernetes APIΛ௨ͯ͡ Namespace΍ඞཁͱͳΔϦιʔ ε܈Λ࡞੒

Slide 9

Slide 9 text

γεςϜ֓ཁ Generator API Management Console Load Barancer Ingress Service Deployment Namespace GitLab APIΛ௨ͯ͡ϓϩδΣΫτ ͷ࡞੒ʢςϯϓϨʔτ͔ΒͷΠϯ ϙʔτʣͱCI/CD༻ͷVariablesͷ ઃఆ Container Registry΋ར༻Մ

Slide 10

Slide 10 text

γεςϜ֓ཁ Generator API Management Console Load Barancer Ingress Service Deployment Namespace LoadBalancerʢk8sͷ֎ʣͷઃఆ Λมߋ͠ΫϥΠΞϯτ͔ΒͷΤϯυ ϙΠϯτΛఏڙ

Slide 11

Slide 11 text

•  Kubernetes ্ͷNamespace΍֤छϦιʔε܈ •  ΞϓϦέʔγϣϯʹର͢ΔΤϯυϙΠϯτ •  GitLab ͷ Projectʢ֤छઃఆ͕ࢪ͞Εͨঢ়ଶʣ Management Console ͔Β࡞੒ ޙ͸ΞϓϦΛ࡞੒ͯ͠Commit & Push͢Δ͚ͩ

Slide 12

Slide 12 text

Kubernetes Resouce Generator •  KubernetesͷϦιʔε܈Λ࡞ΔͨΊʹಠࣗʹ࡞੒ͨ͠API •  YAMLϚχϡϑΣετΛapply͍ͯ͠ΔΑ͏ͳΠϝʔδ •  Kubernetes client pythonΛ࢖༻ •  Officialʹఏڙ͞Ε͍ͯΔgo΍pythonͷClient Library ɹɹhttps://github.com/kubernetes-client/python ɹɹhttps://github.com/kubernetes/client-go •  Python FlaskͰREST APIԽ

Slide 13

Slide 13 text

Kubernetes Client Python ྫʣNamespaceͷ࡞੒

Slide 14

Slide 14 text

DeployͷྲྀΕ

Slide 15

Slide 15 text

γεςϜ֓ཁ Developer Load Barancer Ingress Service Deployment Namespace Container Registry ίʔυΛGitLabͷϓϩδΣΫ τʹରͯ͠Commit / Push

Slide 16

Slide 16 text

γεςϜ֓ཁ Developer Load Barancer Ingress Service Deployment Namespace Container Registry GitLab CI͕։࢝͞Εk8s্ͷrunner ʹରͯ͠Pipelineͷ࣮ߦΛ໋ྩ

Slide 17

Slide 17 text

γεςϜ֓ཁ Developer Load Barancer Ingress Service Deployment Namespace workspace Container Registry #01 Build Stage Kubernetes্ͰίϯςφϏϧυ ༻ͷίϯςφΛ࣮ߦ

Slide 18

Slide 18 text

γεςϜ֓ཁ Developer Load Barancer Ingress Service Deployment Namespace workspace Container Registry #01 Build Stage GitLabͷProjectΛclone͠ DockerfileΛݩʹΠϝʔδϏϧυ

Slide 19

Slide 19 text

γεςϜ֓ཁ Developer Load Barancer Ingress Service Deployment Namespace workspace Container Registry #01 Build Stage ϏϧυΠϝʔδΛGitLab Container RegistryʹPush

Slide 20

Slide 20 text

γεςϜ֓ཁ Developer Load Barancer Ingress Service Deployment Namespace workspace Container Registry #02 Deploy Stage Runner͔ΒDeploy༻ͷίϯςφ Λىಈɻ Kubernetes APIΛ௨ͯ͡ Deploymentʹରͯ͠Rolling updateΛ໋ྩ

Slide 21

Slide 21 text

γεςϜ֓ཁ Developer Load Barancer Ingress Service Deployment Namespace Container Registry ϏϧυΠϝʔδ͔ΒRolling updateΛ࣮ߦ

Slide 22

Slide 22 text

GitLab & GitLab CI •  GitLabɺGitLab Container RegistryΛར༻ •  CI/CDδϣϒ͸Kubernetes executorͰ࣮ߦ •  .gitlab-ci.ymlͰύΠϓϥΠϯΛఆٛ͠ɺ࣮ߦ͍ͨ͠ॲཧͱɺͦͷॲཧΛ ࣮ߦ͢ΔϕʔεΠϝʔδΛબ୒ʢServerlessͳײ֮ʣ •  εςʔδຖʹtagΛࢦఆ͢Δ͜ͱͰɺDevelop/Staging/Productionͱ ͍ͬͨܗͰ࣮ߦ؀ڥΛ෼͚ΒΕΔ Build to develop stage: build only: - /^develop.*/ image: gcr.io/kaniko-project/executor:debug script: - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination …(লུ) tags: - develop .gitlab-ci.ymlͷҰ෦Λൈਮ

Slide 23

Slide 23 text

Kubernetes ExecutorΛ࢖ͬͨPipeline •  #01 Build Stage •  Builderͱͯ͠͸dind(docker in docker) ͔ kanikoͷબ୒͕Մ •  kaniko͸Google͕։ൃ͢ΔϏϧμʔɻKubernetes্ͰΠϝʔδ Ϗϧυ͢Δ͜ͱΛ૝ఆ͠privilegedແ͠ͰϏϧυՄ ɹɹhttps://github.com/GoogleContainerTools/kaniko •  #02 Deploy Stage •  Kubernetes client pythonͰ࡞੒ͨ͠ಠࣗπʔϧΛ࢖༻ •  Rolling update ΍ ຊ൪ͰͷB/G DeploymentɺRollback౳ʹର Ԡ

Slide 24

Slide 24 text

FeatureϒϥϯνରԠ •  FeatureϒϥϯνΛ࡞੒͢Δ ͱͦΕʹରԠͨ͠Endpointͱ Service/DeploymentΛࣗಈ తʹߏ੒ •  GitLab CIͱ࿈ಈ͠ϒϥϯν໊ ʹԠͨ͡Development͕ߋ ৽͞ΕΔ Ingress Service Deployment Service Deployment Service Deployment a.com b.com c.com develop branch feature/a branch feature/b branch

Slide 25

Slide 25 text

։ൃϑϩʔ develop staging release master feature/a ֤ϒϥϯνͰͷCommit΍Merge୯ҐͰCI/CDΛ࣮ߦ ӡ༻͸Gitૢ࡞Ͱ׬݁ ϓϧϦΫΤετɺϨϏϡʔɺϚʔδ ͷϓϩηεΛճ͢ࣄʹूத tag v1.1.0

Slide 26

Slide 26 text

•  Push Code, Not Container •  ӡ༻͸ϓϧϦΫΤετͰ࣮ߦ͞ΕΔ Weaveworks : Alexis Richardsonࢯ •  kubectl౳ͷίϚϯυϥΠϯπʔϧ͸࢖Θͳ͍ʢGitૢ࡞ͷΈʣ •  GitͱγεςϜͷঢ়ଶ͕ඞͣ౳͍͠ɺGitΛਅͱ͢Δߟ͑ •  γεςϜΛGit؅ཧ͢Δ GitOps

Slide 27

Slide 27 text

·ͱΊ •  Kubernetes্ͷϦιʔε܈΍Load Balancer / GitLab Project ͷ࡞੒ΛAPIΛ௨ͯࣗ͡ಈԽ •  Management ConsoleΛఏڙ͠KubernetesΛந৅Խ •  GitLab CIͱ࿈ܞ͠CI/CDΛ࣮ݱ •  ӡ༻͸Gitૢ࡞Ͱ׬݁ͤ͞ಛผͳૢ࡞͸ෆཁ ୭Ͱ΋؆୯ʹ࢖͑ΔϓϥοτϑΥʔϜͱͯ͠KubernetesΛ׆༻

Slide 28

Slide 28 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ