LoginSignup
4

More than 5 years have passed since last update.

GKEがVertical Pod Autoscalerに対応したらしいので調査した

Last updated at Posted at 2018-12-09

そもそもVPAってなに?

Vertical Pod Autoscaler 略してVPA
resources requests の値を良い感じに管理してくれるらしい。
僕はresources requests の値を決めるとき、 kubectl top から得た値に
多少バッファをもたせたものを採用してました。
そういう煩わしいことをしなくてもよくなるのはとても魅力的です。

詳しくはチェシャ猫さんが解説してます
http://ccvanishing.hateblo.jp/entry/2018/10/02/203205

導入方法

clusterを作る場合

gcloud beta container clusters create [CLUSTER_NAME] --enable-vertical-pod-autoscaling

clusterがすでに作られている場合

gcloud beta container clusters update [CLUSTER-NAME] --enable-vertical-pod-autoscaling

でVPAは有効になる。
https://cloud.google.com/kubernetes-engine/docs/how-to/vertical-pod-autoscaling

ちなみに対象のcluster versionは
1.11.3-gke.11 and higher
なので注意。

今回の構成

  • node
    • 1つ
  • インスタンスサイズ
    • n1-standard-1

nginx.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx
  labels:
    purpose: vpa
spec:
  template:
    metadata:
      labels:
        purpose: vpa
    spec:
      containers:
      - name: nginx-test
        image: nginx
        resources:
          requests:
            cpu: 50m
          limits:
            cpu: 100m

vpa.yaml

apiVersion: autoscaling.k8s.io/v1beta1
kind: VerticalPodAutoscaler
metadata:
  name: test-vpa
spec:
  selector:
    matchLabels:
      purpose: vpa
  updatePolicy:
    updateMode: "Auto"

vpa -> deployment の順番でapplyを行い、VPAが起動できているか調査

kubectl get pod -o yaml
(省略)
  spec:
    containers:
    - image: nginx
      imagePullPolicy: Always
      name: nginx-test
      resources:
        limits:
          cpu: 100m
        requests:
          cpu: 50m
kubectl describe vpa
(省略)
  Recommendation:
    Container Recommendations:
      Container Name:  nginx-test
      Lower Bound:
        Cpu:     12m
        Memory:  131072k
      Target:
        Cpu:     12m
        Memory:  131072k
      Uncapped Target:
        Cpu:     12m
        Memory:  131072k
      Upper Bound:
        Cpu:           3179m
        Memory:        3323500k
kubectl top pod
NAME                    CPU(cores)   MEMORY(bytes)
nginx-cc4d69bc9-297jg   0m           1Mi

無事、VPAに推奨値が反映されてることが確認できた。

deploymentをdelete->applyを行い、VPAの推奨値が反映されているか調査

kubectl get po -o yaml
(省略)
  spec:
    containers:
    - image: nginx
      imagePullPolicy: Always
      name: nginx-test
      resources:
        limits:
          cpu: 100m
        requests:
          cpu: 50m
          memory: 131072k
kubectl describe vpa
(省略)
  Recommendation:
    Container Recommendations:
      Container Name:  nginx-test
      Lower Bound:
        Cpu:     12m
        Memory:  131072k
      Target:
        Cpu:     12m
        Memory:  131072k
      Uncapped Target:
        Cpu:     12m
        Memory:  131072k
      Upper Bound:
        Cpu:     2273m
        Memory:  2377214285

requests cpu12mであることを期待してたのですが、 nginx.yaml に定義されてるものと
変わっていません。
Admission Controller が働いてないのか…?と思うものの nginx.yaml には書き込まれてない
requestsのmemoryは書き込まれているのでバグなのかな?

なんとしてでもrequestsの値をVPAが表示している値にする方法

VPAが表示している値より低い値でapplyすると書き換えられました。

CPU使用率を思いっきり上げVPAに反映されるか調査

yes > /dev/null &
https://techblog.ap-com.co.jp/entry/linux-cpu

を実行し、何分後にVPAに反映されるか調べた。

1分後

NAME                     CPU(cores)   MEMORY(bytes)
nginx-cc4d69bc9-297jg   100m         3Mi
kubectl describe vpa
(省略)
  Recommendation:
    Container Recommendations:
      Container Name:  nginx-test
      Lower Bound:
        Cpu:     12m
        Memory:  131072k
      Target:
        Cpu:     12m
        Memory:  131072k
      Uncapped Target:
        Cpu:     12m
        Memory:  131072k
      Upper Bound:
        Cpu:     2273m
        Memory:  2377214285

3分後

NAME                     CPU(cores)   MEMORY(bytes)
nginx-cc4d69bc9-297jg   100m         3Mi
  Recommendation:
    Container Recommendations:
      Container Name:  nginx-text
      Lower Bound:
        Cpu:     9m
        Memory:  87381333
      Target:
        Cpu:     126m
        Memory:  87381333
      Uncapped Target:
        Cpu:     126m
        Memory:  87381333
      Upper Bound:
        Cpu:     7383m
        Memory:  673899999

3分ぐらいでVPAに反映されるのが確認できた。

正直わからなかったこと

Updaterの挙動が見られなかった。
推奨値のレンジから外れているPodを数十分起動させてるわけではなかったので、
僕の忍耐が足りなかっただけかもしれない。

調査してみて思ったこと

betaで公開されたばかりなので、こんなもんかなという印象。
これからに期待したいけどVPA自体まだbetaになってないのですね。
この記事書いてるときに気づきました。
https://github.com/kubernetes/enhancements/issues/21

自プロダクトへのproductionに導入はまだまだ先だな〜と思うけど、便利な機能なのでバージョンアップがあれば追っていきたい。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4