Slide 1

Slide 1 text

Kubernetes #hatenaintern 

Slide 2

Slide 2 text

׆ס铺紶ך㰢؆ך׮׊ַ׆כ Kubernetes Kubernetes Kubernetes 

Slide 3

Slide 3 text

Kubernetes kubernetes, k s AWS EKS, Google Cloud GKE, Azure AKS 

Slide 4

Slide 4 text

עיםכؤ٤طػ k s ( AWS ECS) k s AWS EKS Google Cloud GKE AWS ECS 

Slide 5

Slide 5 text

Kubernetes 1 kubernetes 

Slide 6

Slide 6 text

Kubernetes 2 3 k s Cloud Native Computing Foundation(CNCF) kubernetes kubernetes 

Slide 7

Slide 7 text

Kubernetes 鎋碷ע䏲鳭 (Infrastructure as Code) / 

Slide 8

Slide 8 text

Kubernetes 

Slide 9

Slide 9 text

Cluster ˝ ُتذ٭ؿ٭غכ٠٭؜٭ؿ٭غך啶䡗׈׿׾ ˝ ُتذ٭ؿ٭غ ˝ ؤ٤عٞ٭ٜوٝ٭٤ ˝ ؠٚتذס畘杼؅䥵䎎 ˝ قهٛشؠؠٚؗغךעُؾ٭ةغמ䬠❠׈׿׾ ˝ ٠٭؜٭ؿ٭غ ˝ ظ٭ذوٝ٭٤ ˝ ؤ٤طػ؅㲔车׌׾ג״סؤ٤مٖ٭طؔ٤ءٛ خ٭تס꥗ױ׽ ˝ 鎋碷ע䏲鳭 

Slide 10

Slide 10 text

Pod Pod 1 

Slide 11

Slide 11 text

ئؕغ؜٭قذ٭٤ pod ( ) Proxy, , 

Slide 12

Slide 12 text

٠٭؜٭ؿ٭غ Pod( ) or kubelet API 

Slide 13

Slide 13 text

Kubernetes 

Slide 14

Slide 14 text

ٛخ٭تס؜طإٛ Workloads Service Con g Storage Cluster Metadata Namespace 

Slide 15

Slide 15 text

Workloads ؤ٤طػס㲔车מ꞊׌׾ٛخ٭ت Pod Pod IP Replicaset Pod Pod ( ) Pod 

Slide 16

Slide 16 text

Workloads Deployment Replicaset 

Slide 17

Slide 17 text

Workloads ♓┖յ☪㍑סـ٤ث؛٤ךע⮵榫ם׊ Job CronJob job 

Slide 18

Slide 18 text

Service Pod Service L Ingress L 

Slide 19

Slide 19 text

kubernetes Pod localhost Pod Pod IP pod IP IP Pod IP Pod IP Pod pod 

Slide 20

Slide 20 text

Service Pod ( ) 1 pod 2 pod pod IP ClusterIP ( ) NodePort ( ) LoadBalancer( ) etc 

Slide 21

Slide 21 text

Service Pod DNS DNS account account.hatena- intern-2022.svc.cluster.local DNS A account(service ).hatena- intern- (namespace ).svc( ) 

Slide 22

Slide 22 text

Ingress Ingress L (AWS ALB, Google Cloud GCLB, Nginx) Ingress HTTPS 

Slide 23

Slide 23 text

ٛخ٭ت畘杼מחַי 

Slide 24

Slide 24 text

Manifest YAML kubectl apply -f k s k s 

Slide 25

Slide 25 text

ٛخ٭ت⯆꡾ Pod CPU Pod 

Slide 26

Slide 26 text

ىٜتزؘشؠ Pod Liveness Probe Pod Readiness Probe Pod 

Slide 27

Slide 27 text

⺎榫䓪כ䦡䍖䓪מחַי 

Slide 28

Slide 28 text

⺎榫䓪 Replicaset Manifest Node Pod Node 

Slide 29

Slide 29 text

靷蕔מ㵚׌׾䦡䍖䓪 Horizontal Pod Autoscaler (HPA) CPU Pod Vertical Pod Autoscaler (VPA) CPU, 

Slide 30

Slide 30 text

ـ٤ث؛٤ך⮵榫׌׾ص٭ٜ磆☭ 

Slide 31

Slide 31 text

Minikube kubernetes https://minikube.sigs.k s.io/docs/start/ kubernetes kind 

Slide 32

Slide 32 text

Kustomize https://github.com/kubernetes-sigs/kustomize k s Dev, Stg, Prd Manifest kustomization.yaml secret con g 

Slide 33

Slide 33 text

Ska old https://ska old.dev/ k s skaffold.yaml docker 

Slide 34

Slide 34 text

Kubernetes 

Slide 35

Slide 35 text

ؓةؘ٤ر Hatena-Intern- 

Slide 36

Slide 36 text

瑬┉鼧 Hatena-Intern- 

Slide 37

Slide 37 text

׆ס侇ꝴעـ٤ث؛٤ך׌ Kubenetes codespaces 

Slide 38

Slide 38 text

ئ٭لتס啶䡗 

Slide 39

Slide 39 text

ُؼنؘتعס啶䡗 k8s ├── account │ ├── app.yaml │ ├── config │ │ └── schema.sql │ ├── db.yaml │ ├── kustomization.yaml │ ├── secret │ │ └── ecdsa-private.pem │ └── test.yaml ├── blog │ ├── app.yaml │ ├── config │ │ └── schema.sql │ ├── db.yaml │ ├── kustomization.yaml │ ├── secret │ │ └── account-ecdsa-public.pem │ └── test.yaml ├── kustomization.yaml ├── namespace.yaml ├── renderer-go │ ├── app.yaml │ └── kustomization.yaml └── system └── sa.yaml k8s account/blog/renderer-go kustomization.yaml kustomize 

Slide 40

Slide 40 text

k s/blog/kustomization.yaml apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - app.yaml - db.yaml - test.yaml secretGenerator: - name: blog-app-secret files: - secret/account-ecdsa-public.pem configMapGenerator: - name: blog-app-env-vars literals: # (snip) - name: blog-db-schema-config files: - config/schema.sql 

Slide 41

Slide 41 text

澬鏀 % make up 8080 % kubectl port-forward service/blog 8080:8080 # ϩʔΧϧͷ8080ϙʔτ΁ ͷ௨৴Λblog service ͔Βෛՙ෼ࢄ͞Ε͍ͯΔpodͷ8080ϙʔτʹసૹ͢Δ Pod vscode terminal PORTS 8080 

Slide 42

Slide 42 text

ئ٭لتֿ颯Ⳃ׊יַ׾׆כ؅澬鏀׌׾ context % kubectl config use-context hatena-intern-2022 % kubectl get pods 

Slide 43

Slide 43 text

Pod services/blog/templates/index.html Pod % kubectl get pods -w % kubectl describe pods 

Slide 44

Slide 44 text

ظفشء # Podͷৄࡉ৘ใͷදࣔɻpod͕ىಈ͠ͳ͍৔߹͸ಛʹ"Events:"ཝʹ஫໨ % kubectl describe pod blog # ωʔϜεϖʔε্ʹ͋ΔϦιʔεͷ৘ใΛදࣔ % kubectl get all # ىಈ͍ͯ͠ΔPodͰγΣϧΛىಈ͢Δ % kubectl exec -it svc/account -c account !" /bin/sh ! ps blog ! wget -q -O - blog:8080 ! nslookup blog 

Slide 45

Slide 45 text

瑬◅鼧 鋗嫎㚺䬵ئ٭لتס鴑ⱶ 

Slide 46

Slide 46 text

renderer services/renderer-ts k s services/renderer-go k8s/renderer-go k8s/renderer-ts 

Slide 47

Slide 47 text

ُؼنؘتع ˝ 鴑ⱶ׌׾ُؼنؘتع ˝ k8s/renderer-ts/kustomization.yaml ˝ k8s/renderer-ts/app.yaml ˝ 稴꥗׌׾ُؼنؘتع ˝ skaffold.yaml ˝ k8s/kustomization.yaml ˝ k8s/blog/kustomization.yaml 

Slide 48

Slide 48 text

ُؼنؘتعס鴑ⱶ % cp -R k8s/renderer-go k8s/renderer-ts % sed -i -e 's/renderer-go/renderer-ts/g' k8s/renderer-ts/*.yaml k8s/renderer-go k8s/ renderer-ts renderer-go renderer-ts 

Slide 49

Slide 49 text

ُؼنؘتعס稴꥗ ska old.yaml apiVersion: skaffold/v2beta5 kind: Config metadata: name: hatena-intern-2021 build: artifacts: # (snip) - image: hatena-intern-2021-renderer-go context: services/renderer-go - image: hatena-intern-2021-renderer-ts # ! context: services/renderer-ts # ! local: # (snip) services/renderer-ts docker k s 

Slide 50

Slide 50 text

ُؼنؘتعס稴꥗ k s/kustomization.yaml apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: hatena-intern-2021 resources: - namespace.yaml - account - blog - renderer-go - renderer-ts # ! 

Slide 51

Slide 51 text

ُؼنؘتعס稴꥗ k s/blog/kustomization.yaml apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization # (snip) configMapGenerator: - name: blog-app-env-vars literals: - MODE=development - DATABASE_DSN=root@(blog-db:3306)/intern_2021_blog?time_zone=UTC&parseTime=true&loc=UTC - ACCOUNT_ADDR=account:50051 - RENDERER_ADDR=renderer-ts:50051 # ! - name: blog-test-env-vars # (snip) blog renderer-go renderer-ts 

Slide 52

Slide 52 text

Pod kubectl get pods Pod kubectl describe pod renderer-ts 

Slide 53

Slide 53 text

renderer-ts kubectl get pods Pod renderer-ts 

Slide 54

Slide 54 text

push push typescript use-renderer-ts-dekokun push ts renderer-ts % git switch -c use-renderer-ts-dekokun % git add k8s/ skaffold.yaml % git commit -m'rendererΛtypescript࣮૷ʹมߋ' % git push origin use-renderer-ts-dekokun 

Slide 55

Slide 55 text

ظ٭ذي٭ت؅釳ַיײ׻ֹ ֽױׄؤ٭ػ٭նؓوٛآ٭ب٘٤ꝧ氦מ䏔מ玮חכ䓙ַױ׌ն % mysql -u root -h 127.0.0.1 -P 3306 intern_2022_blog MySQL [intern_2022_blog]> show tables; +----------------------------+ | Tables_in_intern_2022_blog | +----------------------------+ | blogs | | entries | | sessions | | users | +----------------------------+ MySQL [intern_2022_blog]> select count(*) from blogs; +----------+ | count(*) | +----------+ | 0 | +----------+ 䫘禈ך׀םַ㕙⺬յَ٭عס鬇鴜ֿך׀יַםַ⺎耆䓪ֵֿ׽ױ׌ն♓┖סؤُ٤غךَ٭عنؚ٠٭غ׊יׂד׈ַ # ϙʔτͷసૹ % kubectl port-forward svc/blog-db 3306:3306 

Slide 56

Slide 56 text

ױכ״ kubernetes kubernetes kubernetes Manifest 