AKS で Goldilocks を試してみた
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