一、背景の紹介
"データアナリストのようなヘビーユーザと利用頻度が低いユーザや参照系のユーザなど、さまざまなユーザがおり、SASプログラムを実行する際に利用するCPUとメモリなどの計算リソースを、ユーザタイプごとに割り当てる設定をしたい"。これは、多くのViyaユーザ様が持つ課題です。これを実現するためには、次の2つのステップが必要です
1.異なるタイプのユーザごとに利用できる計算リソースを設定します。
2.異なるタイプのユーザに対して、権限を個別に割り当てる必要があります。
本記事では、まずViyaのシステム管理者に向けて、ユーザが利用できる計算リソースの上限値の変更方法を紹介していきます。
二、準備
設定方法を紹介する前に、まずViyaでSASプログラムを実行時に計算リソースを調達する方法を説明します。ここでは、viyaのアーキテクチャとk8sの知識が必要になるので、なるべくわかりやすく解説していきたいと思います。
まず、ユーザがSAS Studioを使用する際、Viyaはそのユーザのみが使用できるセッションを作成します。
ユーザは、実行が必要なSASアプリケーションごとに個別のセッションを作成することができ、各セッションはバックグラウンドでk8sクラスタ上に対応するポッドを持ちます。 各ポッドには使用できるCPUとメモリの上限があり、デフォルトでは2vcpusと2Giのメモリが使用できます。Viyaがユーザのセッションのためにポッドを生成するとき、ポッドテンプレート(podTemplate)と呼ばれるものを参照します。ポッドテンプレートはviyaがデプロイされるときにyamlファイルで定義されるものです。そのため、ユーザセッションが利用できる計算リソースを変更したい場合は、viyaのデプロイに使用するポッドテンプレートのyamlファイルを変更する必要があります。また、ユーザの種類によって異なる計算リソースの制限を設定したい場合は、既存のポッドテンプレートをコピーして、名前と数値を変更するだけです。
デプロイメントファイルとK8sクラスターに変更を加える必要があるため、以下を準備する必要があります。基本的にViyaをデプロイ時に必要なものと同じですので、もし下記に対して不明なところがある場合、ご利用のViya環境のデプロイ担当者にお問い合わせください。
・k8sクラスターのAPIサーバーに接続できる作業用のサーバー、OSはLinux系がおすすめです。
・k8sクラスターに接続用コンフィグファイル(管理者権限が必要)。~/.kube/configとして保存します。
・k8sのコマンドラインツール:kubectl
・Viyaデプロイメントアセットのコンパイル用ツール:kutomize
・Viyaをデプロイ時に使ったkustomization.yamlやsite-configフォルダを含めたファイルアセット
三、計算リソース上限値の修正方法
計算リソースの調達方法を簡単に紹介した後、次は、そのリソースを変更する方法について説明します。ここでは、主に以下の2つの方式を採用しています。以下はLinux OSを使用することを前提に説明します。
以下はこの章の項目の一覧です。読者は以下のリンクを使って興味のあるセクションに直接ジャンプすることができます。
1.デプロイ用ポッドテンプレートファイルを修正し、再デプロイでリソースの設定を更新する方法
2.K8sクラスター内にデプロイされたポッドテンプレートをそのまま修正する方法
3.設定後の検証方法
1.デプロイ用ポッドテンプレートファイルを修正し、再デプロイでリソースの設定を更新する方法
この方法のメリットは、デプロイメントファイルに対して変更を加えるため、後にViya環境のバージョンアップや設定変更があった場合でも、計算リソースの設定の変更が保持されることです。 デメリットは、設定時にデプロイメント手順を再実行する必要があるため、比較的面倒ではあるが、長期的には管理しやすいので、おすすめです。
①まず、Viya のデプロイメントアセットを含むパスの一番下に移動する必要があります。 このパスを/opt/viyainstallと仮定して、以下のコマンドを実行する必要があります。
deploy=/opt/viyainstall cd $deploy |
パス$deployの下の構造は、おおよそ次のようになっているはずです。下記のファイルやフォルダが含まれていない場合、パスが正しいか、Viyaのデプロイに使用するファイルが欠落していないかを確認することが重要です。
②次に、ポッドテンプレート内で定義されているcpuとmemoryの制限を変更するために、site-configフォルダに以下のファイルを作成する必要があります。実際には、設定したいCPUやメモリの上限値に合わせて、下記のコマンド内のvalueの値を変更する必要があります。下記のコマンドの例では、ユーザが利用できる計算リソースの上限を31vcpu/240Giに設定しました。
cat <<EOF > $deploy/site-config/modify-podtemplate.yaml #メモリの上限値を修正 - op: add path: "/metadata/annotations/launcher.sas.com~1default-memory-limit" value: 240Gi #利用できるメモリの上限値 - op: add path: "/metadata/annotations/launcher.sas.com~1max-memory-limit" value: 240Gi #利用できるメモリの上限値 #CPUの上限値を修正, 1000m=1vcpu - op: add path: "/metadata/annotations/launcher.sas.com~1default-cpu-limit" value: 31000m #利用できるCPUの上限値 - op: add path: "/metadata/annotations/launcher.sas.com~1max-cpu-limit" value: 31000m #利用できるCPUの上限値 EOF |
③次に、前のステップで作成したyaml ファイルのパスをファイル kustomization.yaml に追加するだけです。
下記のコマンドでkustomization.yamlを開き、
vi $deploy/kustomization.yaml |
そして、”patches:”のブロックを探します。通常は下記のようなものです。
その後ろに、下記の内容を追加します。
- path: site-config/modify-podtemplate.yaml #podリソース設定ファイルのパス target: name: sas-compute-job-config #修正するポッドテンプレート名 version: v1 kind: PodTemplate |
以下は追加後の様子です。
こちらにname: sas-compute-job-configと書いてあるのはsas-compute-job-configのポッドテンプレートに対して修正を行います。Viyaにはデフォルトでいくつかの種類のポッドテンプレートが存在しています。ユーザが利用できるのは大体以下の三種類です。残りはViyaシステムにより利用されるポッドテンプレートです。
sas-compute-job-config:ViyaのSAS StudioなどでSASコードを実行時に利用します。最もよく利用されるポッドテンプレートです。
sas-batch-pod-template:バッチでSASプログラムを実行するときに利用されます。
sas-connect-pod-template:SAS9の環境からSAS Connectを介してSASプログラムを実行するときに利用されます。
もし複数個のポッドテンプレートに対して計算リソースの上限値を修正したい場合は、下記のように設定を書けばよいです。
終わったら、:wqでファイルを保存します。
④最後に、編集したファイルを再コンパイルして、Viyaにデプロイするだけです。 デプロイ時には、計算リソースの変更部分のみがViya環境に更新され、他の部分が変更される心配はありません。ここでは、コマンドラインツールであるkubectlとコンパイル用ツールkustomizeを使用します。
下記のコマンドでデプロイメントファイルをコンパイルします。
kustomize build -o site.yaml |
ファイルをデプロイします。
kubectl apply --selector="sas.com/admin=cluster-api" --server-side --force-conflicts -f site.yaml kubectl wait --for condition=established --timeout=60s -l "sas.com/admin=cluster-api" crd kubectl apply --selector="sas.com/admin=cluster-wide" -f site.yaml kubectl apply --selector="sas.com/admin=cluster-local" -f site.yaml --prune kubectl apply --selector="sas.com/admin=namespace" -f site.yaml --prune kubectl apply --selector="sas.com/admin=namespace" -f site.yaml --prune --prune-whitelist=autoscaling/v2beta2/HorizontalPodAutoscaler |
これで、SASプログラムが実行時に利用できる計算リソースの上限値の設定変更は完了しました。
2.K8sクラスター内にデプロイされたポッドテンプレートをそのまま修正する方法
上記の計算リソースの上限値を変更する方法は、デプロイファイルの修正によって実現されます。しかし、システム管理者がデプロイファイルを持っていない場合もあります。この場合、デプロイファイルを使わずにViya環境を直接修正する方法が利用できます。注意しなければならないのは、この方法は便利ですが、デメリットとして、デプロイされた環境に直接設定変更が行われるため、バージョンアップや設定変更により再デプロイが必要になった場合、変更内容がデフォルトの設定で上書きされてしまうため、再デプロイごとに、本設定を行う必要があります。従って、特に本番環境などの非テスト環境ではこの方法の利用は避けてください。
①まず、ViyaにデプロイされたPodtemplateの種類を確認する必要があります。 kubectlで以下のコマンドを実行します。{namespace} は Viya 環境で使用される名前空間です。もしわからない場合は kustomization.yaml ファイルを開いて確認するか、Viya のデプロイメント担当者に問い合わせることで確認することができます。
kubectl get podtemplates -n {namespace} |
コマンド実行後、下記の図のようにデプロイされたポッドテンプレートの一覧が表示されます。 前述のように、各ポッドテンプレートは、特定のシナリオで使用されます。基本は、SAS StudioでSASプログラムを利用する場合は、sas-compute-job-configのポッドテンプレートを変更するだけで済みます。それ以外のポッドテンプレートを利用する場合は、各ポッドテンプレートに対して同様の操作を繰り返すだけです。
②次に、ポッドテンプレートsas-compute-job-configの修正画面を下記のコマンドで開きます。
kubectl edit sas-compute-job-config -n {namespace} |
下記は開いた後の画面です。
上部のannotationsの部分は無視し、赤枠の内にコンテンツを追加していきます。内容を追加時にインデントを揃える必要があるのが要注意です。
launcher.sas.com/default-cpu-limit: 31000m launcher.sas.com/default-memory-limit: 240Gi launcher.sas.com/max-cpu-limit: 31000m launcher.sas.com/max-memory-limit: 240Gi |
下記は追加後のファイルコンテンツです。赤い枠内の内容は今回追加した計算リソースの上限値の設定です。設定内容は再デプロイでリソースの設定を更新する方法を紹介時に使った例と同じです。これで、設定が完了したので、:wqでファイルを保存し修正画面を閉じます。
3.設定後の検証方法
計算リソースの制限値の設定が有効になっているかを検証するために、下記のステップでSAS Studioで新しいセッションを起動し、kubernetes上でそのセッションのポッドの設定を確認します。
①SAS Viyaにログインし、SAS Studioを開き、新しいセッションを起動します。もし、設定変更前にすでにSAS Studioを開いている状態であれば、メニューから「オプション」→「セッションリセット」を選択し、SAS Studioのセッションをリセットします。そして、画面の右上が下記の図の内容のようになっていることを確認できれば、次のステップへ進みます。
②セッションの起動あるいはリセットが完了後、つぎはkubernetes上で新しく立ち上がったセッションのポッド情報を確認します。 まず、下記のコマンドでSAS Studioのセッションの一覧を確認します。
kubectl get pods -l swo.sas.com/containerName=sas-programming-environment, launcher.sas.com/requested-by-client=sas.studio --sort-by=.metadata.creationTimestamp -n {namespace} |
コマンドを実行したら、下記のような結果が表示されます。右側の“AGE”列の時間の値が一番小さい項目を探し、そのポッド名をコピーします。下記の例の場合は、赤い枠の部分をコピーします。
③下記のコマンドに、コピーしたポッド名を使って、ポッドの情報を確認します。
kubectl describe pod {コピーしたポッド名} -n {namespace} |
実行後、多くの内容が表示されますが、下記のような情報を探します。一つのポッド内に複数のコンテナーが含まれていますので、下記の青い枠内のコンテナー名が”sas-programming-environment”となっていることを必ず確認します。それを見つけたら、下の赤い枠内の情報は修正後の計算リソースとなっているかどうかを確認します。修正したCPU数とメモリ数が表示されていれば、計算リソースの上限値の修正は成功となります。
四、最後
本記事では、ViyaのSAS Studioのユーザが利用できる計算の上限を変更する方法について説明しました。 次回のブログではでは、ユーザのタイプによって異なる計算リソースの制限を設定する方法と、ユーザ権限管理方法について説明します。