Kubernetes でコンテナを操作する場合、関係するリソースが何であるか、そしてそれらがどのように必要とされるかを把握することが重要です。一部のプロセスでは、他のプロセスよりも多くの CPU またはメモリが必要になります。いくつかは重要なので、飢えさせてはいけません。 これを踏まえて、コンテナとポッドを正しく構成し、両方のメリットを最大限に活用する必要があります。 この記事では、それを見ていきます。
Kubernetes の制限とリクエストの概要Kubernetes を使用する場合、制限とリクエストは、主に CPU とメモリの構成を含む重要な構成です。 Kubernetes では、制限をコンテナが使用するリソースの最大量として定義します。つまり、コンテナは、表示されているメモリまたは CPU の量を超えて消費することはできません。 一方、リクエストは、コンテナ用に予約されたリソースの最小保証量を指します。 画像.png 実践事例2 つの異なるコンテナの CPU とメモリに制限とリクエストを設定する必要がある次のデプロイメントを見てみましょう。 種類:デプロイメント このデプロイメントを 4C16G 構成のノードにデプロイする場合は、次の情報を取得できます。
Kubernetes リクエストKubernetes では、リクエストをコンテナが使用するリソースの最小保証量として定義します。 基本的に、コンテナが消費するリソースの最小量を設定します。 Pod がスケジュールされると、kube-scheduler は Kubernetes リクエストをチェックして、それを特定のノード (Pod 内のすべてのコンテナのうち少なくともこの数を満たすことができるノード) に割り当てます。要求された量が利用可能なリソースよりも大きい場合、ポッドはスケジュールされず、保留状態のままになります。 Pendingステータスの詳細については、「Kubernetes Podの保留中の問題の理解【1】」を参照してください。 この例では、コンテナ定義で、100m コアの CPU と 4Mi のメモリの要求を設定します。 リソース: リクエストは通常、次のシナリオで使用されます。
Kubernetes の制限Kubernetes では、コンテナが使用するリソースの最大量として制限を定義します。 つまり、コンテナは指定された量を超えるメモリまたは CPU を消費することはできません。 リソース: 制限は通常、次のシナリオで使用されます。
CPU特性CPU は圧縮可能なリソースであるため、あらゆる要求を満たすように拡張できます。プロセスが CPU を過剰に要求すると、一部のプロセスが調整されます。 CPU はコア数で測定される計算処理時間を表します。
メモリ特性メモリは圧縮できないリソースであるため、CPU のように拡張することはできません。プロセスが動作するために十分なメモリを取得できない場合、そのプロセスは強制終了されます。 Kubernetes では、メモリの単位はバイトです。
ベストプラクティスKubernetes では、リソースの使用を制御するために制限を使用することはほとんどありません。これは、リソース不足を回避したい場合 (すべての重要なプロセスにリソースが割り当てられるようにする場合)、まず最初にリクエストを使用する必要があるためです。 制限を設定すると、特別な場合にプロセスが追加のリソースを取得できなくなるため、メモリ側で OOM による強制終了が発生し、CPU 側でスロットリングが発生します (プロセスは、CPU が再び使用できるようになるまで待機する必要があります)。 詳細については、OOMとスロットリングに関する記事【2】を参照してください。 ポッドのすべてのコンテナでリクエスト値を制限と同じに設定すると、ポッドは保証されたサービス品質を受け取ります。 また、リクエストよりも多くのリソースを使用するポッドは削除される可能性が高くなるため、リクエストを非常に低く設定すると、メリットよりもデメリットの方が大きくなる可能性があることに注意してください。これはPodの排除とサービス品質【3】で確認できます。 名前空間 ResourceQuata名前空間のおかげで、Kubernetes リソースをテナントとも呼ばれるさまざまなグループに分離できます。 ResourceQuota を使用すると、名前空間全体にメモリまたは CPU の制限を設定して、その中のエンティティがその量を超えて消費できないようにすることができます。 APIバージョン: v1
次に、それを名前空間に適用します。 kubectl apply -fリソースクォータ.yaml --namespace=mynamespace 次のメソッドを使用して、名前空間の現在の ResourceQuota を一覧表示できます。 kubectl get resourcequota - n mynamespace 名前空間内の特定のリソースに対して ResourceQuota を設定する場合は、その名前空間内の各 Pod に対して対応する制限またはリクエストを指定する必要があることに注意してください。そうでない場合、Kubernetes は「クォータ失敗」エラーを返します。 サーバーからのエラー(禁止) : 「mypod.yaml」の作成中にエラーが発生しました:ポッド「mypod」は禁止されています:クォータに失敗しました: mem - cpu - demo : limits .cpu、limits .memory、requests .cpu 、 requests .memoryを指定する必要があります コンテナ制限またはリクエストが現在の ResourceQuota を超える新しい Pod を追加しようとすると、Kubernetes は「クォータ超過」エラーを返します。 サーバーからのエラー(禁止) : 「mypod.yaml」の作成中にエラーが発生しました:ポッド「mypod」は禁止されています:クォータを超えました: mem - cpu - demo 、要求されました: limits .memory = 2 Gi 、 requests .memory = 2 Gi 、使用されました: limits .memory = 1 Gi 、 requests .memory = 1 Gi 、制限されています: limits .memory = 2 Gi 、 requests .memory = 1Gi 名前空間の制限範囲ResourceQuotas は、名前空間に割り当てることができるリソースの合計量を制限したい場合に便利です。しかし、内部の要素にデフォルト値を提供したい場合はどうなるでしょうか? LimitRanges は、名前空間内の各エンティティのリソース設定を制限する Kubernetes ポリシーです。 APIバージョン: v1
後で、リクエストや制限を設定せずに新しい Pod を作成すると、LimitRange はすべてのコンテナに対してそれらの値を自動的に設定します。 制限: ここで、1200M の制限を持つ新しい Pod を追加するとします。次のエラーが発生します。 サーバーからのエラー(禁止) : 「pods/mypod.yaml」の作成中にエラーが発生しました:ポッド「mypod」は禁止されています:コンテナあたりの最大 CPU 使用量は1ですが、制限は1200 mです デフォルトでは、LimitRanges が設定されていない場合でも、Pod 内のすべてのコンテナは実質的に 100m CPU を要求することに注意してください。 要約するエネルギー消費とコストを最適に抑えるには、Kubernetes クラスターに最適な制限を選択することが重要です。 ポッドに割り当てているリソースが多すぎると、コストが急増する可能性があります。 スケーリングが小さすぎたり、CPU やメモリの割り当てが少なすぎたりすると、アプリケーションが適切に実行されなかったり、Pod が削除されたりする可能性があります。 前述したように、Kubernetes の制限は、メリットよりもデメリットをもたらす可能性があるため、非常に特殊な状況を除いて使用しないでください。メモリが不足している場合はコンテナが強制終了される可能性があり、CPU が不足している場合はコンテナが調整される可能性があります。 リクエストの場合、プロセスがリソースの保証された共有を確実に取得する必要がある場合に使用します。 書類【1】https://sysdig.com/blog/kubernetes-pod-pending-problems/ 元記事: https://sysdig.com/blog/kubernetes-limits-requests/ 著者: JAVIER MARTÍNEZ |
[[407823]]この記事はWeChatの公開アカウント「Sneak Forward」から転載した...
Weiboの時価総額は、かなり長い間、95億ドル前後で推移している。かつて中国のオンライン「世論の場...
12月19日から20日にかけて、テンセント主催の2020 TECHO PARK開発者会議が北京ファッ...
SimpleNode の最新 VPS 割引、KVM ベースの 2 種類、割引コード: SSDPROM...
最近、エッジコンピューティングに対する期待が高まっています。この業界では、「エッジがクラウドを飲み込...
最近、チームの製品運営の段階的な目標の 1 つにユーザーのアクティビティを増やすことがあり、議論の結...
5月29日、一部のネットユーザーがBaiduウェブマスタープラットフォームにログインし、Baiduウ...
[[350264]] [51CTO.com クイック翻訳] Istio は、サービスを接続、保護、制...
時は経つのは早いもので、気がつけば3年が経っていました。 ProcessOn は、小さな会社としてス...
QuadraNet は時々現れて、ジャンクなものをいくつか出します。彼らによると、これは超低価格のサ...
hudsonvalleyhost は、2004 年に設立されたと主張する IDC マーチャント (実...
Cloudcone は、KVM 仮想化、ロサンゼルス MC データ センター、1Gbps 帯域幅を備...
本稿では、主にTiantian Ptuの「小学校卒業写真」、「みんなで呉美娘のコスプレ」、「神経質な...
国内のデータセキュリティ問題が注目される中、海外のドメイン名市場で大量のドメイン名が盗まれたことが2...
ESX サーバーに仮想マシンをインストールすると、デフォルトの 8 GB のディスク領域のみが割り当...