始める前に
Batch on GKE をインストールしている必要があります。
管理ツールを入手します。
git clone https://github.com/GoogleCloudPlatform/Kbatch.git
管理ツールのディレクトリに移動します。
cd admintools
権限の付与
Batch on GKE を使用するには、container.clusters.get
で Kubernetes クラスタに対する認証を行うための権限が必要です。この権限により、次のコマンドを実行できます。
gcloud container clusters get-credentials <var>cluster-name</var>
この権限は、各 GCP プロジェクトのすべてのユーザーに付与する必要があります。この権限は、そのプロジェクトのすべてのクラスタに適用されます。
この権限を付与するには、次の 2 つの方法があります。
カスタム役割とポリシー バインディングを作成します。
container.clusters.get
権限を含むカスタム役割を作成するには、次のコマンドを実行します。gcloud iam roles create BatchUser --project [PROJECT_ID] \ --title GKEClusterReader --permissions container.clusters.get --stage BETA 2>&1
この役割をユーザーに付与します。
gcloud projects add-iam-policy-binding [PROJECT_NAME] \ --member=user:[USER_EMAIL] \ --role=projects/[PROJECT_NAME]/roles/BatchUser
定義済みの containers.clusterViewer 役割をユーザーに付与します。
gcloud projects add-iam-policy-binding [PROJECT_NAME] --member=user:[USER_EMAIL] --role=roles/container.clusterViewer
BatchUsers の追加
ユーザーにバッチジョブの送信を許可するには、特定の Kubernetes RBAC(役割ベースのアクセス制御)を付与する必要があります。新しいユーザーを追加するには、users ディレクトリに移動します。
cd users
自動 PVC を使用しないユーザーの追加
Batch で用意されているスクリプトを使用すると、必要なすべての RBAC を 1 ステップで追加できます。
./add-user.sh -s [SHORT_NAME] -u [USER'S_NAME] \ -n [NAMESPACE] --project [PROJECT_ID] --security-policy [UID],[GROUP_ID]
このコマンドを実行すると、ユーザーに次の RBAC が生成されます。
- BatchUserContext(名前: [SHORT_NAME]-[NAMESPACE])。UIDid とグループ ID が
MustRunAs
の形式で構成されます。 - k8s の ClusterRole と ClusterRoleBinding(名前: [SHORT_NAME]-cr)。ユーザーに BatchCostModel および BatchPriority に対する読み取り権限が付与されます。
- k8s の Role と RoleBinding(名前: [SHORT_NAME]-[NAMESPACE])。名前空間の BatchJobs に対する作成権限と読み取り権限が付与されます。
このすべての権限を付与すると、ユーザーは指定された Namespace で BatchJob を送信できます。
プライベート PVC を使用するユーザーの追加
クラスタに FileStore と NFS 自動プロビジョナーが設定されている場合は、次のコマンドを使用してユーザーを追加し、プライベート PVC を作成できます。
./add-user.sh -s [SHORT_NAME] -u [USER_NAME] -n [NAMESPACE] \ --project [PROJECT_ID] --auto-pvc --security-policy "2000,3000"
ここで、2000 は UID、3000 は GID です。
RBAC 以外にも、--auto-pvc
フラグを使用すると、NFS ベースの PVC が作成されます。NFS 自動プロビジョナーは、NFS サーバーの下にフォルダを作成します。次のような追加リソースがユーザーの名前空間内に作成されます。
[SHORT_NAME]-[NAMESPACE]という名前の PersistentVolumeClaim。上記の PVC にバインドされた PersistentVolume。この PVC を使用できるように、ユーザーに RBAC を付与します。
共有 PVC を使用するユーザーの追加
ユーザーを追加して特定の PVC に対するアクセスを許可するには、次のコマンドを実行します。
./add-user.sh -s [SHORT_NAME] -u [USER_NAME] -n [NAMESPACE] \ --project [PROJECT_ID] --pvcs [PVC_NAME],[PVC_NAME] --security-policy "2000,3000"
ユーザーの削除
BatchJob の送信と表示を行う権限をユーザーから削除するには、次のコマンドを実行します。
./delete-user.sh -s [SHORT_NAME] -n [NAMESPACE]
[SHORT_NAME] は、ユーザーの追加時に使用した略称です。
ユーザー設定のカスタマイズ
BatchUserContext(BUC)は、ジョブのセキュリティ コンテキストを構成する Batch API リソースです。BatchUserContext は、ユーザーと PodSecurityPolicySpec を関連付けます。さらに、このユーザーが送信するバッチジョブのセキュリティ コンテキストを定義します。
BatchUserContext で構成可能な重要な要素は次のとおりです。
- ジョブが実行される Unix ID(UID)。
- ジョブを特権モードの root として実行できるかどうか。
- このユーザーが使用できるボリュームのタイプ。
ジョブを送信すると、Batch は BUC に基づいて次の 2 つの処理を行います。
BatchJob 仕様がポリシーに違反していないことを検証します。たとえば、ポリシーで特権モードでの BatchJob の実行をブロックしている場合、BatchJob の [privileged] フィールドが true に設定されていても、ジョブの送信に失敗します。
BUC の値をジョブ仕様の空のフィールドにコピーします。たとえば、BUC の UID が
MustRunAs: 3000
に設定されていて、ジョブにRunAs
値が設定されていない場合、BatchJob は受け入れられ、RunAs
フィールドは 3,000 に設定されます。
各フィールドの詳細については、PodSecurityPolicySpec を参照してください。
たとえば、デフォルトの BatchUserContext は次のようになります。
apiVersion: kbatch.k8s.io/v1beta1 kind: BatchUserContext metadata: labels: controller-tools.k8s.io: "1.0" name: alice-default namespace: default spec: userName: "*" securityPolicySpec: privileged: false allowPrivilegeEscalation: false requiredDropCapabilities: - ALL volumes: - 'configMap' - 'emptyDir' - 'secret' - 'downwardAPI' - 'persistentVolumeClaim' hostNetwork: false hostIPC: false hostPID: false runAsUser: rule: 'MustRunAs' ranges: - min: 12345 max: 12345 seLinux: rule: 'RunAsAny' runAsGroup: rule: 'MustRunAs' ranges: - min: 12345 max: 12345 fsGroup: rule: 'MustRunAs' ranges: - min: 12345 max: 12345 supplementalGroups: rule: 'MustRunAs' ranges: - min: 12345 max: 12345
BatchUserContext の作成
BatchUserContext を作成するには、次のコマンドを実行します。
kubectl create -f [NAME]-default-buc.yaml
BatchUserContext の更新
BatchUserContext を変更するには、変更をファイルに保存した後、次のコマンドを実行します。
kubectl apply -f [NAME]-default-buc.yaml
BatchUserContext の削除
BatchUserContext を削除するには、次のコマンドを実行します。
kubectl delete -f [NAME]-default-buc.yaml