デフォルトでは、我々はすべてのコンテナがKubernetesクラスタ上のコンピューティングリソースの無制限の使用を実行できることを知っています。信頼性を重視するために、可用性、技術プラットフォームが懸念され、これは明らかに受け入れられません。
kubernetesでは主に二つの技術によって、リソースの使用に関する制限を実装します:
- リソース割り当てのリソース使用量のクォータ管理
- リソース使用制限の範囲の数を制限
クラスタのノードの固定数と共有する複数のユーザーまたはグループと、リソースは、チームが資源の公正な取り分以上のものを使用するかもしれないと心配することができます。Resource Quotas
コンピューティング資源、ストレージ資源、ならびに様々な他のK8Sリソース・オブジェクトの使用に制限を提供することを目的とし、主な機能は、使用の最大数を制限することです。
リソースの割り当てを使用して、クラスタ管理者がリソースの消費を制限し、名前空間の基礎を作成することができます。必要な場合は、技術チームと、使用ごとに作成することができnamespace
、その後に基づいて名前空間を構成するResource Quotas
最大リソース使用量のクォータことができます。この機能の設定は比較的簡単ですが、私たちは、学生が見てについての詳細を学ぶ必要がここに。
この記事では、議論することでLimit Ranges
機能の使用を制限するために使用するリソースの数を。この機能は、名前空間の数内のリソース制約の数の絶対的な制限も細かいCPU、メモリ、ストレージリソースを使用して、粒子サイズの発効と主に懸念しています。ポッドまたはコンテナに拘束される名前空間内のリソースの使用の範囲を限定するための戦略です。
次のクラスタAPI関数プラグインはLimitRangerを有効にするかどうかをチェックします
実行systemctl status kube-apiserver
あなたが出力に表示することを確保するための--enable-admission-plugins=
パラメータ値がに含まれているLimitRanger
プラグインです。
力に制限グローバル名前空間を指定し、デフォルトのポリシーを作成します。
我々が命名したと仮定しdevelopment
た名前空間を。
デフォルトのリソース制限は、YAMLの定義を支配します:
apiVersion: v1
kind: LimitRange
metadata:
name: development-limit-range
namespace: development
spec:
limits:
- max:
cpu: "8"
memory: "24Gi"
min:
cpu: "500m"
memory: "1Gi"
default:
cpu: "2"
memory: "8Gi"
defaultRequest:
cpu: "1"
memory: "2Gi"
type: Container
- コンテナの開発名前空間を提供し、あなたは、許容される最大、最小およびデフォルトのリソースの制約を作成することができます。
- あなたはポッドを作成すると、コンピューティングリソースの数を指定することはできません、それは自動的にデフォルト値の開発スペースで有効になります制限します。
- 上記のルールでは、ユーザは、容器を使用するために必要なコンピューティングリソースの量をカスタマイズすることができ、リソースの最大数の範囲内で、最小値を指定します。
デフォルトのリソース制限ルールの作成を完了
$ kubectl create -f development-limit-range.yaml
limitrange/development-limit-range created
デフォルトのリソース制限ルールビューの開発名前空間
$ kubectl describe limitrange development-limit-range
Name: development-limit-range
Namespace: development
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Container cpu 500m 8 1 2 -
Container memory 1Gi 24Gi 2Gi 8Gi -
コンテナを作成し、コンテナリソースのニーズを制限します
一般的なコンテナを作成します
この試験容器では、リソースコンテンツの使用に関するいかなる制限を設定しないでください。
apiVersion: v1
kind: Pod
metadata:
name: test-server1
namespace: development
spec:
containers:
- name: test-server1
image: centos:6
ports:
- containerPort: 8080
コンテナのニーズを指定されたリソースを、個別の作成
4コアCPU + 12ギガバイトのメモリ・コンピューティング・リソースを適用するため、図示のように。
apiVersion: v1
kind: Pod
metadata:
name: test-server2
namespace: development
spec:
containers:
- name: test-server2
image: centos:6
ports:
- containerPort: 8080
resources:
limits:
cpu: "4"
memory: 12Gi
requests:
cpu: "1"
memory: 2Gi
比較下部容器両方の実行プロパティ値のリソースを参照してください。
$ kubectl get pod test-server1 -o json|jq ".spec.containers[0].resources"
{
"limits": {
"cpu": "2",
"memory": "8Gi"
},
"requests": {
"cpu": "1",
"memory": "2Gi"
}
}
$ kubectl get pod test-server2 -o json|jq ".spec.containers[0].resources"
{
"limits": {
"cpu": "4",
"memory": "12Gi"
},
"requests": {
"cpu": "1",
"memory": "2Gi"
}
}
- あなたは、任意のリソース制限が指定されていない場合、名前空間はデフォルト設定のルールの開発から直接取得され見ることができます。エフェクトの容器
test-server1
に示します。 - カスタムリソース要件を提供する場合、リソースによって設定された使用上の制限が適用されます。エフェクトの容器
test-server2
に示します。 - あなたは以上の8コアCPUやメモリ24Giのために適用されますので、コマンド空間の最小のリソースと、最大利用可能なリソース、グローバルに有効なコンテナの数に制限の定義、以来、それは直接失敗した情報の作成を返します。
例えば、このような大きな肉食を作成します。
apiVersion: v1
kind: Pod
metadata:
name: test-server3
namespace: development
spec:
containers:
- name: test-server3
image: centos:6
ports:
- containerPort: 8080
resources:
limits:
cpu: "4"
memory: 32Gi
コマンドの実行を作成するときに、エラーメッセージ、次の直接返します。
$ kubectl create -f test-server3-pod.yaml
Error from server (Forbidden): error when creating "test-server3-pod.yaml": pods "test-server3" is forbidden: maximum memory usage per Container is 24Gi, but limit is 32Gi.
この記事は、簡単な導入やアイデアの例を達成するために、リソースの機能上の唯一の制限は、学生がより多くの詳細を知っている必要があり、会場の公式ホームページくださいhttps://kubernetes.io/docs/concepts/policy/limit-range/このページ。