🎼

AKS で Goldilocks を試してみた

2022/10/29に公開

CNCF のブログポストにて、コンテナリソースの提言をしてくれるという Goldilocks が紹介されていました。

面白そうだなーと思ったので、AKS で試してみました。

環境・準備

  • Azure Kubernetes Service (v1.24.6)
  • Windows 10
  • Azure CLI (v2.41.0)
  • helm 3

やってみた

VPA を有効にした AKS クラスターの作成

まず、Goldilocks の前提条件に Vertical Pod Autoscaler (VPA) があります。

幸い AKS でもプレビュー提供されており、Kubernetes 1.24 以降の AKS クラスターで利用することができます。

プレビュー機能の有効化

AKS-VPAPreview 機能を有効にします。

az feature register --namespace Microsoft.ContainerService --name AKS-VPAPreview

VPA を有効にした AKS クラスターの作成

クラスター作成時に --enable-vpa を付与すれば良いのですが、バージョンを指定しないとエラーが発生してしまいました。

> az aks create -n <aks-cluster-name> -g <resource-group-name> --enable-vpa
Argument '--enable-vpa' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
The behavior of this command has been altered by the following extension: aks-preview
(BadRequest) Vertical Pod Autoscaler is not supported for the current cluster version. Please upgrade the cluster to version 1.24.0 or above.
Code: BadRequest
Message: Vertical Pod Autoscaler is not supported for the current cluster version. Please upgrade the cluster to version 1.24.0 or above.

クラスターバージョンを明示的に指定してあげれば OK です。

az aks create -n <aks-cluster-name> -g <resource-group-name> --enable-vpa --kubernetes-version 1.24.6

helm および kubectl コマンドを使うので、get-credentials しておきます。

az aks get-credentials -n <aks-cluster-name> -g <resource-group-name>

インストール

公式の手順に沿って、Helm 3 でインストールします。楽ですね!

helm repo add fairwinds-stable https://charts.fairwinds.com/stable
kubectl create namespace goldilocks
helm install goldilocks --namespace goldilocks fairwinds-stable/goldilocks

観測対象の namespace を設定する

ひとまず goldilocks namespace を指定してみます。

kubectl label ns goldilocks goldilocks.fairwinds.com/enabled=true

動作確認してみる

localhost にポートフォワーディングして、ブラウザでアクセスします。

kubectl -n goldilocks port-forward svc/goldilocks-dashboard 8080:80

namespace (goldilocks) を選択すると、このようなダッシュボードが表示されます。

「Guranteed」および「Burstable」として、2 パターンの推奨値が表示されました。

内部実装としては、Goldilocks 独自の判断をしているのではなく、あくまで VPA の VPA Recommender という機能を使っているとのことです。

Goldilocks doesn't do any recommending of resource requests/limits by itself. It utilizes a Kubernetes project called Vertical Pod Autoscaler (VPA). More specifically, it uses the Recommender portion of the VPA.
...
We generate two different QoS classes of recommendation from this

  • For Guaranteed, we take the target field from the recommendation and set that as both the request and limit for that container
  • For Burstable, we set the request as the lowerBound and the limit as the upperBound from the VPA object

なお、「YAML for Recommended Settings」をクリックすると、YAML ファイルの指定例を表示してくれます。

Azure-Vote を対象にしてみる

おなじみ Azure-Vote をデプロイして、対象にしてみました。

kubectl create namespace vote
kubectl apply -f azure-vote.yaml --namespace=vote
kubectl label ns goldilocks goldilocks.fairwinds.com/enabled=true

しばらくしてからアクセスすると、こちらも推奨値が表示されます。面白い!

まとめ

ということで、無事動作確認できました!

しばらく運用すると精度も上がりそうです。

試している間に一回アクセスできなくなり、再度ポートフォワーディングで治りました。
安定性 (品質) は、利用者が増えて改善されると良いですね!

Discussion