From de4ad38b9b9a839024808ece4014df844c93997d Mon Sep 17 00:00:00 2001 From: Ashish Mahendra Date: Mon, 27 Jan 2025 12:29:40 +0000 Subject: [PATCH 1/4] Add Dockerfile and initialization scripts for jac-cloud deployment --- jac-cloud/scripts/Dockerfile | 33 +++++++++ jac-cloud/scripts/init_jac_cloud.sh | 31 ++++++++ jac-cloud/scripts/jac-cloud.yml | 105 ++++++++++++++++++++++++++++ jac-cloud/scripts/module-config.yml | 32 +++++++++ 4 files changed, 201 insertions(+) create mode 100644 jac-cloud/scripts/Dockerfile create mode 100644 jac-cloud/scripts/init_jac_cloud.sh create mode 100644 jac-cloud/scripts/jac-cloud.yml create mode 100644 jac-cloud/scripts/module-config.yml diff --git a/jac-cloud/scripts/Dockerfile b/jac-cloud/scripts/Dockerfile new file mode 100644 index 000000000..c81d6f2be --- /dev/null +++ b/jac-cloud/scripts/Dockerfile @@ -0,0 +1,33 @@ +# Use Python 3.12 slim as the base +FROM python:3.12-slim + +# Install git (to clone the repo) +RUN apt-get update && apt-get install -y --no-install-recommends git + + +# Set up a working directory +WORKDIR /app + +# Clone the LittleX repo (main branch) into /app/littlex +RUN git clone --branch main https://github.com/Jaseci-Labs/littleX.git /app/littlex + +# Install Python dependencies from the cloned repo +WORKDIR /app/littlex/littleX_BE +RUN pip install --no-cache-dir -r requirements.txt +RUN pip install openai +RUN pip install jac-splice-orc +WORKDIR /app/littlex +# Copy our startup script into the image (you'll create it locally) +COPY init_jac_cloud.sh /app/init_jac_cloud.sh +RUN chmod +x /app/init_jac_cloud.sh + +# Expose the FastAPI port +EXPOSE 8000 + +# Set default environment variables, can be overridden in K8s +ENV NAMESPACE=default +ENV CONFIGMAP_NAME=module-config +ENV FILE_NAME=littleX_BE/littleX_mini.jac + +# By default, run the init_jac_cloud.sh script +CMD ["/bin/bash", "/app/init_jac_cloud.sh"] diff --git a/jac-cloud/scripts/init_jac_cloud.sh b/jac-cloud/scripts/init_jac_cloud.sh new file mode 100644 index 000000000..5456e88e5 --- /dev/null +++ b/jac-cloud/scripts/init_jac_cloud.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# Fail on error +set -e + +echo "Starting jac-cloud pod initialization..." + +# Default values for variables +NAMESPACE=${NAMESPACE:-default} +CONFIGMAP_NAME=${CONFIGMAP_NAME:-module-config} +FILE_NAME=${FILE_NAME:-module-config} + +echo "Using Namespace: $NAMESPACE" +echo "Using ConfigMap: $CONFIGMAP_NAME" +echo "Running Jac File: $FILE_NAME" + +# Step 1: Initialize Pod Manager and Kubernetes setup +echo "Running orc_initialize..." +jac orc_initialize $NAMESPACE +if [ $? -ne 0 ]; then + echo "orc_initialize failed. Exiting..." + exit 1 +fi + +# Step 2: Start Jac Serve +echo "Starting Jac Serve with file: $FILE_NAME..." +jac serve $FILE_NAME +if [ $? -ne 0 ]; then + echo "Jac Serve failed. Exiting..." + exit 1 +fi diff --git a/jac-cloud/scripts/jac-cloud.yml b/jac-cloud/scripts/jac-cloud.yml new file mode 100644 index 000000000..3cf7cc1c4 --- /dev/null +++ b/jac-cloud/scripts/jac-cloud.yml @@ -0,0 +1,105 @@ +#jac-cloud.yml + +# 1. Namespace: littlex +apiVersion: v1 +kind: Namespace +metadata: + name: littlex +--- +# 2. ServiceAccount: jac-cloud-sa (in the littlex namespace) +apiVersion: v1 +kind: ServiceAccount +metadata: + name: jac-cloud-sa + namespace: littlex +--- +# 3. ClusterRole: allows listing/creating both namespaces AND serviceaccounts +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: jac-cloud-namespace-role +rules: + # Permissions for namespaces + - apiGroups: [""] + resources: ["namespaces"] + verbs: ["*"] + # Permissions for serviceaccounts + - apiGroups: [""] + resources: ["serviceaccounts"] + verbs: ["*"] + - apiGroups: ["rbac.authorization.k8s.io"] + resources: + - "roles" + - "rolebindings" + verbs: ["*"] + - apiGroups: ["apps"] + resources: ["deployments"] + verbs: ["*"] + - apiGroups: [""] + resources: ["services"] + verbs: ["*"] +--- +# 4. ClusterRoleBinding: binds the above ClusterRole to jac-cloud-sa in littlex +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: jac-cloud-namespace-binding +subjects: + - kind: ServiceAccount + name: jac-cloud-sa + namespace: littlex +roleRef: + kind: ClusterRole + name: jac-cloud-namespace-role + apiGroup: rbac.authorization.k8s.io +--- +# 5. Deployment: runs the container with the appropriate ServiceAccount +apiVersion: apps/v1 +kind: Deployment +metadata: + name: jac-cloud + namespace: littlex +spec: + replicas: 1 + selector: + matchLabels: + app: jac-cloud + template: + metadata: + labels: + app: jac-cloud + spec: + # Use the SA in the littlex namespace for correct RBAC + serviceAccountName: jac-cloud-sa + containers: + - name: jac-cloud + image: ashishmahendra/littlex:0.0.15 + imagePullPolicy: Always + + # Environment variables for orc_initialize + env: + - name: CONFIG_FILE_PATH + value: "/cfg/module_config.json" + - name: NAMESPACE + value: "littlex" + - name: CONFIGMAP_NAME + value: "module-config" + - name: FILE_NAME + value: "littleX_BE/littleX_full.jac" + - name: OPENAI_API_KEY + valueFrom: + secretKeyRef: + name: openai-secret + key: openai-key + volumeMounts: + - name: config-vol + mountPath: /cfg + volumes: + - name: config-vol + configMap: + name: module-config + items: + - key: module_config.json + path: module_config.json + + restartPolicy: Always diff --git a/jac-cloud/scripts/module-config.yml b/jac-cloud/scripts/module-config.yml new file mode 100644 index 000000000..34f0cad24 --- /dev/null +++ b/jac-cloud/scripts/module-config.yml @@ -0,0 +1,32 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: module-config + namespace: littlex +data: + module_config.json: |- + { + "numpy": { + "lib_mem_size_req": "100Mi", + "dependency": [], + "lib_cpu_req": "500m", + "load_type": "remote" + }, + "transformers": { + "lib_mem_size_req": "2000Mi", + "dependency": [ + "torch", + "transformers" + ], + "lib_cpu_req": "1.0", + "load_type": "remote" + }, + "sentence_transformers": { + "lib_mem_size_req": "2000Mi", + "dependency": [ + "sentence-transformers" + ], + "lib_cpu_req": "1.0", + "load_type": "remote" + } + } From 804598862f8ed1989a67810b807b138c6a3adbc2 Mon Sep 17 00:00:00 2001 From: Ashish Mahendra Date: Mon, 27 Jan 2025 14:59:39 +0000 Subject: [PATCH 2/4] Refactor Dockerfile and initialization script for jac-cloud deployment; optimize package installation and enhance logging in init script. --- jac-cloud/scripts/Dockerfile | 35 ++++--------- jac-cloud/scripts/init_jac_cloud.sh | 36 ++++++++------ jac-cloud/scripts/jac-cloud.yml | 76 ++++++++++++++++++----------- 3 files changed, 79 insertions(+), 68 deletions(-) diff --git a/jac-cloud/scripts/Dockerfile b/jac-cloud/scripts/Dockerfile index c81d6f2be..6e4d62289 100644 --- a/jac-cloud/scripts/Dockerfile +++ b/jac-cloud/scripts/Dockerfile @@ -1,33 +1,16 @@ -# Use Python 3.12 slim as the base FROM python:3.12-slim -# Install git (to clone the repo) -RUN apt-get update && apt-get install -y --no-install-recommends git +RUN apt-get update && \ + apt-get install -y --no-install-recommends git && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* - -# Set up a working directory -WORKDIR /app - -# Clone the LittleX repo (main branch) into /app/littlex -RUN git clone --branch main https://github.com/Jaseci-Labs/littleX.git /app/littlex - -# Install Python dependencies from the cloned repo -WORKDIR /app/littlex/littleX_BE -RUN pip install --no-cache-dir -r requirements.txt -RUN pip install openai -RUN pip install jac-splice-orc WORKDIR /app/littlex -# Copy our startup script into the image (you'll create it locally) -COPY init_jac_cloud.sh /app/init_jac_cloud.sh +RUN git clone --branch main --depth 1 https://github.com/Jaseci-Labs/littleX.git /app/littlex && \ + pip install --no-cache-dir -r littleX_BE/requirements.txt openai jac-splice-orc + +COPY init_jac_cloud.sh /app/ RUN chmod +x /app/init_jac_cloud.sh -# Expose the FastAPI port EXPOSE 8000 - -# Set default environment variables, can be overridden in K8s -ENV NAMESPACE=default -ENV CONFIGMAP_NAME=module-config -ENV FILE_NAME=littleX_BE/littleX_mini.jac - -# By default, run the init_jac_cloud.sh script -CMD ["/bin/bash", "/app/init_jac_cloud.sh"] +CMD ["/bin/bash", "/app/init_jac_cloud.sh"] \ No newline at end of file diff --git a/jac-cloud/scripts/init_jac_cloud.sh b/jac-cloud/scripts/init_jac_cloud.sh index 5456e88e5..4a9d9055f 100644 --- a/jac-cloud/scripts/init_jac_cloud.sh +++ b/jac-cloud/scripts/init_jac_cloud.sh @@ -1,31 +1,39 @@ #!/bin/bash -# Fail on error +# Exit on any error set -e -echo "Starting jac-cloud pod initialization..." +echo "=== Starting jac-cloud Pod Initialization ===" # Default values for variables NAMESPACE=${NAMESPACE:-default} CONFIGMAP_NAME=${CONFIGMAP_NAME:-module-config} -FILE_NAME=${FILE_NAME:-module-config} +FILE_NAME=${FILE_NAME:-example.jac} +# Display configuration echo "Using Namespace: $NAMESPACE" -echo "Using ConfigMap: $CONFIGMAP_NAME" echo "Running Jac File: $FILE_NAME" -# Step 1: Initialize Pod Manager and Kubernetes setup -echo "Running orc_initialize..." -jac orc_initialize $NAMESPACE -if [ $? -ne 0 ]; then - echo "orc_initialize failed. Exiting..." +# Helper function for logging +log_info() { + echo "[INFO] $1" +} + +log_error() { + echo "[ERROR] $1" exit 1 +} + +# Step 1: Initialize Pod Manager and Kubernetes setup +log_info "Running orc_initialize for namespace: $NAMESPACE..." +if ! jac orc_initialize "$NAMESPACE"; then + log_error "orc_initialize failed. Exiting..." fi +log_info "orc_initialize completed successfully." # Step 2: Start Jac Serve -echo "Starting Jac Serve with file: $FILE_NAME..." -jac serve $FILE_NAME -if [ $? -ne 0 ]; then - echo "Jac Serve failed. Exiting..." - exit 1 +log_info "Starting Jac Serve with file: $FILE_NAME..." +if ! jac serve "$FILE_NAME"; then + log_error "Jac Serve failed. Exiting..." fi + diff --git a/jac-cloud/scripts/jac-cloud.yml b/jac-cloud/scripts/jac-cloud.yml index 3cf7cc1c4..8b2489696 100644 --- a/jac-cloud/scripts/jac-cloud.yml +++ b/jac-cloud/scripts/jac-cloud.yml @@ -1,5 +1,3 @@ -#jac-cloud.yml - # 1. Namespace: littlex apiVersion: v1 kind: Namespace @@ -13,47 +11,56 @@ metadata: name: jac-cloud-sa namespace: littlex --- -# 3. ClusterRole: allows listing/creating both namespaces AND serviceaccounts +# 3. ClusterRole: Define permissions for the jac-cloud system apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: - name: jac-cloud-namespace-role + name: jac-cloud-cluster-role rules: - # Permissions for namespaces - - apiGroups: [""] - resources: ["namespaces"] - verbs: ["*"] - # Permissions for serviceaccounts - - apiGroups: [""] - resources: ["serviceaccounts"] - verbs: ["*"] - - apiGroups: ["rbac.authorization.k8s.io"] + # Core Kubernetes resources permissions + - apiGroups: [""] resources: - - "roles" - - "rolebindings" - verbs: ["*"] - - apiGroups: ["apps"] + - "namespaces" + - "pods" + - "services" + - "configmaps" + verbs: ["get", "list", "create", "delete", "watch", "patch", "update"] + + # ServiceAccount permissions + - apiGroups: [""] + resources: ["serviceaccounts"] + verbs: ["get", "list", "create", "delete", "watch", "patch", "update"] + + # RBAC permissions + - apiGroups: ["rbac.authorization.k8s.io"] + resources: ["roles", "rolebindings"] + verbs: ["get", "list", "create", "delete", "watch", "patch", "update"] + + # Apps API group for managing deployments + - apiGroups: ["apps"] resources: ["deployments"] - verbs: ["*"] - - apiGroups: [""] - resources: ["services"] - verbs: ["*"] + verbs: ["get", "list", "create", "delete", "watch", "patch", "update"] + + # Allow access to secrets (e.g., for OpenAI API key) + - apiGroups: [""] + resources: ["secrets"] + verbs: ["get", "list", "watch"] --- -# 4. ClusterRoleBinding: binds the above ClusterRole to jac-cloud-sa in littlex +# 4. ClusterRoleBinding: Bind ClusterRole to the ServiceAccount apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: - name: jac-cloud-namespace-binding + name: jac-cloud-cluster-role-binding subjects: - kind: ServiceAccount name: jac-cloud-sa namespace: littlex roleRef: kind: ClusterRole - name: jac-cloud-namespace-role + name: jac-cloud-cluster-role apiGroup: rbac.authorization.k8s.io --- -# 5. Deployment: runs the container with the appropriate ServiceAccount +# 5. Deployment: jac-cloud application deployment apiVersion: apps/v1 kind: Deployment metadata: @@ -69,14 +76,14 @@ spec: labels: app: jac-cloud spec: - # Use the SA in the littlex namespace for correct RBAC + # Attach the ServiceAccount for RBAC serviceAccountName: jac-cloud-sa containers: - name: jac-cloud - image: ashishmahendra/littlex:0.0.15 + image: ashishmahendra/littlex:0.1 imagePullPolicy: Always - # Environment variables for orc_initialize + # Environment variables for dynamic configuration env: - name: CONFIG_FILE_PATH value: "/cfg/module_config.json" @@ -91,6 +98,8 @@ spec: secretKeyRef: name: openai-secret key: openai-key + + # Mount ConfigMap for application configuration volumeMounts: - name: config-vol mountPath: /cfg @@ -102,4 +111,15 @@ spec: - key: module_config.json path: module_config.json + # Restart policy restartPolicy: Always +--- +# 6. Secret: OpenAI API key (optional example for completeness) +apiVersion: v1 +kind: Secret +metadata: + name: openai-secret + namespace: littlex +type: Opaque +data: + openai-key: "c2stcHJvai0xTnRDVGpoUDg4YTFCcFU0cXUyclQzQmxia0ZKRjh2NndqbHgzZDVRWWNrMjBubjY=" From ed76685c042357b8a9a35ea35c4d124bfc7ddde8 Mon Sep 17 00:00:00 2001 From: Ashish Mahendra Date: Mon, 27 Jan 2025 15:31:03 +0000 Subject: [PATCH 3/4] Fix formatting inconsistencies in jac-cloud.yml; ensure uniform spacing in apiGroups and update file path for littleX_full.jac --- jac-cloud/scripts/jac-cloud.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/jac-cloud/scripts/jac-cloud.yml b/jac-cloud/scripts/jac-cloud.yml index 8b2489696..a3a0852da 100644 --- a/jac-cloud/scripts/jac-cloud.yml +++ b/jac-cloud/scripts/jac-cloud.yml @@ -18,7 +18,7 @@ metadata: name: jac-cloud-cluster-role rules: # Core Kubernetes resources permissions - - apiGroups: [""] + - apiGroups: [""] resources: - "namespaces" - "pods" @@ -27,22 +27,22 @@ rules: verbs: ["get", "list", "create", "delete", "watch", "patch", "update"] # ServiceAccount permissions - - apiGroups: [""] + - apiGroups: [""] resources: ["serviceaccounts"] verbs: ["get", "list", "create", "delete", "watch", "patch", "update"] # RBAC permissions - - apiGroups: ["rbac.authorization.k8s.io"] + - apiGroups: ["rbac.authorization.k8s.io"] resources: ["roles", "rolebindings"] verbs: ["get", "list", "create", "delete", "watch", "patch", "update"] # Apps API group for managing deployments - - apiGroups: ["apps"] + - apiGroups: ["apps"] resources: ["deployments"] verbs: ["get", "list", "create", "delete", "watch", "patch", "update"] # Allow access to secrets (e.g., for OpenAI API key) - - apiGroups: [""] + - apiGroups: [""] resources: ["secrets"] verbs: ["get", "list", "watch"] --- @@ -86,13 +86,13 @@ spec: # Environment variables for dynamic configuration env: - name: CONFIG_FILE_PATH - value: "/cfg/module_config.json" + value: "/cfg/module_config.json" - name: NAMESPACE value: "littlex" - name: CONFIGMAP_NAME value: "module-config" - name: FILE_NAME - value: "littleX_BE/littleX_full.jac" + value: "littleX_BE/_archive/littleX_full.jac" - name: OPENAI_API_KEY valueFrom: secretKeyRef: @@ -122,4 +122,4 @@ metadata: namespace: littlex type: Opaque data: - openai-key: "c2stcHJvai0xTnRDVGpoUDg4YTFCcFU0cXUyclQzQmxia0ZKRjh2NndqbHgzZDVRWWNrMjBubjY=" + openai-key: "c2stcHJvai0xTnRDVGpoUDg4YTFCcFU0cXUyclQzQmxia0ZKRjh2NndqbHgzZDVRWWNrMjBubjY=" \ No newline at end of file From b0e1b478a22ddf5af822f99987d53ad910af9141 Mon Sep 17 00:00:00 2001 From: Ashish Mahendra Date: Tue, 28 Jan 2025 16:36:35 +0000 Subject: [PATCH 4/4] Add usage documentation for jac-cloud deployment and create littlex namespace in module-config.yml --- jac-cloud/scripts/Readme.md | 186 ++++++++++++++++++++++++++++ jac-cloud/scripts/module-config.yml | 5 + 2 files changed, 191 insertions(+) create mode 100644 jac-cloud/scripts/Readme.md diff --git a/jac-cloud/scripts/Readme.md b/jac-cloud/scripts/Readme.md new file mode 100644 index 000000000..2879ac5ab --- /dev/null +++ b/jac-cloud/scripts/Readme.md @@ -0,0 +1,186 @@ +## Usage Documentation for jac-cloud Deployment + +### Overview +The `jac-cloud` deployment provides a Kubernetes-based system for running JAC applications using the `jac-splice-orc` plugin. This setup includes: +1. A Docker image with necessary dependencies. +2. A Kubernetes configuration for creating required resources like namespaces, service accounts, roles, and bindings. +3. Dynamic configuration through environment variables and ConfigMaps. + +--- + +### Prerequisites +1. **Kubernetes Cluster**: Ensure you have access to a Kubernetes cluster. +2. **kubectl**: Install the Kubernetes command-line tool. +3. **Docker**: Build and push the `jac-cloud` Docker image if necessary. +4. **Namespace**: The target namespace should be created before deploying resources. +5. **OpenAI API Key**: Add your OpenAI API key in base64 format for secret management. + +--- + +### Directory Structure +``` +jac-cloud/ +├── scripts/ +│ ├── Dockerfile +│ ├── init_jac_cloud.sh +│ ├── jac-cloud.yml +│ ├── module-config.yml +``` + +--- + +### Step-by-Step Guide + +#### 1. Build and Push the Docker Image +Build the `jac-cloud` Docker image using the `Dockerfile` in the `scripts` directory. + +```bash +docker build -t your-dockerhub-username/jac-cloud:latest -f jac-cloud/scripts/Dockerfile . +docker push your-dockerhub-username/jac-cloud:latest +``` + +Update the `image` field in `jac-cloud.yml` with your Docker image path. + +--- +#### 2. Apply the ConfigMap for Dynamic Configuration +Apply the `module-config.yml` file to configure module-specific settings: + +```bash +kubectl apply -f jac-cloud/scripts/module-config.yml +``` +This will: +- Create the `littlex` namespace. + +--- + +#### 3. Apply Namespace and Resources +Run the following command to apply the Kubernetes resources: + +```bash +kubectl apply -f jac-cloud/scripts/jac-cloud.yml +``` + +This will: +- Set up RBAC roles and bindings. +- Deploy the `jac-cloud` application in the `littlex` namespace. + +--- + +#### 4. Add the OpenAI API Key (Optional) +Replace `your-openai-key` with your actual API key, encode it in base64, and create the secret: + +```bash +echo -n "your-openai-key" | base64 +``` + +Replace the base64 value in the `data.openai-key` field of the secret definition in `jac-cloud.yml`, and then apply it: + +```bash +kubectl apply -f jac-cloud/scripts/jac-cloud.yml +``` + +--- + +#### 5. Verify Deployment +Ensure that all resources are created successfully: + +```bash +kubectl get all -n littlex +``` + +You should see the `jac-cloud` pod running along with associated resources. + +--- + +### Configuration Details + +#### 1. Environment Variables +| Variable | Description | Default Value | +|--------------------|------------------------------------------|---------------| +| `NAMESPACE` | Target namespace for the deployment. | `default` | +| `CONFIGMAP_NAME` | Name of the ConfigMap to mount. | `module-config` | +| `FILE_NAME` | JAC file to execute in the pod. | `example.jac` | +| `OPENAI_API_KEY` | OpenAI API key (retrieved from secret). | None | + +--- + +#### 2. ConfigMap (`module-config.yml`) +Defines configuration for dynamically loaded modules: + +```json +{ + "numpy": { + "lib_mem_size_req": "100Mi", + "dependency": [], + "lib_cpu_req": "500m", + "load_type": "remote" + }, + "transformers": { + "lib_mem_size_req": "2000Mi", + "dependency": ["torch", "transformers"], + "lib_cpu_req": "1.0", + "load_type": "remote" + }, + "sentence_transformers": { + "lib_mem_size_req": "2000Mi", + "dependency": ["sentence-transformers"], + "lib_cpu_req": "1.0", + "load_type": "remote" + } +} +``` + +--- + +### Validation and Troubleshooting + +#### Verify Namespace +Ensure the `littlex` namespace exists: +```bash +kubectl get namespaces +``` + +#### Verify ConfigMap +Check if the `module-config` ConfigMap is applied: +```bash +kubectl get configmap -n littlex +``` + +#### Verify Deployment +Ensure the `jac-cloud` pod is running: +```bash +kubectl get pods -n littlex +``` + +--- + +### Advanced Usage + +#### Redeploying with Updated Configurations +To update the ConfigMap or deployment: +1. Modify the respective YAML file. +2. Apply the changes: + ```bash + kubectl apply -f jac-cloud/scripts/module-config.yml + kubectl apply -f jac-cloud/scripts/jac-cloud.yml + ``` + +#### Access Logs +Monitor the logs of the `jac-cloud` pod: +```bash +kubectl logs -f deployment/jac-cloud -n littlex +``` + +#### Scale the Deployment +To scale the `jac-cloud` deployment: +```bash +kubectl scale deployment jac-cloud --replicas=3 -n littlex +``` + +--- + +### Cleanup +To remove all resources: +```bash +kubectl delete namespace littlex +``` diff --git a/jac-cloud/scripts/module-config.yml b/jac-cloud/scripts/module-config.yml index 34f0cad24..2bb8d518d 100644 --- a/jac-cloud/scripts/module-config.yml +++ b/jac-cloud/scripts/module-config.yml @@ -1,4 +1,9 @@ apiVersion: v1 +kind: Namespace +metadata: + name: littlex +--- +apiVersion: v1 kind: ConfigMap metadata: name: module-config