diff --git a/content/edX.asciidoc b/content/edX.asciidoc index 6443a6e..d8d05d2 100644 --- a/content/edX.asciidoc +++ b/content/edX.asciidoc @@ -1,38 +1,37 @@ ifndef::imagesdir[:imagesdir: ../media] -=== Allgemeine Informationen zur Open-Source-Lernplattform edX === +=== General information about the open source learning platform edX === -**Gründung und Geschichte:** -edX wurde im Jahr 2012 von der Harvard University und dem Massachusetts Institute of Technology (MIT) angfangen zu entwickeln. Die Plattform wird im Rahmen einer Non-Profit-Organisation geleitet, um hochwertige Bildung für alle zugänglich zu machen und eine Gemeinschaft von Lernenden und Lehrenden weltweit zu schaffen. Seit ihrer Gründung hat sich edX zu einer der größten Plattformen für Online-Lernen entwickelt, die Kurse von Universitäten und Institutionen weltweit anbietet. +**Foundation and history:** +edX was started in 2012 by Harvard University and the Massachusetts Institute of Technology (MIT). The platform is run as a non-profit organization to make quality education accessible to all and create a community of learners and educators worldwide. Since its inception, edX has become one of the largest platforms for online learning, offering courses from universities and institutions worldwide. -**Technische Details:** +**Technical details:** **Techstack:** -* **Programmiersprachen:** Python (hauptsächlich Django für das Backend) -* **Frontend:** JavaScript, React -* **Datenbanken:** MySQL, MongoDB -* **Containerisierung:** Docker -* **Continuous Integration/Continuous Deployment (CI/CD):** GitHub Actions, Jenkins + - **Programming languages:** Python (mainly Django for the backend) + - **Frontend:** JavaScript, React + - **Databases:** MySQL, MongoDB + - **Containerization:** Docker + - **Continuous Integration/Continuous Deployment (CI/CD):** GitHub Actions, Jenkins -**Module und Funktionen:** +**Modules and functions:** - * **LMS (Learning Management System):** Verwaltung von Kursinhalten, Benutzern und Einschreibungen. - * **CMS (Content Management System):** Erstellung und Verwaltung von Kursinhalten. - * **XBlock:** Erweiterbares Modul zur Implementierung verschiedener Lernkomponenten wie Videos, Quizze, Diskussionen und mehr. - * **LTI (Learning Tools Interoperability):** Ermöglicht die Integration von externen Tools und Ressourcen. - * **Open edX Studio:** Ein Autorentool zur Kurserstellung und -verwaltung. - * **Analyse-Tools:** Bereitstellung von Datenanalysen und Berichten zur Lernleistung. + - **LMS (Learning Management System):** Management of course content, users and enrollments. + - **CMS (Content Management System):** Creation and management of course content. + - **XBlock:** Extensible module for implementing various learning components such as videos, quizzes, discussions and more. + - **LTI (Learning Tools Interoperability):** Enables the integration of external tools and resources. + - **Open edX Studio:** An authoring tool for course creation and management. + - **Analysis tools:** Provides data analysis and reports on learning performance. -**Architektur:** +**Architecture:** - - **Microservices-Architektur:** edX nutzt eine Microservices-Architektur, um verschiedene Funktionen und Module zu trennen und unabhängig zu skalieren. - - **APIs:** Umfangreiche RESTful APIs zur Integration und Erweiterung der Plattform. - - **Scalability:** Nutzung von Cloud-Diensten zur Skalierung und Verwaltung von Benutzerlasten. + - **Microservices architecture:** edX uses a microservices architecture to separate and independently scale different functions and modules. + - **APIs:** Extensive RESTful APIs to integrate and extend the platform. + - **Scalability:** Use of cloud services to scale and manage user loads. -image::edx-architecture.png[edX-Architektur] +image::edx-architecture.png[edX-Architecture] -Hauptkomponenten: - - * edx/edx-platform repo contains the code for the edX platform. - * edx/edx-analytics-dashboard repo contains the code for edX Insights. - * edx/configuration repo contains scripts to set up and operate the edX platform. +.Main components: + - edx/edx-platform repo contains the code for the edX platform. + - edx/edx-analytics-dashboard repo contains the code for edX Insights. + - edx/configuration repo contains scripts to set up and operate the edX platform. diff --git a/content/existing_solutions.asciidoc b/content/existing_solutions.asciidoc index aeab6a5..1adb35b 100644 --- a/content/existing_solutions.asciidoc +++ b/content/existing_solutions.asciidoc @@ -37,6 +37,6 @@ cite:[serth_codeocean_2021] === EmpowrOrg Coppin === -link:https://github.com/EmpowrOrg/Coppin[EmpowrOrg Coppin] ist ein Tool zur Erstellung und Bewertung von Aufgaben, das zusammen mit **Doctor** und **CodeEditorXblock** verwendet wird. Durch die Kombination dieser drei Werkzeuge kann jede Organisation, die Open Edx nutzt, Programmieraufgaben lehren und bewerten. Coppin ist in **Doctor** integriert, um die Bewertung von Aufgaben zu ermöglichen, und verwendet **CodeEditorXblock** als Code-Editor und -Ausführer. +link:https://github.com/EmpowrOrg/Coppin[EmpowrOrg Coppin] is an assignment creation and assessment tool used in conjunction with **Doctor** and **CodeEditorXblock**. By combining these three tools, any organization using Open Edx can teach and assess programming assignments. Coppin integrates with **Doctor** to enable assessment of assignments and uses **CodeEditorXblock** as a code editor and executor. -Python und Swiftcode, können local ausgeführt und getestet werden. Die Ergebnisse werden in der **Doctor**-Oberfläche angezeigt. Die Bewertung erfolgt durch die automatische Ausführung von Unit-Tests, die in den Aufgaben definiert sind. +Python and Swift code, can be executed and tested locally. The results are displayed in the **Doctor** interface. Evaluation is performed by automatically executing unit tests defined in the task diff --git a/content/kubernetes-nomad.asciidoc b/content/kubernetes-nomad.asciidoc index d11721b..8f55de5 100644 --- a/content/kubernetes-nomad.asciidoc +++ b/content/kubernetes-nomad.asciidoc @@ -1,58 +1,58 @@ -Kubernetes und Nomad sind beides Plattformen für das Management und die Orchestrierung von Containern, aber sie haben unterschiedliche Konzepte und Architekturen. Um die beiden Systeme zu vergleichen, insbesondere in Bezug auf Begriffe wie Deployment, Job, Pod, und deren Umsetzung in beiden Systemen, ist es wichtig, die jeweilige Architektur und Konzepte im Detail zu verstehen. +Kubernetes and Nomad are both platforms for the management and orchestration of containers, but the underlying concepts and architectures differ. To compare the two systems, especially with regard to terms such as deployment, job, pod, and their implementation in both systems, it is important to understand the respective architecture and concepts in detail. -=== Grundlegende Architektur === +=== Basic architecture === -- **Kubernetes** besteht aus einem Master-Node (Control Plane) und mehreren Worker-Nodes. Der Master-Node übernimmt die Steuerung, Scheduling, und Verwaltung der Clusterressourcen. Die Worker-Nodes führen die Container (Pods) aus. +- **Kubernetes** consists of a master node (control plane) and several worker nodes. The master node is responsible for controlling, scheduling and managing the cluster resources. The worker nodes execute the containers (pods). -- **Nomad** hat eine zentrale Architektur, bei der ein Nomad-Cluster aus Servern und Clients besteht. Die Server verwalten den Zustand und die Planung von Jobs, während die Clients die Jobs tatsächlich ausführen. Nomad ist etwas flexibler, da es nicht nur Container, sondern auch andere Arten von Workloads (z. B. Nicht-Container-Anwendungen, Batch-Jobs) orchestrieren kann. +- **Nomad** has a centralized architecture in which a Nomad cluster consists of servers and clients. The servers manage the state and scheduling of jobs, while the clients actually run the jobs. Nomad is slightly more flexible as it can orchestrate not only containers but also other types of workloads (e.g. non-container applications, batch jobs). -=== Vergleich wichtiger Konzepte === +=== Comparison of the most important concepts === [cols="^a,2a,2a", frame="none"] |=== | Konzept | Kubernetes | Nomad -| **Pod** | Ein Pod ist die kleinste Deployment-Einheit in Kubernetes und kann einen oder mehrere Container enthalten. Alle Container in einem Pod teilen sich Netzwerk und Speicher. | Nomad hat keine exakte Entsprechung zu Pods. Ein Nomad-Job kann mehrere "Tasks" enthalten, die ähnlich wie Container in einem Pod eng zusammenarbeiten können. +| **Pod** | A pod is the smallest deployment unit in Kubernetes and can contain one or more containers. All containers in a pod share network and storage. | Nomad does not have an exact equivalent to pods. A Nomad job can contain multiple "tasks" that can work closely together like containers in a pod. -| **Deployment**| Ein Deployment in Kubernetes beschreibt, wie viele Instanzen eines Pods bereitgestellt werden sollen und wie diese aktualisiert werden. Es sorgt für Selbstheilung (Replikationen). | In Nomad wird dies als "Job" bezeichnet, wobei ein Job auch über mehrere Instanzen von Tasks verfügen kann. Updates und Rollouts können durch Update-Strategien im Job gesteuert werden. +| **Deployment**| A deployment in Kubernetes describes how many instances of a pod are to be provided and how they are updated. It ensures self-healing (replications). | In Nomad, this is referred to as a "job", whereby a job can also have multiple instances of tasks. Updates and rollouts can be controlled by update strategies in the job. -| **Job** | Jobs in Kubernetes (z. B. `CronJob` oder `Job`) sind für einmalige oder wiederkehrende Aufgaben gedacht, bei denen Pods nur für eine begrenzte Zeit laufen sollen. | Ein Job in Nomad ist der zentrale Konstrukt, das eine Sammlung von Tasks oder Services umfasst. Es beschreibt den gesamten Deployment-Prozess, der ähnlich wie ein Deployment in Kubernetes sein kann. Nomad-Jobs können auch batchartige Prozesse beinhalten. +| **Job** | Jobs in Kubernetes (e.g. `CronJob` or `Job`) are intended for one-time or recurring tasks where pods should only run for a limited time. | A job in Nomad is the central construct that comprises a collection of tasks or services. It describes the entire deployment process, which can be similar to a deployment in Kubernetes. Nomad jobs can also include batch-like processes. -| **Service** | Kubernetes nutzt Service-Ressourcen, um den Netzwerkzugang zu Pods zu abstrahieren und Load-Balancing bereitzustellen. | Nomad verwendet "Service Discovery", um Dienste zu registrieren und Load-Balancing bereitzustellen, oft in Verbindung mit Consul. +| **Service** | Kubernetes uses service resources to abstract network access to pods and provide load balancing. | Nomad uses "Service Discovery" to register services and provide load balancing, often in conjunction with Consul. -| **Namespace** | Kubernetes-Namespace ist eine logische Partitionierung innerhalb eines Clusters zur Organisation von Ressourcen. | Nomad unterstützt auch Namespaces, um verschiedene Anwendungen oder Teams in einem Cluster zu trennen. +| **Namespace** | A Kubernetes namespace is a logical partitioning within a cluster used to organize resources. | Nomad also supports namespaces, but to separate different applications or teams in a cluster. -| **Scheduler** | Der Kubernetes-Scheduler ordnet Pods den verfügbaren Nodes zu, basierend auf Ressourcenanforderungen und Policies. | Nomad verwendet einen zentralen Scheduler, der Jobs den Clients zuweist, abhängig von Ressourcenanforderungen und Scheduling-Strategien. +| **Scheduler** | The Kubernetes scheduler assigns pods to available nodes based on resource requirements and settings. | Nomad also uses a central scheduler that assigns jobs to clients based on resource requirements and scheduling strategies. -| **StatefulSet**| Kubernetes verwendet StatefulSets für zustandsbehaftete Anwendungen, die individuelle, persistente Speicher benötigen und geordnete Starts und Beendigungen erfordern. | Nomad unterstützt Stateful-Anwendungen durch die Verwendung von Volumes und Persistent Data. Es gibt jedoch keine direkte Entsprechung zum StatefulSet von Kubernetes. +| **StatefulSet**| Kubernetes uses StatefulSets for stateful applications that require individual, persistent storage and ordered starts and stops. | Nomad supports stateful applications through the use of volumes and persistent data. However, there is no direct equivalent to Kubernetes' StatefulSet. |=== -=== Entsprechungen für eine Nomad-zu-Kubernetes-Umsetzung === +=== Correspondences for a mapping from Nomad to Kubernetes === -Wenn du eine **Nomad-Job-Definition** in eine Kubernetes-Umgebung umschreiben möchtest, sind folgende Konzepte besonders relevant: +The following concepts are most relevant for mapping Nomad to Kubernetes: -- **Nomad "Job" -> Kubernetes "Deployment" oder "Job"** - - Ein Nomad-Job, der kontinuierlich läuft, entspricht einem **Kubernetes Deployment**, während ein batchartiger Nomad-Job besser einem **Kubernetes Job** oder **CronJob** zugeordnet werden kann. - - Wenn ein Nomad-Job mehrere Tasks enthält, kannst du dies durch ein **Pod** in Kubernetes umsetzen, wobei jeder Task ein eigener Container im Pod ist. +- **Nomad "Job" -> Kubernetes "Deployment" or "Job"** + - A Nomad job that runs continuously corresponds to a **Kubernetes deployment**, while a batch-type Nomad job can be better assigned to a **Kubernetes job** or **CronJob**. + - If a Nomad job contains multiple tasks, it is possible to implement it using a **Pod** in Kubernetes, where each task is a separate container in the pod. - **Nomad "Task" -> Kubernetes "Container"** - - Ein Task in einem Nomad-Job ist vergleichbar mit einem Container in einem Kubernetes Pod. Jeder Task in Nomad hat eine eigenständige Definition und kann eine Docker- oder andere Runtime verwenden. In Kubernetes können mehrere Container innerhalb eines Pods definiert werden. + - A task in a Nomad job is comparable to a container in a Kubernetes pod. Each task in Nomad has its own definition and can use Docker or a different runtime. In Kubernetes, multiple containers can be defined within a pod. -- **Update-Strategien in Nomad -> Kubernetes Deployment-Update-Strategien** - - Nomad-Jobs unterstützen Update-Strategien wie Rolling Updates. Diese können in Kubernetes direkt mit einem Deployment und dessen Rollout-Strategien umgesetzt werden (z. B. `rollingUpdate` in Kubernetes). +- **Nomad update strategies -> Kubernetes deployments** + - Nomad jobs support update strategies such as rolling updates. These can be implemented in Kubernetes directly with a deployment and its rollout strategies (e.g. `rollingUpdate` in Kubernetes). -- **Task-Gruppen in Nomad -> Kubernetes Pods** - - In Nomad gibt es "Task Groups", die eine Gruppe von Tasks innerhalb eines Jobs darstellen, die zusammen bereitgestellt werden. Das ist vergleichbar mit Kubernetes Pods, die mehrere Container enthalten. +- **Nomad "Task Group" -> Kubernetes "Pods"** + - In Nomad, there are "Task Groups", which represent a group of tasks within a job that are deployed together. This is comparable to Kubernetes pods, which contain several containers. -=== Spezielle Deployment-Szenarien === +=== Special deployment scenarios === -- **Stateful Anwendungen**: - - In Kubernetes verwendet man StatefulSets, um zustandsbehaftete Anwendungen zu deployen, während Nomad hier mit individuellen Jobs und Persistent Volumes arbeitet. +- **Stateful applications**: + - In Kubernetes, StatefulSets are used to deploy stateful applications, while Nomad works with individual jobs and persistent volumes instead. -- **Service Mesh und Service Discovery**: - - Kubernetes verwendet standardmäßig Services und optional zusätzliche Service-Mesh-Lösungen wie Istio, um Netzwerktraffic zu steuern. Nomad verwendet oft Consul für Service Discovery und kann in ein Service-Mesh integriert werden. +- **Service Mesh and Service Discovery**: + - Kubernetes uses services by default and optionally additional service mesh solutions like Istio to control network traffic. Nomad often uses Consul for service discovery and can be integrated into a service mesh. -=== Beispiel: Nomad-Job zu Kubernetes Deployment === +=== Example: Nomad Job as Kubernetes Deployment === #### Nomad Job Definition: ```hcl @@ -76,7 +76,7 @@ job "example" { } ``` -==== Entsprechendes Kubernetes Deployment: ==== +==== Corresponding Kubernetes Deployment: ==== ```yaml apiVersion: apps/v1 kind: Deployment @@ -103,10 +103,10 @@ spec: memory: "256Mi" ``` -=== Wichtige Unterschiede und Gemeinsamkeiten für die Umsetzung === +=== Most important differences and similarities === -- **Pods in Kubernetes** entsprechen **Task Groups in Nomad**, mit jedem Task in Nomad, der einem Container in Kubernetes entspricht. -- **Nomad Jobs** sind flexibler und können sowohl Batch-Prozesse als auch Services umfassen, während in Kubernetes Batch-Jobs von Deployments (für kontinuierlich laufende Dienste) unterschieden werden. -- Kubernetes bietet umfangreiche **Netzwerk- und Service-Optionen** (z. B. Services, Ingress) sowie spezielle Features wie **StatefulSets** und **DaemonSets** für spezifische Anwendungsfälle. +- **Pods in Kubernetes** correspond to **Task Groups in Nomad**, with each task in Nomad corresponding to a container in Kubernetes. +- **Nomad Jobs** are more flexible and can include both batch processes and services, while in Kubernetes batch jobs are distinguished from deployments (for continuously running services). +- Kubernetes offers extensive **network and service options** (e.g. Services, Ingress) as well as special features such as **StatefulSets** and **DaemonSets** for specific use cases. -Das Umschreiben von Nomad zu Kubernetes kann relativ einfach sein, da viele Konzepte direkt übertragbar sind, es aber spezifische Unterschiede in der Art gibt, wie Tasks gruppiert und verwaltet werden. +Rewriting from Nomad to Kubernetes seems a very difficult task considering how many little differences come up when comparing the two systems. However, on a basic level the concepts are similar and can be mapped to each other with some effort. diff --git a/main.pdf b/main.pdf index 2de4149..ca0fc7a 100644 --- a/main.pdf +++ b/main.pdf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2fde4b76ba0538bace20371e9ea5c48adbea318db7a5c25efb5468389bb65620 -size 805890 +oid sha256:367763ace77d17680e6e1a9e8965ad8d6dd76dfb9d513ac3082652a88b064ee9 +size 803414