Learn how to deploy Geneva on Kubernetes using KubeRay for distributed feature engineering workflows on GKE and EKS.
Feature Engineering is deployed automatically in LanceDB EnterpriseFor manual installation in self-managed environments, follow the instructions below.
Feature Engineering can be deployed as part of LanceDB Enterprise in managed or self-managed environments. First class support is provided for Azure, AWS, and GCP, including deployment automation via Terraform and Helm.
Inside your Kubernetes cluster, you need a Kubernetes service account which provides the credentials your k8s pods (Ray) run with. Here’s how to create your KSA.
Google Kubernetes Engine (GKE) is a GCP service that deploys Kubernetes and can manage on-demand provisioning of cluster nodes. Ray can be deployed on GKE clusters using the KubeRay k8s operator.GKE provides the option for an out-of-the-box KubeRay operator deployment. The version of KubeRay is tied to the version of GKE you have deployed. Currently these versions are supported:
GKE 1.30 / KubeRay 1.1
GKE 1.31 / KubeRay 1.2
Alternatively, you can also deploy your own KubeRay operator to get the latest KubeRay 1.3 version.The following sections describe in more details other required configuration settings required for Geneva to perform distributed execution.
GKE allows you to specify templates for virtual machines in “node pools”. These allow you to manage and configure resources such as the number of CPUs, number of GPUs, amount of memory, and if instances are spot or regular virtual machines.You can define your node pools however you want but Geneva uses three specific Kubernetes labels when deploying Ray pods on GKE: ray-head, ray-worker-cpu, ray-worker-gpu
Head nodes are where the Ray dashboard and scheduler run. They should be non-spot instances and should not have processing workloads scheduled on them. Geneva looks for nodes with the geneva.lancedb.com/ray-head k8s label for this role.
CPU Worker nodes are where distributed processing that does not require GPU should be scheduled. Geneva looks for nodes with the geneva.lancedb.com/ray-worker-cpu k8s label when these nodes are requested.
GPU Worker nodes are where distributed processing that require GPU should be scheduled. Geneva looks for nodes with the geneva.lancedb.com/ray-worker-gpu k8s label when these nodes are requested.
Geneva needs the ability to deploy a KubeRay cluster and submit jobs to Ray. The workers in the Ray cluster need the ability to read and write to the Google Cloud Storage (GCS) buckets. This requires setting up the proper k8s permissions and GCP IAM grants. There are three main areas to setup and verify:
In the following sections we’ll use these variables:
NAMESPACE=lancedb # replace with your actual namespace if differentKSA_NAME=geneva-ray-runner # replace with an identity namePROJECT_ID=... # replace with your google cloud project nameGSA_EMAIL=${KSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.comLANCEDB_URI=gs://bucket/db # replace with your own path
To give your k8s workers the ability to read and write from your LanceDB buckets, your KSA needs to be bound to a Google Cloud service account (GSA) with those grants. With this setup, any pod using the KSA will automatically get a token that lets it impersonate the GSA.Let’s set this up:Create a Google Cloud Service Account
gcloud iam service-accounts create ${KSA_NAME} \ --project=${PROJECT_ID} \ --description="Service account for ray workloads in GKE" \ --display-name="Ray Runner GSA"
You can verify this using:
gcloud iam service-accounts list --filter="displayName:Ray Runner GSA"
Warning: You need roles/iam.serviceAccountAdmin or minimally roles/iam.serviceAccountTokenCreator rights to run these commands.
Next, you’ll need to verify that your KSA is bound to your GSA and has roles/iam.workloadIdentityUser:
A GKE workload identity is required to enable k8s workloads access Google Cloud services securely and without needing to manually manage service account keys. The workload identity is attached to Google Cloud service accounts (GSA) and mapped to a Kubernetes service account (KSA). This feature needs to be enabled on the GKE cluster.You can confirm that your workers have abilities to read/write to the LanceDB bucket:
Geneva can be used to provision Ray clusters running in Amazon Web Services (AWS) Elastic Kubernetes Service (EKS).In the following sections we’ll use these variables:
NAMESPACE=lancedb # replace with your actual namespace if differentCLUSTER=geneva # replace with your actual namespace if differentKSA_NAME=geneva-ray-runner # replace with an identity name
EKS allows you to specify templates for virtual machines in “node groups”. These allow you to manage and configure resources such as the number of CPUs, number of GPUs, amount of memory, and if instances are spot or regular virtual machines.You can define your node groups however you want but Geneva uses three specific Kubernetes labels when deploying Ray pods on EKS: ray-head, ray-worker-cpu, ray-worker-gpu
Head nodes are where the Ray dashboard and scheduler run. They should be non-spot instances and should not have processing workloads scheduled on them. Geneva looks for nodes with the geneva.lancedb.com/ray-head: true k8s label for this role.
CPU Worker nodes are where distributed processing that does not require GPU should be scheduled. Geneva looks for nodes with the geneva.lancedb.com/ray-worker-cpu: true k8s label when these nodes are requested.
GPU Worker nodes are where distributed processing that require GPU should be scheduled. Geneva looks for nodes with the geneva.lancedb.com/ray-worker-gpu: true k8s label when these nodes are requested.
Geneva must be run in an environment with access to AWS credentials with permissions to sts:AssumeRole on the Geneva Client IAM Role.For example, this could be a laptop with credentials provided by environment variables, or an EC2 instance with credentials provided via Instance Profile.
The Geneva Client IAM Role is assumed by the Geneva client to provision the Kuberay cluster and run remote jobs.This role requires IAM permissions to access the storage bucket and Kubernetes API.Create an IAM role with the following policy:
This role should also have a trust policy with sts:AssumeRole permissions for any principal initiating the Geneva client.When using Geneva, this role can be specified with the role_name RayCluster parameter.
An IAM role is required for the Kubernetes Service Account (KSA) that will be used by the Ray head and worker pods.This role must have permissions to access the storage bucket and to describe the EKS cluster:
Associate the IAM Role with the Kubernetes Service Account
Modify the Kubernetes Service Account created in “Basic Kubernetes setup” to associate it with the IAM role created above.The role ARN is specified using eks.amazonaws.com/role-arn annotation:
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"LanceDB","colors":{"primary":"#FF6B35","light":"#FF8A5C","dark":"#E55A2B"},"logo":{"light":"https://mintcdn.com/lancedb-bcbb4faf/6L0IRVkfdlgMU1Pw/static/assets/logo/dark-lancedb-logo.svg?fit=max\u0026auto=format\u0026n=6L0IRVkfdlgMU1Pw\u0026q=85\u0026s=d0592e59a29df2477080a857e13e341f","dark":"https://mintcdn.com/lancedb-bcbb4faf/6L0IRVkfdlgMU1Pw/static/assets/logo/light-lancedb-logo.svg?fit=max\u0026auto=format\u0026n=6L0IRVkfdlgMU1Pw\u0026q=85\u0026s=519956514d5529517daa4cb1f3d35392","href":"https://lancedb.com"},"favicon":"https://mintcdn.com/lancedb-bcbb4faf/0sS6vrpmM3KSVyss/static/favicon.ico?fit=max\u0026auto=format\u0026n=0sS6vrpmM3KSVyss\u0026q=85\u0026s=84b9ea3dfc312b7a4dfc99219e229b33","appearance":{"strict":false},"background":{"color":{"light":"#FAF5F0","dark":"#000000"}},"navbar":{"links":[{"href":"https://www.lancedb.com/contact","label":"Support"}]},"footer":{"socials":{"github":"https://github.com/lancedb","linkedin":"https://www.linkedin.com/company/lancedb","x":"https://x.com/lancedb","discord":"https://discord.gg/AUEWnJ7Txb"},"links":[{"items":[{"label":"Cookie settings","href":"#cookie-settings"}]}]},"fonts":{"family":"Inter"},"styling":{"codeblocks":{"theme":{"light":"vitesse-light","dark":"catppuccin-mocha"}},"latex":true},"integrations":{"ga4":{"measurementId":"G-1TMC2PR69E"}},"banner":{"content":"[Why Multimodal Data Needs a Better Lakehouse? — Download the Research Study](https://lancedb.com/download/)","dismissible":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"lancedb-bcbb4faf","hasAudioNarration":false,"actualSubdomain":"lancedb-bcbb4faf","customDomains":["docs.lancedb.com"],"gitSource":{"type":"github","owner":"lancedb","repo":"docs","deployBranch":"deploy-freeze","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad1ba1060c5abd76761bca2","collectionId":"f5c9f0e7-4822-4807-b59f-14a5f6599ae7","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad1ba1060c5abd76761bca2"},"feedback":{"thumbs":true,"edits":false,"issues":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ad1ba1060c5abd76761bca2","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"API Reference","count":112},{"language":"default","tag":"Documentation","count":97},{"language":"default","tag":"Integrations","count":76},{"language":"default","tag":"REST API","count":55},{"language":"default","tag":"Table","count":44},{"language":"default","tag":"Guides","count":41},{"language":"default","tag":"Feature Engineering (Geneva)","count":34},{"language":"default","tag":"Datasets","count":32},{"language":"default","tag":"Tutorials","count":16},{"language":"default","tag":"Embedding Providers","count":15}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"static/styles/style.css","content":":root{--banner-left:#e4d8f8;--banner-right:#e55a2b}@font-face{font-family:\"LanceDB KaTeX AMS\";src:url(https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/fonts/KaTeX_AMS-Regular.woff2) format(\"woff2\");font-display:swap;font-style:normal;font-weight:400}.katex .mathbb,.katex .textbb{font-family:\"LanceDB KaTeX AMS\",\"KaTeX_AMS\",serif!important}#banner,:where(.banner, [data-banner], [class*=\"Banner_banner\"]){background:linear-gradient(90deg,var(--banner-left) 0%,var(--banner-right) 100%)!important;color:#1b0f09!important;border:0!important}#banner a,:where(.banner, [data-banner], [class*=\"Banner_banner\"]) a{color:#1b0f09!important;font-size:.9rem;font-weight:500;text-decoration-color:rgba(27,15,9,.35)}#banner button,:where(.banner, [data-banner], [class*=\"Banner_banner\"]) button{color:#1b0f09!important}"}],"page":{"pagePath":"geneva/deployment","slug":"/geneva/deployment","pageMetadata":{"title":"Manual Deployment on Kubernetes","sidebarTitle":"Manual Deployment","description":"Learn how to deploy Geneva on Kubernetes using KubeRay for distributed feature engineering workflows on GKE and EKS.","icon":"cogs","href":"/geneva/deployment/index"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Learn how to deploy Geneva on Kubernetes using KubeRay for distributed feature engineering workflows on GKE and EKS.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,blockquote:`blockquote`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,OptimizedImage,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(Tip,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Feature Engineering is deployed automatically in LanceDB Enterprise`})}),_jsx(_components.p,{children:`For manual installation in self-managed environments, follow the instructions below.`})]}),`\n`,_jsx(_components.p,{children:`Feature Engineering can be deployed as part of LanceDB Enterprise in managed or self-managed environments. First class support is provided for Azure, AWS, and GCP, including deployment automation via Terraform and Helm.`}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Kubernetes cluster with KubeRay 1.1+ operator installed`}),`\n`,_jsx(_components.li,{children:`Ray 2.43+`}),`\n`]}),`\n`,_jsx(_components.p,{children:`See below for manual installation instructions for:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Amazon Web Services (AWS) Elastic Kubernetes Service (EKS)`}),`\n`,_jsx(_components.li,{children:`Google Cloud Platform (GCP) Google Kubernetes Engine (GKE)`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`basic-kubernetes-setup`,children:`Basic Kubernetes Setup`}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Kubernetes resources can be deployed automatically via `,_jsx(_components.a,{href:`/geneva/deployment/helm/`,children:`Helm`}),` or manually\nvia the instructions below.`]})}),`\n`,_jsx(_components.p,{children:`In the following sections we’ll use these variables:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:`NAMESPACE`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`lancedb`}),_jsx(_components.span,{style:{color:`#A0ADA0`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#9399B2`,\"--shiki-dark-font-style\":`italic`},children:` # replace with your actual namespace if different`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:`KSA_NAME`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`geneva-ray-runner`}),_jsx(_components.span,{style:{color:`#A0ADA0`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#9399B2`,\"--shiki-dark-font-style\":`italic`},children:` # replace with an identity name`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`kubernetes-service-account-ksa`,children:`Kubernetes Service Account (KSA)`}),`\n`,_jsx(_components.p,{children:`Inside your Kubernetes cluster, you need a Kubernetes service account which provides the credentials your k8s pods (Ray) run with. Here’s how to create your KSA.`}),`\n`,_jsx(Heading,{level:`4`,id:`create-a-kubernetes-service-account-ksa`,children:`Create a Kubernetes Service Account (KSA)`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` create`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` namespace`}),_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:` $NAMESPACE`}),_jsx(_components.span,{style:{color:`#A0ADA0`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#9399B2`,\"--shiki-dark-font-style\":`italic`},children:` # skip if it already exists`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` create`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` serviceaccount`}),_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:` $KSA_NAME`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#F5C2E7`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:` $NAMESPACE`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`You can verify using:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` get`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` serviceaccounts`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` -n`}),_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:` $NAMESPACE`}),_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:` $KSA_NAME`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`The Kubernetes service account (KSA) needs RBAC permissions inside the k8s cluster to provision Ray clusters via CRDs.`}),`\n`,_jsx(Heading,{level:`4`,id:`create-a-k8s-role`,children:`Create a k8s Role`}),`\n`,_jsx(_components.p,{children:`Create a k8s role that can access the Ray CRD operations.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`13`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`13`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` apply`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` -f`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` -`}),_jsx(_components.span,{style:{color:`#AB5959`,\"--shiki-dark\":`#94E2D5`},children:` \u003c\u003c`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`EOF`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`apiVersion: rbac.authorization.k8s.io/v1`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`kind: ClusterRole`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`metadata:`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` name: `}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:\"${\"}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#CDD6F4`},children:`KSA_NAME`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:`}`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`-role`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`rules:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`- apiGroups: [\"\"]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` resources: [\"pods\"]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` verbs: [\"get\", \"list\", \"watch\"]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`- apiGroups: [\"ray.io\"]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` resources: [\"rayclusters\"]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` verbs: [\"get\", \"patch\", \"delete\"]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`EOF`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`4`,id:`bind-the-clusterrole-to-your-ksa`,children:`Bind the ClusterRole to Your KSA`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`14`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`14`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` apply`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` -f`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` -`}),_jsx(_components.span,{style:{color:`#AB5959`,\"--shiki-dark\":`#94E2D5`},children:` \u003c\u003c`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`EOF`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`apiVersion: rbac.authorization.k8s.io/v1`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`kind: ClusterRoleBinding`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`metadata:`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` name: `}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:\"${\"}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#CDD6F4`},children:`KSA_NAME`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:`}`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`-binding`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`subjects:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`- kind: ServiceAccount`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` name: `}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:\"${\"}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#CDD6F4`},children:`KSA_NAME`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:`}`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` namespace: `}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:\"${\"}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#CDD6F4`},children:`NAMESPACE`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:`}`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`roleRef:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` kind: ClusterRole`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` name: `}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:\"${\"}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#CDD6F4`},children:`KSA_NAME`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:`}`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`-role`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` apiGroup: rbac.authorization.k8s.io`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`EOF`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Now confirm your permissions:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` auth`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` can-i`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` get`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` pods`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --as=system:serviceaccount:`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:\"${\"}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#CDD6F4`},children:`NAMESPACE`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:`}`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:`:`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:\"${\"}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#CDD6F4`},children:`KSA_NAME`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:`}`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`geneva-on-gke`,children:`Geneva on GKE`}),`\n`,_jsx(_components.p,{children:`Google Kubernetes Engine (GKE) is a GCP service that deploys Kubernetes and can manage on-demand provisioning of cluster nodes. Ray can be deployed on GKE clusters using the KubeRay k8s operator.`}),`\n`,_jsx(_components.p,{children:`GKE provides the option for an out-of-the-box KubeRay operator deployment. The version of KubeRay is tied to the version of GKE you have deployed. Currently these versions are supported:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`GKE 1.30 / KubeRay 1.1`}),`\n`,_jsx(_components.li,{children:`GKE 1.31 / KubeRay 1.2`}),`\n`]}),`\n`,_jsx(_components.p,{children:`Alternatively, you can also deploy your own KubeRay operator to get the latest KubeRay 1.3 version.`}),`\n`,_jsx(_components.p,{children:`The following sections describe in more details other required configuration settings required for Geneva to perform distributed execution.`}),`\n`,_jsx(Heading,{level:`3`,id:`gke-node-pools`,children:`GKE Node Pools`}),`\n`,_jsx(_components.p,{children:`GKE allows you to specify templates for virtual machines in “node pools”. These allow you to manage and configure resources such as the number of CPUs, number of GPUs, amount of memory, and if instances are spot or regular virtual machines.`}),`\n`,_jsxs(_components.p,{children:[`You can define your node pools however you want but Geneva uses three specific Kubernetes labels when deploying Ray pods on GKE: `,_jsx(_components.code,{children:`ray-head`}),`, `,_jsx(_components.code,{children:`ray-worker-cpu`}),`, `,_jsx(_components.code,{children:`ray-worker-gpu`})]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Head nodes`}),` are where the Ray dashboard and scheduler run. They should be non-spot instances and should not have processing workloads scheduled on them. Geneva looks for nodes with the `,_jsx(_components.code,{children:`geneva.lancedb.com/ray-head`}),` k8s label for this role.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`CPU Worker nodes`}),` are where distributed processing that does not require GPU should be scheduled. Geneva looks for nodes with the `,_jsx(_components.code,{children:`geneva.lancedb.com/ray-worker-cpu`}),` k8s label when these nodes are requested.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`GPU Worker nodes`}),` are where distributed processing that require GPU should be scheduled. Geneva looks for nodes with the `,_jsx(_components.code,{children:`geneva.lancedb.com/ray-worker-gpu`}),` k8s label when these nodes are requested.`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`gke-+-k8s-permissions`,children:`GKE + k8s Permissions`}),`\n`,_jsx(_components.p,{children:`Geneva needs the ability to deploy a KubeRay cluster and submit jobs to Ray. The workers in the Ray cluster need the ability to read and write to the Google Cloud Storage (GCS) buckets. This requires setting up the proper k8s permissions and GCP IAM grants. There are three main areas to setup and verify:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Kubernetes Service Account (KSA)`}),`\n`,_jsx(_components.li,{children:`Google Service Account (GSA)`}),`\n`,_jsx(_components.li,{children:`GKE settings (GKE workload identity)`}),`\n`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/lancedb-bcbb4faf/0sS6vrpmM3KSVyss/static/assets/images/geneva/geneva-security-reqs.png?fit=max\u0026auto=format\u0026n=0sS6vrpmM3KSVyss\u0026q=85\u0026s=ad8045757d593580d924907578f53225`,alt:`geneva-security-reqs`,\"data-og-width\":`1125`,width:`1125`,\"data-og-height\":`463`,height:`463`,\"data-path\":`static/assets/images/geneva/geneva-security-reqs.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/lancedb-bcbb4faf/0sS6vrpmM3KSVyss/static/assets/images/geneva/geneva-security-reqs.png?w=280\u0026fit=max\u0026auto=format\u0026n=0sS6vrpmM3KSVyss\u0026q=85\u0026s=12e999c18fdb281e1d8a3461b5e4c5ee 280w, https://mintcdn.com/lancedb-bcbb4faf/0sS6vrpmM3KSVyss/static/assets/images/geneva/geneva-security-reqs.png?w=560\u0026fit=max\u0026auto=format\u0026n=0sS6vrpmM3KSVyss\u0026q=85\u0026s=ae272b08dace46fc62c83c8257cff4aa 560w, https://mintcdn.com/lancedb-bcbb4faf/0sS6vrpmM3KSVyss/static/assets/images/geneva/geneva-security-reqs.png?w=840\u0026fit=max\u0026auto=format\u0026n=0sS6vrpmM3KSVyss\u0026q=85\u0026s=a20b73ca9bfb75b28faddb56c885a61f 840w, https://mintcdn.com/lancedb-bcbb4faf/0sS6vrpmM3KSVyss/static/assets/images/geneva/geneva-security-reqs.png?w=1100\u0026fit=max\u0026auto=format\u0026n=0sS6vrpmM3KSVyss\u0026q=85\u0026s=73e7eb84793b2e209687a68482643f63 1100w, https://mintcdn.com/lancedb-bcbb4faf/0sS6vrpmM3KSVyss/static/assets/images/geneva/geneva-security-reqs.png?w=1650\u0026fit=max\u0026auto=format\u0026n=0sS6vrpmM3KSVyss\u0026q=85\u0026s=012ce145b4354711a68630870eedaa41 1650w, https://mintcdn.com/lancedb-bcbb4faf/0sS6vrpmM3KSVyss/static/assets/images/geneva/geneva-security-reqs.png?w=2500\u0026fit=max\u0026auto=format\u0026n=0sS6vrpmM3KSVyss\u0026q=85\u0026s=7ab12c2311213dc1dc6319bc2a593acf 2500w`}),`\n`,_jsx(Heading,{level:`4`,id:`geneva-security-requirements`,children:`Geneva Security Requirements`}),`\n`,_jsx(_components.p,{children:`In the following sections we’ll use these variables:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:`NAMESPACE`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`lancedb`}),_jsx(_components.span,{style:{color:`#A0ADA0`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#9399B2`,\"--shiki-dark-font-style\":`italic`},children:` # replace with your actual namespace if different`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:`KSA_NAME`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`geneva-ray-runner`}),_jsx(_components.span,{style:{color:`#A0ADA0`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#9399B2`,\"--shiki-dark-font-style\":`italic`},children:` # replace with an identity name`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:`PROJECT_ID`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`...`}),_jsx(_components.span,{style:{color:`#A0ADA0`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#9399B2`,\"--shiki-dark-font-style\":`italic`},children:` # replace with your google cloud project name`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:`GSA_EMAIL`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:\"${\"}),_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:`KSA_NAME`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:`}`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`@`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:\"${\"}),_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:`PROJECT_ID`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:`}`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`.iam.gserviceaccount.com`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:`LANCEDB_URI`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`gs://bucket/db`}),_jsx(_components.span,{style:{color:`#A0ADA0`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#9399B2`,\"--shiki-dark-font-style\":`italic`},children:` # replace with your own path`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`4`,id:`google-service-account-gsa`,children:`Google Service Account (GSA)`}),`\n`,_jsx(_components.p,{children:`To give your k8s workers the ability to read and write from your LanceDB buckets, your KSA needs to be bound to a Google Cloud service account (GSA) with those grants. With this setup, any pod using the KSA will automatically get a token that lets it impersonate the GSA.`}),`\n`,_jsx(_components.p,{children:`Let’s set this up:`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Create a Google Cloud Service Account`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`gcloud`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` iam`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` service-accounts`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` create`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:\" ${\"}),_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:`KSA_NAME`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:`}`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#F5C2E7`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --project=`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:\"${\"}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#CDD6F4`},children:`PROJECT_ID`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:`}`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#F5C2E7`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --description=`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`Service account for ray workloads in GKE`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#F5C2E7`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --display-name=`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`Ray Runner GSA`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`You can verify this using:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`gcloud`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` iam`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` service-accounts`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` list`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --filter=`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`displayName:Ray Runner GSA`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`]})})}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Warning`}),`: You need `,_jsx(_components.code,{children:`roles/iam.serviceAccountAdmin`}),` or minimally `,_jsx(_components.code,{children:`roles/iam.serviceAccountTokenCreator`}),` rights to run these commands.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Next, you’ll need to verify that your KSA is bound to your GSA and has `,_jsx(_components.code,{children:`roles/iam.workloadIdentityUser`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`gcloud`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` iam`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` service-accounts`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` get-iam-policy`}),_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:` $GSA_EMAIL`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#F5C2E7`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --project=`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#CDD6F4`},children:`$PROJECT_ID`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#F5C2E7`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --format=`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`json`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#AB5959`,\"--shiki-dark\":`#94E2D5`},children:` |`}),_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:` jq`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` '`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`.bindings[] | select(.role==\"roles/iam.workloadIdentityUser\")`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`'`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Give your GSA rights to access the LanceDB bucket:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`gcloud`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` storage`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` buckets`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` add-iam-policy-binding`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:\" ${\"}),_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:`LANCEDB_URI`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:`}`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#F5C2E7`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --member=`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`serviceAccount:`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:\"${\"}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#CDD6F4`},children:`KSA_NAME`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:`}`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`@`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:\"${\"}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#CDD6F4`},children:`PROJECT_ID`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:`}`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`.iam.gserviceaccount.com`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#F5C2E7`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --role=`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`roles/storage.objectAdmin`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`4`,id:`gke-workload-identity`,children:`GKE Workload Identity`}),`\n`,_jsx(_components.p,{children:`A GKE workload identity is required to enable k8s workloads access Google Cloud services securely and without needing to manually manage service account keys. The workload identity is attached to Google Cloud service accounts (GSA) and mapped to a Kubernetes service account (KSA). This feature needs to be enabled on the GKE cluster.`}),`\n`,_jsx(_components.p,{children:`You can confirm that your workers have abilities to read/write to the LanceDB bucket:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` run`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` gcs-test`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --rm`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` -it`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --image=google/cloud-sdk:slim`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#F5C2E7`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --serviceaccount=`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:\"${\"}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#CDD6F4`},children:`KSA_NAME`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:`}`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#F5C2E7`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` -n`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:\" ${\"}),_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:`NAMESPACE`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:`}`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#F5C2E7`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` bash`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#998418`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#F38BA8`,\"--shiki-dark-font-style\":`italic`},children:`echo`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`hello`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#AB5959`,\"--shiki-dark\":`#94E2D5`},children:` >`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` test.txt`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`gsutil`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` cp`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` test.txt`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:\" ${\"}),_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:`LANCEDB_URI`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#CDD6F4`},children:`}`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`/demo-check/test-write.txt`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Confirm the identity inside the pod:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`curl`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` -H`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`Metadata-Flavor: Google`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#F5C2E7`},children:` \\\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/email`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`geneva-on-aws-eks`,children:`Geneva on AWS EKS`}),`\n`,_jsx(_components.p,{children:`Geneva can be used to provision Ray clusters running in Amazon Web Services (AWS) Elastic Kubernetes Service (EKS).`}),`\n`,_jsx(_components.p,{children:`In the following sections we’ll use these variables:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:`NAMESPACE`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`lancedb`}),_jsx(_components.span,{style:{color:`#A0ADA0`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#9399B2`,\"--shiki-dark-font-style\":`italic`},children:` # replace with your actual namespace if different`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:`CLUSTER`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`geneva`}),_jsx(_components.span,{style:{color:`#A0ADA0`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#9399B2`,\"--shiki-dark-font-style\":`italic`},children:` # replace with your actual namespace if different`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:`KSA_NAME`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`geneva-ray-runner`}),_jsx(_components.span,{style:{color:`#A0ADA0`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#9399B2`,\"--shiki-dark-font-style\":`italic`},children:` # replace with an identity name`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`eks-node-groups`,children:`EKS Node Groups`}),`\n`,_jsx(_components.p,{children:`EKS allows you to specify templates for virtual machines in “node groups”. These allow you to manage and configure resources such as the number of CPUs, number of GPUs, amount of memory, and if instances are spot or regular virtual machines.`}),`\n`,_jsxs(_components.p,{children:[`You can define your node groups however you want but Geneva uses three specific Kubernetes labels when deploying Ray pods on EKS: `,_jsx(_components.code,{children:`ray-head`}),`, `,_jsx(_components.code,{children:`ray-worker-cpu`}),`, `,_jsx(_components.code,{children:`ray-worker-gpu`})]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Head nodes`}),` are where the Ray dashboard and scheduler run. They should be non-spot instances and should not have processing workloads scheduled on them. Geneva looks for nodes with the `,_jsx(_components.code,{children:`geneva.lancedb.com/ray-head: true`}),` k8s label for this role.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`CPU Worker nodes`}),` are where distributed processing that does not require GPU should be scheduled. Geneva looks for nodes with the `,_jsx(_components.code,{children:`geneva.lancedb.com/ray-worker-cpu: true`}),` k8s label when these nodes are requested.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`GPU Worker nodes`}),` are where distributed processing that require GPU should be scheduled. Geneva looks for nodes with the `,_jsx(_components.code,{children:`geneva.lancedb.com/ray-worker-gpu: true`}),` k8s label when these nodes are requested.`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`install-kuberay-operator-using-helm`,children:`Install KubeRay Operator Using Helm`}),`\n`,_jsx(_components.p,{children:`Geneva requires the KubeRay operator to be installed in your EKS cluster.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`helm`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` repo`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` add`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` kuberay`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` https://ray-project.github.io/kuberay-helm/`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`helm`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` repo`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` update`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`helm`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` install`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` kuberay-operator`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` kuberay/kuberay-operator`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` -n`}),_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:` $NAMESPACE`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`install-nvidia-device-plugin`,children:`Install NVIDIA Device Plugin`}),`\n`,_jsx(_components.p,{children:`For GPU support, the NVIDIA device plugin must be installed in your EKS cluster:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`curl`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.17.0/deployments/static/nvidia-device-plugin.yml`}),_jsx(_components.span,{style:{color:`#AB5959`,\"--shiki-dark\":`#94E2D5`},children:` >`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` nvidia-device-plugin.yml`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` apply`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` -f`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` nvidia-device-plugin.yml`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`configure-access-control`,children:`Configure Access Control`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/lancedb-bcbb4faf/0sS6vrpmM3KSVyss/static/assets/images/geneva/eks-auth.png?fit=max\u0026auto=format\u0026n=0sS6vrpmM3KSVyss\u0026q=85\u0026s=33d355affa2d28bfadcab76df1af9d5c`,alt:`eks-auth`,\"data-og-width\":`1826`,width:`1826`,\"data-og-height\":`1780`,height:`1780`,\"data-path\":`static/assets/images/geneva/eks-auth.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/lancedb-bcbb4faf/0sS6vrpmM3KSVyss/static/assets/images/geneva/eks-auth.png?w=280\u0026fit=max\u0026auto=format\u0026n=0sS6vrpmM3KSVyss\u0026q=85\u0026s=a5ac461aa07f6b93862a49d3be1249cd 280w, https://mintcdn.com/lancedb-bcbb4faf/0sS6vrpmM3KSVyss/static/assets/images/geneva/eks-auth.png?w=560\u0026fit=max\u0026auto=format\u0026n=0sS6vrpmM3KSVyss\u0026q=85\u0026s=c6939e33bbee8cfbb61b98d9223e8c56 560w, https://mintcdn.com/lancedb-bcbb4faf/0sS6vrpmM3KSVyss/static/assets/images/geneva/eks-auth.png?w=840\u0026fit=max\u0026auto=format\u0026n=0sS6vrpmM3KSVyss\u0026q=85\u0026s=28ecd6312023b6c3984b196a20603a59 840w, https://mintcdn.com/lancedb-bcbb4faf/0sS6vrpmM3KSVyss/static/assets/images/geneva/eks-auth.png?w=1100\u0026fit=max\u0026auto=format\u0026n=0sS6vrpmM3KSVyss\u0026q=85\u0026s=b7eb14e58b6fc9774c6cbfe145952e95 1100w, https://mintcdn.com/lancedb-bcbb4faf/0sS6vrpmM3KSVyss/static/assets/images/geneva/eks-auth.png?w=1650\u0026fit=max\u0026auto=format\u0026n=0sS6vrpmM3KSVyss\u0026q=85\u0026s=de333646012e0db70541f47fca160cb3 1650w, https://mintcdn.com/lancedb-bcbb4faf/0sS6vrpmM3KSVyss/static/assets/images/geneva/eks-auth.png?w=2500\u0026fit=max\u0026auto=format\u0026n=0sS6vrpmM3KSVyss\u0026q=85\u0026s=1c5a2edd172be98a54c4d88ec415e74d 2500w`}),`\n`,_jsx(Heading,{level:`4`,id:`environment-iam-principal`,children:`Environment IAM Principal`}),`\n`,_jsxs(_components.p,{children:[`Geneva must be run in an environment with access to `,_jsx(_components.a,{href:`https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html`,children:`AWS credentials`}),` with permissions to `,_jsx(_components.code,{children:`sts:AssumeRole`}),` on the Geneva Client IAM Role.`]}),`\n`,_jsx(_components.p,{children:`For example, this could be a laptop with credentials provided by environment variables, or an EC2 instance with credentials provided via Instance Profile.`}),`\n`,_jsx(Heading,{level:`4`,id:`create-iam-role-for-geneva-client`,children:`Create IAM Role for Geneva Client`}),`\n`,_jsx(_components.p,{children:`The Geneva Client IAM Role is assumed by the Geneva client to provision the Kuberay cluster and run remote jobs.`}),`\n`,_jsx(_components.p,{children:`This role requires IAM permissions to access the storage bucket and Kubernetes API.`}),`\n`,_jsx(_components.p,{children:`Create an IAM role with the following policy:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`33`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`33`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Version`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`2012-10-17`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Statement`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Sid`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`ClusterAccess`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Action`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`eks:DescribeCluster`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`eks:AccessKubernetesApi`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Effect`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`Allow`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Resource`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`\u003cyour eks cluster arn>`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Sid`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`AllowListBucket`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Effect`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`Allow`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Action`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`s3:ListBucket`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Resource`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`arn:aws:s3:::\u003cyour storage bucket>`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Sid`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`AllowAllS3ObjectActions`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Effect`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`Allow`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Action`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`s3:GetObject`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`s3:PutObject`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`s3:DeleteObject`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`s3:HeadObject`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Resource`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`arn:aws:s3:::\u003cyour storage bucket>/*`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`This role should also have a trust policy with `,_jsx(_components.code,{children:`sts:AssumeRole`}),` permissions for any principal initiating the Geneva client.`]}),`\n`,_jsxs(_components.p,{children:[`When using Geneva, this role can be specified with the `,_jsx(_components.code,{children:`role_name`}),` RayCluster parameter.`]}),`\n`,_jsx(Heading,{level:`4`,id:`create-eks-access-entry`,children:`Create EKS Access Entry`}),`\n`,_jsxs(_components.p,{children:[`Create an `,_jsx(_components.a,{href:`https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html`,children:`EKS access entry`}),` to allow the Geneva Client Role to access the Kubernetes API for the EKS Cluster.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`aws`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` eks`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` create-access-entry`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --cluster-name`}),_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:` $CLUSTER`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --principal-arn`}),_jsx(_components.span,{style:{color:`#AB5959`,\"--shiki-dark\":`#94E2D5`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`your`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` geneva`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` client`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` role`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` AR`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:`N`}),_jsx(_components.span,{style:{color:`#AB5959`,\"--shiki-dark\":`#94E2D5`},children:`>`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --type`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` STANDARD`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`aws`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` eks`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` associate-access-policy`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --cluster-name`}),_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-dark\":`#CDD6F4`},children:` $CLUSTER`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --principal-arn`}),_jsx(_components.span,{style:{color:`#AB5959`,\"--shiki-dark\":`#94E2D5`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`your`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` geneva`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` client`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` role`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` AR`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:`N`}),_jsx(_components.span,{style:{color:`#AB5959`,\"--shiki-dark\":`#94E2D5`},children:`>`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --access-scope`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` type=cluster`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --policy-arn`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`4`,id:`create-eks-oidc-provider`,children:`Create EKS OIDC Provider`}),`\n`,_jsxs(_components.p,{children:[`Create an OIDC provider for your EKS cluster. This is required to allow Kubernetes Service Accounts (KSA) to assume IAM roles. See `,_jsx(_components.a,{href:`https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html#_create_oidc_provider_console`,children:`AWS documentation`}),`.`]}),`\n`,_jsx(Heading,{level:`4`,id:`create-iam-role-for-service-account`,children:`Create IAM Role for Service Account`}),`\n`,_jsx(_components.p,{children:`An IAM role is required for the Kubernetes Service Account (KSA) that will be used by the Ray head and worker pods.`}),`\n`,_jsx(_components.p,{children:`This role must have permissions to access the storage bucket and to describe the EKS cluster:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`32`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`32`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Version`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`2012-10-17`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Statement`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Sid`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`ClusterAccess`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Action`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`eks:DescribeCluster`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Effect`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`Allow`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Resource`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`\u003cyour eks cluster arn>`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Sid`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`AllowListBucket`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Effect`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`Allow`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Action`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`s3:ListBucket`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Resource`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`arn:aws:s3:::\u003cyour storage bucket>`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Sid`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`AllowAllS3ObjectActions`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Effect`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`Allow`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Action`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`s3:GetObject`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`s3:PutObject`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`s3:DeleteObject`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`s3:HeadObject`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Resource`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`arn:aws:s3:::\u003cyour storage bucket>/*`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`In addition, it must have a trust policy allowing the EKS OIDC provider to assume the role from the Kubernetes Service Account:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`18`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`18`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Version`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`2012-10-17`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Statement`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Effect`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`Allow`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Principal`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Federated`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`\u003cOIDC Provider ARN>`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Action`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`sts:AssumeRoleWithWebIdentity`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`Condition`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`StringEquals`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`\u003cOIDC Provider>:aud`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`sts.amazonaws.com`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#998418`,\"--shiki-dark\":`#89B4FA`},children:`\u003cOIDC Provider>:sub`}),_jsx(_components.span,{style:{color:`#99841877`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`system:serviceaccount:$NAMESPACE:$KSA_NAME`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`4`,id:`associate-the-iam-role-with-the-kubernetes-service-account`,children:`Associate the IAM Role with the Kubernetes Service Account`}),`\n`,_jsx(_components.p,{children:`Modify the Kubernetes Service Account created in “Basic Kubernetes setup” to associate it with the IAM role created above.`}),`\n`,_jsxs(_components.p,{children:[`The role ARN is specified using `,_jsx(_components.code,{children:`eks.amazonaws.com/role-arn`}),` annotation:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#59873A`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` annotate`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:` serviceaccount`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#CDD6F4`},children:`$KSA_NAME`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#F5C2E7`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` -n`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#CDD6F4`},children:`$NAMESPACE`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#F5C2E7`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`eks.amazonaws.com/role-arn=`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#CDD6F4`},children:`$ROLE_ARN`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#F5C2E7`},children:` \\\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#A6E3A1`},children:` --overwrite`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`initialize-the-ray-cluster`,children:`Initialize the Ray Cluster`}),`\n`,_jsx(_components.p,{children:`Initialize the Ray cluster using the node selectors and metadata from above:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`31`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes vitesse-light catppuccin-mocha`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#393a34`,\"--shiki-dark\":`#cdd6f4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`31`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1E754F`,\"--shiki-dark\":`#CBA6F7`},children:`from`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:` geneva`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:`runners`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:`ray`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:`_mgr `}),_jsx(_components.span,{style:{color:`#1E754F`,\"--shiki-dark\":`#CBA6F7`},children:`import`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:` ray_cluster`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1E754F`,\"--shiki-dark\":`#CBA6F7`},children:`from`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:` geneva`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:`runners`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:`ray`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:`raycluster `}),_jsx(_components.span,{style:{color:`#1E754F`,\"--shiki-dark\":`#CBA6F7`},children:`import`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:` (`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:`K8sConfigMethod`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:` _HeadGroupSpec`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:` _WorkerGroupSpec`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:`head_spec `}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#89B4FA`},children:` _HeadGroupSpec`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` service_account`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`geneva-ray-runner`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` num_cpus`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#2F798A`,\"--shiki-dark\":`#FAB387`},children:`1`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` memory`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#2F798A`,\"--shiki-dark\":`#FAB387`},children:`2048`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` node_selector`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`{`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`geneva.lancedb.com/ray-head`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`true`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`},`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:`worker_spec `}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#89B4FA`},children:` _WorkerGroupSpec`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` name`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`worker`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` min_replicas`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#2F798A`,\"--shiki-dark\":`#FAB387`},children:`1`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` service_account`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`geneva-ray-runner`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` num_cpus`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#2F798A`,\"--shiki-dark\":`#FAB387`},children:`2`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` memory`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#2F798A`,\"--shiki-dark\":`#FAB387`},children:`4096`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` node_selector`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`{`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`geneva.lancedb.com/ray-worker-cpu`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:` \"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`true`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`},`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1E754F`,\"--shiki-dark\":`#CBA6F7`},children:`with`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#89B4FA`},children:` ray_cluster`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` name`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`my-ray-cluster`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` namespace`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`lancedb`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` cluster_name`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`geneva`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` config_method`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:`K8sConfigMethod`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#A65E2B`,\"--shiki-dark\":`#CDD6F4`},children:`EKS_AUTH`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` region`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`us-east-1`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` use_portforwarding`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#1E754F`,\"--shiki-dark\":`#FAB387`},children:`True`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` head_group`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:`head_spec`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` worker_groups`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`[`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:`worker_spec`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#B07D48`,\"--shiki-light-font-style\":`inherit`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` role_name`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`geneva-client-role`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`)`}),_jsx(_components.span,{style:{color:`#1E754F`,\"--shiki-dark\":`#CBA6F7`},children:` as`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:` cluster`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#CDD6F4`},children:` table`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#393A34`,\"--shiki-dark\":`#89B4FA`},children:`backfill`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#B56959`,\"--shiki-dark\":`#A6E3A1`},children:`embedding`}),_jsx(_components.span,{style:{color:`#B5695977`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#999999`,\"--shiki-dark\":`#9399B2`},children:`)`})]}),`\n`]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"vitesse-light","dark":"catppuccin-mocha"}},"config":{},"pageMetadata":{"title":"Manual Deployment on Kubernetes","sidebarTitle":"Manual Deployment","description":"Learn how to deploy Geneva on Kubernetes using KubeRay for distributed feature engineering workflows on GKE and EKS.","icon":"cogs","href":"/geneva/deployment/index"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Basic Kubernetes Setup","slug":"basic-kubernetes-setup","depth":2,"children":[{"title":"Kubernetes Service Account (KSA)","slug":"kubernetes-service-account-ksa","depth":3,"children":[]},{"title":"Create a Kubernetes Service Account (KSA)","slug":"create-a-kubernetes-service-account-ksa","depth":4,"children":[]},{"title":"Create a k8s Role","slug":"create-a-k8s-role","depth":4,"children":[]},{"title":"Bind the ClusterRole to Your KSA","slug":"bind-the-clusterrole-to-your-ksa","depth":4,"children":[]}]},{"title":"Geneva on GKE","slug":"geneva-on-gke","depth":2,"children":[{"title":"GKE Node Pools","slug":"gke-node-pools","depth":3,"children":[]},{"title":"GKE + k8s Permissions","slug":"gke-+-k8s-permissions","depth":3,"children":[]},{"title":"Geneva Security Requirements","slug":"geneva-security-requirements","depth":4,"children":[]},{"title":"Google Service Account (GSA)","slug":"google-service-account-gsa","depth":4,"children":[]},{"title":"GKE Workload Identity","slug":"gke-workload-identity","depth":4,"children":[]}]},{"title":"Geneva on AWS EKS","slug":"geneva-on-aws-eks","depth":2,"children":[{"title":"EKS Node Groups","slug":"eks-node-groups","depth":3,"children":[]},{"title":"Install KubeRay Operator Using Helm","slug":"install-kuberay-operator-using-helm","depth":3,"children":[]},{"title":"Install NVIDIA Device Plugin","slug":"install-nvidia-device-plugin","depth":3,"children":[]},{"title":"Configure Access Control","slug":"configure-access-control","depth":3,"children":[]},{"title":"Environment IAM Principal","slug":"environment-iam-principal","depth":4,"children":[]},{"title":"Create IAM Role for Geneva Client","slug":"create-iam-role-for-geneva-client","depth":4,"children":[]},{"title":"Create EKS Access Entry","slug":"create-eks-access-entry","depth":4,"children":[]},{"title":"Create EKS OIDC Provider","slug":"create-eks-oidc-provider","depth":4,"children":[]},{"title":"Create IAM Role for Service Account","slug":"create-iam-role-for-service-account","depth":4,"children":[]},{"title":"Associate the IAM Role with the Kubernetes Service Account","slug":"associate-the-iam-role-with-the-kubernetes-service-account","depth":4,"children":[]},{"title":"Initialize the Ray Cluster","slug":"initialize-the-ray-cluster","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/lancedb-bcbb4faf/71b64c20a8f631b3/static/scripts/cookie-consent.js"],"subdomain":"lancedb-bcbb4faf","siteName":"LanceDB","title":"Manual Deployment on Kubernetes - LanceDB","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-16T17:34:10.443Z","originalFileLocation":"geneva/deployment/index.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Learn how to deploy Geneva on Kubernetes using KubeRay for distributed feature engineering workflows on GKE and EKS.\">\u003cmeta data-mint-head name=\"application-name\" content=\"LanceDB\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/lancedb-bcbb4faf/AJCI1CXWoYDPZbb4/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/lancedb-bcbb4faf/AJCI1CXWoYDPZbb4/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/lancedb-bcbb4faf/AJCI1CXWoYDPZbb4/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/lancedb-bcbb4faf/AJCI1CXWoYDPZbb4/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/lancedb-bcbb4faf/AJCI1CXWoYDPZbb4/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/lancedb-bcbb4faf/AJCI1CXWoYDPZbb4/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/lancedb-bcbb4faf/AJCI1CXWoYDPZbb4/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/lancedb-bcbb4faf/AJCI1CXWoYDPZbb4/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/lancedb-bcbb4faf/AJCI1CXWoYDPZbb4/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Manual Deployment on Kubernetes - LanceDB\">\u003cmeta data-mint-head property=\"og:description\" content=\"Learn how to deploy Geneva on Kubernetes using KubeRay for distributed feature engineering workflows on GKE and EKS.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"LanceDB\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.lancedb.com/geneva/deployment\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://lancedb-bcbb4faf.mintlify.app/_mintlify/api/og/v2?division=Deployment\u0026amp;title=Manual+Deployment+on+Kubernetes\u0026amp;description=Learn+how+to+deploy+Geneva+on+Kubernetes+using+KubeRay+for+distributed+feature+engineering+workflows+on+GKE+and+EKS.\u0026amp;theme=123a95b5dfac0c4bc2a3854c\u0026amp;signature=961f2555a911469f6842158374739c225b4c13e2c5defd67cb2945a0fb3aa319\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Manual Deployment on Kubernetes - LanceDB\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Learn how to deploy Geneva on Kubernetes using KubeRay for distributed feature engineering workflows on GKE and EKS.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://lancedb-bcbb4faf.mintlify.app/_mintlify/api/og/v2?division=Deployment\u0026amp;title=Manual+Deployment+on+Kubernetes\u0026amp;description=Learn+how+to+deploy+Geneva+on+Kubernetes+using+KubeRay+for+distributed+feature+engineering+workflows+on+GKE+and+EKS.\u0026amp;theme=123a95b5dfac0c4bc2a3854c\u0026amp;signature=961f2555a911469f6842158374739c225b4c13e2c5defd67cb2945a0fb3aa319\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/lancedb-bcbb4faf/AJCI1CXWoYDPZbb4/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"LanceDB\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF6B35\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.lancedb.com/geneva/deployment\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/geneva/deployment.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.lancedb.com/#organization\",\"name\":\"LanceDB\",\"url\":\"https://docs.lancedb.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/lancedb-bcbb4faf/6L0IRVkfdlgMU1Pw/static/assets/logo/dark-lancedb-logo.svg?fit=max\u0026auto=format\u0026n=6L0IRVkfdlgMU1Pw\u0026q=85\u0026s=d0592e59a29df2477080a857e13e341f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.lancedb.com#website\",\"name\":\"LanceDB\",\"url\":\"https://docs.lancedb.com\",\"publisher\":{\"@id\":\"https://docs.lancedb.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.lancedb.com/geneva/deployment#webpage\",\"url\":\"https://docs.lancedb.com/geneva/deployment\",\"name\":\"Manual Deployment on Kubernetes\",\"description\":\"Learn how to deploy Geneva on Kubernetes using KubeRay for distributed feature engineering workflows on GKE and EKS.\",\"dateModified\":\"2026-06-16T17:34:10.443Z\",\"isPartOf\":{\"@id\":\"https://docs.lancedb.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.lancedb.com/geneva/deployment#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.lancedb.com/geneva/deployment#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Feature Engineering (Geneva)\",\"item\":\"https://docs.lancedb.com/geneva/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deployment\",\"item\":\"https://docs.lancedb.com/geneva/deployment/helm\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Manual Deployment on Kubernetes\",\"item\":\"https://docs.lancedb.com/geneva/deployment\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.lancedb.com/geneva/deployment#article\",\"headline\":\"Manual Deployment on Kubernetes\",\"name\":\"Manual Deployment on Kubernetes\",\"description\":\"Learn how to deploy Geneva on Kubernetes using KubeRay for distributed feature engineering workflows on GKE and EKS.\",\"url\":\"https://docs.lancedb.com/geneva/deployment\",\"mainEntityOfPage\":{\"@id\":\"https://docs.lancedb.com/geneva/deployment#webpage\"},\"dateModified\":\"2026-06-16T17:34:10.443Z\",\"publisher\":{\"@id\":\"https://docs.lancedb.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.lancedb.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"LanceDB\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"LanceDB","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Get started","pages":[{"title":"Quickstart","sidebarTitle":"Quickstart","icon":"rocket","href":"/quickstart"},{"group":"What is LanceDB?","pages":[{"title":"LanceDB","sidebarTitle":"LanceDB","icon":"https://mintlify.s3.us-west-1.amazonaws.com/lancedb-bcbb4faf/static/assets/logo/lancedb-icon-gray.svg","href":"/index"},{"title":"Lance format","sidebarTitle":"Lance format","icon":"https://mintlify.s3.us-west-1.amazonaws.com/lancedb-bcbb4faf/static/assets/logo/lance-logo-gray.svg","href":"/lance"},{"title":"Tables and Namespaces","sidebarTitle":"Tables and Namespaces","icon":"table","href":"/tables-and-namespaces"}]},{"group":"LanceDB Enterprise","pages":[{"title":"LanceDB Enterprise","sidebarTitle":"Overview","icon":"server","href":"/enterprise/index"},{"title":"Architecture","sidebarTitle":"Architecture","icon":"cubes","href":"/enterprise/architecture"},{"title":"Security \u0026 Compliance","sidebarTitle":"Security","icon":"shield-alt","href":"/enterprise/security"},{"title":"Authentication","sidebarTitle":"Authentication","icon":"key","href":"/enterprise/authentication"},{"title":"Benchmarks","sidebarTitle":"Benchmarks","icon":"tachometer-alt","href":"/enterprise/benchmarks"},{"group":"Deployment","pages":[{"title":"Deployment guide","sidebarTitle":"Overview","icon":"list","href":"/enterprise/deployment/index"},{"title":"Azure deployment guide","sidebarTitle":"Azure","icon":"cloud","href":"/enterprise/deployment/azure"}]}]},{"title":"Performance Tips and Best Practices","sidebarTitle":"Performance Tips","icon":"gauge-high","href":"/performance"}]},{"group":"Model training","pages":[{"title":"Why LanceDB for Training","sidebarTitle":"Why LanceDB for training","icon":"fire","href":"/training/why-lancedb"},{"title":"Loading Data for Model Training","sidebarTitle":"Data Loading","icon":"boxes-stacked","href":"/training/data-loading"},{"title":"PyTorch Integration","sidebarTitle":"PyTorch integration","icon":"fire","href":"/training/torch"},{"title":"LeRobot Native Integration","sidebarTitle":"LeRobot native integration","icon":"robot","href":"/training/lerobot"},{"title":"Object Detection for AV Perception","sidebarTitle":"Example: Object Detection","icon":"car","href":"/training/object-detection"},{"title":"Fine-tuning a VLM on TextVQA","sidebarTitle":"Example: VLM finetuning","icon":"image","href":"/training/vlm-finetuning"}]},{"group":"Guides","pages":[{"group":"Table operations","pages":[{"title":"Basic Table Operations","sidebarTitle":"Basic usage","icon":"table","href":"/tables/index"},{"title":"Ingesting Data","sidebarTitle":"Ingesting data","icon":"cookie","href":"/tables/create"},{"title":"Multimodal Data (Blobs)","sidebarTitle":"Working with multimodal data","icon":"images","href":"/tables/multimodal"},{"title":"Schema and Data Evolution","sidebarTitle":"Schema \u0026 data evolution","icon":"boxes-stacked","href":"/tables/schema"},{"title":"Updating and Modifying Table Data","sidebarTitle":"Update/modify data","icon":"clone","href":"/tables/update"},{"title":"Versioning and Reproducibility","sidebarTitle":"Versioning","icon":"clock","href":"/tables/versioning"},{"title":"Branches","sidebarTitle":"Branches","icon":"code-branch","href":"/tables/branching"},{"title":"Consistency","sidebarTitle":"Consistency","icon":"water","href":"/tables/consistency"}]},{"group":"Namespaces","pages":[{"title":"Namespaces and the Catalog Model","sidebarTitle":"Overview","icon":"sitemap","href":"/namespaces/index"},{"title":"Using Namespaces","sidebarTitle":"Using namespaces","icon":"folder-tree","href":"/namespaces/usage"}]},{"group":"Embeddings","pages":[{"title":"Managing Embeddings","sidebarTitle":"Overview","icon":"bars","href":"/embedding/index"},{"title":"Embeddings: Quickstart","sidebarTitle":"Quickstart","icon":"rocket","href":"/embedding/quickstart"}]},{"group":"Indexing","pages":[{"title":"Indexing Data","sidebarTitle":"Overview","icon":"list","href":"/indexing/index"},{"title":"Vector Indexes","sidebarTitle":"Vector Index","icon":"arrow-up-right-dots","href":"/indexing/vector-index"},{"title":"Quantization","sidebarTitle":"Quantization","icon":"compress","href":"/indexing/quantization"},{"title":"Full-Text Search (FTS) Index","sidebarTitle":"FTS index","icon":"book","href":"/indexing/fts-index"},{"title":"Scalar Indexes","sidebarTitle":"Scalar Index","icon":"tree","href":"/indexing/scalar-index"},{"title":"GPU-Powered Vector Indexing","sidebarTitle":"GPU indexing","icon":"https://mintlify.s3.us-west-1.amazonaws.com/lancedb-bcbb4faf/static/assets/logo/lance-logo-gray.svg","href":"/indexing/gpu-indexing"},{"title":"Keeping Indexes Up-to-Date with Reindexing","sidebarTitle":"Reindexing","icon":"refresh","href":"/indexing/reindexing"}]},{"group":"Search","pages":[{"title":"Search","sidebarTitle":"Overview","icon":"list","href":"/search/index"},{"title":"Vector Search","sidebarTitle":"Vector search","icon":"arrow-up-right-dots","href":"/search/vector-search"},{"title":"Multivector Search","sidebarTitle":"Multivector search","icon":"braille","href":"/search/multivector-search"},{"title":"Full-Text Search (FTS)","sidebarTitle":"Full-Text Search (FTS)","icon":"book","href":"/search/full-text-search"},{"title":"Full-Text Search Examples","sidebarTitle":"FTS Examples","icon":"book-open","href":"/search/fts-examples"},{"title":"Hybrid Search","sidebarTitle":"Hybrid search","icon":"search","href":"/search/hybrid-search"},{"title":"Metadata Filtering in LanceDB","sidebarTitle":"Filtering","icon":"filter","href":"/search/filtering"},{"title":"Optimize Query Performance","sidebarTitle":"Query optimization","icon":"gauge","href":"/search/optimize-queries"},{"group":"Enterprise SQL","pages":[{"title":"Query with SQL","sidebarTitle":"SQL","icon":"clipboard-question","href":"/search/sql/index"},{"title":"Full-Text Search with SQL","sidebarTitle":"FTS with SQL","icon":"book","href":"/search/sql/fts-sql"}]}]},{"group":"Reranking","pages":[{"title":"Reranking Search Results","sidebarTitle":"Overview","icon":"sort-amount-down","href":"/reranking/index"},{"title":"Reciprocal Rank Fusion Reranker","sidebarTitle":"RRF Algorithm","href":"/reranking/rrf"},{"title":"Linear Combination Reranker","sidebarTitle":"Linear Combination","href":"/reranking/linear_combination"},{"title":"MRR Reranker","sidebarTitle":"MRR Algorithm","href":"/reranking/mrr"},{"title":"Cross Encoder Reranker","sidebarTitle":"Cross Encoder","href":"/reranking/cross_encoder"},{"title":"Building Custom Rerankers","sidebarTitle":"Custom rerankers","icon":"code","href":"/reranking/custom-reranker"},{"title":"Evaluating Hybrid Search Performance","sidebarTitle":"Evaluation","icon":"chart-bar","href":"/reranking/eval"}]},{"group":"Storage","pages":[{"title":"Storage Architecture in LanceDB","sidebarTitle":"Storage options","icon":"database","href":"/storage/index"},{"title":"Configuring Cloud Storage in LanceDB","sidebarTitle":"Configuring storage","icon":"wrench","href":"/storage/configuration"},{"title":"Monitor LanceDB with OpenTelemetry","sidebarTitle":"Monitoring","icon":"chart-line","href":"/storage/monitoring"}]},{"group":"Build with AI agents","expanded":true,"pages":[{"title":"Tutorial: Use the LanceDB agent plugin","sidebarTitle":"LanceDB agent plugin","icon":"robot","href":"/build-with-ai-agents"},{"title":"Run experiments on branches","sidebarTitle":"Run experiments on branches","icon":"flask","href":"/agent-branch-experiments"}]}]},{"group":"Feature Engineering (Geneva)","pages":[{"title":"Multimodal Feature Engineering with Geneva","sidebarTitle":"Overview","icon":"layer-group","href":"/geneva/index"},{"title":"What is Feature Engineering?","sidebarTitle":"What is feature engineering?","icon":"grip-horizontal","href":"/geneva/overview/index"},{"title":"Getting Started","sidebarTitle":"Getting Started","icon":"rocket","href":"/geneva/getting-started"},{"group":"Transforms","pages":[{"title":"Understanding Transforms","sidebarTitle":"Understanding Transforms","icon":"code-compare","href":"/geneva/udfs/index"},{"title":"User-Defined Functions (UDFs)","sidebarTitle":"UDFs","icon":"function","href":"/geneva/udfs/udfs"},{"title":"Chunkers (Scalar UDTFs)","sidebarTitle":"Chunkers","icon":"diagram-subtask","href":"/geneva/udfs/scalar-udtfs"},{"title":"Batch User-Defined Table Functions (UDTFs)","sidebarTitle":"Batch UDTFs","icon":"layer-group","href":"/geneva/udfs/batch-udtfs"},{"title":"Error Handling in Geneva UDFs","sidebarTitle":"Error Handling","icon":"exclamation","href":"/geneva/udfs/error_handling"},{"title":"Profiling Stateful UDF Memory","sidebarTitle":"Profiling Memory","icon":"chart-line","href":"/geneva/udfs/profiling-memory"},{"title":"Blob Types in Geneva UDFs","sidebarTitle":"Blobs","icon":"splotch","href":"/geneva/udfs/blobs"}]},{"group":"Built-in Transforms","pages":[{"title":"Built-in LLM and Embedding UDFs","sidebarTitle":"Overview","icon":"sparkles","href":"/geneva/udfs/providers/index"},{"title":"OpenAI","sidebarTitle":"OpenAI","icon":"brain","href":"/geneva/udfs/providers/openai"},{"title":"Gemini","sidebarTitle":"Gemini","icon":"google","href":"/geneva/udfs/providers/gemini"},{"title":"Sentence Transformers","sidebarTitle":"Sentence Transformers","icon":"microchip","href":"/geneva/udfs/providers/sentence-transformers"}]},{"group":"Running Jobs","pages":[{"title":"Geneva Jobs","sidebarTitle":"Job execution","href":"/geneva/jobs/index"},{"title":"Backfilling","sidebarTitle":"Backfilling","icon":"fill","href":"/geneva/jobs/backfilling"},{"title":"Bulk Loading \u0026 Updating Columns","sidebarTitle":"Bulk Load / Update Columns","icon":"columns-3","href":"/geneva/jobs/bulk-load-columns"},{"title":"Materialized Views with UDFs","sidebarTitle":"Materialized views","icon":"microscope","href":"/geneva/jobs/materialized-views"},{"title":"Advanced Job Configuration","sidebarTitle":"Advanced job configuration","icon":"sliders","href":"/geneva/jobs/advanced-job-configuration"},{"title":"Job Lifecycle","sidebarTitle":"Job Lifecycle","icon":"arrows-spin","href":"/geneva/jobs/lifecycle"},{"title":"Backfill Conflicts","sidebarTitle":"Backfill Conflicts","icon":"code-merge","href":"/geneva/jobs/conflicts"},{"title":"Distributed Job Performance and Cluster Sizing","sidebarTitle":"Performance and Sizing","icon":"chart-line","href":"/geneva/jobs/performance"},{"title":"Job Metrics (Diagnostics)","sidebarTitle":"Job Metrics","icon":"chart-simple","href":"/geneva/jobs/job_metrics"},{"title":"Geneva Console","sidebarTitle":"Console","icon":"computer","href":"/geneva/jobs/console"},{"title":"Troubleshooting Geneva Jobs","sidebarTitle":"Job troubleshooting","icon":"wrench","href":"/geneva/jobs/troubleshooting"},{"title":"Advanced Execution Contexts","sidebarTitle":"Advanced execution contexts","icon":"circle-nodes","href":"/geneva/jobs/contexts"}]},{"group":"Deployment","pages":[{"title":"Deploy Geneva using Helm","sidebarTitle":"Helm Deployment","icon":"cogs","href":"/geneva/deployment/helm"},{"title":"Job and Session Startup Optimizations","sidebarTitle":"Startup optimizations","icon":"engine","href":"/geneva/jobs/startup"},{"title":"Dependency Verification","sidebarTitle":"Dependency Verification","icon":"magnifying-glass-chart","href":"/geneva/deployment/dependency-verification"},{"title":"Advanced Configuration","sidebarTitle":"Advanced Configuration","description":"Learn about environment variables for configuring Geneva behavior.","icon":"flask-gear","href":"/geneva/udfs/advanced-configuration"},{"title":"Manual Deployment on Kubernetes","sidebarTitle":"Manual Deployment","icon":"cogs","href":"/geneva/deployment/index"},{"title":"Troubleshooting Geneva Deployments","sidebarTitle":"Deployment Troubleshooting","description":"Learn how to diagnose and resolve common issues with Geneva deployments, including version compatibility, permissions, and serialization errors.","icon":"question-circle","href":"/geneva/deployment/troubleshooting"}]},{"title":"End-to-End Example","sidebarTitle":"End-to-end example","icon":"play","href":"/geneva/end-to-end"},{"title":"Geneva Python SDK","icon":"python","href":"/geneva/reference"}]},{"group":"Support","pages":[{"title":"Troubleshooting","sidebarTitle":"Troubleshooting","icon":"tools","href":"/troubleshooting"},{"group":"FAQ","pages":[{"title":"Frequently Asked Questions","sidebarTitle":"FAQ","icon":"question-circle","href":"/faq/index"},{"title":"LanceDB: Frequently Asked Questions","sidebarTitle":"LanceDB OSS","icon":"code","mode":"wide","href":"/faq/faq-oss"},{"title":"LanceDB Enterprise FAQ","sidebarTitle":"LanceDB Enterprise","icon":"server","mode":"wide","href":"/faq/faq-enterprise"}]}]}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/integrations"}]},{"tab":"Tutorials","pages":[{"title":"Tutorials","href":"/tutorials"}]},{"tab":"Demos","pages":[{"title":"Demos","href":"/demos"}]},{"tab":"Datasets","pages":[{"title":"Datasets","href":"/datasets"}]},{"tab":"Use Cases","pages":[{"title":"Use Cases","href":"/integrations/lerobotdataset"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference"}]}]},"title":"Manual Deployment on Kubernetes - LanceDB","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["10e4515597","a74be98ba7"],"chunks":["BannerMarkdown-B-Glu166.js","dist-zbf22OZA.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-Cs6nMGht.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","zoom-image-lightbox-BNnMwe0F.js","lightbox-handle-r17bVUz3.js"]}