Google Kubernetes Engine で実行されている Kubernetes クラスターがあり、GCP Pub/Sub サブスクリプションの未処理のメッセージ数に基づいてデプロイをスケーリングしたいと考えています。custom-metrics-stackdriver-adapter のデプロイを含むこのシナリオを正確にカバーする Google のガイドを見つけて従いました。
ただし、サブスクリプション名の長さが 63 文字を超えているため、実行するkubectl describe hpa <MY_HPA_NAME>
と次のイベントが発生します。
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedGetExternalMetric 12s (x2 over 27s) horizontal-pod-autoscaler invalid label value: "<MY_VERBOSE_SUBSCRIPTION_NAME>": must be no more than 63 characters
Warning FailedComputeMetricsReplicas 12s (x2 over 27s) horizontal-pod-autoscaler failed to get pubsub.googleapis.com|subscription|num_undelivered_messages external metric: invalid label value: "<MY_VERBOSE_SUBSCRIPTION_NAME>": must be no more than 63 characters
HPA をトリガーするメトリックとして 63 文字を超えるサブスクリプション名を使用するにはどうすればよいですか?
追加の質問
公開されているメトリック値を調べてみましたが、Kubernetes カスタム メトリック API にクエリを実行すると、次のようにしてそのメトリックの実際の値を確認できません。
$ kubectl get --raw "http://localhost:8001/apis/custom.metrics.k8s.io/v1beta1/namespaces/*/pods/*/pubsub.googleapis.com|subscription|num_undelivered_messages" | jq .
{
"kind": "MetricValueList",
"apiVersion": "custom.metrics.k8s.io/v1beta1",
"metadata": {
"selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/%2A/pods/%2A/pubsub.googleapis.com%7Csubscription%7Cnum_undelivered_messages"
},
"items": []
}
ただし、ご覧のとおり"items"
、値が記録されていないことを示す空のリストが返されました。これは、すべてのサブスクリプション名の長さが 63 文字を超えているためだと思いました。これをテストするために、非常に短い名前で新しいサブスクリプションを作成し、この新しいサブスクリプションによってトリガーされる HPA を再作成しました。今回、ポッドは実際に期待どおりにスケーリングされましたが、上記のようにカスタム メトリック API をクエリすると、空の"items"
リストが返されました。
その応答 (およびそのラベル) に値が表示されることを期待する必要がありますか? Pod が存在しない場合、Kubernetes はどのようにして Pod をスケーリングできました"items"
か?