7.2. OpenShift Container Platform のノードが保持できる Pod の数の見積り
クラスター管理者は、クラスター容量ツールを使用して、現在のリソースが使い切られる前にそれらを増やすべくスケジュール可能な Pod 数を表示し、スケジュール可能な Pod 数を表示したり、Pod を今後スケジュールできるようにすることができます。この容量は、クラスター内の個別ノードからのものを集めたものであり、これには CPU、メモリー、ディスク領域などが含まれます。
7.2.1. OpenShift Container Platform クラスター容量ツールについて
クラスター容量ツールはより正確な見積もりを出すべく、スケジュールの一連の意思決定をシミュレーションし、リソースが使い切られる前にクラスターでスケジュールできる入力 Pod のインスタンス数を判別します。
ノード間に分散しているすべてのリソースがカウントされないため、残りの割り当て可能な容量は概算となります。残りのリソースのみが分析対象となり、クラスターでのスケジュール可能な所定要件を持つ Pod のインスタンス数という点から消費可能な容量を見積もります。
Pod のスケジューリングはその選択およびアフィニティー条件に基づいて特定のノードセットについてのみサポートされる可能性があります。そのため、クラスターでスケジュール可能な残りの Pod 数を見積もることが困難になる場合があります。
クラスター容量分析ツールは、コマンドラインからスタンドアロンのユーティリティーとして実行することも、OpenShift Container Platform クラスター内の Pod でジョブとして実行することもできます。これを Pod 内のジョブとして実行すると、介入なしに複数回実行することができます。
7.2.2. コマンドラインでのクラスター容量ツールの実行
コマンドラインから OpenShift Container Platform クラスター容量ツールを実行して、クラスターにスケジュール設定可能な Pod 数を見積ることができます。
前提条件
- OpenShift Cluster Capacity Tool を実行します。これは、RedHat エコシステムカタログからコンテナーイメージとして入手できます。
ツールがリソース使用状況を見積もるために使用するサンプル
Pod
仕様ファイルを作成します。podspec
はそのリソース要件をlimits
またはrequests
として指定します。クラスター容量ツールは、Pod のリソース要件をその見積もりの分析に反映します。Pod
仕様入力の例は以下の通りです。apiVersion: v1 kind: Pod metadata: name: small-pod labels: app: guestbook tier: frontend spec: containers: - name: php-redis image: gcr.io/google-samples/gb-frontend:v4 imagePullPolicy: Always resources: limits: cpu: 150m memory: 100Mi requests: cpu: 150m memory: 100Mi
手順
コマンドラインでクラスター容量ツールを使用するには、次のようにします。
ターミナルから、RedHat レジストリーにログインします。
$ podman login registry.redhat.io
クラスター容量ツールのイメージをプルします。
$ podman pull registry.redhat.io/openshift4/ose-cluster-capacity
クラスター容量ツールを実行します。
$ podman run -v $HOME/.kube:/kube:Z -v $(pwd):/cc:Z ose-cluster-capacity \ /bin/cluster-capacity --kubeconfig /kube/config --podspec /cc/pod-spec.yaml \ --verbose 1
- 1
--verbose
オプションを追加して、クラスター内の各ノードでスケジュールできる Pod の数の詳細な説明を出力することもできます。
出力例
small-pod pod requirements: - CPU: 150m - Memory: 100Mi The cluster can schedule 88 instance(s) of the pod small-pod. Termination reason: Unschedulable: 0/5 nodes are available: 2 Insufficient cpu, 3 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate. Pod distribution among nodes: small-pod - 192.168.124.214: 45 instance(s) - 192.168.124.120: 43 instance(s)
上記の例では、クラスターにスケジュールできる推定 Pod の数は 88 です。
7.2.3. Pod 内のジョブとしてのクラスター容量ツールの実行
クラスター容量ツールを Pod 内のジョブとして実行すると、ユーザーの介入なしに複数回実行できるという利点があります。クラスター容量ツールをジョブとして実行するには、ConfigMap
オブジェクトを使用する必要があります。
前提条件
cluster-capacity ツール をダウンロードし、これをインストールします。
手順
クラスター容量ツールを実行するには、以下の手順を実行します。
クラスターロールを作成します。
$ cat << EOF| oc create -f -
出力例
kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: cluster-capacity-role rules: - apiGroups: [""] resources: ["pods", "nodes", "persistentvolumeclaims", "persistentvolumes", "services", "replicationcontrollers"] verbs: ["get", "watch", "list"] - apiGroups: ["apps"] resources: ["replicasets", "statefulsets"] verbs: ["get", "watch", "list"] - apiGroups: ["policy"] resources: ["poddisruptionbudgets"] verbs: ["get", "watch", "list"] - apiGroups: ["storage.k8s.io"] resources: ["storageclasses"] verbs: ["get", "watch", "list"] EOF
サービスアカウントを作成します。
$ oc create sa cluster-capacity-sa
ロールをサービスアカウントに追加します。
$ oc adm policy add-cluster-role-to-user cluster-capacity-role \ system:serviceaccount:default:cluster-capacity-sa
Pod
仕様を定義し、作成します。apiVersion: v1 kind: Pod metadata: name: small-pod labels: app: guestbook tier: frontend spec: containers: - name: php-redis image: gcr.io/google-samples/gb-frontend:v4 imagePullPolicy: Always resources: limits: cpu: 150m memory: 100Mi requests: cpu: 150m memory: 100Mi
クラスター容量分析は、
cluster-capacity-configmap
という名前のConfigMap
オブジェクトを使用してボリュームにマウントされ、入力 Pod 仕様ファイルpod.yaml
はパス/test-pod
のボリュームtest-volume
にマウントされます。ConfigMap
オブジェクトを作成していない場合は、ジョブの作成前にこれを作成します。$ oc create configmap cluster-capacity-configmap \ --from-file=pod.yaml=pod.yaml
ジョブ仕様ファイルの以下のサンプルを使用して、ジョブを作成します。
apiVersion: batch/v1 kind: Job metadata: name: cluster-capacity-job spec: parallelism: 1 completions: 1 template: metadata: name: cluster-capacity-pod spec: containers: - name: cluster-capacity image: openshift/origin-cluster-capacity imagePullPolicy: "Always" volumeMounts: - mountPath: /test-pod name: test-volume env: - name: CC_INCLUSTER 1 value: "true" command: - "/bin/sh" - "-ec" - | /bin/cluster-capacity --podspec=/test-pod/pod.yaml --verbose restartPolicy: "Never" serviceAccountName: cluster-capacity-sa volumes: - name: test-volume configMap: name: cluster-capacity-configmap
- 1
- クラスター容量ツールにクラスター内で Pod として実行されていることを認識させる環境変数です。
ConfigMap
のpod.yaml
キーはPod
仕様ファイル名と同じですが、これは必須ではありません。これを実行することで、入力 Pod 仕様ファイルは/test-pod/pod.yaml
として Pod 内でアクセスできます。
クラスター容量イメージを Pod のジョブとして実行します。
$ oc create -f cluster-capacity-job.yaml
ジョブログを確認し、クラスター内でスケジュールできる Pod の数を確認します。
$ oc logs jobs/cluster-capacity-job
出力例
small-pod pod requirements: - CPU: 150m - Memory: 100Mi The cluster can schedule 52 instance(s) of the pod small-pod. Termination reason: Unschedulable: No nodes are available that match all of the following predicates:: Insufficient cpu (2). Pod distribution among nodes: small-pod - 192.168.124.214: 26 instance(s) - 192.168.124.120: 26 instance(s)