0

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"か?

4

1 に答える 1

1

kubernetesの設計ドキュメントは次のとおりです。ラベル名を短くする以外に制限を回避する方法はありません。

rfc1035/rfc1123 ラベル (DNS_LABEL): 英数字 (az、および 0-9) の文字列で、最大長は 63 文字で、「-」文字は最初または最後の文字以外のどこでも使用できます。ホスト名としての使用に適しています。ドメイン名のセグメント。

メトリック アイテムについては、カスタム メトリック API ではなく、外部メトリック API を確認してください。

$ kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1" | jq

https://itnext.io/google-kubernetes-engine-horizo​​ntalpodautoscaler-with-external-metrics-from-pubsub-28780c300305

于 2020-03-14T12:29:46.500 に答える