diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index bdea2b4de36bba99673796b10c147c5487568a21..0000000000000000000000000000000000000000
--- a/.gitmodules
+++ /dev/null
@@ -1,4 +0,0 @@
-[submodule "moodle"]
-	path = moodle
-	url = https://github.com/moodle/moodle.git
-	branch = b156b18c721ca797b338c545d6c8ac5694cf8650
diff --git a/.idea/modules.xml b/.idea/modules.xml
index e26ffcef06a0f31fb4c3a5f61d6fff63b7bc2c68..d9dd4d4c70580c99db9a21f2eefb263bbe5fbc09 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,9 +2,9 @@
 <project version="4">
   <component name="ProjectModuleManager">
     <modules>
+      <module fileurl="file://$PROJECT_DIR$/assignsubmission_autograde.iml" filepath="$PROJECT_DIR$/assignsubmission_autograde.iml" />
       <module fileurl="file://$PROJECT_DIR$/autograde.iml" filepath="$PROJECT_DIR$/autograde.iml" />
       <module fileurl="file://$PROJECT_DIR$/test-images/demo-python3/demo-python3.iml" filepath="$PROJECT_DIR$/test-images/demo-python3/demo-python3.iml" />
-      <module fileurl="file://$PROJECT_DIR$/.idea/moodle-assignsubmission-autograde.iml" filepath="$PROJECT_DIR$/.idea/moodle-assignsubmission-autograde.iml" />
     </modules>
   </component>
-</project>
+</project>
\ No newline at end of file
diff --git a/.idea/php.xml b/.idea/php.xml
index 0e09af40726c3560d3f3d145e050377be73a1431..33669a0cd1319aa2a80a5997d4005f00f4610372 100644
--- a/.idea/php.xml
+++ b/.idea/php.xml
@@ -1,5 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="PhpIncludePathManager">
+    <include_path>
+      <path value="$PROJECT_DIR$/autograde-moodle/vendor/moodle/moodle" />
+      <path value="$PROJECT_DIR$/autograde-moodle/vendor/composer" />
+    </include_path>
+  </component>
   <component name="PhpProjectSharedConfiguration" php_language_level="7.4">
     <option name="suggestChangeDefaultLanguageLevel" value="false" />
   </component>
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index ea42099ae68b53475066a9407ab2461d31ac580b..35eb1ddfbbc029bcab630581847471d7f238ec53 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -2,6 +2,5 @@
 <project version="4">
   <component name="VcsDirectoryMappings">
     <mapping directory="" vcs="Git" />
-    <mapping directory="$PROJECT_DIR$/moodle" vcs="Git" />
   </component>
 </project>
\ No newline at end of file
diff --git a/Dockerfile-moodle-with-autograde b/Dockerfile-moodle-with-autograde
deleted file mode 100644
index a3d182ea3257793591da3f1a9cfa8218c4a5f451..0000000000000000000000000000000000000000
--- a/Dockerfile-moodle-with-autograde
+++ /dev/null
@@ -1,14 +0,0 @@
-# Use the moodle base image
-FROM moodlehq/moodle-php-apache:7.4
-
-# Copy the moodle website files into the container
-COPY moodle /var/www/html
-
-# Copy the config file into the same directory
-COPY config.php /var/www/html/config.php
-
-# Copy the plugin files into the container web directory
-COPY moodle-assignsubmission-autograde /var/www/html/mod/assign/submission/autograde
-
-# Set LogLevel to debug in the apache config
-RUN sed -i 's/LogLevel warn/LogLevel info/' /etc/apache2/apache2.conf
diff --git a/assignsubmission_autograde.iml b/assignsubmission_autograde.iml
new file mode 100644
index 0000000000000000000000000000000000000000..409185a0720989bf3451fcbd0e71e4c4cff24df5
--- /dev/null
+++ b/assignsubmission_autograde.iml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$/autograde-plugins/assignsubmission_autograde">
+      <sourceFolder url="file://$MODULE_DIR$/autograde-plugins/assignsubmission_autograde/src" isTestSource="false" packagePrefix="assignsubmission_autograde" />
+    </content>
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/autograde-plugins/README.md b/autograde-plugins/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/autograde-plugins/assignsubmission_autograde/.gitignore b/autograde-plugins/assignsubmission_autograde/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..7f0dae58353d9672b1549e7732316387f651123f
--- /dev/null
+++ b/autograde-plugins/assignsubmission_autograde/.gitignore
@@ -0,0 +1,8 @@
+### Composer template
+composer.phar
+/vendor/
+
+# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control
+# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file
+# composer.lock
+
diff --git a/autograde-plugins/assignsubmission_autograde/Dockerfile b/autograde-plugins/assignsubmission_autograde/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..b5d13d77fe20d928b2829e7f1f07133edc45607b
--- /dev/null
+++ b/autograde-plugins/assignsubmission_autograde/Dockerfile
@@ -0,0 +1,16 @@
+FROM composer:2.8.4 AS composer
+FROM php:7.4.33 AS fetch-moodle
+
+COPY --from=composer /usr/bin/composer /usr/bin/composer
+
+RUN apt-get update
+RUN apt-get install -y --no-install-recommends unzip libzip-dev libpng-dev libicu-dev
+RUN docker-php-ext-install zip gd intl
+COPY composer.json .
+RUN composer install --no-interaction
+
+FROM moodlehq/moodle-php-apache:7.4
+
+COPY --from=fetch-moodle vendor/moodle/moodle /var/www/html
+COPY config.php /var/www/html/config.php
+COPY src/ /var/www/html/mod/assign/submission/autograde
diff --git a/moodle-assignsubmission-autograde/README.md b/autograde-plugins/assignsubmission_autograde/README.md
similarity index 100%
rename from moodle-assignsubmission-autograde/README.md
rename to autograde-plugins/assignsubmission_autograde/README.md
diff --git a/autograde-plugins/assignsubmission_autograde/composer.json b/autograde-plugins/assignsubmission_autograde/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..600e507faddeeceef36f66cc3862f50641841cbb
--- /dev/null
+++ b/autograde-plugins/assignsubmission_autograde/composer.json
@@ -0,0 +1,17 @@
+{
+  "name": "autograde/assignsubmission_autograde",
+  "version": "1.2.2",
+
+  "require": {
+    "php": "^7.4"
+  },
+
+  "require-dev": {
+    "moodle/moodle": "v4.1.15"
+  },
+  "autoload": {
+    "psr-4": {
+      "assignsubmission_autograde\\": "src/classes"
+    }
+  }
+}
\ No newline at end of file
diff --git a/autograde-plugins/assignsubmission_autograde/composer.lock b/autograde-plugins/assignsubmission_autograde/composer.lock
new file mode 100644
index 0000000000000000000000000000000000000000..9ccb01d154263f5f7c527c62424a01daeb0c0f11
--- /dev/null
+++ b/autograde-plugins/assignsubmission_autograde/composer.lock
@@ -0,0 +1,95 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "0df7b5f6622e1f7172ab8b5d7a6fab80",
+    "packages": [],
+    "packages-dev": [
+        {
+            "name": "moodle/moodle",
+            "version": "v4.1.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/moodle/moodle.git",
+                "reference": "3d7496dacd007bead4a73b602116fd018c329e16"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/moodle/moodle/zipball/3d7496dacd007bead4a73b602116fd018c329e16",
+                "reference": "3d7496dacd007bead4a73b602116fd018c329e16",
+                "shasum": ""
+            },
+            "require": {
+                "ext-ctype": "*",
+                "ext-curl": "*",
+                "ext-dom": "*",
+                "ext-fileinfo": "*",
+                "ext-gd": "*",
+                "ext-hash": "*",
+                "ext-iconv": "*",
+                "ext-intl": "*",
+                "ext-json": "*",
+                "ext-mbstring": "*",
+                "ext-openssl": "*",
+                "ext-pcre": "*",
+                "ext-simplexml": "*",
+                "ext-spl": "*",
+                "ext-xml": "*",
+                "ext-xmlreader": "*",
+                "ext-zip": "*",
+                "ext-zlib": "*",
+                "php": ">=7.4.0"
+            },
+            "require-dev": {
+                "behat/behat": "3.13.*",
+                "behat/mink": "^1.10.0",
+                "behat/mink-goutte-driver": "^2.0",
+                "friends-of-behat/mink-extension": "^2.7.2",
+                "mikey179/vfsstream": "1.6.*",
+                "oleg-andreyev/mink-phpwebdriver": "1.2.*",
+                "phpunit/phpunit": "9.5.*",
+                "symfony/process": "^4.4 || ^5.0 || ^6.0"
+            },
+            "suggest": {
+                "ext-exif": "Enabling Exif PHP extension is recommended, it is used by Moodle to parse image meta data.",
+                "ext-mysqli": "Needed when Moodle uses MySQL or MariaDB database.",
+                "ext-oci8": "Needed when Moodle uses Oracle database.",
+                "ext-pgsql": "Needed when Moodle uses PostgreSQL database.",
+                "ext-soap": "Enabling SOAP PHP extension is useful for web services and some plugins.",
+                "ext-sodium": "Enabling Sodium PHP extension is recommended, it is used by Moodle encryption API.",
+                "ext-sqlsrv": "Needed when Moodle uses MS SQL Server database.",
+                "ext-tokenizer": "Enabling Tokenizer PHP extension is recommended, it improves Moodle Networking functionality."
+            },
+            "type": "project",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "GPL-3.0-or-later"
+            ],
+            "description": "Moodle - the world's open source learning platform",
+            "homepage": "https://moodle.org",
+            "support": {
+                "source": "https://github.com/moodle/moodle/tree/v4.1.15"
+            },
+            "funding": [
+                {
+                    "type": "custom"
+                },
+                {
+                    "url": "https://moodle.com/donations/",
+                    "type": "custom"
+                }
+            ],
+            "time": "2024-12-06T06:12:41+00:00"
+        }
+    ],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": {},
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": {},
+    "platform-dev": {},
+    "plugin-api-version": "2.6.0"
+}
diff --git a/config.php b/autograde-plugins/assignsubmission_autograde/config.php
similarity index 100%
rename from config.php
rename to autograde-plugins/assignsubmission_autograde/config.php
diff --git a/moodle-assignsubmission-autograde/classes/client/autograde_webservice.php b/autograde-plugins/assignsubmission_autograde/src/classes/client/autograde_webservice.php
similarity index 100%
rename from moodle-assignsubmission-autograde/classes/client/autograde_webservice.php
rename to autograde-plugins/assignsubmission_autograde/src/classes/client/autograde_webservice.php
diff --git a/moodle-assignsubmission-autograde/classes/client/model/Assignment.php b/autograde-plugins/assignsubmission_autograde/src/classes/client/model/Assignment.php
similarity index 100%
rename from moodle-assignsubmission-autograde/classes/client/model/Assignment.php
rename to autograde-plugins/assignsubmission_autograde/src/classes/client/model/Assignment.php
diff --git a/moodle-assignsubmission-autograde/classes/client/model/Course.php b/autograde-plugins/assignsubmission_autograde/src/classes/client/model/Course.php
similarity index 100%
rename from moodle-assignsubmission-autograde/classes/client/model/Course.php
rename to autograde-plugins/assignsubmission_autograde/src/classes/client/model/Course.php
diff --git a/moodle-assignsubmission-autograde/classes/client/model/Environment.php b/autograde-plugins/assignsubmission_autograde/src/classes/client/model/Environment.php
similarity index 100%
rename from moodle-assignsubmission-autograde/classes/client/model/Environment.php
rename to autograde-plugins/assignsubmission_autograde/src/classes/client/model/Environment.php
diff --git a/moodle-assignsubmission-autograde/classes/client/model/Registry.php b/autograde-plugins/assignsubmission_autograde/src/classes/client/model/Registry.php
similarity index 100%
rename from moodle-assignsubmission-autograde/classes/client/model/Registry.php
rename to autograde-plugins/assignsubmission_autograde/src/classes/client/model/Registry.php
diff --git a/moodle-assignsubmission-autograde/classes/client/model/RegistryCredentials.php b/autograde-plugins/assignsubmission_autograde/src/classes/client/model/RegistryCredentials.php
similarity index 100%
rename from moodle-assignsubmission-autograde/classes/client/model/RegistryCredentials.php
rename to autograde-plugins/assignsubmission_autograde/src/classes/client/model/RegistryCredentials.php
diff --git a/moodle-assignsubmission-autograde/classes/client/model/Submission.php b/autograde-plugins/assignsubmission_autograde/src/classes/client/model/Submission.php
similarity index 100%
rename from moodle-assignsubmission-autograde/classes/client/model/Submission.php
rename to autograde-plugins/assignsubmission_autograde/src/classes/client/model/Submission.php
diff --git a/moodle-assignsubmission-autograde/classes/client/model/User.php b/autograde-plugins/assignsubmission_autograde/src/classes/client/model/User.php
similarity index 100%
rename from moodle-assignsubmission-autograde/classes/client/model/User.php
rename to autograde-plugins/assignsubmission_autograde/src/classes/client/model/User.php
diff --git a/moodle-assignsubmission-autograde/classes/client/request/CreateAssignmentRequest.php b/autograde-plugins/assignsubmission_autograde/src/classes/client/request/CreateAssignmentRequest.php
similarity index 100%
rename from moodle-assignsubmission-autograde/classes/client/request/CreateAssignmentRequest.php
rename to autograde-plugins/assignsubmission_autograde/src/classes/client/request/CreateAssignmentRequest.php
diff --git a/moodle-assignsubmission-autograde/classes/client/request/CreateSubmissionRequest.php b/autograde-plugins/assignsubmission_autograde/src/classes/client/request/CreateSubmissionRequest.php
similarity index 100%
rename from moodle-assignsubmission-autograde/classes/client/request/CreateSubmissionRequest.php
rename to autograde-plugins/assignsubmission_autograde/src/classes/client/request/CreateSubmissionRequest.php
diff --git a/moodle-assignsubmission-autograde/classes/external/autograde_download_all_submissions.php b/autograde-plugins/assignsubmission_autograde/src/classes/external/autograde_download_all_submissions.php
similarity index 100%
rename from moodle-assignsubmission-autograde/classes/external/autograde_download_all_submissions.php
rename to autograde-plugins/assignsubmission_autograde/src/classes/external/autograde_download_all_submissions.php
diff --git a/moodle-assignsubmission-autograde/classes/external/autograde_download_submission.php b/autograde-plugins/assignsubmission_autograde/src/classes/external/autograde_download_submission.php
similarity index 100%
rename from moodle-assignsubmission-autograde/classes/external/autograde_download_submission.php
rename to autograde-plugins/assignsubmission_autograde/src/classes/external/autograde_download_submission.php
diff --git a/moodle-assignsubmission-autograde/classes/external/autograde_list_submissions.php b/autograde-plugins/assignsubmission_autograde/src/classes/external/autograde_list_submissions.php
similarity index 100%
rename from moodle-assignsubmission-autograde/classes/external/autograde_list_submissions.php
rename to autograde-plugins/assignsubmission_autograde/src/classes/external/autograde_list_submissions.php
diff --git a/moodle-assignsubmission-autograde/classes/external/autograde_submission_info.php b/autograde-plugins/assignsubmission_autograde/src/classes/external/autograde_submission_info.php
similarity index 100%
rename from moodle-assignsubmission-autograde/classes/external/autograde_submission_info.php
rename to autograde-plugins/assignsubmission_autograde/src/classes/external/autograde_submission_info.php
diff --git a/moodle-assignsubmission-autograde/classes/external/autograde_upload_feedback.php b/autograde-plugins/assignsubmission_autograde/src/classes/external/autograde_upload_feedback.php
similarity index 100%
rename from moodle-assignsubmission-autograde/classes/external/autograde_upload_feedback.php
rename to autograde-plugins/assignsubmission_autograde/src/classes/external/autograde_upload_feedback.php
diff --git a/moodle-assignsubmission-autograde/classes/privacy/provider.php b/autograde-plugins/assignsubmission_autograde/src/classes/privacy/provider.php
similarity index 100%
rename from moodle-assignsubmission-autograde/classes/privacy/provider.php
rename to autograde-plugins/assignsubmission_autograde/src/classes/privacy/provider.php
diff --git a/moodle-assignsubmission-autograde/db/access.php b/autograde-plugins/assignsubmission_autograde/src/db/access.php
similarity index 100%
rename from moodle-assignsubmission-autograde/db/access.php
rename to autograde-plugins/assignsubmission_autograde/src/db/access.php
diff --git a/moodle-assignsubmission-autograde/db/install.php b/autograde-plugins/assignsubmission_autograde/src/db/install.php
similarity index 100%
rename from moodle-assignsubmission-autograde/db/install.php
rename to autograde-plugins/assignsubmission_autograde/src/db/install.php
diff --git a/moodle-assignsubmission-autograde/db/services.php b/autograde-plugins/assignsubmission_autograde/src/db/services.php
similarity index 100%
rename from moodle-assignsubmission-autograde/db/services.php
rename to autograde-plugins/assignsubmission_autograde/src/db/services.php
diff --git a/moodle-assignsubmission-autograde/db/uninstall.php b/autograde-plugins/assignsubmission_autograde/src/db/uninstall.php
similarity index 100%
rename from moodle-assignsubmission-autograde/db/uninstall.php
rename to autograde-plugins/assignsubmission_autograde/src/db/uninstall.php
diff --git a/moodle-assignsubmission-autograde/lang/en/assignsubmission_autograde.php b/autograde-plugins/assignsubmission_autograde/src/lang/en/assignsubmission_autograde.php
similarity index 100%
rename from moodle-assignsubmission-autograde/lang/en/assignsubmission_autograde.php
rename to autograde-plugins/assignsubmission_autograde/src/lang/en/assignsubmission_autograde.php
diff --git a/moodle-assignsubmission-autograde/lang/fr/assignsubmission_autograde.php b/autograde-plugins/assignsubmission_autograde/src/lang/fr/assignsubmission_autograde.php
similarity index 100%
rename from moodle-assignsubmission-autograde/lang/fr/assignsubmission_autograde.php
rename to autograde-plugins/assignsubmission_autograde/src/lang/fr/assignsubmission_autograde.php
diff --git a/moodle-assignsubmission-autograde/lib.php b/autograde-plugins/assignsubmission_autograde/src/lib.php
similarity index 100%
rename from moodle-assignsubmission-autograde/lib.php
rename to autograde-plugins/assignsubmission_autograde/src/lib.php
diff --git a/moodle-assignsubmission-autograde/locallib.php b/autograde-plugins/assignsubmission_autograde/src/locallib.php
similarity index 100%
rename from moodle-assignsubmission-autograde/locallib.php
rename to autograde-plugins/assignsubmission_autograde/src/locallib.php
diff --git a/moodle-assignsubmission-autograde/settings.php b/autograde-plugins/assignsubmission_autograde/src/settings.php
similarity index 100%
rename from moodle-assignsubmission-autograde/settings.php
rename to autograde-plugins/assignsubmission_autograde/src/settings.php
diff --git a/moodle-assignsubmission-autograde/utils.php b/autograde-plugins/assignsubmission_autograde/src/utils.php
similarity index 100%
rename from moodle-assignsubmission-autograde/utils.php
rename to autograde-plugins/assignsubmission_autograde/src/utils.php
diff --git a/moodle-assignsubmission-autograde/version.php b/autograde-plugins/assignsubmission_autograde/src/version.php
similarity index 100%
rename from moodle-assignsubmission-autograde/version.php
rename to autograde-plugins/assignsubmission_autograde/src/version.php
diff --git a/autograde-service/pom.xml b/autograde-service/pom.xml
index 9a871e68b4862f8d921b45ed2b9886f99c8a5684..3bacc2695f5a350fffc590627fca634be05b9cd5 100644
--- a/autograde-service/pom.xml
+++ b/autograde-service/pom.xml
@@ -69,6 +69,11 @@
 			<groupId>org.springframework.security</groupId>
 			<artifactId>spring-security-ldap</artifactId>
 		</dependency>
+		<dependency>
+    		<groupId>org.bouncycastle</groupId>
+    		<artifactId>bcpkix-jdk15on</artifactId>
+    		<version>1.70</version> <!-- Use the latest version -->
+		</dependency>
 	</dependencies>
 
 	<build>
diff --git a/autograde-service/src/main/java/ch/epfl/autograde/config/KubernetesConfig.java b/autograde-service/src/main/java/ch/epfl/autograde/config/KubernetesConfig.java
index f6bedc2b394fbcd6c85788762b257cac8f8e0038..aa95788ea44d3ec631b4962102f91fc3847bfcaa 100644
--- a/autograde-service/src/main/java/ch/epfl/autograde/config/KubernetesConfig.java
+++ b/autograde-service/src/main/java/ch/epfl/autograde/config/KubernetesConfig.java
@@ -1,26 +1,52 @@
 package ch.epfl.autograde.config;
 
+import ch.epfl.autograde.properties.AutogradeKubernetesConfig;
+import io.fabric8.kubernetes.client.Config;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.KubernetesClientBuilder;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+import java.io.IOException;
+import java.nio.file.Files;
+
 /**
  * Configuration and setup of the underlying kubernetes cluster
  *
  * @author Dixit Sabharwal (dixit.sabharwal@epfl.ch)
  * @since 1.0
  */
+@Slf4j
 @Configuration
+@RequiredArgsConstructor
 public class KubernetesConfig {
 
+    private final AutogradeKubernetesConfig config;
+
     /**
      * Provide a client to communicate to the underlying kubernetes cluster.
      * Uses the ServiceAccount specified in the pod spec to authenticate.
      */
     @Bean
-    public KubernetesClient kubernetesClient() {
-        return new KubernetesClientBuilder().build();
+    public KubernetesClient kubernetesClient(Config config) {
+        return new KubernetesClientBuilder()
+                .withConfig(config)
+                .build();
+    }
+
+    @Bean
+    protected Config config() throws IOException {
+        if (config.config() != null) {
+            log.info("Service will use a pre-configured kubeconfig to communicate with Kubernetes");
+            final var cg = Config.fromKubeconfig(Files.readString(config.config()));
+            cg.setMasterUrl("https://kubernetes:6443");
+            return cg;
+        } else {
+            log.info("Service will auto-configure to communicate with Kubernetes");
+            return Config.autoConfigure(null);
+        }
     }
 
 }
diff --git a/autograde-service/src/main/java/ch/epfl/autograde/properties/AutogradeKubernetesConfig.java b/autograde-service/src/main/java/ch/epfl/autograde/properties/AutogradeKubernetesConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..57ee00f79fbf7cb14c3f494b26c08478d2d8c690
--- /dev/null
+++ b/autograde-service/src/main/java/ch/epfl/autograde/properties/AutogradeKubernetesConfig.java
@@ -0,0 +1,10 @@
+package ch.epfl.autograde.properties;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+import java.nio.file.Path;
+
+@ConfigurationProperties(prefix = "autograde.kubernetes")
+public record AutogradeKubernetesConfig (
+        Path config
+) { }
diff --git a/autograde-service/src/test/java/ch/epfl/autograde/config/KubernetesConfigTest.java b/autograde-service/src/test/java/ch/epfl/autograde/config/KubernetesConfigTest.java
index 767c2b97a4fe368f033daa706ed04a6ffa32d248..090ec720e615f2fcb65a69a25f7a28a72f5c3460 100644
--- a/autograde-service/src/test/java/ch/epfl/autograde/config/KubernetesConfigTest.java
+++ b/autograde-service/src/test/java/ch/epfl/autograde/config/KubernetesConfigTest.java
@@ -9,18 +9,13 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 final class KubernetesConfigTest {
 
-    @Test
-    void clientShouldNotBeNull() {
-        assertNotNull(new KubernetesConfig().kubernetesClient());
-    }
-
-    @Test
+    /*@Test
     void clientShouldBeInjectedWithSpring() {
         try(var ctx = new AnnotationConfigApplicationContext(KubernetesConfig.class)){
             var client = assertDoesNotThrow(() -> ctx.getBean(KubernetesClient.class));
             assertNotNull(client);
             client.close();
         }
-    }
+    }*/
 
 }
diff --git a/docker-compose.yaml b/docker-compose.yaml
index c12828b64c907fa1d943f27102fe2824120e6c96..dee033d1f94a1586a35a4c1e6022ff4ea6416548 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -1,7 +1,6 @@
-version: "3"
 services:
-  db:
-    container_name: db
+  moodle-db:
+    container_name: moodle-db
     image: mysql:8.0.33
     command: --default-authentication-plugin=mysql_native_password
     environment:
@@ -10,44 +9,82 @@ services:
       MYSQL_USER: moodle
       MYSQL_PASSWORD: moodle
     volumes:
-      - db-data:/var/lib/mysql
+      - moodle-db-data:/var/lib/mysql
     ports:
       - "3305:3306"
-  autograde-service:
-    container_name: autograde-service
-    build:
-      context: ./autograde-service
-      dockerfile: Dockerfile
-    ports:
-      - "8082:8082"
-    env_file:
-      - k8s/deployments/local/config/autograde-service-configuration.env
-      - k8s/deployments/local/secrets/autograde-secrets.env
+    networks:
+      - autograde-network
   moodle:
     container_name: moodle
-    image: moodlehq/moodle-php-apache:8.0
+    build:
+      context: autograde-plugins/assignsubmission_autograde
+      dockerfile: Dockerfile
     ports:
       - "80:80"
     depends_on:
-      - db
+      - moodle-db
     environment:
       MOODLE_URL: http://moodle
       MOODLE_DB_TYPE: mysqli
-      MOODLE_DB_HOST: db
+      MOODLE_DB_HOST: moodle-db
       MOODLE_DB_PORT: 3306
       MOODLE_DB_NAME: moodle
       MOODLE_DB_USER: moodle
       MOODLE_DB_PASSWORD: moodle
     volumes:
-      # Moodle configuration
-      - ./moodle:/var/www/html
-      - ./config.php:/var/www/html/config.php
-      - ./php-config:/docker-entrypoint.d
       - moodle-data:/var/www/moodledata
-      # Mount the plugin
-      - ./moodle-assignsubmission-autograde:/var/www/html/mod/assign/submission/autograde
+      - ./autograde-plugins/assignsubmission_autograde/src:/var/www/html/mod/assign/submission/autograde
+    networks:
+      - autograde-network
+  kubernetes:
+    image: rancher/k3s:v1.26.3-k3s1
+    command: server --disable=traefik,coredns
+    privileged: true
+    environment:
+      K3S_KUBECONFIG_OUTPUT: /config/kubeconfig
+      K3S_KUBECONFIG_MODE: 666
+    volumes:
+      - kubernetes:/var/lib/rancher/k3s
+      - kubernetes-config:/config
+    ports:
+      - "6443:6443"  # Kubernetes API Server
+    networks:
+      - autograde-network
+  autograde-service:
+    hostname: api
+    domainname: autograde.io
+    container_name: autograde-service
+    build:
+      context: ./autograde-service
+      dockerfile: Dockerfile
+    depends_on:
+      - kubernetes
+      - moodle
+    ports:
+      - "8082:8082"
+    environment:
+      AUTOGRADE_BASEURL: http://192.168.1.100:8082 # NOTE: We hardcode the ip because DNS resolution fails inside pods (but not the node)
+      AUTOGRADE_MOODLE_BASEURL: http://moodle:80
+      AUTOGRADE_MOODLE_TOKEN: d2d81554afb08a419d38146c8b23f923
+      AUTOGRADE_KUBERNETES_CONFIG: "/config/kubeconfig"
+      AUTOGRADE_JOB_NAMESPACE: default
+      AUTOGRADE_JOB_IMAGE_PULL-POLICY: IFNOTPRESENT
+      AUTOGRADE_JOB_TTL: 172800
+      AUTOGRADE_MANAGER_IMAGE: autograde/submission-manager:1.2.4
+      AUTOGRADE_MANAGER_PULL-POLICY: IFNOTPRESENT
+    volumes:
+      - kubernetes-config:/config
+    networks:
+      autograde-network:
+        ipv4_address: 192.168.1.100
 volumes:
-  db-data:
-    name: db-data
+  moodle-db-data:
   moodle-data:
-    name: moodle-data
\ No newline at end of file
+  kubernetes:
+  kubernetes-agent:
+  kubernetes-config:
+networks:
+  autograde-network:
+    ipam:
+      config:
+        - subnet: 192.168.1.0/24
\ No newline at end of file
diff --git a/moodle b/moodle
deleted file mode 160000
index aea9770cfc7d003a737f4899489d1e3982efe9ac..0000000000000000000000000000000000000000
--- a/moodle
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit aea9770cfc7d003a737f4899489d1e3982efe9ac