diff --git a/public/assets/workshops/lab-installation-via-carvel.yaml b/public/assets/workshops/lab-installation-via-carvel.yaml new file mode 100644 index 0000000..05f9558 --- /dev/null +++ b/public/assets/workshops/lab-installation-via-carvel.yaml @@ -0,0 +1,199 @@ +apiVersion: training.educates.dev/v1beta1 +kind: Workshop +metadata: + name: lab-installation-via-carvel +spec: + description: A workshop on installing Educates using kapp-controller. + environment: + images: + registries: + - content: + - destination: educates + prefix: /educates/educates-extension-packages/educates + stripPrefix: true + onDemand: true + urls: + - https://ghcr.io + objects: + - apiVersion: v1 + kind: ServiceAccount + metadata: + name: kapp-installer + - apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRoleBinding + metadata: + name: kapp-installer-$(workshop_namespace) + roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin + subjects: + - kind: ServiceAccount + name: kapp-installer + namespace: $(workshop_namespace) + session: + applications: + console: + enabled: false + docker: + compose: + services: + registry: + image: registry:2.8.3 + ports: + - 0.0.0.0:5001:5000 + enabled: true + socket: + enabled: false + editor: + enabled: true + registry: + enabled: false + terminal: + enabled: true + layout: split + vcluster: + enabled: false + dashboards: + - name: Docs + url: https://docs.educates.dev/ + namespaces: + budget: x-large + security: + policy: baseline + token: + enabled: false + objects: + - apiVersion: v1 + kind: Secret + metadata: + name: $(session_name)-vcluster-values + namespace: $(workshop_namespace) + stringData: + values.yaml: | + vcluster: + image: rancher/k3s:v1.29.0-k3s1 + syncer: + extraArgs: + - --tls-san=cluster-1-vcluster.$(session_namespace).svc.$(cluster_domain) + - --out-kube-config-server=https://cluster-1-vcluster.$(session_namespace).svc.$(cluster_domain) + - --kube-config-context-name=cluster-1 + mapServices: + fromHost: + - from: $(workshop_namespace)/registry-$(session_name) + to: default/registry + - from: $(workshop_namespace)/localhost-$(session_name) + to: default/loopback + sync: + ingresses: + enabled: true + exportKubeConfig: + context: "cluster-1" + - apiVersion: kappctrl.k14s.io/v1alpha1 + kind: App + metadata: + name: $(session_name)-vcluster-package + namespace: $(workshop_namespace) + spec: + deploy: + - kapp: + rawOptions: + - --app-changes-max-to-keep=5 + fetch: + - helmChart: + name: vcluster + repository: + url: https://charts.loft.sh + version: 0.19.9 + noopDelete: true + serviceAccountName: kapp-installer + syncPeriod: 720h + template: + - helmTemplate: + name: cluster-1-vcluster + namespace: $(session_namespace) + valuesFrom: + - secretRef: + name: $(session_name)-vcluster-values + - ytt: + inline: + paths: + overlays.yaml: | + #@ load("@ytt:data", "data") + #@ load("@ytt:overlay", "overlay") + #@overlay/match by=overlay.all, expects="1+" + --- + metadata: + #@overlay/match missing_ok=True + ownerReferences: + - apiVersion: training.educates.dev/v1beta1 + kind: WorkshopSession + blockOwnerDeletion: true + controller: true + name: $(session_name) + uid: $(workshop_session_uid) + - apiVersion: secrets.educates.dev/v1beta1 + kind: SecretCopier + metadata: + name: $(session_name)-kubeconfig + spec: + rules: + - sourceSecret: + name: vc-cluster-1-vcluster + namespace: $(session_namespace) + targetNamespaces: + nameSelector: + matchNames: + - $(workshop_namespace) + targetSecret: + name: $(session_name)-kubeconfig + - apiVersion: v1 + kind: Service + metadata: + name: registry-$(session_name) + namespace: $(workshop_namespace) + spec: + ports: + - name: registry + port: 80 + protocol: TCP + targetPort: 5001 + selector: + deployment: $(session_name) + type: ClusterIP + - apiVersion: v1 + kind: Service + metadata: + name: localhost-$(session_name) + namespace: $(workshop_namespace) + spec: + ports: + - name: renderer + port: 10081 + protocol: TCP + targetPort: 10081 + selector: + deployment: $(session_name) + type: ClusterIP + volumeMounts: + - mountPath: /opt/kubeconfig + name: vcluster-kubeconfig + volumes: + - name: vcluster-kubeconfig + secret: + secretName: $(session_name)-kubeconfig + title: Educates installation using Carvel + version: 1.0.0 + workshop: + files: + - image: + url: ghcr.io/educates/labs-installation-guides/lab-installation-via-carvel-files:1.0.0 + includePaths: + - /workshop/** + - /exercises/** + - /README.md + packages: + - files: + - image: + url: $(oci_image_cache)/educates:v3.3.2 + name: educates diff --git a/public/assets/workshops/lab-installation-via-cli.yaml b/public/assets/workshops/lab-installation-via-cli.yaml new file mode 100644 index 0000000..5f8dee7 --- /dev/null +++ b/public/assets/workshops/lab-installation-via-cli.yaml @@ -0,0 +1,199 @@ +apiVersion: training.educates.dev/v1beta1 +kind: Workshop +metadata: + name: lab-installation-via-cli +spec: + description: A workshop on installing Educates using the CLI. + environment: + images: + registries: + - content: + - destination: educates + prefix: /educates/educates-extension-packages/educates + stripPrefix: true + onDemand: true + urls: + - https://ghcr.io + objects: + - apiVersion: v1 + kind: ServiceAccount + metadata: + name: kapp-installer + - apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRoleBinding + metadata: + name: kapp-installer-$(workshop_namespace) + roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin + subjects: + - kind: ServiceAccount + name: kapp-installer + namespace: $(workshop_namespace) + session: + applications: + console: + enabled: false + docker: + compose: + services: + registry: + image: registry:2.8.3 + ports: + - 0.0.0.0:5001:5000 + enabled: true + socket: + enabled: false + editor: + enabled: true + registry: + enabled: false + terminal: + enabled: true + layout: split + vcluster: + enabled: false + dashboards: + - name: Docs + url: https://docs.educates.dev/ + namespaces: + budget: x-large + security: + policy: baseline + token: + enabled: false + objects: + - apiVersion: v1 + kind: Secret + metadata: + name: $(session_name)-vcluster-values + namespace: $(workshop_namespace) + stringData: + values.yaml: | + vcluster: + image: rancher/k3s:v1.29.0-k3s1 + syncer: + extraArgs: + - --tls-san=cluster-1-vcluster.$(session_namespace).svc.$(cluster_domain) + - --out-kube-config-server=https://cluster-1-vcluster.$(session_namespace).svc.$(cluster_domain) + - --kube-config-context-name=cluster-1 + mapServices: + fromHost: + - from: $(workshop_namespace)/registry-$(session_name) + to: default/registry + - from: $(workshop_namespace)/localhost-$(session_name) + to: default/loopback + sync: + ingresses: + enabled: true + exportKubeConfig: + context: "cluster-1" + - apiVersion: kappctrl.k14s.io/v1alpha1 + kind: App + metadata: + name: $(session_name)-vcluster-package + namespace: $(workshop_namespace) + spec: + deploy: + - kapp: + rawOptions: + - --app-changes-max-to-keep=5 + fetch: + - helmChart: + name: vcluster + repository: + url: https://charts.loft.sh + version: 0.19.9 + noopDelete: true + serviceAccountName: kapp-installer + syncPeriod: 720h + template: + - helmTemplate: + name: cluster-1-vcluster + namespace: $(session_namespace) + valuesFrom: + - secretRef: + name: $(session_name)-vcluster-values + - ytt: + inline: + paths: + overlays.yaml: | + #@ load("@ytt:data", "data") + #@ load("@ytt:overlay", "overlay") + #@overlay/match by=overlay.all, expects="1+" + --- + metadata: + #@overlay/match missing_ok=True + ownerReferences: + - apiVersion: training.educates.dev/v1beta1 + kind: WorkshopSession + blockOwnerDeletion: true + controller: true + name: $(session_name) + uid: $(workshop_session_uid) + - apiVersion: secrets.educates.dev/v1beta1 + kind: SecretCopier + metadata: + name: $(session_name)-kubeconfig + spec: + rules: + - sourceSecret: + name: vc-cluster-1-vcluster + namespace: $(session_namespace) + targetNamespaces: + nameSelector: + matchNames: + - $(workshop_namespace) + targetSecret: + name: $(session_name)-kubeconfig + - apiVersion: v1 + kind: Service + metadata: + name: registry-$(session_name) + namespace: $(workshop_namespace) + spec: + ports: + - name: registry + port: 80 + protocol: TCP + targetPort: 5001 + selector: + deployment: $(session_name) + type: ClusterIP + - apiVersion: v1 + kind: Service + metadata: + name: localhost-$(session_name) + namespace: $(workshop_namespace) + spec: + ports: + - name: renderer + port: 10081 + protocol: TCP + targetPort: 10081 + selector: + deployment: $(session_name) + type: ClusterIP + volumeMounts: + - mountPath: /opt/kubeconfig + name: vcluster-kubeconfig + volumes: + - name: vcluster-kubeconfig + secret: + secretName: $(session_name)-kubeconfig + title: Educates installation using the CLI + version: 1.0.0 + workshop: + files: + - image: + url: ghcr.io/educates/labs-installation-guides/lab-installation-via-cli-files:1.0.0 + includePaths: + - /workshop/** + - /exercises/** + - /README.md + packages: + - files: + - image: + url: $(oci_image_cache)/educates:v3.3.2 + name: educates diff --git a/public/assets/workshops/lab-lookup-configuration.yaml b/public/assets/workshops/lab-lookup-configuration.yaml new file mode 100644 index 0000000..ddc1b6f --- /dev/null +++ b/public/assets/workshops/lab-lookup-configuration.yaml @@ -0,0 +1,548 @@ +apiVersion: training.educates.dev/v1beta1 +kind: Workshop +metadata: + name: lab-lookup-configuration +spec: + description: A workshop on configuring the lookup service. + environment: + images: + registries: + - content: + - destination: educates + prefix: /educates/educates-extension-packages/educates + stripPrefix: true + onDemand: true + urls: + - https://ghcr.io + objects: + - apiVersion: v1 + kind: ServiceAccount + metadata: + name: kapp-installer + - apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRoleBinding + metadata: + name: kapp-installer-$(workshop_namespace) + roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin + subjects: + - kind: ServiceAccount + name: kapp-installer + namespace: $(workshop_namespace) + session: + applications: + console: + enabled: false + docker: + compose: + services: + registry: + image: registry:2.8.3 + ports: + - 0.0.0.0:5001:5000 + enabled: true + socket: + enabled: true + editor: + enabled: true + files: + directory: exercises + enabled: true + git: + enabled: false + registry: + enabled: false + terminal: + enabled: true + layout: split + vcluster: + enabled: false + namespaces: + budget: x-large + secondary: + - name: $(session_namespace)-hub + - name: $(session_namespace)-cluster-1 + - name: $(session_namespace)-cluster-2 + security: + policy: baseline + token: + enabled: false + objects: + - apiVersion: v1 + kind: Service + metadata: + name: registry-$(session_name) + namespace: $(workshop_namespace) + spec: + ports: + - name: registry + port: 80 + protocol: TCP + targetPort: 5001 + selector: + deployment: $(session_name) + type: ClusterIP + - apiVersion: v1 + kind: Service + metadata: + name: localhost-$(session_name) + namespace: $(workshop_namespace) + spec: + ports: + - name: renderer + port: 10081 + protocol: TCP + targetPort: 10081 + selector: + deployment: $(session_name) + type: ClusterIP + - apiVersion: v1 + kind: Secret + metadata: + name: $(session_name)-hub-vcluster-values + namespace: $(workshop_namespace) + stringData: + values.yaml: | + vcluster: + image: rancher/k3s:v1.29.0-k3s1 + syncer: + extraArgs: + - --tls-san=hub-vcluster.$(session_namespace)-hub.svc.$(cluster_domain) + - --out-kube-config-server=https://hub-vcluster.$(session_namespace)-hub.svc.$(cluster_domain) + - --kube-config-context-name=hub + mapServices: + fromHost: + - from: $(workshop_namespace)/registry-$(session_name) + to: default/registry + - from: $(workshop_namespace)/localhost-$(session_name) + to: default/loopback + - from: $(session_namespace)-cluster-1/cluster-1-vcluster + to: default/cluster-1-vcluster + - from: $(session_namespace)-cluster-2/cluster-2-vcluster + to: default/cluster-2-vcluster + - from: $(session_namespace)-cluster-1/cluster-1-vcluster + to: $(session_namespace)-cluster-1/cluster-1-vcluster + - from: $(session_namespace)-cluster-2/cluster-2-vcluster + to: $(session_namespace)-cluster-2/cluster-2-vcluster + sync: + ingresses: + enabled: true + exportKubeConfig: + context: "hub" + init: + manifests: |- + apiVersion: v1 + kind: Namespace + metadata: + name: $(session_namespace)-cluster-1 + --- + apiVersion: v1 + kind: Namespace + metadata: + name: $(session_namespace)-cluster-2 + - apiVersion: kappctrl.k14s.io/v1alpha1 + kind: App + metadata: + name: $(session_name)-hub-vcluster-package + namespace: $(workshop_namespace) + spec: + deploy: + - kapp: + rawOptions: + - --app-changes-max-to-keep=5 + fetch: + - helmChart: + name: vcluster + repository: + url: https://charts.loft.sh + version: 0.19.9 + noopDelete: true + serviceAccountName: kapp-installer + syncPeriod: 720h + template: + - helmTemplate: + name: hub-vcluster + namespace: $(session_namespace)-hub + valuesFrom: + - secretRef: + name: $(session_name)-hub-vcluster-values + - ytt: + inline: + paths: + overlays.yaml: | + #@ load("@ytt:data", "data") + #@ load("@ytt:overlay", "overlay") + #@overlay/match by=overlay.all, expects="1+" + --- + metadata: + #@overlay/match missing_ok=True + ownerReferences: + - apiVersion: training.educates.dev/v1beta1 + kind: WorkshopSession + blockOwnerDeletion: true + controller: true + name: $(session_name) + uid: $(workshop_session_uid) + - apiVersion: secrets.educates.dev/v1beta1 + kind: SecretCopier + metadata: + name: $(session_name)-hub-kubeconfig + spec: + rules: + - sourceSecret: + name: vc-hub-vcluster + namespace: $(session_namespace)-hub + targetNamespaces: + nameSelector: + matchNames: + - $(workshop_namespace) + targetSecret: + name: $(session_name)-hub-kubeconfig + - apiVersion: v1 + kind: Secret + metadata: + name: $(session_name)-cluster-1-vcluster-values + namespace: $(workshop_namespace) + stringData: + values.yaml: "vcluster:\n image: rancher/k3s:v1.29.0-k3s1\nsyncer:\n extraArgs:\n + \ - --tls-san=cluster-1-vcluster.$(session_namespace)-cluster-1.svc.$(cluster_domain),cluster-1-vcluster.default.svc.$(cluster_domain)\n + \ - --out-kube-config-server=https://cluster-1-vcluster.$(session_namespace)-cluster-1.svc.$(cluster_domain)\n + \ - --kube-config-context-name=cluster-1\nmapServices:\n fromHost:\n - + from: $(workshop_namespace)/registry-$(session_name)\n to: default/registry\n + \ - from: $(workshop_namespace)/localhost-$(session_name)\n to: default/loopback\nsync:\n + \ ingresses:\n enabled: true\nexportKubeConfig:\n context: \"cluster-1\" + \ \n" + - apiVersion: kappctrl.k14s.io/v1alpha1 + kind: App + metadata: + name: $(session_name)-cluster-1-vcluster-package + namespace: $(workshop_namespace) + spec: + deploy: + - kapp: + rawOptions: + - --app-changes-max-to-keep=5 + fetch: + - helmChart: + name: vcluster + repository: + url: https://charts.loft.sh + version: 0.19.9 + noopDelete: true + serviceAccountName: kapp-installer + syncPeriod: 720h + template: + - helmTemplate: + name: cluster-1-vcluster + namespace: $(session_namespace)-cluster-1 + valuesFrom: + - secretRef: + name: $(session_name)-cluster-1-vcluster-values + - ytt: + inline: + paths: + overlays.yaml: | + #@ load("@ytt:data", "data") + #@ load("@ytt:overlay", "overlay") + #@overlay/match by=overlay.all, expects="1+" + --- + metadata: + #@overlay/match missing_ok=True + ownerReferences: + - apiVersion: training.educates.dev/v1beta1 + kind: WorkshopSession + blockOwnerDeletion: true + controller: true + name: $(session_name) + uid: $(workshop_session_uid) + - apiVersion: secrets.educates.dev/v1beta1 + kind: SecretCopier + metadata: + name: $(session_name)-cluster-1-kubeconfig + spec: + rules: + - sourceSecret: + name: vc-cluster-1-vcluster + namespace: $(session_namespace)-cluster-1 + targetNamespaces: + nameSelector: + matchNames: + - $(workshop_namespace) + targetSecret: + name: $(session_name)-cluster-1-kubeconfig + - apiVersion: v1 + kind: Secret + metadata: + name: $(session_name)-cluster-2-vcluster-values + namespace: $(workshop_namespace) + stringData: + values.yaml: | + vcluster: + image: rancher/k3s:v1.29.0-k3s1 + syncer: + extraArgs: + - --tls-san=cluster-2-vcluster.$(session_namespace)-cluster-2.svc.$(cluster_domain),cluster-2-vcluster.default.svc.$(cluster_domain) + - --out-kube-config-server=https://cluster-2-vcluster.$(session_namespace)-cluster-2.svc.$(cluster_domain) + - --kube-config-context-name=cluster-2 + mapServices: + fromHost: + - from: $(workshop_namespace)/registry-$(session_name) + to: default/registry + - from: $(workshop_namespace)/localhost-$(session_name) + to: default/loopback + sync: + ingresses: + enabled: true + exportKubeConfig: + context: "cluster-2" + - apiVersion: kappctrl.k14s.io/v1alpha1 + kind: App + metadata: + name: $(session_name)-cluster-2-vcluster-package + namespace: $(workshop_namespace) + spec: + deploy: + - kapp: + rawOptions: + - --app-changes-max-to-keep=5 + fetch: + - helmChart: + name: vcluster + repository: + url: https://charts.loft.sh + version: 0.19.9 + noopDelete: true + serviceAccountName: kapp-installer + syncPeriod: 720h + template: + - helmTemplate: + name: cluster-2-vcluster + namespace: $(session_namespace)-cluster-2 + valuesFrom: + - secretRef: + name: $(session_name)-cluster-2-vcluster-values + - ytt: + inline: + paths: + overlays.yaml: | + #@ load("@ytt:data", "data") + #@ load("@ytt:overlay", "overlay") + #@overlay/match by=overlay.all, expects="1+" + --- + metadata: + #@overlay/match missing_ok=True + ownerReferences: + - apiVersion: training.educates.dev/v1beta1 + kind: WorkshopSession + blockOwnerDeletion: true + controller: true + name: $(session_name) + uid: $(workshop_session_uid) + - apiVersion: secrets.educates.dev/v1beta1 + kind: SecretCopier + metadata: + name: $(session_name)-cluster-2-kubeconfig + spec: + rules: + - sourceSecret: + name: vc-cluster-2-vcluster + namespace: $(session_namespace)-cluster-2 + targetNamespaces: + nameSelector: + matchNames: + - $(workshop_namespace) + targetSecret: + name: $(session_name)-cluster-2-kubeconfig + - apiVersion: v1 + kind: Secret + metadata: + name: educates-lookup-service-values + namespace: $(session_namespace)-hub + stringData: + values.yaml: | + clusterInfrastructure: + provider: vcluster + clusterPackages: + kyverno: + enabled: false + clusterIngress: + domain: "hub.$(session_name).$(ingress_domain)" + clusterSecurity: + policyEngine: none + workshopSecurity: + rulesEngine: none + lookupService: + enabled: true + - apiVersion: kappctrl.k14s.io/v1alpha1 + kind: App + metadata: + name: educates-lookup-service + namespace: $(session_namespace)-hub + spec: + cluster: + kubeconfigSecretRef: + key: config + name: vc-hub-vcluster + namespace: default + deploy: + - kapp: + rawOptions: + - --app-changes-max-to-keep=5 + fetch: + - imgpkgBundle: + image: ghcr.io/educates/educates-installer:3.3.2 + noopDelete: true + syncPeriod: 24h + template: + - ytt: + paths: + - config + - kbld/kbld-bundle.yaml + valuesFrom: + - path: kbld/kbld-images.yaml + - secretRef: + name: educates-lookup-service-values + - kbld: + paths: + - .imgpkg/images.yml + - '-' + - apiVersion: v1 + kind: Secret + metadata: + name: educates-training-platform-values + namespace: $(session_namespace)-cluster-1 + stringData: + values.yaml: | + clusterInfrastructure: + provider: vcluster + clusterPackages: + kyverno: + enabled: false + clusterIngress: + domain: "cluster-1.$(session_name).$(ingress_domain)" + clusterSecurity: + policyEngine: none + workshopSecurity: + rulesEngine: none + # lookupService: + # enabled: true + - apiVersion: kappctrl.k14s.io/v1alpha1 + kind: App + metadata: + name: educates-training-platform + namespace: $(session_namespace)-cluster-1 + spec: + cluster: + kubeconfigSecretRef: + key: config + name: vc-cluster-1-vcluster + namespace: default + deploy: + - kapp: + rawOptions: + - --app-changes-max-to-keep=5 + fetch: + - imgpkgBundle: + image: ghcr.io/educates/educates-installer:3.3.2 + noopDelete: true + syncPeriod: 24h + template: + - ytt: + paths: + - config + - kbld/kbld-bundle.yaml + valuesFrom: + - path: kbld/kbld-images.yaml + - secretRef: + name: educates-training-platform-values + - kbld: + paths: + - .imgpkg/images.yml + - '-' + - apiVersion: v1 + kind: Secret + metadata: + name: educates-training-platform-values + namespace: $(session_namespace)-cluster-2 + stringData: + values.yaml: | + clusterInfrastructure: + provider: vcluster + clusterPackages: + kyverno: + enabled: false + clusterIngress: + domain: "cluster-2.$(session_name).$(ingress_domain)" + clusterSecurity: + policyEngine: none + workshopSecurity: + rulesEngine: none + # lookupService: + # enabled: true + - apiVersion: kappctrl.k14s.io/v1alpha1 + kind: App + metadata: + name: educates-training-platform + namespace: $(session_namespace)-cluster-2 + spec: + cluster: + kubeconfigSecretRef: + key: config + name: vc-cluster-2-vcluster + namespace: default + deploy: + - kapp: + rawOptions: + - --app-changes-max-to-keep=5 + fetch: + - imgpkgBundle: + image: ghcr.io/educates/educates-installer:3.3.2 + noopDelete: true + syncPeriod: 24h + template: + - ytt: + paths: + - config + - kbld/kbld-bundle.yaml + valuesFrom: + - path: kbld/kbld-images.yaml + - secretRef: + name: educates-training-platform-values + - kbld: + paths: + - .imgpkg/images.yml + - '-' + volumeMounts: + - mountPath: /opt/clusters/hub + name: hub-credentials-config + - mountPath: /opt/clusters/cluster-1 + name: cluster-1-credentials-config + - mountPath: /opt/clusters/cluster-2 + name: cluster-2-credentials-config + volumes: + - name: hub-credentials-config + secret: + secretName: $(session_name)-hub-kubeconfig + - name: cluster-1-credentials-config + secret: + secretName: $(session_name)-cluster-1-kubeconfig + - name: cluster-2-credentials-config + secret: + secretName: $(session_name)-cluster-2-kubeconfig + title: Lookup Service Configuration + version: 1.0.0 + workshop: + files: + - image: + url: ghcr.io/educates/labs-installation-guides/lab-lookup-configuration-files:1.0.0 + includePaths: + - /workshop/** + - /exercises/** + - /README.md + packages: + - files: + - image: + url: $(oci_image_cache)/educates:v3.3.2 + name: educates diff --git a/public/assets/workshops/lab-lookup-consumption.yaml b/public/assets/workshops/lab-lookup-consumption.yaml new file mode 100644 index 0000000..3c465a6 --- /dev/null +++ b/public/assets/workshops/lab-lookup-consumption.yaml @@ -0,0 +1,253 @@ +apiVersion: training.educates.dev/v1beta1 +kind: Workshop +metadata: + name: lab-lookup-consumption +spec: + description: A workshop on using the Educates lookup service API. + environment: + images: + registries: + - content: + - destination: educates + prefix: /educates/educates-extension-packages/educates + stripPrefix: true + onDemand: true + urls: + - https://ghcr.io + objects: + - apiVersion: v1 + kind: ServiceAccount + metadata: + name: kapp-installer + - apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRoleBinding + metadata: + name: kapp-installer-$(workshop_namespace) + roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin + subjects: + - kind: ServiceAccount + name: kapp-installer + namespace: $(workshop_namespace) + session: + applications: + console: + enabled: false + docker: + enabled: false + editor: + enabled: true + examiner: + enabled: true + files: + directory: exercises + enabled: true + git: + enabled: false + registry: + enabled: false + terminal: + enabled: true + layout: split + vcluster: + enabled: false + namespaces: + budget: x-large + secondary: + - name: $(session_namespace)-hub + security: + policy: baseline + token: + enabled: false + objects: + - apiVersion: networking.k8s.io/v1 + kind: Ingress + metadata: + name: files-$(session_name) + namespace: $(workshop_namespace) + spec: + rules: + - host: files-$(session_hostname) + http: + paths: + - backend: + service: + name: files-$(session_name) + port: + number: 11111 + path: / + pathType: Prefix + - apiVersion: v1 + kind: Service + metadata: + name: files-$(session_name) + namespace: $(workshop_namespace) + spec: + ports: + - name: files + port: 11111 + protocol: TCP + targetPort: 11111 + selector: + deployment: $(session_name) + - apiVersion: v1 + kind: Secret + metadata: + name: $(session_name)-hub-vcluster-values + namespace: $(workshop_namespace) + stringData: + values.yaml: | + vcluster: + image: rancher/k3s:v1.29.0-k3s1 + syncer: + extraArgs: + - --tls-san=hub-vcluster.$(session_namespace)-hub.svc.$(cluster_domain) + - --out-kube-config-server=https://hub-vcluster.$(session_namespace)-hub.svc.$(cluster_domain) + - --kube-config-context-name=hub + mapServices: + fromHost: + - from: $(workshop_namespace)/registry-$(session_name) + to: default/registry + - from: $(workshop_namespace)/localhost-$(session_name) + to: default/loopback + sync: + ingresses: + enabled: true + exportKubeConfig: + context: "hub" + - apiVersion: kappctrl.k14s.io/v1alpha1 + kind: App + metadata: + name: $(session_name)-hub-vcluster-package + namespace: $(workshop_namespace) + spec: + deploy: + - kapp: + rawOptions: + - --app-changes-max-to-keep=5 + fetch: + - helmChart: + name: vcluster + repository: + url: https://charts.loft.sh + version: 0.19.9 + noopDelete: true + serviceAccountName: kapp-installer + syncPeriod: 720h + template: + - helmTemplate: + name: hub-vcluster + namespace: $(session_namespace)-hub + valuesFrom: + - secretRef: + name: $(session_name)-hub-vcluster-values + - ytt: + inline: + paths: + overlays.yaml: | + #@ load("@ytt:data", "data") + #@ load("@ytt:overlay", "overlay") + #@overlay/match by=overlay.all, expects="1+" + --- + metadata: + #@overlay/match missing_ok=True + ownerReferences: + - apiVersion: training.educates.dev/v1beta1 + kind: WorkshopSession + blockOwnerDeletion: true + controller: true + name: $(session_name) + uid: $(workshop_session_uid) + - apiVersion: secrets.educates.dev/v1beta1 + kind: SecretCopier + metadata: + name: $(session_name)-hub-kubeconfig + spec: + rules: + - sourceSecret: + name: vc-hub-vcluster + namespace: $(session_namespace)-hub + targetNamespaces: + nameSelector: + matchNames: + - $(workshop_namespace) + targetSecret: + name: $(session_name)-hub-kubeconfig + - apiVersion: v1 + kind: Secret + metadata: + name: educates-training-platform-values + namespace: $(session_namespace)-hub + stringData: + values.yaml: | + clusterInfrastructure: + provider: vcluster + clusterPackages: + kyverno: + # enabled: false + enabled: true + clusterIngress: + domain: "hub.$(session_name).$(ingress_domain)" + clusterSecurity: + policyEngine: none + workshopSecurity: + rulesEngine: none + lookupService: + enabled: true + - apiVersion: kappctrl.k14s.io/v1alpha1 + kind: App + metadata: + name: educates-training-platform + namespace: $(session_namespace)-hub + spec: + cluster: + kubeconfigSecretRef: + key: config + name: vc-hub-vcluster + namespace: default + deploy: + - kapp: + rawOptions: + - --app-changes-max-to-keep=5 + fetch: + - imgpkgBundle: + image: ghcr.io/educates/educates-installer:3.3.2 + noopDelete: true + syncPeriod: 24h + template: + - ytt: + paths: + - config + - kbld/kbld-bundle.yaml + valuesFrom: + - path: kbld/kbld-images.yaml + - secretRef: + name: educates-training-platform-values + - kbld: + paths: + - .imgpkg/images.yml + - '-' + volumeMounts: + - mountPath: /opt/clusters/hub + name: hub-credentials-config + volumes: + - name: hub-credentials-config + secret: + secretName: $(session_name)-hub-kubeconfig + title: Lookup Service Consumption + version: 1.0.0 + workshop: + files: + - image: + url: ghcr.io/educates/labs-installation-guides/lab-lookup-consumption-files:1.0.0 + includePaths: + - /workshop/** + - /exercises/** + - /README.md + packages: + - files: + - image: + url: $(oci_image_cache)/educates:v3.3.2 + name: educates diff --git a/public/assets/workshops/lab-lookup-installation.yaml b/public/assets/workshops/lab-lookup-installation.yaml new file mode 100644 index 0000000..248d382 --- /dev/null +++ b/public/assets/workshops/lab-lookup-installation.yaml @@ -0,0 +1,199 @@ +apiVersion: training.educates.dev/v1beta1 +kind: Workshop +metadata: + name: lab-lookup-installation +spec: + description: A workshop on installing the lookup service. + environment: + images: + registries: + - content: + - destination: educates + prefix: /educates/educates-extension-packages/educates + stripPrefix: true + onDemand: true + urls: + - https://ghcr.io + objects: + - apiVersion: v1 + kind: ServiceAccount + metadata: + name: kapp-installer + - apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRoleBinding + metadata: + name: kapp-installer-$(workshop_namespace) + roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin + subjects: + - kind: ServiceAccount + name: kapp-installer + namespace: $(workshop_namespace) + session: + applications: + console: + enabled: false + docker: + compose: + services: + registry: + image: registry:2.8.3 + ports: + - 0.0.0.0:5001:5000 + enabled: true + socket: + enabled: false + editor: + enabled: true + registry: + enabled: false + terminal: + enabled: true + layout: split + vcluster: + enabled: false + dashboards: + - name: Docs + url: https://docs.educates.dev/ + namespaces: + budget: x-large + security: + policy: baseline + token: + enabled: false + objects: + - apiVersion: v1 + kind: Secret + metadata: + name: $(session_name)-vcluster-values + namespace: $(workshop_namespace) + stringData: + values.yaml: | + vcluster: + image: rancher/k3s:v1.29.0-k3s1 + syncer: + extraArgs: + - --tls-san=cluster-1-vcluster.$(session_namespace).svc.$(cluster_domain) + - --out-kube-config-server=https://cluster-1-vcluster.$(session_namespace).svc.$(cluster_domain) + - --kube-config-context-name=cluster-1 + mapServices: + fromHost: + - from: $(workshop_namespace)/registry-$(session_name) + to: default/registry + - from: $(workshop_namespace)/localhost-$(session_name) + to: default/loopback + sync: + ingresses: + enabled: true + exportKubeConfig: + context: "cluster-1" + - apiVersion: kappctrl.k14s.io/v1alpha1 + kind: App + metadata: + name: $(session_name)-vcluster-package + namespace: $(workshop_namespace) + spec: + deploy: + - kapp: + rawOptions: + - --app-changes-max-to-keep=5 + fetch: + - helmChart: + name: vcluster + repository: + url: https://charts.loft.sh + version: 0.19.9 + noopDelete: true + serviceAccountName: kapp-installer + syncPeriod: 720h + template: + - helmTemplate: + name: cluster-1-vcluster + namespace: $(session_namespace) + valuesFrom: + - secretRef: + name: $(session_name)-vcluster-values + - ytt: + inline: + paths: + overlays.yaml: | + #@ load("@ytt:data", "data") + #@ load("@ytt:overlay", "overlay") + #@overlay/match by=overlay.all, expects="1+" + --- + metadata: + #@overlay/match missing_ok=True + ownerReferences: + - apiVersion: training.educates.dev/v1beta1 + kind: WorkshopSession + blockOwnerDeletion: true + controller: true + name: $(session_name) + uid: $(workshop_session_uid) + - apiVersion: secrets.educates.dev/v1beta1 + kind: SecretCopier + metadata: + name: $(session_name)-kubeconfig + spec: + rules: + - sourceSecret: + name: vc-cluster-1-vcluster + namespace: $(session_namespace) + targetNamespaces: + nameSelector: + matchNames: + - $(workshop_namespace) + targetSecret: + name: $(session_name)-kubeconfig + - apiVersion: v1 + kind: Service + metadata: + name: registry-$(session_name) + namespace: $(workshop_namespace) + spec: + ports: + - name: registry + port: 80 + protocol: TCP + targetPort: 5001 + selector: + deployment: $(session_name) + type: ClusterIP + - apiVersion: v1 + kind: Service + metadata: + name: localhost-$(session_name) + namespace: $(workshop_namespace) + spec: + ports: + - name: renderer + port: 10081 + protocol: TCP + targetPort: 10081 + selector: + deployment: $(session_name) + type: ClusterIP + volumeMounts: + - mountPath: /opt/kubeconfig + name: vcluster-kubeconfig + volumes: + - name: vcluster-kubeconfig + secret: + secretName: $(session_name)-kubeconfig + title: Lookup Service Installation + version: 1.0.0 + workshop: + files: + - image: + url: ghcr.io/educates/labs-installation-guides/lab-lookup-installation-files:1.0.0 + includePaths: + - /workshop/** + - /exercises/** + - /README.md + packages: + - files: + - image: + url: $(oci_image_cache)/educates:v3.3.2 + name: educates diff --git a/src/content/workshops/WIP/labs-installation-guides.yaml__ b/src/content/workshops/WIP/labs-installation-guides.yaml__ deleted file mode 100644 index fc47e07..0000000 --- a/src/content/workshops/WIP/labs-installation-guides.yaml__ +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Installing Educates -slug: installing-educates-cli -description: Installing Educates using the CLI -author: Educates Team -image: educates -install_url: https://github.com/educates/labs-installation-guides/releases/download/main/workshops.yaml -repo_url: https://github.com/educates/labs-installation-guides -workshop_definition_url: https://github.com/educates/labs-installation-guides/releases/download/main/workshops.yaml -labels: - - educates-showcase - - installation-guides ---- -title: Installing Educates -slug: installing-educates-carvel -description: installing Educates using kapp-controller -author: Educates Team -image: educates -install_url: https://github.com/educates/labs-installation-guides/releases/download/main/workshops.yaml -repo_url: https://github.com/educates/labs-installation-guides -workshop_definition_url: https://github.com/educates/labs-installation-guides/releases/download/main/workshops.yaml -labels: - - educates-showcase - - installation-guides ---- -title: Installing Educates Lookup Service -slug: installing-educates-lookup-service -description: Installing Educates Lookup Service -author: Educates Team -image: educates -install_url: https://github.com/educates/labs-installation-guides/releases/download/main/workshops.yaml -repo_url: https://github.com/educates/labs-installation-guides -workshop_definition_url: https://github.com/educates/labs-installation-guides/releases/download/main/workshops.yaml -labels: - - educates-showcase - - installation-guides - - lookup-service ---- -title: Installing Educates standalone Lookup Service -slug: installing-educates-standalone-lookup-service -description: Installing Educates standalone Lookup Service -author: Educates Team -image: educates -install_url: https://github.com/educates/labs-installation-guides/releases/download/main/workshops.yaml -repo_url: https://github.com/educates/labs-installation-guides -workshop_definition_url: https://github.com/educates/labs-installation-guides/releases/download/main/workshops.yaml -labels: - - educates-showcase - - installation-guides - - lookup-service ---- -title: Lookup Service Configuration -slug: lookup-service-configuration -description: Configuring the Educates lookup service -author: Educates Team -image: educates -install_url: https://github.com/educates/labs-installation-guides/releases/download/main/workshops.yaml -repo_url: https://github.com/educates/labs-installation-guides -workshop_definition_url: https://github.com/educates/labs-installation-guides/releases/download/main/workshops.yaml -labels: - - educates-showcase - - installation-guides - - lookup-service ---- -title: Lookup Service Usage -slug: lookup-service-usage -description: Using the Educates lookup service -author: Educates Team -image: educates -install_url: https://github.com/educates/labs-installation-guides/releases/download/main/workshops.yaml -repo_url: https://github.com/educates/labs-installation-guides -workshop_definition_url: https://github.com/educates/labs-installation-guides/releases/download/main/workshops.yaml -labels: - - educates-showcase - - lookup-service -author: Educates Team \ No newline at end of file diff --git a/src/content/workshops/lab-installation-via-carvel.yaml b/src/content/workshops/lab-installation-via-carvel.yaml new file mode 100644 index 0000000..11fd8cf --- /dev/null +++ b/src/content/workshops/lab-installation-via-carvel.yaml @@ -0,0 +1,14 @@ +title: Installing Educates using Carvel +slug: lab-installation-via-carvel +description: How to install Educates onto a cluster using Educates Carvel App. +author: Educates Team +image: educates +repository: + org: educates + name: labs-installation-guides + ref: "1.0.0" + path: workshops/lab-installation-via-carvel/resources/workshop.yaml +install_url: https://github.com/educates/labs-installation-guides/releases/download/1.0.0/lab-installation-via-carvel.yaml +labels: + - educates-showcase + - installation \ No newline at end of file diff --git a/src/content/workshops/lab-installation-via-cli.yaml b/src/content/workshops/lab-installation-via-cli.yaml new file mode 100644 index 0000000..f8e50ac --- /dev/null +++ b/src/content/workshops/lab-installation-via-cli.yaml @@ -0,0 +1,14 @@ +title: Installing Educates using CLI +slug: lab-installation-via-cli +description: How to install Educates onto a cluster using the Educates CLI. +author: Educates Team +image: educates +repository: + org: educates + name: labs-installation-guides + ref: "1.0.0" + path: workshops/lab-installation-via-cli/resources/workshop.yaml +install_url: https://github.com/educates/labs-installation-guides/releases/download/1.0.0/lab-installation-via-cli.yaml +labels: + - educates-showcase + - installation \ No newline at end of file diff --git a/src/content/workshops/lab-lookup-configuration.yaml b/src/content/workshops/lab-lookup-configuration.yaml new file mode 100644 index 0000000..78c6760 --- /dev/null +++ b/src/content/workshops/lab-lookup-configuration.yaml @@ -0,0 +1,15 @@ +title: Configuring Educates Lookup Service +slug: lab-lookup-configuration +description: How to configure Educates Lookup Service as API Frontend to multiple Educates Clusters. +author: Educates Team +image: educates +repository: + org: educates + name: labs-installation-guides + ref: "1.0.0" + path: workshops/lab-lookup-configuration/resources/workshop.yaml +install_url: https://github.com/educates/labs-installation-guides/releases/download/1.0.0/lab-lookup-configuration.yaml +labels: + - educates-showcase + - configuration + - educates-lookup-service \ No newline at end of file diff --git a/src/content/workshops/lab-lookup-consumption.yaml b/src/content/workshops/lab-lookup-consumption.yaml new file mode 100644 index 0000000..6b01b17 --- /dev/null +++ b/src/content/workshops/lab-lookup-consumption.yaml @@ -0,0 +1,15 @@ +title: Using the Educates Lookup Service +slug: lab-lookup-consumption +description: How to use the Educates Lookup Service to front-end multiple Educates Clusters and embedding Educates workshops within your own site. +author: Educates Team +image: educates +repository: + org: educates + name: labs-installation-guides + ref: "1.0.0" + path: workshops/lab-lookup-configuration/resources/workshop.yaml +install_url: https://github.com/educates/labs-installation-guides/releases/download/1.0.0/lab-lookup-consumption.yaml +labels: + - educates-showcase + - usage + - educates-lookup-service \ No newline at end of file diff --git a/src/content/workshops/lab-lookup-installation.yaml b/src/content/workshops/lab-lookup-installation.yaml new file mode 100644 index 0000000..0a573fb --- /dev/null +++ b/src/content/workshops/lab-lookup-installation.yaml @@ -0,0 +1,15 @@ +title: Installing Educates Lookup Service +slug: lab-lookup-installation +description: How to install Educates Lookup Service as API Frontend to multiple Educates Clusters. +author: Educates Team +image: educates +repository: + org: educates + name: labs-installation-guides + ref: "1.0.0" + path: workshops/lab-lookup-installation/resources/workshop.yaml +install_url: https://github.com/educates/labs-installation-guides/releases/download/1.0.0/lab-lookup-installation.yaml +labels: + - educates-showcase + - installation + - educates-lookup-service \ No newline at end of file