Hinweis
Sie müssen bereits Batch on GKE installiert haben.
Rufen Sie die Verwaltungstools ab:
git clone https://github.com/GoogleCloudPlatform/Kbatch.git
Wechseln Sie in das Verzeichnis mit den Verwaltungstools:
cd admintools
Berechtigungen gewähren
Nutzer müssen sich mit container.clusters.get
beim Kubernetes-Cluster authentifizieren können, um Batch on GKE zu verwenden. Diese Berechtigung ermöglicht Nutzern die Ausführung von:
gcloud container clusters get-credentials <var>cluster-name</var>
Diese Berechtigung muss jedem Nutzer in jedem GCP-Projekt erteilt werden. Sobald Sie Berechtigungen erteilen, funktioniert das für jeden Cluster in diesem Projekt.
Sie können diese Berechtigung auf zwei Weisen erteilen:
Erstellen Sie eine benutzerdefinierte Rolle und eine Richtlinienbindung.
Führen Sie den folgenden Befehl aus, um eine benutzerdefinierte Rolle mit der Berechtigung
container.clusters.get
zu erstellen:gcloud iam roles create BatchUser --project [PROJECT_ID] \ --title GKEClusterReader --permissions container.clusters.get --stage BETA 2>&1
Weisen Sie die Rolle dann einem Nutzer zu:
gcloud projects add-iam-policy-binding [PROJECT_NAME] \ --member=user:[USER_EMAIL] \ --role=projects/[PROJECT_NAME]/roles/BatchUser
Gewähren Sie für den Nutzer die vordefinierte Rolle "containers.clusterViewer".
gcloud projects add-iam-policy-binding [PROJECT_NAME] --member=user:[USER_EMAIL] --role=roles/container.clusterViewer
Batch-User hinzufügen
Damit Nutzer Batchjobs senden können, müssen Sie ihnen bestimmte Kubernetes-RBACs (rollenbasierte Zugriffssteuerungen) gewähren. Öffnen Sie das Nutzerverzeichnis, um einen neuen Nutzer hinzuzufügen:
cd users
Nutzer ohne automatisches PVC hinzufügen
Batch stellt ein Skript bereit, mit dem alle erforderlichen RBACs in einem Schritt hinzugefügt werden:
./add-user.sh -s [SHORT_NAME] -u [USER'S_NAME] \ -n [NAMESPACE] --project [PROJECT_ID] --security-policy [UID],[GROUP_ID]
Mit diesem Befehl werden die folgenden RBACs für den Nutzer generiert:
- Ein BatchUserContext (mit dem Namen [SHORT_NAME][NAMESPACE]) mit der als
MustRunAs
konfigurierten UIDid und Gruppen-ID. - Eine k8s-ClusterRole und -ClusterRoleBinding (mit dem Namen [SHORT_NAME]-cr), um dem Nutzer die Leseberechtigung von BatchCostModel und BatchPriority zu gewähren.
- Eine k8s-Role und -RoleBinding (mit dem Namen [SHORT_NAME]-[NAMESPACE]), um BatchJobs im Namespace Berechtigungen zum Erstellen und Lesen zu gewähren.
Mit diesen Berechtigungen kann ein Nutzer BatchJobs im angegebenen Namespace senden.
Nutzer mit einem privaten PVC hinzufügen
Wenn Sie FileStore und eine automatische NFS-Bereitstellung in Ihrem Cluster eingerichtet haben, können Sie den folgenden Befehl ausführen, um einen Nutzer hinzuzufügen und ein privates PVC zu erstellen:
./add-user.sh -s [SHORT_NAME] -u [USER_NAME] -n [NAMESPACE] \ --project [PROJECT_ID] --auto-pvc --security-policy "2000,3000"
Dabei steht 2000 für die UID und 3000 für die GID.
Zusätzlich zu den RBACs bewirkt das Flag --auto-pvc
, dass ein NFS-basiertes PVC erstellt wird. Die automatische NFS-Bereitstellung erstellt auf dem NFS-Server einen Ordner.
Für Nutzer werden innerhalb des Namespace unter anderem folgende zusätzliche Ressourcen erstellt:
Ein PersistentVolumeClaim mit dem Namen [SHORT_NAME]-[NAMESPACE]. Ein PersistentVolume, das an das oben genannte PVC gebunden ist. Gewähren Sie dem Nutzer die RBACs, um diesen PVC verwenden zu können.
Nutzer mit freigegebenem PVC hinzufügen
Führen Sie den folgenden Befehl aus, um einen Nutzer hinzuzufügen und Zugriff auf bestimmte PVCs zu gewähren:
./add-user.sh -s [SHORT_NAME] -u [USER_NAME] -n [NAMESPACE] \ --project [PROJECT_ID] --pvcs [PVC_NAME],[PVC_NAME] --security-policy "2000,3000"
Nutzer löschen
Um für einen Nutzer die Berechtigungen zum Senden und Aufrufen von BatchJobs zu widerrufen, führen Sie den folgenden Befehl aus:
./delete-user.sh -s [SHORT_NAME] -n [NAMESPACE]
Der [SHORT_NAME] ist der gleiche Kurzname, der beim Hinzufügen des Nutzers verwendet wurde.
Nutzereinstellungen anpassen
BatchUserContext (BUC) ist eine Batch API-Ressource, die den Sicherheitskontext eines Jobs konfiguriert. BatchUserContext verknüpft einen Nutzer mit einer PodSecurityPolicySpec. Dadurch wird der Sicherheitskontext für die Batchjobs definiert, die von diesem Nutzer gesendet wurden.
Wichtige Dinge, die vom BatchUserContext konfiguriert werden können:
- Unix-Identität (UID), unter der der Job ausgeführt wird
- Ob der Job im privilegierten Modus als Root ausgeführt werden kann
- Der Typ der Volumes, die von diesem Nutzer verwendet werden können
Wenn ein Job gesendet wird, führt Batch die folgenden beiden Vorgänge basierend auf BUC aus:
Validiert, dass die BatchJob-Spezifikation nicht gegen die Richtlinie verstößt. Wenn die Richtlinie beispielsweise verhindert, dass ein BatchJob im privilegierten Modus ausgeführt wird, das Feld "privileged" des BatchJobs aber auf "true" gesetzt ist, schlägt das Senden des Jobs fehl.
Kopiert Werte aus dem BUC in leere Felder in der Jobspezifikation. Wenn die UID im BUC beispielsweise auf
MustRunAs: 3000
festgelegt ist und der Job keinenRunAs
-Wert hat, akzeptiert Batch den BatchJob und setzt das FeldRunAs
auf 3.000.
Beschreibungen aller Felder finden Sie unter PodSecurityPolicySpec.
Der Standard-BatchUserContext ist zum Beispiel:
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 erstellen
Führen Sie zum Erstellen eines BatchUserContext den folgenden Befehl aus:
kubectl create -f [NAME]-default-buc.yaml
BatchUserContext aktualisieren
Führen Sie den folgenden Befehl aus, nachdem Sie Ihre Änderungen in der Datei gespeichert haben, um einen BatchUserContext zu ändern:
kubectl apply -f [NAME]-default-buc.yaml
BatchUserContext löschen
Führen Sie den folgenden Befehl aus, um einen BatchUserContext zu löschen:
kubectl delete -f [NAME]-default-buc.yaml