ワーカーノードの追加と削除
演習の概要
このモジュールでは、ワーカーノードの(自動的な)追加と削除を実施します。
MachineSetによるワーカーノードの追加と削除
実行するアプリケーションの数が多くなり、ワーカーノードのリソース(CPUやメモリ)使用率が逼迫した場合、 OpenShiftのコンソールからワーカーノードを追加・削除できます。 ARO/OpenShiftのワーカーノードは、MachineSetというリソース単位で管理されており、 ワーカーノードを追加・削除する場合、このMachineSetを作成・編集・削除します。
ここでインストラクターから案内された管理アカウントを使って、AROクラスターに再ログインします。 以降の演習は、この管理アカウントを利用します。
デフォルトで利用されているMachineSetは、 「管理者向け表示」の「MachineSets」メニューから確認できます。 Japan EastリージョンにあるAROを利用している場合、 デフォルトの構成では3つのアベイラビリティーゾーンに 対応したマシンセットが1つずつ存在します。 これらのマシンセットの中に1台ずつワーカーノードが含まれています。
本演習環境では、ワーカーノードを数台ほど増やしていることがあります。 |
Azureの仕様により、Japan WestリージョンにあるAROの場合は、 1つのアベイラビリティーゾーンしか利用できないようになっています。 |
デフォルトで用意されているマシンセットのうち、いずれかを選択して、 「アクション」→「マシン数の編集」から、マシン台数を編集することで、 ワーカーノードを簡単に追加・削除できるようになっています。
しかし、この演習では、デフォルトで用意されているMachineSetは編集せずに、 新しくMachineSetを追加することで、ワーカーノードを追加してみます。
MachineSetの作成
前述した画像にある「MachineSet」のメニューから「MachineSetの作成」をクリックして、
下記のようなMachineSetを定義したYAMLファイルを入力して、MachineSetを作成します。
新規MachineSetの作成に伴い、自動的にワーカーノードが1台( replicas: 1
の指定によるもの)
追加されます。
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
name: <MachineSet名>
labels:
machine.openshift.io/cluster-api-cluster: <AROクラスター名>
machine.openshift.io/cluster-api-machine-role: worker
machine.openshift.io/cluster-api-machine-type: worker
namespace: openshift-machine-api
spec:
replicas: 1
selector:
matchLabels:
machine.openshift.io/cluster-api-cluster: <AROクラスター名>
machine.openshift.io/cluster-api-machineset: <MachineSet名>
template:
metadata:
labels:
machine.openshift.io/cluster-api-cluster: <AROクラスター名>
machine.openshift.io/cluster-api-machine-role: worker
machine.openshift.io/cluster-api-machine-type: worker
machine.openshift.io/cluster-api-machineset: <MachineSet名>
spec:
metadata:
labels:
<key>: <value>
providerSpec:
value:
location: <リージョン名>
networkResourceGroup: <ネットワークリソースグループ名>
publicLoadBalancer: <AROクラスター名>
resourceGroup: aro-<AROクラスターのインフラID>
vnet: <Virutal Network名>
subnet: <サブネット名>
vmSize: Standard_F4s_v2
zone: "3"
image:
offer: aro4
publisher: azureopenshift
resourceID: ""
sku: <AROのバージョンID>
version: <AROのバージョン番号が付いたイメージID>
apiVersion: machine.openshift.io/v1beta1
credentialsSecret:
name: azure-cloud-credentials
namespace: openshift-machine-api
kind: AzureMachineProviderSpec
metadata:
creationTimestamp: null
userDataSecret:
name: worker-user-data
osDisk:
diskSettings: {}
diskSizeGB: 128
managedDisk:
storageAccountType: Premium_LRS
osType: Linux
publicIP: false
MachineSetを新規作成する場合は、既存のMachineSetを参照しながら、値を変更すると便利です。
<>
で囲んだところは、AROクラスターの環境に応じて適宜変更します。
具体的な変更内容については、当日インストラクターから案内されますが、
それぞれの変数の説明は次のとおりです。
-
MachineSet名
: 任意に指定可能なMachineSet名。(例: testmyaro01-ddm8w-hkojima-worker-eastus3) -
AROクラスター名
: マシンセットで参照されるAROクラスターの名前。(例: testmyaro01-ddm8w) -
key, value
: マシンセットで指定する任意のラベル名。(例:「key」に「type」、「value」に「hkojima-worker-nodes」を指定。このラベルは後に使いますので、他の受講者と被らないようなラベルを付けて下さい) -
リージョン名
: AROクラスターが作成されたリージョン名。(例: japaneast) -
ネットワークリソースグループ名
: AROが利用するVirtual Networkリソースがあるリソースグループ名。(例: openenv-hkctf) -
AROクラスターのインフラID
: AROクラスターに付けられたID。(例: myopendomain01) -
Virutal Network名
: AROクラスターが利用するVirtual Network名。(例: myopenaro-vnet01) -
サブネット名
: ワーカーノードが利用するサブネット名。(例: worker-subnet) -
AROのバージョンID
: AROのバージョンのID。(例: aro_413) -
AROのバージョン番号が付いたイメージID
: イメージID。(例: 413.92.20230614)
これらの変数を設定した、
MachineSetのサンプルファイルがありますので参考にしてください。
このサンプルでは、 vmSize: Standard_F4s_v2
でAROで利用可能な最小サイズのワーカーノードを指定し、
zone: “3”
で3番目のアベイラビリティーゾーンを指定しています。
MachineSetの作成に伴い、対応したワーカーノードに、
前述したMachineSet作成時に指定したラベル(下記画像の例では、一番下のラベル type=hkojima-worker-nodes
)が
自動的に付与されます。
このラベルを利用して、Podを特定のラベルが付いたワーカーノードで実行できるようになります。
オートスケールの設定
ARO/OpenShiftでのオートスケールを設定するには、次の2つの設定が必要になります。
-
Cluster Autoscaler
: クラスター全体のオートスケールの設定。クラスター全体のコントローラおよびワーカーノードの上限値、CPU/メモリの最小/最大値などを設定 -
Machine Autoscaler
: MachineSetに対するオートスケールの設定。最小台数と最大台数を設定
Cluster Autoscalerは、次のYAMLファイルを利用して、OpenShiftのWebコンソールから設定できます。
これはアラート設定手順の時と同様に、OpenShiftコンソールの右上にある +
アイコンから
直接YAMLファイルを入力して作成します。Cluster Autoscalerの名前は、
default
を指定する必要がありますので、注意してください。
本演習をワークショップ形式で実施している場合、Cluster Autoscalerはすでに設定されています。 |
apiVersion: "autoscaling.openshift.io/v1"
kind: "ClusterAutoscaler"
metadata:
name: "default"
spec:
podPriorityThreshold: -10
resourceLimits:
maxNodesTotal: 60
cores:
min: 8
max: 512
memory:
min: 4
max: 1024
scaleDown:
enabled: true
unneededTime: 6m
delayAfterAdd: 2m
delayAfterDelete: 1m
delayAfterFailure: 15s
この例では、最大60台までノードをデプロイ可能で、オートスケールダウンも設定し、 不要なノードが削除対象になるまでの時間を6分間と指定しています。 その他のパラメータの説明については、 OpenShiftの製品ドキュメントもご参照ください。
Cluster Autoscalerが作成されると、下記の画像の一番下に default
という名前で
作成されていることが確認できます。
続いて、Machine Autoscalerの設定です。これは前述した手順で 受講者が作成したMachineSetの右側にある「・」が縦に3つ並んだアイコンをクリックして、 「Machine Autoscalerの作成」をクリックし、最小数と最大数を設定するだけの手順です。 今回の演習では、最小数を「1」、最大数を「2」と設定してください。
オートスケールのテスト
実際にオートスケールをテストしてみます。
受講生が作成したプロジェクトを適宜指定して、
次のYAMLファイルで、busybox Podを15個並列に実行するジョブを実行します。
このジョブも、OpenShiftコンソールの右上にある +
アイコンから直接入力して作成します。
このとき、先ほどMachineSetを作成する時に指定したラベルを利用して、
このジョブによって作成されるPodが、受講者が作成したMachineSet内だけで実行されるように、
「nodeSelector」を指定します。
ラベルの「key: value」の「value」に相当する文字列(この例では、 <ユーザー名>-worker-nodes
)は、
ダブルクォーテーションで囲む必要があります。
これを忘れると、「value」の値が文字列として認識されないため、
ラベルの指定ができず、CPU/メモリのリソースが空いている任意のワーカーノードで
Podが実行されるようになるため、注意してください。
apiVersion: batch/v1
kind: Job
metadata:
generateName: work-queue-
spec:
template:
spec:
nodeSelector:
type: "<ユーザー名>-worker-nodes"
containers:
- name: work
image: busybox
command: ["sleep", "360"]
resources:
requests:
memory: 500Mi
cpu: 500m
restartPolicy: Never
backoffLimit: 4
completions: 15
parallelism: 15
ジョブを実行して数分待つと、MachineSet Autoscalerを設定したMachineSetによって、 自動的にワーカーノードが1台追加され、追加されたワーカーノード上でPodが実行されることを確認できます。 これらは「Jobs」メニューや、「コンピュート」の中にある「Node」や「MachineSet」といったメニューを見ることで確認できます。
この演習環境の場合、ジョブ実行が完了し、不要になったワーカーノード1台が オートスケールダウンによって削除されるまで、20分ほどかかります。 途中でジョブの実行を中止したい場合、当該ジョブを選択して、 右上の「アクション」メニューから、「Jobの削除」を選択して「削除」を選択します。 これによりジョブによって起動されたPodが全て削除され、数分経つと、自動的にワーカーノードが1台削除されます。
最後に受講生が作成したMachineSetを削除します。 当該MachineSetを選択して、「MachineSetの削除」を選択することで、 MachineSet及びそれに紐づく全てのワーカーノードが削除されます。