Slide 1

Slide 1 text

KubeConEU 2019 Recap Restart-Free Vertical Scaling for Kubernetes Pods Resize Your Pods w/o Disruptions aka How to Have a Cake and Eat a Cake Kuberentes Meetup Tokyo #20 / June 18, 2019 Shunya Murata @shmurata_

Slide 2

Slide 2 text

Shunya Murata/ @shmurata_ ▶ ゼットラボ株式会社 ソフトウェアエンジニア ▶ 対外的な主な取り組み + ThirdPartyResourceを使ったKubernetes as a Serviceの実装 + Kubernetes Meetup Tokyo#3 + Kubernetes実践⼊⾨ 2

Slide 3

Slide 3 text

▶ アジェンダ 1. VerticalPodAutoscaler の現状  2. セッションの紹介 3. 弊社でのVPAの利⽤事例 4. まとめ 3

Slide 4

Slide 4 text

VerticalPodAutoscalerの現状

Slide 5

Slide 5 text

▶ pod.spec.resource.requests ▶ Podが使⽤するリソース量を指定して予約 することができる + この値を元にSchedulerがいいかんじ にNodeにPodをスケジュールする ▶ この指定は多くても少なくてもダメ 5 apiVersion: apps/v1 kind: Pod spec: containers: - image: nginx name: nginx resources: requests: cpu: 100m memory: 256Mi

Slide 6

Slide 6 text

▶ VerticalPodAutoscaler ▶ Podの垂直スケールを⾃動的に⾏う ための仕組み + 実際のリソース利⽤率から値を計 算してresource.requestsを設定す る ▶ 現在(2019/6/18時点)は v0.5.1 が最新 + beta フェーズ 6 apiVersion: autoscaling.k8s.io/v1beta2 kind: VerticalPodAutoscaler spec: targetRef: apiVersion: apps/v1 kind: Deployment name: nginx updatePolicy: updateMode: "Auto"

Slide 7

Slide 7 text

▶ VerticalPodAutoscalerの構成と動き 7 VPA recommender VPA updater VPA Admission Plugin metrics server 1.collect metrics 2. update VPA status 3. watch VPA status and Pod 4. evict pod 5. update resource.requests

Slide 8

Slide 8 text

▶ VerticalPodAutoscalerの課題 ▶ resource.requestsの変更をする場合にPodの再起動が必要 + 再起動なしにresource.requestを変更する仕様が検討されている + in-place update 8

Slide 9

Slide 9 text

KubeConEU2019セッションの紹介

Slide 10

Slide 10 text

▶ https://static.sched.com/hosted_files/kccnceu19/31/RestartFreeVerticalScaling.pdf 10

Slide 11

Slide 11 text

▶ https://static.sched.com/hosted_files/kccnceu19/cf/Cake%20presentation.pdf 11

Slide 12

Slide 12 text

弊社での取り組み

Slide 13

Slide 13 text

▶ Background ▶ Kubernetes クラスタ: 200+ + クラスタごとにNode flavorや数が異なる ▶ すべてのクラスタに共通でデプロイするアドオンがある + CoreDNS, IngressController, metrics-server, Prometheus,Grafana, 13

Slide 14

Slide 14 text

▶ Problem ▶ アドオンのresource.requestの設定が難しい + クラスタの規模やユーザの利⽤⽅法によって必要な量が異なる + クラスタの規模についてはaddon-resizerで対応できるが… + https://github.com/kubernetes/autoscaler/tree/master/addon-resizer 14

Slide 15

Slide 15 text

▶ Try 15 ઃఆมߋ

Slide 16

Slide 16 text

▶ Feedback ▶ VerticalPodAutoscaler + resource.requests変更時に再起動が必要 + データを保持していないアドオンは問題ないがデータを保持しているアド オンが問題 + Prometheusはローカルにデータを持っているため再起動するとメトリクス をロスト + PersistentVolumeは様々な事情によってまだ導⼊できていない + UpdateMode: Initial で回避 16

Slide 17

Slide 17 text

▶ in-place update のその後 ▶ Migrate Karol Golab's KEP for in-place update of pod resources to k/ enhancements + https://github.com/kubernetes/enhancements/pull/686 17

Slide 18

Slide 18 text

▶ まとめ ▶ VPAの概要と現状 ▶ in-place updateの対応 ▶ 弊社でVPAを採⽤しようとしている事例 18

Slide 19

Slide 19 text

Fin.