Slide 1

Slide 1 text

Kubernetesͷίτ࢝Ί 2018/01/30 ࢁຊ ҭ 1

Slide 2

Slide 2 text

• ໊લ: ࢁຊ ҭ(twitter_id: @Mt_mo1019) • ݱࡏͷ࢓ࣄ • RDB PaaS։ൃ • ࠓ·Ͱ • PostgreSQLͷݕূ etc… Who am I ? 2

Slide 3

Slide 3 text

• kubernetes(k8s)ͷॳֶऀɾಋೖݕ౼ऀ޲͚ • k8sͬͯԿʁ • k8sΛͲ͏΍ͬͯ࢖͍ͬͯΔͷʁ • k8sΛಋೖ͢ΔͱԿ͕ྑ͘/ѱ͘ͳΔͷʁ ࠓ೔࿩͢͜ͱͱ 3

Slide 4

Slide 4 text

• ίϯςφ؅ཧͷ౷߹ج൫ • ίϯςφͷࣗಈσϓϩΠɾ෮چ • ج൫ and ίϯςφͷεέʔϧΞ΢τ • ϩʔυόϥϯγϯά • ൿີ৘ใ΍ίϯϑΟάͷ౷߹؅ཧ what is k8s? 4

Slide 5

Slide 5 text

Master Server Master Server k8sͷΞʔΩςΫνϟ 5 Master Nodes Nodes(Minion) Master Server kubernetes cluster Node Server Node Server Node Server kubectl Pod Pod Pod Pod Auto Deploy

Slide 6

Slide 6 text

Master Server Master Server k8sͷΞʔΩςΫνϟ 6 Master Nodes Nodes(Minion) Master Server kubernetes cluster Node Server Node Server Node Server Pod Pod Pod Pod Crash

Slide 7

Slide 7 text

Master Server Master Server k8sͷΞʔΩςΫνϟ 7 Master Nodes Nodes(Minion) Master Server kubernetes cluster Node Server Node Server Node Server Pod Pod Pod Pod ReDeploy Crash Pod

Slide 8

Slide 8 text

• k8s͕؅ཧ͢ΔΦϒδΣΫτͷ࠷খ୯Ґ • Pod ≒ Container • Pod͸ίϯςφΛ಺แ͢Δ • Pod͸ෳ਺ͷίϯςφΛ࣋ͯΔ what is Pod? 8

Slide 9

Slide 9 text

what is Pod normally 9 Container ex) nginx Pod Container ex) exporter, fluentd etc • αʔϏεͱड͚࣋ͭ ϝΠϯͷcontainer • αϒͷcontainer • agentܥͷϓϩηε Λड͚࣋ͭ • sidecarͱݴΘΕΔ

Slide 10

Slide 10 text

• σϓϩΠͷͨΊͷmanifestϑΝΠϧΛॻ͘ • ఆٛ͢Δ͜ͱ͸ଟذʹΘͨΔ • Podͷ༻్ʹΑΓछผΛม͑Δ • PodҎ֎ʹ΋αʔϏεʹඞཁͳ௥Ճఆٛ • manifestΛ࡞Ε͹ଞͷk8s clusterʹҠ২Ͱ͖Δ σϓϩΠ͢Δํ๏ 10

Slide 11

Slide 11 text

ओͳdeploy manifests 11 ఆٛ ֓ཁ Deployments ҰൠతͳPodͷσϓϩΠ StatefulSets StatefulͳΞϓϦέʔγϣϯͷσϓϩΠ DaemonSet Nodeશ୆΁ͷσϓϩΠ Jobs daemonize͠ͳ͍ΞϓϦͷσϓϩΠ CronJob Jobsͷఆظతͳ࣮ߦ Service Pod΁ͷΞΫηε੍ޚ ConfigMap PodʹΠϯδΣΫγϣϯ͢ΔϑΝΠϧఆٛ PersistentVolume ӬଓԽ͢ΔετϨʔδͷఆٛ

Slide 12

Slide 12 text

• ҰൠతͳσϓϩΠʹར༻ • ࢦఆͨ͠PodΛNodeʹσϓϩΠ • σϓϩΠ͢ΔPod਺ͷࢦఆ Deployments 12

Slide 13

Slide 13 text

Master Server Master Server Deployments 13 Master Nodes Nodes(Minion) Master Server kubernetes cluster Node Server Node Server Node Server Pod Pod Replicas=2

Slide 14

Slide 14 text

• StatefulͳΞϓϦέʔγϣϯͰར༻ • PodͷىಈΛॱ࣍଴ͬͯσϓϩΠ͢Δ • Podͷ໊લ͕Ұఆʹఆ·ΔͷͰ໊લղܾͷ લఏ͕Ͱ͖Δ • clusterߏ੒͕Ͱ͖ΔAppʹ༗ޮ StatefulSets 14

Slide 15

Slide 15 text

Master Server Master Server StatefulSets 15 Master Nodes Nodes(Minion) Master Server kubernetes cluster Node Server Node Server Node Server 1st Pod Replicas=2

Slide 16

Slide 16 text

Master Server Master Server StatefulSets 16 Master Nodes Nodes(Minion) Master Server kubernetes cluster Node Server Node Server Node Server 1st Pod Replicas=2 2nd Pod

Slide 17

Slide 17 text

• શNodesʹPodΛ഑ஔ͢Δ࣌ʹར༻ • NodeͰڞ௨తʹར༻͢ΔagentͳͲ • fluentdͳͲɺnodeʹແ৚݅ʹར༻͢ΔAppʹ༗ޮ DaemonSet 17

Slide 18

Slide 18 text

Master Server Master Server DaemonSet 18 Master Nodes Nodes(Minion) Master Server kubernetes cluster Node Server Node Server Node Server Pod Pod Pod

Slide 19

Slide 19 text

• Ұ౓͚࣮ͩߦ͢Δॲཧʹར༻ • batch΍Databaseͷmigrate࣌ͷscript࣮ߦ • Job͕ࣦഊͨ͠৔߹ʹ࠶࣮ߦͰ͖Δ Jobs 19

Slide 20

Slide 20 text

Master Server Master Server Jobs 20 Master Nodes Nodes(Minion) Master Server kubernetes cluster Node Server Node Server Node Server Pod Ͳ͔͜ͷNodeͰ࣮ߦ

Slide 21

Slide 21 text

• JobsΛఆظ࣮ߦ͢Δࡍʹར༻ • ఆظbatchॲཧΛ࣮ߦͰ͖Δ • crontabΛClusterͰ੍ޚͰ͖Δ • ه๏͸crontabͱಉ༷ CronJob 21

Slide 22

Slide 22 text

Master Server Master Server CronJob 22 Master Nodes Nodes(Minion) Master Server kubernetes cluster Node Server Node Server Node Server Pod Ͳ͔͜ͷNodeͰJobΛىಈ ఆظ࣮ߦ

Slide 23

Slide 23 text

• Node΁ͷΞΫηεͱPodΛ݁ͼ͚ͭΔ • ղ์͢ΔαʔϏε(Pod)Λఆٛ • Pod͕ଞͷNodeʹҠͬͯ΋௥ै͢Δ • ෳ਺Pod͕͋Δ৔߹ɺΑ͠ͳʹৼΓ෼͚Δ Service 23

Slide 24

Slide 24 text

Service 24 Nodes(Minion) kubernetes cluster Node Server Node Server Node Server Pod Pod Service ͲͷNodeʹΞΫηεͯ͠΋ ݁ͼ͍ͭͨPodʹಧ͘

Slide 25

Slide 25 text

• PodʹfileΛInjectionͰ͖Δ • ConfigΛfileͰඞཁͱ͢ΔAppͰར༻ ConfigMap 25

Slide 26

Slide 26 text

• σʔλӬଓԽ͕Ͱ͖ΔετϨʔδͷఆٛ • Access Mode͕͋ΔͷͰݕ౼͕ඞཁ • https://kubernetes.io/docs/concepts/storage/ persistent-volumes/#access-modes Persistent Volumes 26

Slide 27

Slide 27 text

• manifestϑΝΠϧ͕࡞੒؀ڥ͝ͱʹͰ͖Δ • dev؀ڥɺtest؀ڥɺproduction؀ڥ etc… • ಉ͡ఆٛ(yaml)Λ৑௕؅ཧ͢Δ͜ͱʹͳΔ • ಉ͡هड़͸templateԽ͍ͨ͠ manifestΛ࡞͍ͬͯ͘ͱى͖Δ໰୊ 27

Slide 28

Slide 28 text

• manifestϑΝΠϧΛtemplateԽͯ͠؅ཧ • https://github.com/kubernetes/helm • Podͷىಈ/ߋ৽લޙʹhookͯ͠JobΛڬΊΔ what is helm? 28

Slide 29

Slide 29 text

• Go templateΛར༻ͨ͠manifest؅ཧ • templatesͱvaluesͷ2ϑΝΠϧͰ؅ཧ • values͚ͩΛ؀ڥ͝ͱʹมߋ͢Δ • pre/postॲཧΛ࣮ࢪͰ͖Δ what is helm? 29

Slide 30

Slide 30 text

• ެࣜDocumentΛಡΉ(ࣗಈ຋༁Ͱ΋݁ߏ៉ྷ) • https://kubernetes.io/docs/home/ • ଞਓͷmanifestΛಡΈࠐΉ k8sͷา͖ํ 30

Slide 31

Slide 31 text

• ίϯςφͳͷͰىಈ͕ૣ͍ • ։ൃऀ΁ͷ༗ޮͳػೳ͕ଟ͍ • εέʔϧΞ΢τ • ো֐࣌ͷࣗಈFailOver͕Α͍ • CronJobͷΫϥελ੍ޚ • ͲͷNodeʹΞΫηεͯ͠΋Podʹ౸ୡͰ͖Δ • Document͕ἧ͍ͬͯΔɻӳޠ͕៉ྷɻ • ॳظֶशίετ͕ߴ͍ ར༻ऀͱͯ͠ͷk8sͷॴײ 31

Slide 32

Slide 32 text

• ։ൃ؀ڥͷk8sͷ࠶ߏங • Staging؀ڥͷނো ӡ༻தʹىͬͨ͜͜ͱ 32

Slide 33

Slide 33 text

• ։ൃ؀ڥͷഁଛ • Podؒͷ௨৴͕औΕͳ͘ͳͬͨ • ࠶ߏஙͱ෮چͷൺֱͰ࠶ߏஙͨ͠ k8sͷ࠶ߏங 33

Slide 34

Slide 34 text

k8sͷߏஙํ๏ 34 ߏஙํ๏ Pros. Cons. ࣗલͷansible ࣗલͰ࡞ΕΔͷͰॊೈ ௥ै͕େม kubeadm kubenetesຊՈͷϨϙδτϦ શͯͷΦϖϨʔγϣϯͷ ίʔυԽΛ໨ࢦ͢ https://github.com/kubernetes/ kubeadm ·ͩ։ൃ్த star਺͸গͳΊ kube-spray star਺͕ଟ͍ ෳ਺ͷύλʔϯʹରԠͯ͠ ͍Δ https://github.com/kubernetes- incubator/kubespray ຊՈϨϙδτϦͰ͸ͳ͍ playbookࣗମ͸ෳࡶ

Slide 35

Slide 35 text

• Pod಺ͷ໊લղܾ͕Ͱ͖ͳ͘ͳͬͨ • kube-dnsͱNWPluginͷෳ߹ࣄҊ • ໰୊ͷݪҼ͸ෆ໌ͳ·· • tokenͷ࠶ൃߦ΍Podͷ࠶ੜ੒ͳͲɺ༷ʑͳ ରԠ(issuesΛࢀߟ)Ͱ෮چ Staging؀ڥͷނো 35

Slide 36

Slide 36 text

• ղܾʹ3೔͔͔ͬͨ • Podͷࣗಈ෮چʹΑΓσϓϩΠ͍ͯͨ͠ϛυ ϧ΢ΣΞͷΫϥελ่յ • ΋ͱ΋ͱίϯςφલఏͷઃܭʹͳ͍ͬͯͳ ͍ΞϓϦ͸஫ҙ Staging؀ڥͷނোͷӨڹ 36

Slide 37

Slide 37 text

• ྑ͍ͱ͜Ζ • ։ൃεϐʔυ͕ͱͯ΋ૣ͍ • ػೳ͸ଟ͘ἧ͍ͬͯͯศར • ѱ͍ͱ͜Ζ • ॳظֶशίετ͕ߴ͍ • ӡ༻ൣғ͕ଟذʹ౉Δ • NW plugin͕Կ͕͍͍͔Θ͔Βͳ͍ • ReadWriteManyʹରԠͨ͠PersistentVolume͕গͳ͍ ॴײ 37

Slide 38

Slide 38 text

• k8sΛར༻͢ΔͳΒ • GKEͳͲͷڊਓͷݞͷ্ʹཱͭ • ࣗ૊৫Ͱ࢖͏ͳΒઐ༻ͷӡ༻෦ୂΛ༻ҙ͢Δ • ։ൃऀʹ͸ͱͯ΋خ͍͠ػೳ͕ଟ͍ • ίϯςφͰͷ։ൃ͕Ͱ͖ΔΤϯδχΞ͕ඞਢ ૯ׅ 38