一、背景の紹介
"データアナリストのようなヘビーユーザと利用頻度が低いユーザや参照系のユーザなど、さまざまなユーザがおり、SASプログラムを実行する際に利用するCPUとメモリなどの計算リソースを、ユーザタイプごとに割り当てる設定をしたい"。これは、多くのViya4ユーザ様が持つ課題です。これを実現するためには、次の2つのステップが必要です
1.異なるタイプのユーザごとに利用できる計算リソースを設定します。
2.異なるタイプのユーザに対して、権限を個別に割り当てる必要があります。
前回の記事では、Viyaのシステム管理者に向けて、ユーザが利用できる計算リソースの上限値の変更方法を紹介していきます。本記事では、異なるタイプのユーザに対して、利用できる計算リソースを個別に設定する方法と権限を個別に割り当てる方法を紹介します。
二、準備
ユーザがSAS Studioを使用しているときにSAS Viyaがどのように計算リソースを呼び出すかは、前回の記事で説明したとおりですので、ここで割愛します。 興味のある方は、こちらのリンク先のブログをご参照ください。
以下の紹介内容は、基本的に一回目の記事と同じくデプロイメントファイルとK8sクラスターに変更を加える必要があるため、以下を準備する必要があります。基本的にViyaをデプロイ時に必要なものと同じですので、もし下記に対して不明なところがある場合、ご利用のViya環境のデプロイ担当者にお問い合わせください。
・k8sクラスターのAPIサーバーに接続できる作業用のサーバー、OSはLinux系がおすすめです。
・k8sクラスターに接続用コンフィグファイル(管理者権限が必要)。~/.kube/configとして保存します。
・k8sのコマンドラインツール:kubectl
・Viyaデプロイメントアセットのコンパイル用ツール:kutomize
・Viyaをデプロイ時に使ったkustomization.yamlやsite-configフォルダを含めたファイルアセット
また、ユーザの権限を設定するには、ViyaのGUI上での操作が必要のため、以下の準備も必要です。
・管理者権限を持つViyaアカウント
三、ユーザごとに計算リソースの上限値を設定する方法
この章の項目は多いので、読者は以下のリンクを使って興味のあるセクションに直接ジャンプすることができます。
1.シナリオの紹介
2.ユーザグループの作成
3.SAS Viyaのデプロイメントファイルの修正
4.ヘビーユーザ用ポッドテンプレートを作成
5.ユーザ権限の設定
6.ユーザ権限設定の検証
1.シナリオの紹介
こちらの章の内容は、下記のシナリオに基づいて、ヘビーユーザとライトユーザ二種類のタイプのユーザに対して、それぞれ異なる計算リソースの上限を設定するシナリオを紹介します。
・ユーザタイプA:ヘビーユーザ
利用する最大CPU:8CPU
利用する最大メモリ:8Gi
・ユーザタイプB:ライトユーザ
利用する最大CPU:2CPU
利用する最大メモリ:2Gi
2.ユーザグループの作成
まず、Viyaにヘビーユーザとライトユーザの2つの独立したユーザグループを作成する必要があります。この部分の作業はSAS ViyaのGUI上で実施します。
①SAS Viyaへログインし、左側のメニューから「環境の管理」を選択します。
②環境管理の画面に切り替わったら、左のメニューから「ユーザ」を選択します。
③そして、画面上部の「ビュー」をクリックし、「カスタムグループ」を選択し、「新規作成」ボタンをクリックします。
④ヘビーユーザ用グループを作成しますので、グループ新規作成の画面に、名前とID、説明を下記の図のように入力し、「保存」ボタンをクリックします。
⑤そして、ライトユーザに対しても、同様の方法でグループを作成します。
⑥次は、作ったユーザグループにユーザを追加しますので、作ったグループ名を選択し、右側の編集アイコンをクリックします。
⑦ユーザ追加画面で、追加するユーザを選択し、追加アイコンで追加し、終わったら「OK」ボタンをクリックします。同様な操作でもう一つのヘビーユーザ用グループに対しても実施します。これで、ユーザグループの作成は完了しまた。
3.ライトユーザ用ポッドテンプレートを作成
ユーザグループごとに使用する計算リソースが異なるため、ユーザグループを作成した後に、ユーザグループごとに個別のポッドテンプレートを定義する必要があります。この部分の作業は、kubernetes側で実施します。
①まず、ライトユーザ向けのポッドテンプレートを作成してみましょう。下記のコマンドで既存のポッドテンプレートをファイルとして、ローカルに保存します。
kubectl get podtemplate sas-compute-job-config -n {namespace} -o yaml > sas-compute-job-config-light-user.yaml |
②そして、任意のエディターで保存したポッドテンプレートファイルを開きます。こちらの例では、viコマンドを利用します。
vi sas-compute-job-config-light-user.yaml |
③-1次に、保存したファイルの内容を修正します。もし、前回の記事の内容通りに設定し終われば、開いたファイル内に下記の赤い枠部分の内容があるはずです。まず赤い枠内の計算リソース上限値の定義を修正します。ライトユーザに利用されるので、CPUを2つに、メモリを2Giに修正します。次に、ポッドテンプレートの名前は既存のもの被ってはいけませんので、青色枠内のポッドテンプレート名を別のものに修正する必要があります。今回の例では、“sas-compute-job-config-light-user”に変更します。完了しましたら、:wqでファイルを保存します。
③-2もし今回は初めて計算リソースの上限の変更作業を実施する場合は、ファイルを開いたら、下記の図に示したように、赤い枠内に計算リソースの上限値が定義さ入れていない状態のはずです。この場合、計算リソース制限の定義を追加し、ポッドテンプレートの名前を変更するだけでよいのです。
上部のannotationsの部分は無視し、赤枠の内に下記のコンテンツを追加していきます。内容を追加時にインデントを揃える必要があるのが要注意です。
launcher.sas.com/default-cpu-limit: 2000m launcher.sas.com/default-memory-limit: 2Gi launcher.sas.com/max-cpu-limit: 2000m launcher.sas.com/max-memory-limit: 2Gi |
そして、下記の図に示した通り、青い枠内の内容を”sas-compute-job-config-light-user”に変更するだけです。
下記は修正後のファイルとなります。赤い枠は今回追加または修正した部分です。
問題はなければ、:wqでファイルを保存します。
④最後に、新しく作成したポッドテンプレートファイルを下記のコマンドでデプロイします。
kubectl apply -f sas-compute-job-config-light-user.yaml -n {namespace} |
下記の図のようなメッセージが出れば、ポッドテンプレートのデプロイが完了となります。
4.ヘビーユーザ用ポッドテンプレートを作成
次は同様な方法でヘビーユーザが利用するポッドテンプレートを作成します。ここでは手順を繰り返さず、既存のポッドテンプレートのコピーを作成し、計算リソース制限の定義とポッドテンプレートの名前を変更するだけです。 最終的には下記の図に示したようなファイルになります。赤い枠は今回追加または修正した部分です。
ポッドテンプレートファイルを作成した後に、ライトユーザの時と同様に下記のコマンドを使って、Viyaにデプロイします。
kubectl apply -f sas-compute-job-config-heavy-user.yaml -n {namespace} |
下記の図のようなメッセージが出れば、ポッドテンプレートのデプロイが完了となります。
5.ユーザ権限の設定
前回の記事で紹介したように、Viyaはポッドテンプレートを参照することによって、ユーザがSAS Studioセッションで利用できるリソースの量を決めていますが、具体的に、Viyaでユーザとポッドテンプレートがどのように繋がるかをここから詳しく説明します。ユーザがSAS Studioを起動するたびに、システムは計算コンテキストと呼ばれるものを呼び出します。
この計算コンテキストは、ランチャコンテキストと呼ばれるものも呼び出します。 このランチャコンテキストは、どのポッドテンプレートを使用するかを定義します。呼び出しの流れは下記の図の通りです。
ここまでの手順では、ポッドテンプレートの作成が完了しましたので、次にViya上でヘビーユーザとライトユーザが利用する計算コンテキストとランチャコンテキストを作成します。
①まず、SAS Viyaに管理者権限を持つユーザでログインし、メニューから「環境管理」と選択します。
②「環境管理」画面に入った後、画面の側のメニューから「コンテキスト」を選んで、切り替わった画面上で、「ビュー」のところをクリックし、下記のようなドロップダウンメニューが表示されます。
③まずはランチャコンテキストを作成します。コンテキストのビューでランチャコンテキストを選択し、画面の右上の新規作成ボタンをクリックします。
そして、ランチャコンテキストの新規作成画面が表示され、「名前」と「ポッドテンプレート名」に下記の図の通りの内容を入力し、保存ボタンをクリックします。また、こちらの画面内の環境変数のところで、エンコーディングの情報も定義できます。デフォルトはutf-8ですが、ニーズに応じてsjisなどに変更することが可能です。
ヘビーユーザ用のランチャコンテキストを作成し終わったら、次に同様な手順でライトユーザ用のランチャテキストを作成します。その作成画面は下記の図の通りです。
④ランチャコンテキストを作成し終わったら、次に計算コンテキストを作成します。コンテキストのビューで計算コンテキストを選択し、画面の右上の新規作成ボタンをクリックします。
そして、ランチャコンテキストの新規作成画面が表示され、下記の図の通り、名前に「SAS Studio compute context heavy user」を入力し、ランチャコンテキストを前のステップで作成した「SAS Studio launcher context heavy user」を選択します。そして、ユーザの権限設定もこちらの画面で設定しますので、識別子の種類で「識別子」を選択します。
開いた識別子の設定画面内で、フィルタの基準でカスタムグループを選択し、前のステップで作った「Heavy User」グループを選択し、追加ボタンをクリックします。右側の選択済み識別子のところで、追加されたユーザグループの確認ができたら、「OK」ボタンをクリックします。
権限設定完了後の画面は下記のとおりです。
問題なえれば、保存ボタンをクリックします。同様の手順、ライトユーザ用の計算コンテキストも作成します。
これで、ライトユーザとヘビーユーザに対する計算リソースと権限の設定は全部完了しました。
6、ユーザ権限設定の検証
最後に、設定がうまくいくかどうか確認してみましょう。
①まず、「3.SAS Viyaのデプロイメントファイルの修正」で作ったライトユーザグループにあるユーザでSAS Viyaを再ログインし、SAS Studioを開きます。
そして、画面の右上に「計算コンテキスト」を選択できますので、そこで「SAS Studio compute context light user」と選択します。
②セッションが立ち上がった後、ユーザが利用できるリソースを確認するために、kubernetes側で下記のコマンドを実行します。
viyauser={ご利用のユーザ名} namespace={ご利用のネームスペース} kubectl get pods \-l launcher.sas.com/username\=${viyauser},launcher.sas.com/requested-by-client\=sas.studio --sort-by\=.metadata.creationTimestamp -n ${namespace} | tail -n 1| awk '{print$1}' | xargs kubectl describe pod -n ${namespace} |
実行後、多くの内容が表示されますが、下記のような情報を探します。一つのポッド内に複数のコンテナーが含まれていますので、下記の青い枠内のコンテナー名が”sas-programming-environment”となっていることを必ず確認します。それを見つけたら、下の赤い枠内の情報は修正後の計算リソースとなっているかどうかを確認します。修正したCPU数とメモリ数が表示されていれば、計算リソースの上限値の修正は成功となります。
③次に、ライトユーザのままで、ヘビーユーザ用の計算コンテキストを使ってみます。
権限設定による、ライトユーザはヘビーユーザの計算コンテキストが利用できないので、下記の図のようなエラーが表示されたら、設定は成功しました。
④最後に、ヘビーユーザに対しても同様の検証を同じ検証手順を実行すれば、ユーザごとに計算リソースと権限の設定はすべて完了となります。
四、最後
ここまでで、ViyaでSAS Studioを使用する際に、ユーザーの種類によって異なるリソースや権限を割り当てる方法について説明しました。 この方法により、今後ユーザがViyaを利用する際に、限られた計算リソースとコストをより効率的に利用することが可能になると考えています。