GCPUG Hiroshima #4 https://gcpug-hiroshima.connpass.com/event/85416/ で発表した際の資料
「入門Kubernetes」には図が少なく動きがイメージしにくいという欠点を補うべく、Kubernetesのリソースなどの動きを図を使って説明してみました。
ʮೖKubernetesʯೖ20186݄9() GCPUG Hiroshima #4doublemarket
View Slide
দӜ ൏ਓTwitter : dblmktGitHub : doublemarket
https://yakst.com/jahttp://sql-performance-explained.jphttps://employment.en-japan.com/engineerhub/entry/2017/06/26/110000
! ධ• Kubernetesॳ৺ऀ͚ʹ͓͢͢Ί• جຊ֓೦Λཧղ͢ΔͷʹΑ͍
" ධ• ݪจʹؒҧ͍͕ଟ͍• ༁൛ʹErattaద༻ࡁΈ• मਖ਼ࡁΈίʔυ• https://github.com/doublemarket/kuar-examples-1-9
" ධ• ຊޠ൛ͷؒҧ͍• ਖ਼ޡද• https://github.com/doublemarket/kuar-examples-1-9/wiki/Errata• ୈ2Ͱ͍͔ͭ͘मਖ਼ࡁΈ
" ධ• ਤ͕গͳ͍ ͜ͷࢿྉͰิ͠ʹདྷ·ͨ͠ʂ
ίϯςφͱʁKubernetesͱʁ
ཧϚγϯ͔ΒίϯςφϋʔυΣΞOSϥΠϒϥϦΞϓϦ ΞϓϦϋʔυΣΞϋΠύʔόΠβOSϥΠϒϥϦΞϓϦ ΞϓϦOSϥΠϒϥϦΞϓϦ ΞϓϦϋʔυΣΞOSϥΠϒϥϦΞϓϦ ΞϓϦϥΠϒϥϦϥΠϒϥϦΞϓϦ ΞϓϦϥΠϒϥϦίϯςφ࣮ߦڥཧϚγϯ ԾϚγϯ ίϯςφ
ίϯςφͷཧWebWebWebWeb
ίϯςφͷཧWebWebWebWebDBWebStorageBatch
ίϯςφͷཧWebWebWebWebDBWebStorageBatchཧ͕ͭΒ͍
Kubernetes• ίϯςφΦʔέετϨʔλ• ίϯςφͷσϓϩΠɺεέʔϧɺཧͷࣗಈԽͷΈ
Kubernetesͷઃܭࢥ
ΠϛϡʔλϏϦςΟΠϯετʔϧઃఆมߋϛϡʔλϒϧͳΓํ
ΠϛϡʔλϏϦςΟΠϯετʔϧઃఆมߋΞϯΠϯετʔϧΠϯετʔϧઃఆมߋϛϡʔλϒϧͳΓํมߋΛੵΈॏͶΔ
ΠϛϡʔλϏϦςΟΠϯετʔϧઃఆมߋΞϯΠϯετʔϧΠϯετʔϧઃఆมߋΠϯετʔϧࡁΈΠϝʔδϛϡʔλϒϧͳΓํ ΠϛϡʔλϒϧͳΓํมߋΛੵΈॏͶΔ
ΠϛϡʔλϏϦςΟΠϯετʔϧઃఆมߋΞϯΠϯετʔϧΠϯετʔϧઃఆมߋΠϯετʔϧࡁΈΠϝʔδϛϡʔλϒϧͳΓํ ΠϛϡʔλϒϧͳΓํΠϯετʔϧࡁΈΠϝʔδมߋΛੵΈॏͶΔ ৽͘͠࡞Γ͢
એݴతઃఆ3.times{WebαʔόΛىಈ }໋ྩతઃఆ
એݴతઃఆ3.times{WebαʔόΛىಈ }Webαʔό : 3໋ྩతઃఆ એݴతઃఆ
ࣗݾճ෮γεςϜWebPodNodeWebPodNodeWebPodNode3ͭͷίϯςφΛಈ͔͢
ࣗݾճ෮γεςϜWebPodNodeWebPodNodeWebPodNode1ϊʔυ͕མͪͨΒ
ࣗݾճ෮γεςϜWebPodNodeWebPodNodeWebPodNodeৗʹίϯςφ͕3ͭಈ͘Α͏ʹͨΒ͘
ࣗݾճ෮γεςϜWebPodNodeWebPodNodeWebPodNodeWebPodNode4ͭΛखಈͰ࡞ͯ͠
ࣗݾճ෮γεςϜWebPodNodeWebPodNodeWebPodNodeWebPodNodeৗʹίϯςφ͕3ͭಈ͘Α͏ʹͨΒ͘
KubernetesͷϦιʔε
NodeNode
PodWeb ಉظNodePodߋ৽৴
VolumeWeb ಉظNodePodߋ৽৴Volume
PodͷઃܭWordPressDBNodePodNodeNode
PodͷઃܭWordPressDBNodePodNodeNodeWordPressDBPodWordPressDBPodεέʔϧ͍ͨ͠ͷ͜ͷ୯Ґʁ
PodͷઃܭDBNodePodNodeNodeWordPressPodWordPressPodWordPressPodWordPressPodWordPressPodWordPressPodDBPod࣮ࡍʹ͜ͷΑ͏ʹεέʔϧ͢Δͣ…
PodͷઃܭWeb ಉظNodePodߋ৽৴Volume
ಉ͡PodʹೖΕΔ͖ίϯςφ• ͓ޓ͍͕ಉҰNode্ʹͳ͍ͱಈ͔ͳ͍• Ұॹʹεέʔϧ͢Δඞཁ͕͋Δ
Label / AnnotationWeb ಉظNodePodߋ৽৴
Label / AnnotationWeb ಉظNodePodߋ৽৴type=synctype=webdisk=ssd
ServicekuardNodePodkuardNodePodenv=prod໊લ : alpaca-prodϥϕϧ : app=alpaca, env=prodServiceapp=alpacaenv=prodapp=alpaca
ServicekuardNodePodkuardNodePodenv=prodServiceapp=alpacaenv=prodapp=alpacaΫϥελIP10.115.245.13alpaca-prod.default.svc.cluster.local໊લ : alpaca-prodϥϕϧ : app=alpaca, env=prod
ServiceʹNodePortΛઃఆkuardNodePodkuardNodePodenv=prodServiceapp=alpacaenv=prodapp=alpacaΫϥελIP10.115.245.13alpaca-prod.default.svc.cluster.local໊લ : alpaca-prodϥϕϧ : app=alpaca, env=prodNodePort32711
ReplicaSetNode NodeNodeϨϓϦΧ : 2ϥϕϧ : app=kuardίϯςφ(Pod) : kuardReplicaSet
ReplicaSetkuardNodePodNodekuardNodePodapp=kuardapp=kuardϨϓϦΧ : 2ϥϕϧ : app=kuardίϯςφ(Pod) : kuardReplicaSet
ReplicaSet ɿௐϧʔϓkuardNodePodNodekuardNodePodϨϓϦΧ : 4ϥϕϧ : app=kuardίϯςφ(Pod) : kuardReplicaSetapp=kuardapp=kuard
ReplicaSet : ௐϧʔϓkuardNodePodkuardNodePodkuardNodePodϨϓϦΧ : 4ϥϕϧ : app=kuardίϯςφ(Pod) : kuardReplicaSetapp=kuardapp=kuardapp=kuardkuardPodapp=kuard
ReplicaSet : ௐϧʔϓkuardNodePodkuardNodePodkuardNodePodapp=kuardapp=kuardapp=kuardkuardPodapp=kuardϨϓϦΧ : 4ϥϕϧ : app=kuardίϯςφ(Pod) : kuardReplicaSet
DaemonSetNodeNodeίϯςφ(Pod) : fluentdDaemonSet
DaemonSetNodeNodeίϯςφ(Pod) : fluentdDaemonSetfluentdPodapp=fluentdfluentdPodapp=fluentd
DaemonSetNode NodeNodeίϯςφ(Pod) : fluentdDaemonSetfluentdPodapp=fluentdfluentdPodapp=fluentd
DaemonSetNode NodeNodeίϯςφ(Pod) : fluentdDaemonSetfluentdPodapp=fluentdfluentdPodapp=fluentdfluentdPodapp=fluentd
DaemonSet : Nodeͷ੍ݶNode NodeNodeϥϕϧ : ssd=trueίϯςφ(Pod) : fluentdDaemonSetssd=truessd=true
DaemonSet : Nodeͷ੍ݶNode NodeNodeϥϕϧ : ssd=trueίϯςφ(Pod) : fluentdDaemonSetfluentdPodapp=fluentdfluentdPodapp=fluentdssd=truessd=true
Job : 1ճݶΓ໊લ : oneshotίϯςφ(Pod) : kuardcompletions : 1parallelism : 1JobNode
Job : 1ճݶΓ໊લ : oneshotίϯςφ(Pod) : kuardcompletions : 1parallelism : 1JobNodekuardPodjob=oneshot
Job : Ұఆޭ͢Δ·Ͱ࣮ߦNodeNode NodeNode Node໊લ : oneshotίϯςφ(Pod) : kuardcompletions : 10parallelism : 5Job
Job : Ұఆޭ͢Δ·Ͱ࣮ߦNodekuardPodjob=oneshotNodekuardPodjob=oneshotNodekuardPodjob=oneshotNodekuardPodjob=oneshotNodekuardPodjob=oneshot໊લ : oneshotίϯςφ(Pod) : kuardcompletions : 10parallelism : 5Job
Job : Ұఆޭ͢Δ·Ͱ࣮ߦNodekuardPodjob=oneshotkuardPodjob=oneshotNodekuardPodjob=oneshotkuardPodjob=oneshotNodekuardPodjob=oneshotkuardPodjob=oneshotNodekuardPodjob=oneshotkuardPodjob=oneshotNodekuardPodjob=oneshotkuardPodjob=oneshot໊લ : oneshotίϯςφ(Pod) : kuardcompletions : 10parallelism : 5Job
Job : Ұఆޭ͢Δ·Ͱ࣮ߦ໊લ : oneshotίϯςφ(Pod) : kuardcompletions : 10parallelism : 5JobNodekuardPodjob=oneshotkuardPodjob=oneshotNodekuardPodjob=oneshotkuardPodjob=oneshotNodekuardPodjob=oneshotkuardPodjob=oneshotNodekuardPodjob=oneshotkuardPodjob=oneshotNodekuardPodjob=oneshotkuardPodjob=oneshot
ConfigMap / SecretkuardNodePodanother-param = another-valueextra-param = extra-valuemy-config.txtparameter1 = value1parameter2 = value2ConfigMap
ConfigMap / SecretkuardNodePodanother-param = another-valueextra-param = extra-valuemy-config.txtparameter1 = value1parameter2 = value2ConfigMapConfigMapvolumeANOTHER_PARAM=another-valueEXTRA_PARAM=extra-value/config+- another-param+- extra-param+- my-config.txt+- parameter1+- parameter2
DeploymentnginxNodePodNodeϨϓϦΧ : 1ϥϕϧ : run=nginxίϯςφ : nginx:1.7.12ReplicaSetϨϓϦΧ : 1໊લ : nginxίϯςφ : nginx:1.7.12Deploymentrun=nginx
DeploymentϨϓϦΧ : 2໊લ : nginxίϯςφ : nginx:1.7.12Deployment ϨϓϦΧ : 1ϥϕϧ : run=nginxίϯςφ : nginx:1.7.12ReplicaSetrun=nginxnginxNodePodNode
DeploymentϨϓϦΧ : 2໊લ : nginxίϯςφ : nginx:1.7.12Deployment ϨϓϦΧ : 2ϥϕϧ : run=nginxίϯςφ : nginx:1.7.12ReplicaSetrun=nginxnginxNodePodNodenginxPod
DeploymentϨϓϦΧ : 2໊લ : nginxίϯςφ : nginx:1.7.12Deployment ϨϓϦΧ : 1ϥϕϧ : run=nginxίϯςφ : nginx:1.7.12ReplicaSetrun=nginxnginxNodePodNodenginxPod
Deploymentઓུ : RecreateϨϓϦΧ : 2໊લ : nginxίϯςφ : nginx:1.9.10Deployment ϨϓϦΧ : 2ϥϕϧ : run=nginxίϯςφ : nginx:1.7.12ReplicaSetrun=nginxnginx1.7.2NodePodNodenginx1.7.2Pod
Deploymentઓུ : RecreateϨϓϦΧ : 2໊લ : nginxίϯςφ : nginx:1.9.10Deployment ϨϓϦΧ : 2ϥϕϧ : run=nginxίϯςφ : nginx:1.7.12ReplicaSetrun=nginxnginx1.7.2NodePodNodenginx1.7.2Podnginx1.9.10Podnginx1.9.10PodϨϓϦΧ : 2ϥϕϧ : run=nginxίϯςφ : nginx:1.9.10ReplicaSetrun=nginx
Deploymentઓུ : RollingUpdateϨϓϦΧ : 2໊લ : nginxίϯςφ : nginx:1.9.10maxAvailable : 1Deployment ϨϓϦΧ : 2ϥϕϧ : run=nginxίϯςφ : nginx:1.7.12ReplicaSetrun=nginxnginx1.7.2NodePodNodenginx1.7.2Pod
Deploymentઓུ : RollingUpdateϨϓϦΧ : 2໊લ : nginxίϯςφ : nginx:1.9.10maxAvailable : 1Deployment ϨϓϦΧ : 2ϥϕϧ : run=nginxίϯςφ : nginx:1.7.12ReplicaSetrun=nginxnginx1.7.2NodePodNodenginx1.7.2PodϨϓϦΧ : 2ϥϕϧ : run=nginxίϯςφ : nginx:1.9.10ReplicaSetrun=nginxnginx1.9.10Pod
Deploymentઓུ : RollingUpdateϨϓϦΧ : 2໊લ : nginxίϯςφ : nginx:1.9.10maxAvailable : 1Deployment ϨϓϦΧ : 2ϥϕϧ : run=nginxίϯςφ : nginx:1.7.12ReplicaSetrun=nginxnginx1.7.2NodePodNodenginx1.7.2PodϨϓϦΧ : 2ϥϕϧ : run=nginxίϯςφ : nginx:1.9.10ReplicaSetrun=nginxnginx1.9.10Podnginx1.9.10Pod
StatefulSetNode NodeNodeStatefulSet ϨϓϦΧ : 1ϥϕϧ : app=mongoίϯςφ : mongo:3.4.1
StatefulSetNode Nodemongo0NodePodϨϓϦΧ : 1ϥϕϧ : app=mongoίϯςφ : mongo:3.4.1StatefulSetapp=mongo
StatefulSetmongo1NodePodNodemongo0NodePodapp=mongoϨϓϦΧ : 3ϥϕϧ : app=mongoίϯςφ : mongo:3.4.1StatefulSetapp=mongo
StatefulSetmongo1NodePodNodemongo0NodePodapp=mongoϨϓϦΧ : 3ϥϕϧ : app=mongoίϯςφ : mongo:3.4.1StatefulSetapp=mongo mongo2Podapp=mongo
StatefulSetmongo1NodePodNodemongo0NodePodapp=mongoϨϓϦΧ : 2ϥϕϧ : app=mongoίϯςφ : mongo:3.4.1StatefulSetapp=mongo mongo2Podapp=mongo
PersistentVolumemongo1NodePodNodemongo0NodePodapp=mongoϨϓϦΧ : 3ϥϕϧ : app=mongoίϯςφ : mongo:3.4.1StatefulSetapp=mongo mongo2Podapp=mongoωοτϫʔΫετϨʔδPersistentVolume
͞Βʹ͓ษڧ͢Δʹ
ใݯ• ެࣜυΩϡϝϯτ (ӳޠ) https://kubernetes.io/• ॻ੶• Kubernetes in Action (ӳޠ)• ϒϩά• Google Cloud (ӳޠ) https://medium.com/google-cloud• ެࣜϒϩά (ӳޠ) https://kubernetes.io/blog/
ใݯ• SlackϫʔΫεϖʔε https://slack.kubernetes.io/• ຊޠνϟϯωϧ #jp-users, #jp-events• Podcast• Kubernetes Podcast (ӳޠ) https://kubernetespodcast.com/• ษڧձɾΧϯϑΝϨϯε• Kubernetes Meetup Tokyo (ຊޠ) https://k8sjp.connpass.com/• KubeCon (ӳޠ)