Upgrade to Pro — share decks privately, control downloads, hide ads and more …

はてなリモートインターンシップ2022 Kubernetes 講義資料

Hatena
December 19, 2022

はてなリモートインターンシップ2022 Kubernetes 講義資料

https://hatena.co.jp/recruit/intern/2022

ハンズオンで利用した Kubernetes 環境は https://github.com/hatena/Hatena-Intern-Kubernetes-Microservice にあります。

Hatena

December 19, 2022
Tweet

More Decks by Hatena

Other Decks in Programming

Transcript

  1. Kubernetes
    #hatenaintern

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  5. Kubernetes 1
    kubernetes

    View Slide

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

    View Slide

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

    View Slide

  8. Kubernetes

    View Slide

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

    View Slide

  10. Pod
    Pod 1
    

    View Slide

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

    View Slide

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

    View Slide

  13. Kubernetes
    

    View Slide

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

    View Slide

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

    View Slide

  16. Workloads
    Deployment
    Replicaset
    

    View Slide

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

    View Slide

  18. Service
    Pod
    Service
    L
    Ingress
    L
    

    View Slide

  19. kubernetes
    Pod localhost
    Pod Pod IP
    pod IP IP
    Pod IP Pod IP
    Pod
    pod
    

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. ٛخ٭ت⯆꡾
    Pod CPU
    Pod
    

    View Slide

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

    View Slide

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

    View Slide

  28. ⺎榫䓪
    Replicaset
    Manifest
    Node Pod Node
    

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  34. Kubernetes
    

    View Slide

  35. ؓةؘ٤ر
    Hatena-Intern-
    

    View Slide

  36. 瑬┉鼧
    Hatena-Intern-
    

    View Slide

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

    View Slide

  38. ئ٭لتס啶䡗
    

    View Slide

  39. ُؼنؘتعס啶䡗
    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
    

    View Slide

  40. 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
    

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  44. ظفشء
    # 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
    

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  48. ُؼنؘتعס鴑ⱶ
    % 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
    

    View Slide

  49. ُؼنؘتعס稴꥗
    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
    

    View Slide

  50. ُؼنؘتعס稴꥗
    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 #
    !
    

    View Slide

  51. ُؼنؘتعס稴꥗
    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
    

    View Slide

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

    View Slide

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

    View Slide

  54. 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
    

    View Slide

  55. ظ٭ذي٭ت؅釳ַיײ׻ֹ
    ֽױׄؤ٭ػ٭նؓوٛآ٭ب٘٤ꝧ氦מ䏔מ玮חכ䓙ַױ׌ն
    % 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
    

    View Slide

  56. ױכ״
    kubernetes
    kubernetes
    kubernetes
    Manifest
    

    View Slide