Container Service for Kubernetes (ACK) クラスターに垂直ポッド自動スケーラーコンポーネントをデプロイできます。 vertical-pod-autoscalerは、ポッドの垂直自動スケーリングを可能にする垂直ポッドオートスケーラー (VPA) です。 vertical-pod-autoscalerは、クラスター内のポッドのリソース使用量に基づいて、クラスターのリソース使用量の制限を自動的に設定します。 このように、ACKは十分なリソースを持つノードにポッドをスケジュールできます。 vertical-pod-autoscalerは、初期コンテナー設定で指定したリソース制限に対するリソース要求の比率も維持します。 このトピックでは、YAMLファイルを使用して垂直ポッドの自動スケーリングを有効にする方法について説明します。
前提条件
次の操作が完了していることを確認します。
ACKクラスターが作成され、Kubernetesのバージョンが1.12以降です。 詳細については、「ACK管理クラスターの作成」をご参照ください。
コマンドラインツールがクラスターに接続されています。 詳細については、「」をご参照ください。クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続します。
vertical-pod-autoscalerがクラスターからアンインストールされます。 これにより、新しいバージョンのvertical-pod-autoscalerをデプロイするときの競合が回避されます。
背景情報
縦型ポッドの自動スケーリングはテスト中です。 この機能を使用するときは注意してください。
垂直ポッド自動スケーラーを使用して、実行中のポッドのリソース設定を更新できます。 この機能はテスト中です。 構成の更新はポッドの再起動と再作成につながり、ポッドは他のノードにスケジュールされる可能性があります。
vertical-pod-autoscalerは、レプリケーションコントローラーで管理されていないポッドを削除しません。 これらのポッドの場合、自動モードは初期モードと同等です。
vertical-pod-autoscalerとHorizontal Pod Autoscaler (HPA) を同時に実行することはできません。 HPAは、CPUおよびメモリメトリックを監視する。 HPAがCPUおよびメモリメトリクス以外のカスタムまたは外部リソースメトリクスのみを監視する場合は、HPAと組み合わせてvertical-pod-autoscalerを使用できます。
vertical-pod-autoscalerは、アドミッションコントローラーとしてアドミッションwebhookを使用します。 クラスターに他のアドミッションWebフックが存在する場合は、アドミッションWebフックがvertical-pod-autoscalerのアドミッションWebフックと競合しないようにしてください。 アドミッションコントローラの実行シーケンスは、APIサーバのパラメータにおいて定義される。
vertical-pod-autoscalerはほとんどのメモリ不足 (OOM) イベントを処理できますが、特定のシナリオではOOMイベントを処理できない場合があります。
垂直ポッド自動スケーラーのパフォーマンスは、大規模なクラスターではテストされません。
vertical-pod-autoscalerによって変更されたポッドリソース要求は、ノードリソース、アイドルリソース、およびリソース割り当てを含む実際のリソースの上限を超える場合があります。 この場合、ポッドはPending状態に入り、スケジュールに失敗する可能性があります。 クラスター自動スケーラーを使用して、この問題の影響を軽減できます。
複数の垂直ポッド自動スケーラーコンポーネントがポッドのリソース使用量を同時に監視する場合、未定義の動作が発生する可能性があります。
vertical-pod-autoscalerのインストール
次のコマンドを実行して、ロールベースのアクセス制御 (RBAC) 権限ファイルを作成します。
kubectl apply -f rbac.yaml
クリックして詳細を表示
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole メタデータ: name: system:metrics-reader ルール: - apiGroups: - "metrics.k8s.io" リソース: -ポッド verbs: - get -リスト --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole メタデータ: 名前: system:vpa-actor ルール: -apiGroups: - "" リソース: -ポッド -ノード -limitranges verbs: -取得 -リスト - watch - apiGroups: - "" resources: -イベント verbs: - get - list - watch - create - apiGroups: -"poc.autoscaling.k8s.io" resources: -verticalpodautoscalers verbs: - get - list -ウォッチ - patch - apiGroups: - "autoscaling.k8s.io" resources: -verticalpodautoscalers verbs: - get - list - watch -パッチ --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole メタデータ: 名前: system:vpa-checkpoint-actor ルール: - apiGroups: -"poc.autoscaling.k8s.io" resources: -verticalpodautoscalercheckpoints verbs: - get - list - watch - create - patch -削除 - apiGroups: - "autoscaling.k8s.io" resources: -verticalpodautoscalercheckpoints verbs: - get - list - watch - create - patch -削除 - apiGroups: - "" resources: - namespaces verbs: - get -リスト --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole メタデータ: 名前: system:evictioner ルール: - apiGroups: -「アプリ」 -"extensions" resources: -replicasets verbs: - get - apiGroups: - "" resources: -ポッド /退去 verbs: -作成 --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding メタデータ: name: system:metrics-reader roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:metrics-reader 主題: - kind: ServiceAccount 名前: vpa-recommender 名前空間: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding メタデータ: 名前: system:vpa-actor roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole 名前: system:vpa-actor 主題: - kind: ServiceAccount 名前: vpa-recommender namespace: kube-system - kind: ServiceAccount 名前: vpa-updater 名前空間: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding メタデータ: 名前: system:vpa-checkpoint-actor roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole 名前: system:vpa-checkpoint-actor 主題: - kind: ServiceAccount 名前: vpa-recommender 名前空間: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole メタデータ: name: system:vpa-target-reader ルール: - apiGroups: - '*' resources: -'*/scale' verbs: - get - watch - apiGroups: - "" resources: -replicationcontrollers verbs: - get - list - watch - apiGroups: -アプリ resources: -daemonsets -デプロイメント -replicasets -statefulsets verbs: - get - list - watch - apiGroups: -バッチ resources: -ジョブ -cronjobs verbs: - get - list -ウォッチ --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding メタデータ: name: system:vpa-target-reader-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:vpa-target-reader 主題: - kind: ServiceAccount 名前: vpa-recommender namespace: kube-system - kind: ServiceAccount 名前: vpa-admission-controller namespace: kube-system - kind: ServiceAccount 名前: vpa-updater 名前空間: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding メタデータ: name: system:vpa-evictioner-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole 名前: system:evictioner 主題: - kind: ServiceAccount 名前: vpa-updater 名前空間: kube-system --- apiVersion: v1 kind: ServiceAccount メタデータ: 名前: vpa-admission-controller 名前空間: kube-system --- apiVersion: v1 kind: ServiceAccount メタデータ: 名前: vpa-recommender 名前空間: kube-system --- apiVersion: v1 kind: ServiceAccount メタデータ: 名前: vpa-updater 名前空間: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole メタデータ: 名前: system:vpa-admission-controller ルール: - apiGroups: - "" resources: -ポッド - configmaps -ノード -limitranges verbs: - get - list - watch - apiGroups: - "admissionregistration.k8s.io" resources: -mutatingwebhookconfigurations verbs: - create -削除 - get - list - apiGroups: -"poc.autoscaling.k8s.io" resources: -verticalpodautoscalers verbs: - get - list - watch - apiGroups: - "autoscaling.k8s.io" resources: -verticalpodautoscalers verbs: - get - list - watch - apiGroups: - "coordination.k8s.io" resources: -リース verbs: - create - update - get - list -ウォッチ --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding メタデータ: 名前: system:vpa-admission-controller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole 名前: system:vpa-admission-controller 主題: - kind: ServiceAccount 名前: vpa-admission-controller 名前空間: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole メタデータ: name: system:vpa-status-reader ルール: - apiGroups: - "coordination.k8s.io" resources: -リース verbs: - get - list -ウォッチ --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding メタデータ: name: system:vpa-status-reader-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:vpa-status-reader 主題: - kind: ServiceAccount 名前: vpa-updater 名前空間: kube-system
次のコマンドを実行して、vertical-pod-autoscaler用のCustomResourceDefinition (CRD) を作成します。
CRDは、ACKクラスタのスケーラビリティを改善する。 詳細については、「CustomResourceDefinitionsによるKubernetes APIの拡張」をご参照ください。
kubectl apply -f crd.yaml
Kubernetesバージョンが1.22より前のクラスター用のcrd.yamlテンプレート
apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition メタデータ: 名前: verticalpodautoscalers.autoscaling.k8s.io アノテーション: "api-approved.kubernetes.io": " https://github.com/kubernetes/kubernetes/pull/63797 " spec: グループ: autoscaling.k8s.io scope: 名前付き 名前: 複数形: verticalpodautoscalers 単数: verticalpodautoscaler kind: VerticalPodAutoscaler shortNames: -vpa version: v1beta1 バージョン: -name: v1beta1 served: false storage: false -name: v1beta2 サーブ: true ストレージ: true -name: v1 サーブ: true storage: false 検証: # openAPIV3Schemaは、カスタムオブジェクトを検証するためのスキーマです。 openAPIV3Schema: type: object プロパティ: 仕様: type: object 必須: [] プロパティ: targetRef: type: object updatePolicy: type: object プロパティ: updateMode: タイプ: string resourcePolicy: type: object プロパティ: containerPolicies: タイプ: 配列 items: type: object プロパティ: containerName: タイプ: string controlledValues: タイプ: string enum: ["RequestsAndLimits", "RequestsOnly"] モード: タイプ: string enum: ["Auto", "Off"] minAllowed: type: object maxAllowed: type: object controlledResources: タイプ: 配列 items: タイプ: string enum: ["cpu", "memory"] --- apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition メタデータ: 名前: verticalpodautoscalercheckpoints.autoscaling.k8s.io アノテーション: "api-approved.kubernetes.io": " https://github.com/kubernetes/kubernetes/pull/63797 " spec: グループ: autoscaling.k8s.io scope: 名前付き 名前: 複数: verticalpodautoscalercheckpoints 単数形: verticalpodautoscalercheckpoint kind: VerticalPodAutoscalerCheckpoint shortNames: -vpacheckpoint version: v1beta1 バージョン: -name: v1beta1 served: false storage: false -name: v1beta2 サーブ: true ストレージ: true -name: v1 サーブ: true storage: false
Kubernetesバージョンが1.22以降のクラスターのcrd.yamlテンプレート
apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition メタデータ: アノテーション: api-approved.kubernetes.io: https://github.com/kubernetes/kubernetes/pull/63797 controller-gen.kubebuilder.io /バージョン: v0.9.2 creationTimestamp: null 名前: verticalpodautoscalercheckpoints.autoscaling.k8s.io spec: グループ: autoscaling.k8s.io 名前: kind: VerticalPodAutoscalerCheckpoint listKind: VerticalPodAutoscalerCheckpointList 複数: verticalpodautoscalercheckpoints shortNames: -vpacheckpoint 単数形: verticalpodautoscalercheckpoint scope: 名前付き バージョン: -name: v1 スキーマ: openAPIV3Schema: 説明: VerticalPodAutoscalerCheckpointは内部のチェックポイントです。 recommenderの再起動後にリカバリに使用されるVPAの状態。 プロパティ: apiVersion: 説明: 'APIVersionは、この表現のバージョン管理されたスキーマを定義します。 オブジェクトの サーバーは認識されたスキーマを最新のものに変換する必要があります 認識されない値を拒否する場合があります。 詳細: https:// git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' タイプ: string kind: description: 'KindはRESTリソースを表す文字列値です。 オブジェクトはを表します。 サーバーは、クライアントのエンドポイントからこれを推測する可能性があります にリクエストを送信します。 更新できません。 キャメルケースで。 詳細: https:// git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' タイプ: string metadata: type: object 仕様: description: 'チェックポイントの仕様。 詳細: https:// git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status。 プロパティ: containerName: description: チェックポイントされたコンテナの名前。 タイプ: string vpaObjectName: description: VerticalPodAutoscalerCheckpointを格納したVPAオブジェクトの名前 オブジェクトを作成します。 タイプ: string type: object 状態: description: チェックポイントのデータ。 プロパティ: cpuHistogram: 説明: CPU消費量のヒストグラムのチェックポイント。 プロパティ: bucketWeights: 説明: バケットインデックスからバケット重量へのマップ。 type: object x-kubernetes-preserve-unknown-fields: true referenceTimestamp: description: 内で収集されたサンプルの参照タイムスタンプ このヒストグラム。 形式: date-time nullable: true タイプ: string totalWeight: description: 重みの分母として使用されるサンプルの合計 BucketWeightsから。 タイプ: 番号 type: object firstSampleStart: description: ヒストグラムからの最初のサンプルのタイムスタンプ。 形式: date-time nullable: true タイプ: string lastSampleStart: description: ヒストグラムの最後のサンプルのタイムスタンプ。 形式: date-time nullable: true タイプ: string lastUpdateTime: description: ステータスが最後に更新された時刻。 形式: date-time nullable: true タイプ: string memoryHistogram: description: メモリ消費のヒストグラムのチェックポイント。 プロパティ: bucketWeights: 説明: バケットインデックスからバケット重量へのマップ。 type: object x-kubernetes-preserve-unknown-fields: true referenceTimestamp: description: 内で収集されたサンプルの参照タイムスタンプ このヒストグラム。 形式: date-time nullable: true タイプ: string totalWeight: description: 重みの分母として使用されるサンプルの合計 BucketWeightsから。 タイプ: 番号 type: object totalSamplesCount: description: ヒストグラム内のサンプルの総数。 タイプ: integer version: description: 保存されているデータの形式のバージョン。 タイプ: string type: object type: object サーブ: true ストレージ: true -name: v1beta2 スキーマ: openAPIV3Schema: 説明: VerticalPodAutoscalerCheckpointは内部のチェックポイントです。 recommenderの再起動後にリカバリに使用されるVPAの状態。 プロパティ: apiVersion: 説明: 'APIVersionは、この表現のバージョン管理されたスキーマを定義します。 オブジェクトの サーバーは認識されたスキーマを最新のものに変換する必要があります 認識されない値を拒否する場合があります。 詳細: https:// git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' タイプ: string kind: description: 'KindはRESTリソースを表す文字列値です。 オブジェクトはを表します。 サーバーは、クライアントのエンドポイントからこれを推測する可能性があります にリクエストを送信します。 更新できません。 キャメルケースで。 詳細: https:// git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' タイプ: string metadata: type: object 仕様: description: 'チェックポイントの仕様。 詳細: https:// git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status。 プロパティ: containerName: description: チェックポイントされたコンテナの名前。 タイプ: string vpaObjectName: description: VerticalPodAutoscalerCheckpointを格納したVPAオブジェクトの名前 オブジェクトを作成します。 タイプ: string type: object 状態: description: チェックポイントのデータ。 プロパティ: cpuHistogram: 説明: CPU消費量のヒストグラムのチェックポイント。 プロパティ: bucketWeights: 説明: バケットインデックスからバケット重量へのマップ。 type: object x-kubernetes-preserve-unknown-fields: true referenceTimestamp: description: 内で収集されたサンプルの参照タイムスタンプ このヒストグラム。 形式: date-time nullable: true タイプ: string totalWeight: description: 重みの分母として使用されるサンプルの合計 BucketWeightsから。 タイプ: 番号 type: object firstSampleStart: description: ヒストグラムからの最初のサンプルのタイムスタンプ。 形式: date-time nullable: true タイプ: string lastSampleStart: description: ヒストグラムの最後のサンプルのタイムスタンプ。 形式: date-time nullable: true タイプ: string lastUpdateTime: description: ステータスが最後に更新された時刻。 形式: date-time nullable: true タイプ: string memoryHistogram: description: メモリ消費のヒストグラムのチェックポイント。 プロパティ: bucketWeights: 説明: バケットインデックスからバケット重量へのマップ。 type: object x-kubernetes-preserve-unknown-fields: true referenceTimestamp: description: 内で収集されたサンプルの参照タイムスタンプ このヒストグラム。 形式: date-time nullable: true タイプ: string totalWeight: description: 重みの分母として使用されるサンプルの合計 BucketWeightsから。 タイプ: 番号 type: object totalSamplesCount: description: ヒストグラム内のサンプルの総数。 タイプ: integer version: description: 保存されているデータの形式のバージョン。 タイプ: string type: object type: object サーブ: true storage: false --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition メタデータ: アノテーション: api-approved.kubernetes.io: https://github.com/kubernetes/kubernetes/pull/63797 controller-gen.kubebuilder.io /バージョン: v0.9.2 creationTimestamp: null 名前: verticalpodautoscalers.autoscaling.k8s.io spec: グループ: autoscaling.k8s.io 名前: kind: VerticalPodAutoscaler listKind: VerticalPodAutoscalerList 複数形: verticalpodautoscalers shortNames: -vpa 単数: verticalpodautoscaler scope: 名前付き バージョン: -additionalPrinterColumns: -jsonPath: 。spec.updatePolicy.updateMode name: モード タイプ: string -jsonPath: 。status.recommendation.containerRecommendations[0].tar get.cpu 名前: CPU タイプ: string -jsonPath: 。status.recommendation.containerRecommendations[0].tar get.memory 名前: Mem タイプ: string -jsonPath: 。status.conditions[?(@.type=='RecommendationProvided')].status 名前: 提供 タイプ: string -jsonPath: 。metadata.creationTimestamp 名前: Age タイプ: 日付 名前: v1 スキーマ: openAPIV3Schema: 説明: VerticalPodAutoscalerは垂直ポッドの構成です 履歴に基づいてポッドリソースを自動的に管理するautoscaler そしてリアルタイムのリソース利用。 プロパティ: apiVersion: 説明: 'APIVersionは、この表現のバージョン管理されたスキーマを定義します。 オブジェクトの サーバーは認識されたスキーマを最新のものに変換する必要があります 認識されない値を拒否する場合があります。 詳細: https:// git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' タイプ: string kind: description: 'KindはRESTリソースを表す文字列値です。 オブジェクトはを表します。 サーバーは、クライアントのエンドポイントからこれを推測する可能性があります にリクエストを送信します。 更新できません。 キャメルケースで。 詳細: https:// git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' タイプ: string metadata: type: object 仕様: description: 'オートスケーラの動作の仕様。 より多くの情報: https:// git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status。 プロパティ: recommenders: description: レコメンデーションの生成を担当するRecommender このオブジェクトの リストは空にする必要があります (デフォルトのレコメンダ はレコメンデーションを生成するか、正確に1つのレコメンダを含みます。 items: 説明: VerticalPodAutoscalerRecommenderSelectorは 特定の垂直ポッドAutoscalerリコメンダー。 将来的には すなわち、パラメータをレコメンダに渡すことができる。 プロパティ: 名前: description: 生成を担当するrecommenderの名前 このオブジェクトの推奨。 タイプ: string required: -name type: object タイプ: 配列 resourcePolicy: 説明: 自動スケーラーが推奨リソースを計算する方法を制御します。 リソースポリシーを使用して、推奨事項に制約を設定できます。 個々の容器のため。 指定しない場合、autoscalerは 追加なしで、ポッド内のすべてのコンテナに推奨されるリソース を使用します。 プロパティ: containerPolicies: description: コンテナーごとのリソースポリシー。 items: 説明: ContainerResourcePolicyが自動スケーラーの制御方法 は、特定のコンテナの推奨リソースを計算します。 プロパティ: containerName: 説明: コンテナーまたはDefaultContainerResourcePolicyの名前、 この場合、ポリシーは、 独自のポリシーを指定していません。 タイプ: string controlledResources: description: 推奨のタイプを指定します。 はVPAによって計算されます (場合によっては適用されます) 。 そうでない場合 指定されたデフォルトの [ResourceCPU, ResourceMemory] は使用されます。 items: description: ResourceNameは、さまざまなものを識別する名前です。 ResourceList内のリソース。 タイプ: string タイプ: 配列 controlledValues: description: 制御するリソース値を指定します。 デフォルトは "RequestsAndLimits" です。 enum: -RequestsAndLimits -RequestsOnly タイプ: string maxAllowed: additionalProperties: anyOf: -type: 整数 -type: 文字列 パターン: ^(\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))((([KMGTPE]i)|[numkMGTPE]|([eE](\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))?$ x-kubernetes-int-or-string: true 説明: リソースの最大量を指定します。 コンテナにお勧めします。 デフォルトは 最大値なし。 type: object minAllowed: additionalProperties: anyOf: -type: 整数 -type: 文字列 パターン: ^(\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))((([KMGTPE]i)|[numkMGTPE]|([eE](\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))?$ x-kubernetes-int-or-string: true 説明: リソースの最小量を指定します。 コンテナにお勧めします。 デフォルトは 最小値なし。 type: object モード: description: コンテナーに対してautoscalerが有効になっているかどうか。 デフォルトは "Auto" です。 enum: -オート -「オフ」 タイプ: string type: object タイプ: 配列 type: object targetRef: 説明: TargetRefは、のセットを管理するコントローラを指します。 自動スケーラーが制御するポッド (Deployment、StatefulSetなど) 。 VerticalPodAutoscalerは、コントローラの実装をターゲットにできます scaleサブリソース (ポッドセットはコントローラの ScaleStatusまたはいくつかのよく知られているコントローラ (例: DaemonSet用) ポッドセットはコントローラの仕様から読み取られます。 VerticalPodAutoscalerの場合 指定されたターゲットを使用できませんConfigUnsupported条件を報告します。 VerticalPodAutoscalerは完全な実装を必要としないことに注意してください スケールサブリソースの-レプリカの変更には使用されません 推奨します。 取得される唯一のものは、ポッドに一致するラベルセレクターです ターゲットリソースごとにグループ化されます。 プロパティ: apiVersion: description: 参照先のAPIバージョン タイプ: string kind: 説明: '参照先の種類; 詳細: https:// git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds "' タイプ: string 名前: 説明: 'Name of the referent; 詳細: http:// kubernetes.io/docs/user-guide/identifiers#names' タイプ: string required: -種類 -name type: object x-kubernetes-map-type: atomic updatePolicy: 説明: 変更がどのように適用されるかに関するルールについて説明します。 ポッド。 指定しない場合、「PodUpdatePolicy」のすべてのフィールドは をデフォルト値に設定します。 プロパティ: minReplicas: description: 生きている必要があるレプリカの最小数 のような他のチェック保留中のアップデータ PDB) 。 正の値のみが許可されます。 global '-- min-replicas' をオーバーライドします。 フラグを設定します。 形式: int32 タイプ: integer updateMode: 説明: autoscalerがポッドに変更を適用するときのコントロール 表します。 デフォルトは「自動」です。 enum: -「オフ」 -初期 -再作成 -オート タイプ: string type: object required: -targetRef type: object 状態: description: autoscalerに関する現在の情報。 プロパティ: 条件: 説明: 条件は、これに必要な条件のセットです autoscalerはターゲットをスケーリングし、それらかどうかを示します 条件が満たされます。 items: description: VerticalPodAutoscalerConditionは状態を説明します。 ある時点でVerticalPodAutoscalerの プロパティ: lastTransitionTime: description: lastTransitionTimeは条件の最後の時間です あるステータスから別のステータスに移行 形式: date-time タイプ: string message: description: メッセージは、を含む人間が読める説明です 移行に関する詳細 タイプ: string 理由: description: reasonは、条件の最後の遷移の理由です。 タイプ: string ステータス: description: statusは条件のステータスです (True、False、 不明) タイプ: string type: description: typeは現在の条件を説明します タイプ: string required: - status -タイプ type: object タイプ: 配列 おすすめ: description: 最も最近計算されたリソースの推奨量 制御されているポッドのautoscalerによって プロパティ: containerRecommendations: 説明: 各自動スケーラーが推奨するリソース コンテナーを使用します。 items: 説明: RecommendedContainerResourcesは推奨です 特定のコンテナに対してautoscalerによって計算されたリソースの 仕様にコンテナリソースポリシーが存在する場合は、 特に推奨は容器のために作り出されません 'ContainerScalingMode' が 'Off' に設定されています。 プロパティ: containerName: description: コンテナーの名前。 タイプ: string lowerBound: additionalProperties: anyOf: -type: 整数 -type: 文字列 パターン: ^(\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))((([KMGTPE]i)|[numkMGTPE]|([eE](\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))?$ x-kubernetes-int-or-string: true description: リソースの最小推奨量。 観察 ContainerResourcePolicy。 この金額は保証されていません アプリケーションが安定した状態で動作するのに十分であること ただし、より少ないリソースで実行すると、 パフォーマンス /可用性に大きな影響を与えます。 type: object ターゲット: additionalProperties: anyOf: -type: 整数 -type: 文字列 パターン: ^(\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))((([KMGTPE]i)|[numkMGTPE]|([eE](\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))?$ x-kubernetes-int-or-string: true description: リソースの推奨量。 ContainerResourcePolicyを観察します。 type: object uncappedTarget: additionalProperties: anyOf: -type: 整数 -type: 文字列 パターン: ^(\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))((([KMGTPE]i)|[numkMGTPE]|([eE](\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))?$ x-kubernetes-int-or-string: true description: 最新の推奨リソースターゲット に基づいて、制御されたポッドの自動スケーラーによって計算されます。 実際のリソース使用量のみ、考慮しない ContainerResourcePolicy。 推奨事項と異なる場合があります 実際のリソース使用によりターゲットが違反する場合は ContainerResourcePolicy (MinAllowedまたはより低い) MaxAllowedより高い。 ステータス表示としてのみ使用され、 は実際のリソース割り当てには影響しません。 type: object upperBound: additionalProperties: anyOf: -type: 整数 -type: 文字列 パターン: ^(\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))((([KMGTPE]i)|[numkMGTPE]|([eE](\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))?$ x-kubernetes-int-or-string: true description: リソースの最大推奨量。 観察 ContainerResourcePolicy。 を超えて割り当てられたリソース この値はおそらく無駄になります。 この値はより大きいかもしれません アプリケーションの最大量よりも実際に可能です 消費の。 type: object required: -ターゲット type: object タイプ: 配列 type: object type: object required: -spec type: object サーブ: true ストレージ: true サブリソース: {} -非推奨: true deprecationWarning: autoscaling.k8s.io/v1beta2 APIは非推奨です 名前: v1beta2 スキーマ: openAPIV3Schema: 説明: VerticalPodAutoscalerは垂直ポッドの構成です 履歴に基づいてポッドリソースを自動的に管理するautoscaler そしてリアルタイムのリソース利用。 プロパティ: apiVersion: 説明: 'APIVersionは、この表現のバージョン管理されたスキーマを定義します。 オブジェクトの サーバーは認識されたスキーマを最新のものに変換する必要があります 認識されない値を拒否する場合があります。 詳細: https:// git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' タイプ: string kind: description: 'KindはRESTリソースを表す文字列値です。 オブジェクトはを表します。 サーバーは、クライアントのエンドポイントからこれを推測する可能性があります にリクエストを送信します。 更新できません。 キャメルケースで。 詳細: https:// git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' タイプ: string metadata: type: object 仕様: description: 'オートスケーラの動作の仕様。 より多くの情報: https:// git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status。 プロパティ: resourcePolicy: 説明: 自動スケーラーが推奨リソースを計算する方法を制御します。 リソースポリシーを使用して、推奨事項に制約を設定できます。 個々の容器のため。 指定しない場合、autoscalerは 追加なしで、ポッド内のすべてのコンテナに推奨されるリソース を使用します。 プロパティ: containerPolicies: description: コンテナーごとのリソースポリシー。 items: 説明: ContainerResourcePolicyが自動スケーラーの制御方法 は、特定のコンテナの推奨リソースを計算します。 プロパティ: containerName: 説明: コンテナーまたはDefaultContainerResourcePolicyの名前、 この場合、ポリシーは、 独自のポリシーを指定していません。 タイプ: string maxAllowed: additionalProperties: anyOf: -type: 整数 -type: 文字列 パターン: ^(\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))((([KMGTPE]i)|[numkMGTPE]|([eE](\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))?$ x-kubernetes-int-or-string: true 説明: リソースの最大量を指定します。 コンテナにお勧めします。 デフォルトは 最大値なし。 type: object minAllowed: additionalProperties: anyOf: -type: 整数 -type: 文字列 パターン: ^(\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))((([KMGTPE]i)|[numkMGTPE]|([eE](\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))?$ x-kubernetes-int-or-string: true 説明: リソースの最小量を指定します。 コンテナにお勧めします。 デフォルトは 最小値なし。 type: object モード: description: コンテナーに対してautoscalerが有効になっているかどうか。 デフォルトは "Auto" です。 enum: -オート -「オフ」 タイプ: string type: object タイプ: 配列 type: object targetRef: 説明: TargetRefは、のセットを管理するコントローラを指します。 自動スケーラーが制御するポッド (Deployment、StatefulSetなど) 。 VerticalPodAutoscalerは、コントローラの実装をターゲットにできます scaleサブリソース (ポッドセットはコントローラの ScaleStatusまたはいくつかのよく知られているコントローラ (例: DaemonSet用) ポッドセットはコントローラの仕様から読み取られます。 VerticalPodAutoscalerの場合 指定されたターゲットを使用できませんConfigUnsupported条件を報告します。 VerticalPodAutoscalerは完全な実装を必要としないことに注意してください スケールサブリソースの-レプリカの変更には使用されません 推奨します。 取得される唯一のものは、ポッドに一致するラベルセレクターです ターゲットリソースごとにグループ化されます。 プロパティ: apiVersion: description: 参照先のAPIバージョン タイプ: string kind: 説明: '参照先の種類; 詳細: https:// git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds "' タイプ: string 名前: 説明: 'Name of the referent; 詳細: http:// kubernetes.io/docs/user-guide/identifiers#names' タイプ: string required: -種類 -name type: object x-kubernetes-map-type: atomic updatePolicy: 説明: 変更がどのように適用されるかに関するルールについて説明します。 ポッド。 指定しない場合、「PodUpdatePolicy」のすべてのフィールドは をデフォルト値に設定します。 プロパティ: updateMode: 説明: autoscalerがポッドに変更を適用するときのコントロール 表します。 デフォルトは「自動」です。 enum: -「オフ」 -初期 -再作成 -オート タイプ: string type: object required: -targetRef type: object 状態: description: autoscalerに関する現在の情報。 プロパティ: 条件: 説明: 条件は、これに必要な条件のセットです autoscalerはターゲットをスケーリングし、それらかどうかを示します 条件が満たされます。 items: description: VerticalPodAutoscalerConditionは状態を説明します。 ある時点でVerticalPodAutoscalerの プロパティ: lastTransitionTime: description: lastTransitionTimeは条件の最後の時間です あるステータスから別のステータスに移行 形式: date-time タイプ: string message: description: メッセージは、を含む人間が読める説明です 移行に関する詳細 タイプ: string 理由: description: reasonは、条件の最後の遷移の理由です。 タイプ: string 状態: description: statusは条件のステータスです (True、False、 不明) タイプ: string type: description: typeは現在の条件を説明します タイプ: string required: - status -タイプ type: object タイプ: 配列 おすすめ: description: 最も最近計算されたリソースの推奨量 制御されているポッドのautoscalerによって プロパティ: containerRecommendations: 説明: 各自動スケーラーが推奨するリソース レイヤー7プロトコルを提供します。 items: 説明: RecommendedContainerResourcesは推奨です 特定のコンテナに対してautoscalerによって計算されたリソースの 仕様にコンテナリソースポリシーが存在する場合は、 特に推奨は容器のために作り出されません 'ContainerScalingMode' が 'Off' に設定されています。 プロパティ: containerName: description: コンテナーの名前。 タイプ: string lowerBound: additionalProperties: anyOf: -type: 整数 -type: 文字列 パターン: ^(\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))((([KMGTPE]i)|[numkMGTPE]|([eE](\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))?$ x-kubernetes-int-or-string: true description: リソースの最小推奨量。 観察 ContainerResourcePolicy。 この金額は保証されていません アプリケーションが安定した状態で動作するのに十分であること ただし、より少ないリソースで実行すると、 パフォーマンス /可用性に大きな影響を与えます。 type: object ターゲット: additionalProperties: anyOf: -type: 整数 -type: 文字列 パターン: ^(\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))((([KMGTPE]i)|[numkMGTPE]|([eE](\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))?$ x-kubernetes-int-or-string: true description: リソースの推奨量。 ContainerResourcePolicyを観察します。 type: object uncappedTarget: additionalProperties: anyOf: -type: 整数 -type: 文字列 パターン: ^(\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))((([KMGTPE]i)|[numkMGTPE]|([eE](\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))?$ x-kubernetes-int-or-string: true description: 最新の推奨リソースターゲット に基づいて、制御されたポッドの自動スケーラーによって計算されます。 実際のリソース使用量のみ、考慮しない ContainerResourcePolicy。 推奨事項と異なる場合があります 実際のリソース使用によりターゲットが違反する場合は ContainerResourcePolicy (MinAllowedまたはより低い) MaxAllowedより高い。 ステータス表示としてのみ使用され、 は実際のリソース割り当てには影響しません。 type: object upperBound: additionalProperties: anyOf: -type: 整数 -type: 文字列 パターン: ^(\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))((([KMGTPE]i)|[numkMGTPE]|([eE](\+ |-)?(([0-9]+(\.[0-9]*))?)|(\.[0-9]+))?$ x-kubernetes-int-or-string: true description: リソースの最大推奨量。 観察 ContainerResourcePolicy。 を超えて割り当てられたリソース この値はおそらく無駄になります。 この値はより大きいかもしれません アプリケーションの最大量よりも実際に可能です 消費の。 type: object required: -ターゲット type: object タイプ: 配列 type: object type: object required: -spec type: object サーブ: true storage: false
vertical-pod-autoscalerのコンポーネントをインストールします。
vertical-pod-autoscalerには、admission-controller、recommender、およびupdaterのコンポーネントが含まれています。
説明admission-controllerコンポーネントをインストールする前に、スクリプトを使用してwebhookの証明書を生成する必要があります。
Kubernetesバージョンが1.22より前のクラスターのYAMLテンプレート
インストールadmission-controller
apiVersion: apps/v1 kind: 配置 メタデータ: 名前: vpa-admission-controller 名前空間: kube-system spec: replicas: 1 セレクタ: matchLabels: アプリ: vpa-admission-controller template: metadata: labels: アプリ: vpa-admission-controller 仕様: serviceAccountName: admin コンテナ: -name: 入学コントローラー 画像: registry.cn-hangzhou.aliyuncs.com/acs/vpa-admission-controller:0.7.0 imagePullPolicy: Always env: - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace volumeMounts: -name: tls-certs mountPath: "/etc/tls-certs" readOnly: true resources: limits: cpu: 200m メモリ: 500Mi requests: cpu: 50m memory: 200Mi ポート: -containerPort: 8000 volumes: -name: tls-certs 秘密: secretName: vpa-tls-certs --- apiVersion: v1 種類: サービス メタデータ: 名前: vpa-webhook 名前空間: kube-system spec: ポート: - port: 443 targetPort: 8000 セレクタ: アプリ: vpa-admission-controller
recommenderのインストール
apiVersion: apps/v1 kind: 配置 メタデータ: 名前: vpa-recommender 名前空間: kube-system spec: replicas: 1 セレクタ: matchLabels: アプリ: vpa-recommender template: metadata: labels: アプリ: vpa-recommender 仕様: serviceAccountName: admin コンテナ: -name: recommender 画像: registry.cn-hangzhou.aliyuncs.com/acs/vpa-recommender:0.7.0 imagePullPolicy: Always resources: limits: cpu: 200m メモリ: 1000Mi requests: cpu: 50m メモリ: 500Mi ポート: -containerPort: 8080
updaterのインストール
apiVersion: apps/v1 kind: 配置 メタデータ: 名前: vpa-updater 名前空間: kube-system spec: replicas: 1 セレクタ: matchLabels: アプリ: vpa-updater template: metadata: labels: アプリ: vpa-updater 仕様: serviceAccountName: admin コンテナ: -name: updater 画像: registry.cn-hangzhou.aliyuncs.com/acs/vpa-updater:0.7.0 imagePullPolicy: Always resources: limits: cpu: 200m メモリ: 1000Mi requests: cpu: 50m メモリ: 500Mi ポート: -containerPort: 8080
Kubernetesバージョンが1.22以降のクラスターのYAMLテンプレート
インストールadmission-controller
apiVersion: apps/v1 kind: 配置 メタデータ: 名前: vpa-admission-controller 名前空間: kube-system spec: replicas: 1 セレクタ: matchLabels: アプリ: vpa-admission-controller template: metadata: labels: アプリ: vpa-admission-controller 仕様: serviceAccountName: vpa-admission-controller securityContext: runAsNonRoot: true runAsUser: 65534# 誰も コンテナ: -name: 入学コントローラー 画像: registry.cn-hangzhou.aliyuncs.com/acs/vpa-admission-controller:0.13.0 imagePullPolicy: Always env: - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace volumeMounts: -name: tls-certs mountPath: "/etc/tls-certs" readOnly: true resources: limits: cpu: 200m メモリ: 500Mi requests: cpu: 50m memory: 200Mi ポート: -containerPort: 8000 -名前: プロメテウス containerPort: 8944 volumes: -name: tls-certs 秘密: secretName: vpa-tls-certs --- apiVersion: v1 種類: サービス メタデータ: 名前: vpa-webhook 名前空間: kube-system spec: ポート: - port: 443 targetPort: 8000 セレクタ: アプリ: vpa-admission-controller
recommenderのインストール
apiVersion: apps/v1 kind: 配置 メタデータ: 名前: vpa-recommender 名前空間: kube-system spec: replicas: 1 セレクタ: matchLabels: アプリ: vpa-recommender template: metadata: labels: アプリ: vpa-recommender 仕様: serviceAccountName: vpa-recommender securityContext: runAsNonRoot: true runAsUser: 65534# 誰も コンテナ: -name: recommender 画像: registry.cn-hangzhou.aliyuncs.com/acs/vpa-recommender:0.13.0 imagePullPolicy: Always resources: limits: cpu: 200m メモリ: 1000Mi requests: cpu: 50m メモリ: 500Mi ポート: -名前: プロメテウス containerPort: 8942
updaterのインストール
apiVersion: apps/v1 kind: 配置 メタデータ: 名前: vpa-updater 名前空間: kube-system spec: replicas: 1 セレクタ: matchLabels: アプリ: vpa-updater template: metadata: labels: アプリ: vpa-updater 仕様: serviceAccountName: vpa-updater securityContext: runAsNonRoot: true runAsUser: 65534# 誰も コンテナ: -name: updater 画像: registry.cn-hangzhou.aliyuncs.com/acs/vpa-updater:0.13.0 imagePullPolicy: Always env: - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace resources: limits: cpu: 200m メモリ: 1000Mi requests: cpu: 50m メモリ: 500Mi ポート: -名前: プロメテウス containerPort: 8943
vertical-pod-autoscalerがインストールされていることを確認する
次のYAMLファイルを使用して、nginx-Deployment-basicという名前のデプロイとnginx-deployment-basic-VPAという名前のvpaリソースを作成します。
クリックして詳細を表示
apiVersion: apps/v1 kind: 配置 メタデータ: name: nginx-deployment-basic ラベル: アプリ: nginx spec: レプリカ:2 セレクタ: matchLabels: アプリ:nginx template: metadata: labels: アプリ:nginx 仕様: containers: - name: nginx image: nginx:1.7.9 ポート: -containerPort: 80 --- apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler メタデータ: 名前: nginx-deployment-basic-vpa spec: targetRef: apiVersion: "apps/v1" kind: 配置 名前: nginx-deployment-basic updatePolicy: updateMode: "オフ"
説明updateModeをOffに設定し、Deploymentの設定でrequestsフィールドとlimitsフィールドを空のままにします。
次のコマンドを実行して、縦型-pod-autoscalerがデプロイに推奨するCPUリクエストとメモリリクエストを照会します。
説明コマンドを実行してから2分後に出力が返されます。
kubectl describe vpa nginx-deployment-basic-vpa
次の出力は、推奨されるリソースリクエストの例を示します。
クリックして詳細を表示
勧告: コンテナの推奨事項: コンテナ名: nginx 下限: Cpu: 25m メモリ: 262144k ターゲット: Cpu: 25m メモリ: 262144k キャップなしターゲット: Cpu: 25m メモリ: 262144k 上限: Cpu: 11601m メモリ: 12128573170
推奨事項に基づいて、デプロイのリソースリクエストを指定できます。 vertical-pod-autoscalerは、デプロイメントのリソース使用状況を継続的に監視し、リソース使用率を改善する方法について提案します。