type
status
date
slug
summary
tags
category
icon
password
书籍
リソース使用制限
このラボでは、プロジェクトでリソースの使用を制限するためにクォータを使用します。また、リソースにクォータを設定しないことがポッドのスケジューリングに与える影響も確認します。
到達目標
- プロジェクトのリソースクォータとリソース制限を定義できるようになります。
- クォータ違反エラーのトラブルシューティングができるようになります。
- リソースリクエストにクォータが設定されていないことによるスケジューリングの問題をトラブルシュートできるようになります。
事前準備
- 第7章「OpenShift Container Platformのインストール」に関するすべてのラボが完了しており、OpenShift Container Platformクラスタがマスターと2つのノードで稼働していることを確認してください。もし、まだであれば、マスター、node1、およびnode2ホストをリセットし、以下のコマンドをワークステーションホストで実行して環境が正しく設定されていることを確認します:
ワークステーションVMでターミナルウィンドウを開き、この演習で使用するファイルをダウンロードするために以下のコマンドを実行します:
手順
- クラスタ管理者として、リソースリクエストがデフォルトで設定されていない新しいポッドが作成されることを確認するためにプロジェクトを作成します。
このステップのコマンドは、
/home/student/DO285/labs/monitor-limit
フォルダー内のcreate-project.sh
スクリプトにまとめられています。スクリプトからコマンドをコピーして貼り付けて実行できます。
1.1. ワークステーションホストで、管理者ユーザーとしてOpenShiftにログインします:
1.2. OpenShiftクラスタの2つのノードに割り当てられているリソースを表示します:
表示される値は異なる場合がありますが、この演習では値がどのように変化するかに焦点を当てています。
CPU Requests
列の値をメモしておいてください。1.3. 新しいプロジェクト「resources」を作成します:
1.4.
hello-openshift
イメージからポッドを作成します:1.5.
hello
ポッドが準備完了し、実行中になったら、ポッドが実行されているノードを取得します:ポッドが準備完了し、実行中になるまで前のコマンドを何度か繰り返す必要があるかもしれません。コマンドで報告されたノード名をメモしておいてください。この情報は次のステップで必要です。
1.6. ポッドが実行されているノードについて、リソースが変更されていないことを確認します。前のステップで取得したノードのみに対して確認を行います:
※ポッドとそのデプロイメント設定に対して
oc describe
コマンドを使用し、リソースリクエストが設定されていないことを確認することもできます。1.7. 次のステップに進む前に、「resources」プロジェクトからすべてのリソース(デプロイメント設定、イメージストリーム、ポッド、サービスなど)を削除します。
- クラスタ管理者として、プロジェクトにクォータとリソース制限(LimitRange)を追加して、プロジェクト内のポッドにデフォルトのリソースリクエストを設定します。
このステップのコマンドは、
/home/student/DO285/labs/monitor-limit
フォルダー内のadd-quota.sh
スクリプトにまとめられています。
2.1. リソース制限(LimitRange)の定義を確認します。この設定は、CPUに対するデフォルトのリソースリクエストのみを指定しています:
Red Hat OpenShift Container Platform 3.9 のドキュメントでは、ファイルを最初から作成するためのサンプルファイルが提供されています。詳しくは、「Limit Rangesの設定」セクションを参照してください。
2.2. プロジェクトにリソース制限(LimitRange)を追加します:
2.3. プロジェクトにデフォルトのCPUリソースリクエストが設定されていることを確認します:
デフォルトのリソースリクエストを設定すると、そのコンピュートリソースに対するデフォルトのリソース制限も設定されることに注意してください。
2.4. 提供されたクォータの定義を確認します。この設定は、最大CPU使用量を設定します:
Red Hat OpenShift Container Platform 3.9 のドキュメントでは、ファイルを最初から作成するためのサンプルファイルが提供されています。詳しくは、「クォータの設定」セクションを参照してください。
2.5. プロジェクトにクォータを追加します:
2.6. プロジェクトにCPUクォータが設定されていることを確認します:
2.7. 次のステップに進む前に、開発者ユーザーにプロジェクト内でデプロイメントを作成する権限を付与します:
- 開発者ユーザーとして、プロジェクト内にポッドを作成し、ポッドがプロジェクトのクォータからリソースを消費することを確認します。
このステップのコマンドは、
/home/student/DO285/labs/monitor-limit
フォルダー内のadd-pod.sh
スクリプトにまとめられています。
3.1. 開発者ユーザーとしてOpenShiftにログインします:
3.2. 「resources」プロジェクトに切り替えます:
3.3. 開発者ユーザーがプロジェクトのリソース制限とクォータを確認できるが、変更はできないことを確認します:
もし、
oc delete
コマンドでエラーが発生しなかった場合、管理者ユーザーとしてログインしている可能性があります。その場合、ステップ2に戻って、プロジェクトのリソース制限(LimitRange)とリソースクォータを再作成する必要があります。oc get limitranges
コマンドを使用することでも、同様の出力を得ることができます。3.4.
hello-openshift
イメージからポッドを作成します:もしエラーが発生した場合は、この演習の最初に作成されたポッドとその関連リソースを削除したか確認してください。
3.5.
hello
ポッドが準備できて実行されているのを待ちます:注意:ポッドが準備完了し、実行されるまでに、前のコマンドを何回か繰り返す必要がある場合があります。
3.6.
hello
ポッドがプロジェクトのクォータを消費していることを確認します:この出力は、ステップ2.6で得られた出力と比較してください。
ポッドがアイドル状態で、HTTPリクエストを処理していないため実際にはCPUを使用していませんが、そのリソースリクエストがプロジェクトのリソースクォータから消費されていることがわかります。
- オプション:ノードのリソースが少なくなっているか確認します。
このステップのコマンドは、
/home/student/DO285/labs/monitor-limit
フォルダー内のcheck-nodes.sh
スクリプトにまとめられています。
4.1. 管理者ユーザーとしてOpenShiftにログインします:
4.2.
hello
ポッドが実行されているノードを取得します:ノード名をメモして、次のステップで使用します。
4.3.
hello
ポッドが実行されているノードにおいて、割り当てられたCPUリクエストがポッドのリソースリクエストと同じ量だけ増加したことを確認します。前のステップで取得したノード名を使用して、実行中のノードのみを確認します:4.4. ポッドにCPUリソースリクエストが指定されているかを確認するために、
oc describe
コマンドを使用します:4.5. 次のステップに進む前に、開発者ユーザーとして再度ログインします:
hello
デプロイメント設定をスケールして、プロジェクトのポッドからのリソース使用量を増加させ、それがプロジェクトのクォータから消費されることを確認します。 このステップのコマンドは、/home/student/DO285/labs/monitor-limit
フォルダー内のincrease-bounded.sh
スクリプトにまとめられています。
5.1.
hello
デプロイメント設定を2レプリカにスケールします:5.2. 新しいポッドが準備できて実行されるまで待ちます:
ポッドが準備完了し、実行されるまでに、前のコマンドを何回か繰り返す必要がある場合があります。
5.3. 新しいポッドがプロジェクトのクォータに適合していることを確認します:
5.4.
hello
デプロイメント設定を4レプリカにスケールします。これはプロジェクトのクォータを超えることになります:5.5. 数分待って、新しい
hello
ポッドが3つ作成されたことを確認しますが、4番目のポッドは作成されません。4番目のポッドはプロジェクトのクォータを超えてしまうためです:CPUリソースリクエストの合計は1000ミリコアになりますが、クォータはこれを900ミリコアに制限しています:エラーは表示されません。デプロイメント設定は、4番目のポッドを作成するために必要な設定変更を待っています:
5.6. プロジェクトのイベントリストを取得します。これにより、レプリケーションコントローラーがクォータ違反のために4番目のポッドを作成できなかったことが確認できます:
5.7. 次のステップに進む前に、
hello
デプロイメント設定を1レプリカにスケールバックします:5.8. 数秒待って、1つの
hello
ポッドのみが実行中であることを確認します:- プロジェクトのクォータで制限されないリソースリクエストを
hello
ポッドに追加します。 このステップのコマンドは、/home/student/DO285/labs/monitor-limit
フォルダー内のincrease-unbounded.sh
スクリプトにまとめられています。
6.1.
hello
デプロイメント設定に256Miのメモリリクエストを追加します:6.2. 新しいポッドが準備完了して実行され、古いポッドが削除されるのを待ちます:
新しいポッドが準備完了し、古いポッドが消えるまで前のコマンドを何回か繰り返す必要があるかもしれません。
6.3. 新しいポッドにCPUリクエストに加えてメモリリクエストが追加されていることを確認します:
6.4. メモリリクエストがプロジェクトのクォータにカウントされていないことを確認します:
プロジェクトのクォータの観点では、何も変更されていないことがわかります。
- メモリリソースリクエストをクラスタ内のどのノードの容量をも超える値に増やします。
このステップのコマンドは、
/home/student/DO285/labs/monitor-limit
フォルダー内のincrease-toomuch.sh
スクリプトにまとめられています。
7.1.
hello
デプロイメント設定のメモリリクエストを8GiBに変更します。もっとも容量の大きいノードでも4GiBしかメモリがありません:7.2. 新しいデプロイポッドが作成されますが、新しいポッドを作成できず、ポッドは保留状態になります:
デプロイポッドは新しいポッドが準備完了するための設定変更を長時間待ち続けます。その間、前回のデプロイメントからの
hello
ポッドは削除されず、アプリケーションユーザーへのサービスの中断を避けるようになっています。次のエラーが表示されるまで待たないでください。エクササイズを続けてください:
7.3. プロジェクトのイベントリストを取得します。これにより、ポッドをいずれのノードにもスケジュールできなかったという警告が表示されます。メモリ不足が原因です:
クリーンアップ
管理者ユーザーとしてログインし、このエクササイズのために作成したプロジェクトを削除します:
これで、ガイド付きエクササイズは終了です。
- 作者:みなみ
- 链接:https://www.minami.ac.cn//%E8%B3%87%E6%A0%BC%E5%8B%89%E5%BC%B7/1aad7ae8-88e2-80e8-8ced-d6b4c57c5eb2
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章