K8s operator for per-user stateful workloads
Last updated Apr 26, 2026
73
Stars
13
Forks
16
Issues
0
Stars/day
Attention Score
18
Topics
Language breakdown
Go 51.6%
Shell 24.5%
HCL 21.0%
Dockerfile 1.5%
JavaScript 1.0%
Makefile 0.5%
▸ Files
click to expand
README
Selkies - Stateful Workload Operator
Selkies is a platform built on GKE to orchestrate per-user stateful workloads.
Quick start
Assumptions
- You are a member of a Google Cloud organization.
setup/scripts/createoauthclient.sh to use gcloud alpha iap oauth-brand commands, because these implicity operate on organization-internal brands. For more information, see this guide.
- You are granted the
Ownerrole in a project in that organization. - You have
gcloudinstalled in your environment.
Steps
The steps below will create the infrastructure for the app launcher. You should deploy to a new project.
- Clone the source repository:
git clone -b master https://github.com/selkies-project/selkies.git
cd selkies
- Configure gcloud (replace
XXX&us-west1with your project ID & preferred region):
export PROJECT_ID=XXX
export REGION=us-west1
gcloud config set project ${PROJECT_ID?}
gcloud config set compute/region ${REGION?}
- Enable the required GCP project services:
gcloud services enable \
--project ${PROJECT_ID?} \
cloudresourcemanager.googleapis.com \
compute.googleapis.com \
container.googleapis.com \
cloudbuild.googleapis.com \
servicemanagement.googleapis.com \
serviceusage.googleapis.com \
stackdriver.googleapis.com \
secretmanager.googleapis.com \
iap.googleapis.com
- Grant the cloud build service account permissions on your project:
PROJECT_NUMBER=$(
gcloud projects describe ${PROJECT_ID?} \
--format='value(projectNumber)'
) && \
CLOUDBUILDSA="${PROJECTNUMBER?}@cloudbuild.gserviceaccount.com" && \
gcloud projects add-iam-policy-binding ${PROJECT_ID?} \
--member serviceAccount:${CLOUDBUILD_SA?} \
--role roles/owner && \
gcloud projects add-iam-policy-binding ${PROJECT_ID?} \
--member serviceAccount:${CLOUDBUILD_SA?} \
--role roles/iam.serviceAccountTokenCreator
- Deploy with Cloud Build:
ACCOUNT=$(gcloud config get-value account) && \
gcloud builds submit \
--project=${PROJECT_ID?} \
--substitutions=USER=${ACCOUNT?},REGION=${REGION?}
- Deploy sample app:
(cd examples/jupyter-notebook/ && \
gcloud builds submit \
--project=${PROJECT_ID?} \
--substitutions=_REGION=${REGION?})
- Connect to the App Launcher web interface at the URL output below:
echo "https://broker.endpoints.${PROJECT_ID?}.cloud.goog/"
Troubleshooting
- If the initial cloud build fails with the message
Step #2 - "create-oauth-client": ERROR: (gcloud.alpha.iap.oauth-brands.list) INVALID_ARGUMENT: Request contains an invalid argument.,
it is most likely due to running as a user
that is not a member of the Cloud Identity Organization.
See the assumption described above.
- If the initial cloud build fails with the message
Step #2 - "create-oauth-client": ERROR: (gcloud.alpha.iap.oauth-clients.create) FAILED_PRECONDITION: Precondition check failed.,
it is most likely due to reusing a project
that already had its OAuth consent screen set to "External",
which cannot be changed via gcloud.
Click the "MAKE INTERNAL" button
here
in your project.
- If a
wgetstep fails, retry the same command.
- If your region only has 500 GB of Persistent Disk SSD quota, run the following,
cat - > selkies-min-ssd.auto.tfvars <<EOF
defaultpooldisksizegb = 100
turnpooldisksizegb = 100
gpucospooldisksize_gb = 100
tier1pooldisksizegb = 100
EOF
gcloud secrets create broker-tfvars-selkies-min-ssd \
--replication-policy=automatic \
--data-file selkies-min-ssd.auto.tfvars
- If the load balancer never comes online and you receive 500 errors
gcloud container clusters get-credentials broker-${REGION?}
./setup/scripts/fix_autoneg.sh🔗 More in this category