├── 01-section-one ├── grade-submission-api-pod.yaml └── grade-submission-portal-pod.yaml ├── 02-section-two ├── grade-submission-api-pod.yaml ├── grade-submission-api-service.yaml ├── grade-submission-portal-pod.yaml └── grade-submission-portal-service.yaml ├── 03-section-three ├── grade-submission-api-pod.yaml ├── grade-submission-api-service.yaml ├── grade-submission-portal-pod.yaml └── grade-submission-portal-service.yaml ├── 04-section-four ├── grade-submission-api-deployment.yaml ├── grade-submission-api-service.yaml ├── grade-submission-portal-deployment.yaml └── grade-submission-portal-service.yaml ├── 05-section-five ├── grade-submission-api-deployment.yaml ├── grade-submission-api-service.yaml ├── grade-submission-portal-deployment.yaml └── grade-submission-portal-service.yaml ├── 06-section-six ├── grade-submission-api-deployment.yaml ├── grade-submission-api-service.yaml ├── grade-submission-portal-deployment.yaml └── grade-submission-portal-service.yaml ├── 07-section-seven ├── grade-submission-api-deployment.yaml ├── grade-submission-api-service.yaml ├── grade-submission-portal-deployment.yaml ├── grade-submission-portal-service.yaml ├── mongodb-service.yaml └── mongodb-statefulset.yaml ├── 08-section-eight ├── grade-submission-api │ ├── grade-submission-api-config.yaml │ ├── grade-submission-api-deployment.yaml │ ├── grade-submission-api-secret.yaml │ └── grade-submission-api-service.yaml ├── grade-submission-portal │ ├── grade-submission-portal-config.yaml │ ├── grade-submission-portal-deployment.yaml │ └── grade-submission-portal-service.yaml └── mongodb │ ├── mongodb-secret.yaml │ ├── mongodb-service.yaml │ └── mongodb-statefulset.yaml ├── 09-section-nine ├── grade-submission-api │ ├── grade-submission-api-config.yaml │ ├── grade-submission-api-deployment.yaml │ ├── grade-submission-api-secret.yaml │ └── grade-submission-api-service.yaml ├── grade-submission-portal │ ├── grade-submission-portal-config.yaml │ ├── grade-submission-portal-deployment.yaml │ ├── grade-submission-portal-hpa.yaml │ └── grade-submission-portal-service.yaml └── mongodb │ ├── mongodb-secret.yaml │ ├── mongodb-service.yaml │ └── mongodb-statefulset.yaml ├── 10-section-ten ├── grade-submission-api │ ├── grade-submission-api-config.yaml │ ├── grade-submission-api-deployment.yaml │ ├── grade-submission-api-secret.yaml │ └── grade-submission-api-service.yaml ├── grade-submission-portal │ ├── grade-submission-portal-config.yaml │ ├── grade-submission-portal-deployment.yaml │ ├── grade-submission-portal-ingress.yaml │ └── grade-submission-portal-service.yaml └── mongodb │ ├── mongodb-secret.yaml │ ├── mongodb-service.yaml │ └── mongodb-statefulset.yaml ├── 11-section-eleven ├── grade-submission-api │ ├── Chart.yaml │ ├── grade-submission-api-1.0.1.tgz │ ├── templates │ │ ├── grade-submission-api-config.yaml │ │ ├── grade-submission-api-deployment.yaml │ │ ├── grade-submission-api-secret.yaml │ │ └── grade-submission-api-service.yaml │ └── values.yaml ├── grade-submission-portal │ ├── Chart.yaml │ ├── grade-submission-portal-1.0.0.tgz │ ├── templates │ │ ├── grade-submission-portal-config.yaml │ │ ├── grade-submission-portal-deployment.yaml │ │ ├── grade-submission-portal-ingress.yaml │ │ └── grade-submission-portal-service.yaml │ └── values.yaml └── mongodb │ ├── mongodb-secret.yaml │ ├── mongodb-service.yaml │ └── mongodb-statefulset.yaml ├── 12-section-twelve ├── grade-submission-api │ ├── Chart.yaml │ ├── templates │ │ ├── grade-submission-api-deployment.yaml │ │ ├── grade-submission-api-secret.yaml │ │ └── grade-submission-api-service.yaml │ └── values.yaml ├── grade-submission-portal │ ├── Chart.yaml │ ├── templates │ │ ├── grade-submission-portal-config.yaml │ │ ├── grade-submission-portal-deployment.yaml │ │ ├── grade-submission-portal-ingress.yaml │ │ └── grade-submission-portal-service.yaml │ └── values.yaml └── mongodb │ └── values.yaml ├── 13-section-thirteen ├── grade-submission-api │ ├── Chart.yaml │ ├── templates │ │ ├── grade-submission-api-deployment.yaml │ │ ├── grade-submission-api-secret.yaml │ │ └── grade-submission-api-service.yaml │ └── values.yaml ├── grade-submission-portal │ ├── Chart.yaml │ ├── templates │ │ ├── grade-submission-portal-config.yaml │ │ ├── grade-submission-portal-deployment.yaml │ │ ├── grade-submission-portal-ingress.yaml │ │ └── grade-submission-portal-service.yaml │ └── values.yaml └── mongodb │ ├── mongodb-grade-submission.yaml │ └── mongodb-user-password.yaml └── README.md /01-section-one/grade-submission-api-pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: grade-submission-api 5 | labels: 6 | app.kubernetes.io/name: grade-submission 7 | app.kubernetes.io/component: backend 8 | app.kubernetes.io/instance: grade-submission-api 9 | spec: 10 | containers: 11 | - name: grade-submission-api 12 | image: rslim087/kubernetes-course-grade-submission-api:stateless 13 | resources: 14 | requests: 15 | memory: "128Mi" 16 | cpu: "128m" 17 | limits: 18 | memory: "128Mi" 19 | ports: 20 | - containerPort: 3000 21 | - name: grade-submission-api-health-checker 22 | image: rslim087/kubernetes-course-grade-submission-api-health-checker 23 | resources: 24 | requests: 25 | memory: "128Mi" 26 | cpu: "200m" 27 | limits: 28 | memory: "128Mi" -------------------------------------------------------------------------------- /01-section-one/grade-submission-portal-pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: grade-submission-portal 5 | labels: 6 | app.kubernetes.io/name: grade-submission 7 | app.kubernetes.io/component: frontend 8 | app.kubernetes.io/instance: grade-submission-portal 9 | spec: 10 | containers: 11 | - name: grade-submission-portal 12 | image: rslim087/kubernetes-course-grade-submission-portal 13 | resources: 14 | requests: 15 | memory: "128Mi" 16 | cpu: "200m" 17 | limits: 18 | memory: "128Mi" 19 | ports: 20 | - containerPort: 5001 21 | - name: grade-submission-portal-health-checker 22 | image: rslim087/kubernetes-course-grade-submission-portal-health-checker 23 | resources: 24 | requests: 25 | memory: "128Mi" 26 | cpu: "200m" 27 | limits: 28 | memory: "128Mi" -------------------------------------------------------------------------------- /02-section-two/grade-submission-api-pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: grade-submission-api 5 | labels: 6 | app.kubernetes.io/name: grade-submission 7 | app.kubernetes.io/component: backend 8 | app.kubernetes.io/instance: grade-submission-api 9 | spec: 10 | containers: 11 | - name: grade-submission-api 12 | image: rslim087/kubernetes-course-grade-submission-api:stateless 13 | resources: 14 | requests: 15 | memory: "128Mi" 16 | cpu: "128m" 17 | limits: 18 | memory: "128Mi" 19 | ports: 20 | - containerPort: 3000 -------------------------------------------------------------------------------- /02-section-two/grade-submission-api-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-api 5 | spec: 6 | selector: 7 | app.kubernetes.io/instance: grade-submission-api 8 | ports: 9 | - port: 3000 10 | targetPort: 3000 -------------------------------------------------------------------------------- /02-section-two/grade-submission-portal-pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: grade-submission-portal 5 | labels: 6 | app.kubernetes.io/name: grade-submission 7 | app.kubernetes.io/component: frontend 8 | app.kubernetes.io/instance: grade-submission-portal 9 | spec: 10 | containers: 11 | - name: grade-submission-portal 12 | image: rslim087/kubernetes-course-grade-submission-portal 13 | env: 14 | - name: GRADE_SERVICE_HOST 15 | value: grade-submission-api 16 | resources: 17 | requests: 18 | memory: "128Mi" 19 | cpu: "200m" 20 | limits: 21 | memory: "128Mi" 22 | ports: 23 | - containerPort: 5001 -------------------------------------------------------------------------------- /02-section-two/grade-submission-portal-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-portal 5 | spec: 6 | type: NodePort 7 | selector: 8 | app.kubernetes.io/instance: grade-submission-portal 9 | ports: 10 | - port: 5001 11 | targetPort: 5001 12 | nodePort: 32000 -------------------------------------------------------------------------------- /03-section-three/grade-submission-api-pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: grade-submission-api 5 | namespace: grade-submission 6 | labels: 7 | app.kubernetes.io/name: grade-submission 8 | app.kubernetes.io/component: backend 9 | app.kubernetes.io/instance: grade-submission-api 10 | spec: 11 | containers: 12 | - name: grade-submission-api 13 | image: rslim087/kubernetes-course-grade-submission-api:stateless 14 | resources: 15 | requests: 16 | memory: "128Mi" 17 | cpu: "128m" 18 | limits: 19 | memory: "128Mi" 20 | ports: 21 | - containerPort: 3000 -------------------------------------------------------------------------------- /03-section-three/grade-submission-api-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-api 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | app.kubernetes.io/instance: grade-submission-api 9 | ports: 10 | - port: 3000 11 | targetPort: 3000 -------------------------------------------------------------------------------- /03-section-three/grade-submission-portal-pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: grade-submission-portal 5 | namespace: grade-submission 6 | labels: 7 | app.kubernetes.io/name: grade-submission 8 | app.kubernetes.io/component: frontend 9 | app.kubernetes.io/instance: grade-submission-portal 10 | spec: 11 | containers: 12 | - name: grade-submission-portal 13 | image: rslim087/kubernetes-course-grade-submission-portal 14 | env: 15 | - name: GRADE_SERVICE_HOST 16 | value: grade-submission-api 17 | resources: 18 | requests: 19 | memory: "128Mi" 20 | cpu: "200m" 21 | limits: 22 | memory: "128Mi" 23 | ports: 24 | - containerPort: 5001 -------------------------------------------------------------------------------- /03-section-three/grade-submission-portal-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-portal 5 | namespace: grade-submission 6 | spec: 7 | type: NodePort 8 | selector: 9 | app.kubernetes.io/instance: grade-submission-portal 10 | ports: 11 | - port: 5001 12 | targetPort: 5001 13 | nodePort: 32000 -------------------------------------------------------------------------------- /04-section-four/grade-submission-api-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: grade-submission-api 5 | namespace: grade-submission 6 | spec: 7 | replicas: 2 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: grade-submission-api 11 | template: 12 | metadata: 13 | labels: 14 | app.kubernetes.io/name: grade-submission 15 | app.kubernetes.io/component: backend 16 | app.kubernetes.io/instance: grade-submission-api 17 | spec: 18 | containers: 19 | - name: grade-submission-api 20 | image: rslim087/kubernetes-course-grade-submission-api:stateless 21 | resources: 22 | requests: 23 | memory: "128Mi" 24 | cpu: "128m" 25 | limits: 26 | memory: "128Mi" 27 | ports: 28 | - containerPort: 3000 -------------------------------------------------------------------------------- /04-section-four/grade-submission-api-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-api 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | app.kubernetes.io/instance: grade-submission-api 9 | ports: 10 | - port: 3000 11 | targetPort: 3000 -------------------------------------------------------------------------------- /04-section-four/grade-submission-portal-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: grade-submission-portal 5 | namespace: grade-submission 6 | spec: 7 | replicas: 1 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: grade-submission-portal 11 | template: 12 | metadata: 13 | labels: 14 | app.kubernetes.io/name: grade-submission 15 | app.kubernetes.io/component: frontend 16 | app.kubernetes.io/instance: grade-submission-portal 17 | spec: 18 | containers: 19 | - name: grade-submission-portal 20 | image: rslim087/kubernetes-course-grade-submission-portal 21 | env: 22 | - name: GRADE_SERVICE_HOST 23 | value: grade-submission-api 24 | resources: 25 | requests: 26 | memory: "128Mi" 27 | cpu: "200m" 28 | limits: 29 | memory: "128Mi" 30 | ports: 31 | - containerPort: 5001 -------------------------------------------------------------------------------- /04-section-four/grade-submission-portal-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-portal 5 | namespace: grade-submission 6 | spec: 7 | type: NodePort 8 | selector: 9 | app.kubernetes.io/instance: grade-submission-portal 10 | ports: 11 | - port: 5001 12 | targetPort: 5001 13 | nodePort: 32000 -------------------------------------------------------------------------------- /05-section-five/grade-submission-api-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: grade-submission-api 5 | namespace: grade-submission 6 | spec: 7 | replicas: 2 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: grade-submission-api 11 | strategy: 12 | type: RollingUpdate 13 | rollingUpdate: 14 | maxUnavailable: 50% 15 | maxSurge: 1 ## ensure that we do not have more than 3 pod replicas 16 | template: 17 | metadata: 18 | labels: 19 | app.kubernetes.io/name: grade-submission 20 | app.kubernetes.io/component: backend 21 | app.kubernetes.io/instance: grade-submission-api 22 | spec: 23 | containers: 24 | - name: grade-submission-api 25 | image: rslim087/kubernetes-course-grade-submission-api:stateful 26 | resources: 27 | requests: 28 | memory: "128Mi" 29 | cpu: "128m" 30 | limits: 31 | memory: "128Mi" 32 | ports: 33 | - containerPort: 3000 -------------------------------------------------------------------------------- /05-section-five/grade-submission-api-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-api 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | app.kubernetes.io/instance: grade-submission-api 9 | ports: 10 | - port: 3000 11 | targetPort: 3000 -------------------------------------------------------------------------------- /05-section-five/grade-submission-portal-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: grade-submission-portal 5 | namespace: grade-submission 6 | spec: 7 | replicas: 1 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: grade-submission-portal 11 | template: 12 | metadata: 13 | labels: 14 | app.kubernetes.io/name: grade-submission 15 | app.kubernetes.io/component: frontend 16 | app.kubernetes.io/instance: grade-submission-portal 17 | spec: 18 | containers: 19 | - name: grade-submission-portal 20 | image: rslim087/kubernetes-course-grade-submission-portal 21 | env: 22 | - name: GRADE_SERVICE_HOST 23 | value: grade-submission-api 24 | resources: 25 | requests: 26 | memory: "128Mi" 27 | cpu: "200m" 28 | limits: 29 | memory: "128Mi" 30 | ports: 31 | - containerPort: 5001 -------------------------------------------------------------------------------- /05-section-five/grade-submission-portal-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-portal 5 | namespace: grade-submission 6 | spec: 7 | type: NodePort 8 | selector: 9 | app.kubernetes.io/instance: grade-submission-portal 10 | ports: 11 | - port: 5001 12 | targetPort: 5001 13 | nodePort: 32000 -------------------------------------------------------------------------------- /06-section-six/grade-submission-api-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: grade-submission-api 5 | namespace: grade-submission 6 | spec: 7 | replicas: 2 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: grade-submission-api 11 | strategy: 12 | type: RollingUpdate 13 | rollingUpdate: 14 | maxUnavailable: 50% 15 | maxSurge: 1 ## ensure that we do not have more than 3 pod replicas 16 | template: 17 | metadata: 18 | labels: 19 | app.kubernetes.io/name: grade-submission 20 | app.kubernetes.io/component: backend 21 | app.kubernetes.io/instance: grade-submission-api 22 | spec: 23 | containers: 24 | - name: grade-submission-api 25 | image: rslim087/kubernetes-course-grade-submission-api:stateless 26 | livenessProbe: 27 | httpGet: 28 | path: /healthz 29 | port: 3000 30 | initialDelaySeconds: 15 31 | periodSeconds: 5 32 | readinessProbe: 33 | httpGet: 34 | path: /readyz 35 | port: 3000 36 | initialDelaySeconds: 10 37 | periodSeconds: 5 38 | resources: 39 | requests: 40 | memory: "128Mi" 41 | cpu: "128m" 42 | limits: 43 | memory: "128Mi" 44 | ports: 45 | - containerPort: 3000 46 | -------------------------------------------------------------------------------- /06-section-six/grade-submission-api-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-api 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | app.kubernetes.io/instance: grade-submission-api 9 | ports: 10 | - port: 3000 11 | targetPort: 3000 -------------------------------------------------------------------------------- /06-section-six/grade-submission-portal-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: grade-submission-portal 5 | namespace: grade-submission 6 | spec: 7 | replicas: 1 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: grade-submission-portal 11 | template: 12 | metadata: 13 | labels: 14 | app.kubernetes.io/name: grade-submission 15 | app.kubernetes.io/component: frontend 16 | app.kubernetes.io/instance: grade-submission-portal 17 | spec: 18 | containers: 19 | - name: grade-submission-portal 20 | image: rslim087/kubernetes-course-grade-submission-portal 21 | livenessProbe: 22 | httpGet: 23 | path: /healthz 24 | port: 5001 25 | initialDelaySeconds: 15 26 | periodSeconds: 5 27 | readinessProbe: 28 | httpGet: 29 | path: /readyz 30 | port: 5001 31 | periodSeconds: 5 32 | env: 33 | - name: GRADE_SERVICE_HOST 34 | value: grade-submission-api 35 | resources: 36 | requests: 37 | memory: "128Mi" 38 | cpu: "200m" 39 | limits: 40 | memory: "128Mi" 41 | ports: 42 | - containerPort: 5001 -------------------------------------------------------------------------------- /06-section-six/grade-submission-portal-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-portal 5 | namespace: grade-submission 6 | spec: 7 | type: NodePort 8 | selector: 9 | app.kubernetes.io/instance: grade-submission-portal 10 | ports: 11 | - port: 5001 12 | targetPort: 5001 13 | nodePort: 32000 -------------------------------------------------------------------------------- /07-section-seven/grade-submission-api-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: grade-submission-api 5 | namespace: grade-submission 6 | spec: 7 | replicas: 2 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: grade-submission-api 11 | strategy: 12 | type: RollingUpdate 13 | rollingUpdate: 14 | maxUnavailable: 50% 15 | maxSurge: 1 ## ensure that we do not have more than 3 pod replicas 16 | template: 17 | metadata: 18 | labels: 19 | app.kubernetes.io/name: grade-submission 20 | app.kubernetes.io/component: backend 21 | app.kubernetes.io/instance: grade-submission-api 22 | spec: 23 | containers: 24 | - name: grade-submission-api 25 | image: rslim087/kubernetes-course-grade-submission-api:stateless-v3 26 | livenessProbe: 27 | httpGet: 28 | path: /healthz 29 | port: 3000 30 | initialDelaySeconds: 15 31 | periodSeconds: 5 32 | readinessProbe: 33 | httpGet: 34 | path: /readyz 35 | port: 3000 36 | initialDelaySeconds: 10 37 | periodSeconds: 5 38 | env: 39 | - name: MONGODB_HOST 40 | value: mongodb 41 | - name: MONGODB_PORT 42 | value: '27017' 43 | - name: MONGODB_USER 44 | value: admin 45 | - name: MONGODB_PASSWORD 46 | value: password123 47 | resources: 48 | requests: 49 | memory: "128Mi" 50 | cpu: "128m" 51 | limits: 52 | memory: "128Mi" 53 | ports: 54 | - containerPort: 3000 -------------------------------------------------------------------------------- /07-section-seven/grade-submission-api-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-api 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | app.kubernetes.io/instance: grade-submission-api 9 | ports: 10 | - port: 3000 11 | targetPort: 3000 -------------------------------------------------------------------------------- /07-section-seven/grade-submission-portal-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: grade-submission-portal 5 | namespace: grade-submission 6 | spec: 7 | replicas: 1 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: grade-submission-portal 11 | template: 12 | metadata: 13 | labels: 14 | app.kubernetes.io/name: grade-submission 15 | app.kubernetes.io/component: frontend 16 | app.kubernetes.io/instance: grade-submission-portal 17 | spec: 18 | containers: 19 | - name: grade-submission-portal 20 | image: rslim087/kubernetes-course-grade-submission-portal 21 | livenessProbe: 22 | httpGet: 23 | path: /healthz 24 | port: 5001 25 | initialDelaySeconds: 15 26 | periodSeconds: 5 27 | readinessProbe: 28 | httpGet: 29 | path: /readyz 30 | port: 5001 31 | periodSeconds: 5 32 | env: 33 | - name: GRADE_SERVICE_HOST 34 | value: grade-submission-api 35 | resources: 36 | requests: 37 | memory: "128Mi" 38 | cpu: "200m" 39 | limits: 40 | memory: "128Mi" 41 | ports: 42 | - containerPort: 5001 -------------------------------------------------------------------------------- /07-section-seven/grade-submission-portal-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-portal 5 | namespace: grade-submission 6 | spec: 7 | type: NodePort 8 | selector: 9 | app.kubernetes.io/instance: grade-submission-portal 10 | ports: 11 | - port: 5001 12 | targetPort: 5001 13 | nodePort: 32000 -------------------------------------------------------------------------------- /07-section-seven/mongodb-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: mongodb 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | app.kubernetes.io/instance: mongodb 9 | ports: 10 | - port: 27017 11 | targetPort: 27017 -------------------------------------------------------------------------------- /07-section-seven/mongodb-statefulset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: StatefulSet 3 | metadata: 4 | name: mongodb 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | matchLabels: 9 | app.kubernetes.io/instance: mongodb 10 | serviceName: mongodb ## mongodb-0 mongodb-1 11 | replicas: 1 12 | template: 13 | metadata: 14 | labels: 15 | app.kubernetes.io/name: grade-submission 16 | app.kubernetes.io/component: database 17 | app.kubernetes.io/instance: mongodb 18 | spec: 19 | containers: 20 | - name: mongodb 21 | image: mongo:4.4 22 | env: 23 | - name: MONGO_INITDB_ROOT_USERNAME 24 | value: "admin" 25 | - name: MONGO_INITDB_ROOT_PASSWORD 26 | value: "password123" 27 | ports: 28 | - containerPort: 27017 29 | volumeMounts: 30 | - name: mongodb-persistent-storage 31 | mountPath: /data/db 32 | volumeClaimTemplates: 33 | - metadata: 34 | name: mongodb-persistent-storage 35 | spec: 36 | accessModes: [ "ReadWriteOnce" ] 37 | resources: 38 | requests: 39 | storage: 1Gi -------------------------------------------------------------------------------- /08-section-eight/grade-submission-api/grade-submission-api-config.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: grade-submission-api-config 5 | namespace: grade-submission 6 | data: 7 | MONGODB_HOST: mongodb 8 | MONGODB_PORT: '27017' -------------------------------------------------------------------------------- /08-section-eight/grade-submission-api/grade-submission-api-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: grade-submission-api 5 | namespace: grade-submission 6 | spec: 7 | replicas: 2 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: grade-submission-api 11 | strategy: 12 | type: RollingUpdate 13 | rollingUpdate: 14 | maxUnavailable: 50% 15 | maxSurge: 1 ## ensure that we do not have more than 3 pod replicas 16 | template: 17 | metadata: 18 | labels: 19 | app.kubernetes.io/name: grade-submission 20 | app.kubernetes.io/component: backend 21 | app.kubernetes.io/instance: grade-submission-api 22 | spec: 23 | containers: 24 | - name: grade-submission-api 25 | image: rslim087/kubernetes-course-grade-submission-api:stateless-v3 26 | livenessProbe: 27 | httpGet: 28 | path: /healthz 29 | port: 3000 30 | initialDelaySeconds: 15 31 | periodSeconds: 5 32 | readinessProbe: 33 | httpGet: 34 | path: /readyz 35 | port: 3000 36 | initialDelaySeconds: 10 37 | periodSeconds: 5 38 | envFrom: 39 | - configMapRef: 40 | name: grade-submission-api-config 41 | - secretRef: 42 | name: grade-submission-api-secret 43 | resources: 44 | requests: 45 | memory: "128Mi" 46 | cpu: "128m" 47 | limits: 48 | memory: "128Mi" 49 | ports: 50 | - containerPort: 3000 -------------------------------------------------------------------------------- /08-section-eight/grade-submission-api/grade-submission-api-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: grade-submission-api-secret 5 | namespace: grade-submission 6 | type: Opaque 7 | data: 8 | MONGODB_USER: 'YWRtaW4=' ## assumes this is base64 encoded, and interprets as admin 9 | MONGODB_PASSWORD: 'cGFzc3dvcmQxMjM=' ## assumes this is base64 encoded, and interprets as password123 -------------------------------------------------------------------------------- /08-section-eight/grade-submission-api/grade-submission-api-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-api 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | app.kubernetes.io/instance: grade-submission-api 9 | ports: 10 | - port: 3000 11 | targetPort: 3000 -------------------------------------------------------------------------------- /08-section-eight/grade-submission-portal/grade-submission-portal-config.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: grade-submission-portal-config 5 | namespace: grade-submission 6 | data: 7 | GRADE_SERVICE_HOST: grade-submission-api -------------------------------------------------------------------------------- /08-section-eight/grade-submission-portal/grade-submission-portal-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: grade-submission-portal 5 | namespace: grade-submission 6 | spec: 7 | replicas: 1 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: grade-submission-portal 11 | template: 12 | metadata: 13 | labels: 14 | app.kubernetes.io/name: grade-submission 15 | app.kubernetes.io/component: frontend 16 | app.kubernetes.io/instance: grade-submission-portal 17 | spec: 18 | containers: 19 | - name: grade-submission-portal 20 | image: rslim087/kubernetes-course-grade-submission-portal 21 | livenessProbe: 22 | httpGet: 23 | path: /healthz 24 | port: 5001 25 | initialDelaySeconds: 15 26 | periodSeconds: 5 27 | readinessProbe: 28 | httpGet: 29 | path: /readyz 30 | port: 5001 31 | periodSeconds: 5 32 | envFrom: 33 | - configMapRef: 34 | name: grade-submission-portal-config 35 | resources: 36 | requests: 37 | memory: "128Mi" 38 | cpu: "200m" 39 | limits: 40 | memory: "128Mi" 41 | ports: 42 | - containerPort: 5001 -------------------------------------------------------------------------------- /08-section-eight/grade-submission-portal/grade-submission-portal-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-portal 5 | namespace: grade-submission 6 | spec: 7 | type: NodePort 8 | selector: 9 | app.kubernetes.io/instance: grade-submission-portal 10 | ports: 11 | - port: 5001 12 | targetPort: 5001 13 | nodePort: 32000 -------------------------------------------------------------------------------- /08-section-eight/mongodb/mongodb-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: mongodb-secret 5 | namespace: grade-submission 6 | type: Opaque 7 | data: 8 | MONGO_INITDB_ROOT_USERNAME: 'YWRtaW4=' ## assumes this is base64 encoded, and interprets as admin 9 | MONGO_INITDB_ROOT_PASSWORD: 'cGFzc3dvcmQxMjM=' ## assumes this is base64 encoded, and interprets as password123 -------------------------------------------------------------------------------- /08-section-eight/mongodb/mongodb-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: mongodb 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | app.kubernetes.io/instance: mongodb 9 | ports: 10 | - port: 27017 11 | targetPort: 27017 -------------------------------------------------------------------------------- /08-section-eight/mongodb/mongodb-statefulset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: StatefulSet 3 | metadata: 4 | name: mongodb 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | matchLabels: 9 | app.kubernetes.io/instance: mongodb 10 | serviceName: mongodb ## mongodb-0 mongodb-1 11 | replicas: 1 12 | template: 13 | metadata: 14 | labels: 15 | app.kubernetes.io/name: grade-submission 16 | app.kubernetes.io/component: database 17 | app.kubernetes.io/instance: mongodb 18 | spec: 19 | containers: 20 | - name: mongodb 21 | image: mongo:4.4 22 | envFrom: 23 | - secretRef: 24 | name: mongodb-secret 25 | ports: 26 | - containerPort: 27017 27 | volumeMounts: 28 | - name: mongodb-persistent-storage 29 | mountPath: /data/db 30 | volumeClaimTemplates: 31 | - metadata: 32 | name: mongodb-persistent-storage 33 | spec: 34 | accessModes: [ "ReadWriteOnce" ] 35 | resources: 36 | requests: 37 | storage: 1Gi -------------------------------------------------------------------------------- /09-section-nine/grade-submission-api/grade-submission-api-config.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: grade-submission-api-config 5 | namespace: grade-submission 6 | data: 7 | MONGODB_HOST: mongodb 8 | MONGODB_PORT: '27017' -------------------------------------------------------------------------------- /09-section-nine/grade-submission-api/grade-submission-api-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: grade-submission-api 5 | namespace: grade-submission 6 | spec: 7 | replicas: 2 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: grade-submission-api 11 | strategy: 12 | type: RollingUpdate 13 | rollingUpdate: 14 | maxUnavailable: 50% 15 | maxSurge: 1 ## ensure that we do not have more than 3 pod replicas 16 | template: 17 | metadata: 18 | labels: 19 | app.kubernetes.io/name: grade-submission 20 | app.kubernetes.io/component: backend 21 | app.kubernetes.io/instance: grade-submission-api 22 | spec: 23 | containers: 24 | - name: grade-submission-api 25 | image: rslim087/kubernetes-course-grade-submission-api:stateless-v3 26 | livenessProbe: 27 | httpGet: 28 | path: /healthz 29 | port: 3000 30 | initialDelaySeconds: 15 31 | periodSeconds: 5 32 | readinessProbe: 33 | httpGet: 34 | path: /readyz 35 | port: 3000 36 | initialDelaySeconds: 10 37 | periodSeconds: 5 38 | envFrom: 39 | - configMapRef: 40 | name: grade-submission-api-config 41 | - secretRef: 42 | name: grade-submission-api-secret 43 | resources: 44 | requests: 45 | memory: "128Mi" 46 | cpu: "128m" 47 | limits: 48 | memory: "128Mi" 49 | ports: 50 | - containerPort: 3000 -------------------------------------------------------------------------------- /09-section-nine/grade-submission-api/grade-submission-api-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: grade-submission-api-secret 5 | namespace: grade-submission 6 | type: Opaque 7 | data: 8 | MONGODB_USER: 'YWRtaW4=' ## assumes this is base64 encoded, and interprets as admin 9 | MONGODB_PASSWORD: 'cGFzc3dvcmQxMjM=' ## assumes this is base64 encoded, and interprets as password123 -------------------------------------------------------------------------------- /09-section-nine/grade-submission-api/grade-submission-api-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-api 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | app.kubernetes.io/instance: grade-submission-api 9 | ports: 10 | - port: 3000 11 | targetPort: 3000 -------------------------------------------------------------------------------- /09-section-nine/grade-submission-portal/grade-submission-portal-config.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: grade-submission-portal-config 5 | namespace: grade-submission 6 | data: 7 | GRADE_SERVICE_HOST: grade-submission-api -------------------------------------------------------------------------------- /09-section-nine/grade-submission-portal/grade-submission-portal-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: grade-submission-portal 5 | namespace: grade-submission 6 | spec: 7 | replicas: 1 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: grade-submission-portal 11 | template: 12 | metadata: 13 | labels: 14 | app.kubernetes.io/name: grade-submission 15 | app.kubernetes.io/component: frontend 16 | app.kubernetes.io/instance: grade-submission-portal 17 | spec: 18 | containers: 19 | - name: grade-submission-portal 20 | image: rslim087/kubernetes-course-grade-submission-portal 21 | livenessProbe: 22 | httpGet: 23 | path: /healthz 24 | port: 5001 25 | initialDelaySeconds: 15 26 | periodSeconds: 5 27 | readinessProbe: 28 | httpGet: 29 | path: /readyz 30 | port: 5001 31 | periodSeconds: 5 32 | envFrom: 33 | - configMapRef: 34 | name: grade-submission-portal-config 35 | resources: 36 | requests: 37 | memory: "128Mi" 38 | cpu: "200m" 39 | limits: 40 | memory: "128Mi" 41 | ports: 42 | - containerPort: 5001 -------------------------------------------------------------------------------- /09-section-nine/grade-submission-portal/grade-submission-portal-hpa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: autoscaling/v2 2 | kind: HorizontalPodAutoscaler 3 | metadata: 4 | name: grade-submission-portal-hpa 5 | namespace: grade-submission 6 | spec: 7 | scaleTargetRef: 8 | apiVersion: apps/v1 9 | kind: Deployment 10 | name: grade-submission-portal 11 | minReplicas: 1 12 | maxReplicas: 10 13 | metrics: 14 | - type: Resource 15 | resource: 16 | name: cpu 17 | target: 18 | type: Utilization 19 | averageUtilization: 50 -------------------------------------------------------------------------------- /09-section-nine/grade-submission-portal/grade-submission-portal-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-portal 5 | namespace: grade-submission 6 | spec: 7 | type: NodePort 8 | selector: 9 | app.kubernetes.io/instance: grade-submission-portal 10 | ports: 11 | - port: 5001 12 | targetPort: 5001 13 | nodePort: 32000 -------------------------------------------------------------------------------- /09-section-nine/mongodb/mongodb-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: mongodb-secret 5 | namespace: grade-submission 6 | type: Opaque 7 | data: 8 | MONGO_INITDB_ROOT_USERNAME: 'YWRtaW4=' ## assumes this is base64 encoded, and interprets as admin 9 | MONGO_INITDB_ROOT_PASSWORD: 'cGFzc3dvcmQxMjM=' ## assumes this is base64 encoded, and interprets as password123 -------------------------------------------------------------------------------- /09-section-nine/mongodb/mongodb-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: mongodb 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | app.kubernetes.io/instance: mongodb 9 | ports: 10 | - port: 27017 11 | targetPort: 27017 -------------------------------------------------------------------------------- /09-section-nine/mongodb/mongodb-statefulset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: StatefulSet 3 | metadata: 4 | name: mongodb 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | matchLabels: 9 | app.kubernetes.io/instance: mongodb 10 | serviceName: mongodb ## mongodb-0 mongodb-1 11 | replicas: 1 12 | template: 13 | metadata: 14 | labels: 15 | app.kubernetes.io/name: grade-submission 16 | app.kubernetes.io/component: database 17 | app.kubernetes.io/instance: mongodb 18 | spec: 19 | containers: 20 | - name: mongodb 21 | image: mongo:4.4 22 | envFrom: 23 | - secretRef: 24 | name: mongodb-secret 25 | ports: 26 | - containerPort: 27017 27 | volumeMounts: 28 | - name: mongodb-persistent-storage 29 | mountPath: /data/db 30 | volumeClaimTemplates: 31 | - metadata: 32 | name: mongodb-persistent-storage 33 | spec: 34 | accessModes: [ "ReadWriteOnce" ] 35 | resources: 36 | requests: 37 | storage: 1Gi -------------------------------------------------------------------------------- /10-section-ten/grade-submission-api/grade-submission-api-config.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: grade-submission-api-config 5 | namespace: grade-submission 6 | data: 7 | MONGODB_HOST: mongodb 8 | MONGODB_PORT: '27017' -------------------------------------------------------------------------------- /10-section-ten/grade-submission-api/grade-submission-api-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: grade-submission-api 5 | namespace: grade-submission 6 | spec: 7 | replicas: 2 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: grade-submission-api 11 | strategy: 12 | type: RollingUpdate 13 | rollingUpdate: 14 | maxUnavailable: 50% 15 | maxSurge: 1 ## ensure that we do not have more than 3 pod replicas 16 | template: 17 | metadata: 18 | labels: 19 | app.kubernetes.io/name: grade-submission 20 | app.kubernetes.io/component: backend 21 | app.kubernetes.io/instance: grade-submission-api 22 | spec: 23 | containers: 24 | - name: grade-submission-api 25 | image: rslim087/kubernetes-course-grade-submission-api:stateless-v3 26 | livenessProbe: 27 | httpGet: 28 | path: /healthz 29 | port: 3000 30 | initialDelaySeconds: 15 31 | periodSeconds: 5 32 | readinessProbe: 33 | httpGet: 34 | path: /readyz 35 | port: 3000 36 | initialDelaySeconds: 10 37 | periodSeconds: 5 38 | envFrom: 39 | - configMapRef: 40 | name: grade-submission-api-config 41 | - secretRef: 42 | name: grade-submission-api-secret 43 | resources: 44 | requests: 45 | memory: "128Mi" 46 | cpu: "128m" 47 | limits: 48 | memory: "128Mi" 49 | ports: 50 | - containerPort: 3000 -------------------------------------------------------------------------------- /10-section-ten/grade-submission-api/grade-submission-api-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: grade-submission-api-secret 5 | namespace: grade-submission 6 | type: Opaque 7 | data: 8 | MONGODB_USER: 'YWRtaW4=' ## assumes this is base64 encoded, and interprets as admin 9 | MONGODB_PASSWORD: 'cGFzc3dvcmQxMjM=' ## assumes this is base64 encoded, and interprets as password123 -------------------------------------------------------------------------------- /10-section-ten/grade-submission-api/grade-submission-api-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-api 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | app.kubernetes.io/instance: grade-submission-api 9 | ports: 10 | - port: 3000 11 | targetPort: 3000 -------------------------------------------------------------------------------- /10-section-ten/grade-submission-portal/grade-submission-portal-config.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: grade-submission-portal-config 5 | namespace: grade-submission 6 | data: 7 | GRADE_SERVICE_HOST: grade-submission-api -------------------------------------------------------------------------------- /10-section-ten/grade-submission-portal/grade-submission-portal-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: grade-submission-portal 5 | namespace: grade-submission 6 | spec: 7 | replicas: 1 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: grade-submission-portal 11 | template: 12 | metadata: 13 | labels: 14 | app.kubernetes.io/name: grade-submission 15 | app.kubernetes.io/component: frontend 16 | app.kubernetes.io/instance: grade-submission-portal 17 | spec: 18 | containers: 19 | - name: grade-submission-portal 20 | image: rslim087/kubernetes-course-grade-submission-portal 21 | livenessProbe: 22 | httpGet: 23 | path: /healthz 24 | port: 5001 25 | initialDelaySeconds: 15 26 | periodSeconds: 5 27 | readinessProbe: 28 | httpGet: 29 | path: /readyz 30 | port: 5001 31 | periodSeconds: 5 32 | envFrom: 33 | - configMapRef: 34 | name: grade-submission-portal-config 35 | resources: 36 | requests: 37 | memory: "128Mi" 38 | cpu: "200m" 39 | limits: 40 | memory: "128Mi" 41 | ports: 42 | - containerPort: 5001 -------------------------------------------------------------------------------- /10-section-ten/grade-submission-portal/grade-submission-portal-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: grade-submission-portal-ingress 5 | namespace: grade-submission 6 | spec: 7 | ingressClassName: nginx 8 | rules: 9 | - http: 10 | paths: 11 | - pathType: Prefix 12 | path: "/" 13 | backend: 14 | service: 15 | name: grade-submission-portal 16 | port: 17 | number: 5001 18 | -------------------------------------------------------------------------------- /10-section-ten/grade-submission-portal/grade-submission-portal-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: grade-submission-portal 5 | namespace: grade-submission 6 | spec: 7 | type: ClusterIP 8 | selector: 9 | app.kubernetes.io/instance: grade-submission-portal 10 | ports: 11 | - port: 5001 12 | targetPort: 5001 -------------------------------------------------------------------------------- /10-section-ten/mongodb/mongodb-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: mongodb-secret 5 | namespace: grade-submission 6 | type: Opaque 7 | data: 8 | MONGO_INITDB_ROOT_USERNAME: 'YWRtaW4=' ## assumes this is base64 encoded, and interprets as admin 9 | MONGO_INITDB_ROOT_PASSWORD: 'cGFzc3dvcmQxMjM=' ## assumes this is base64 encoded, and interprets as password123 -------------------------------------------------------------------------------- /10-section-ten/mongodb/mongodb-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: mongodb 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | app.kubernetes.io/instance: mongodb 9 | ports: 10 | - port: 27017 11 | targetPort: 27017 -------------------------------------------------------------------------------- /10-section-ten/mongodb/mongodb-statefulset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: StatefulSet 3 | metadata: 4 | name: mongodb 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | matchLabels: 9 | app.kubernetes.io/instance: mongodb 10 | serviceName: mongodb ## mongodb-0 mongodb-1 11 | replicas: 1 12 | template: 13 | metadata: 14 | labels: 15 | app.kubernetes.io/name: grade-submission 16 | app.kubernetes.io/component: database 17 | app.kubernetes.io/instance: mongodb 18 | spec: 19 | containers: 20 | - name: mongodb 21 | image: mongo:4.4 22 | envFrom: 23 | - secretRef: 24 | name: mongodb-secret 25 | ports: 26 | - containerPort: 27017 27 | volumeMounts: 28 | - name: mongodb-persistent-storage 29 | mountPath: /data/db 30 | volumeClaimTemplates: 31 | - metadata: 32 | name: mongodb-persistent-storage 33 | spec: 34 | accessModes: [ "ReadWriteOnce" ] 35 | resources: 36 | requests: 37 | storage: 1Gi -------------------------------------------------------------------------------- /11-section-eleven/grade-submission-api/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: grade-submission-api 3 | description: A Helm chart for deploying the Grade Submission API, a backend service for managing grade data. 4 | version: 1.0.1 -------------------------------------------------------------------------------- /11-section-eleven/grade-submission-api/grade-submission-api-1.0.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rslim087a/kubernetes-course/9a8bacdd62d0cbff62acb37008e8181330c5a56b/11-section-eleven/grade-submission-api/grade-submission-api-1.0.1.tgz -------------------------------------------------------------------------------- /11-section-eleven/grade-submission-api/templates/grade-submission-api-config.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ .Values.microservice.name }}-config 5 | namespace: {{ .Values.microservice.namespace }} 6 | data: 7 | MONGODB_HOST: {{ .Values.env.MONGODB_HOST }} 8 | MONGODB_PORT: {{ .Values.env.MONGODB_PORT | quote }} -------------------------------------------------------------------------------- /11-section-eleven/grade-submission-api/templates/grade-submission-api-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: {{ .Values.microservice.name }} 5 | namespace: {{ .Values.microservice.namespace }} 6 | spec: 7 | replicas: {{ .Values.microservice.replicas }} 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 11 | strategy: 12 | type: RollingUpdate 13 | rollingUpdate: 14 | maxUnavailable: 50% 15 | maxSurge: 1 16 | template: 17 | metadata: 18 | labels: 19 | app.kubernetes.io/name: grade-submission 20 | app.kubernetes.io/component: backend 21 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 22 | spec: 23 | containers: 24 | - name: {{ .Values.microservice.name }} 25 | image: {{ .Values.workload.image }} 26 | livenessProbe: 27 | httpGet: 28 | path: /healthz 29 | port: {{ .Values.workload.port }} 30 | initialDelaySeconds: {{ .Values.workload.livenessDelay }} 31 | periodSeconds: 5 32 | readinessProbe: 33 | httpGet: 34 | path: /readyz 35 | port: {{ .Values.workload.port }} 36 | periodSeconds: 5 37 | envFrom: 38 | - configMapRef: 39 | name: {{ .Values.microservice.name }}-config 40 | - secretRef: 41 | name: {{ .Values.microservice.name }}-secret 42 | resources: 43 | requests: 44 | memory: {{ .Values.workload.resources.memory }} 45 | cpu: {{ .Values.workload.resources.cpu }} 46 | limits: 47 | memory: {{ .Values.workload.resources.memory }} 48 | ports: 49 | - name: http 50 | containerPort: {{ .Values.workload.port }} -------------------------------------------------------------------------------- /11-section-eleven/grade-submission-api/templates/grade-submission-api-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: {{ .Values.microservice.name }}-secret 5 | namespace: {{ .Values.microservice.namespace }} 6 | type: Opaque 7 | data: 8 | MONGODB_USER: {{ .Values.secrets.MONGODB_USER }} ## assumes this is base64 encoded, and interprets as admin 9 | MONGODB_PASSWORD: {{ .Values.secrets.MONGODB_PASSWORD }} ## assumes this is base64 encoded, and interprets as password123 -------------------------------------------------------------------------------- /11-section-eleven/grade-submission-api/templates/grade-submission-api-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ .Values.microservice.name }} 5 | namespace: {{ .Values.microservice.namespace }} 6 | spec: 7 | selector: 8 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 9 | ports: 10 | - port: {{ .Values.workload.port }} 11 | targetPort: {{ .Values.workload.port }} -------------------------------------------------------------------------------- /11-section-eleven/grade-submission-api/values.yaml: -------------------------------------------------------------------------------- 1 | microservice: ## general service details 2 | name: grade-submission-api 3 | namespace: grade-submission 4 | replicas: 2 5 | 6 | workload: ## container specific configurations 7 | image: rslim087/kubernetes-course-grade-submission-api:stateless-v3 8 | port: 3000 9 | resources: 10 | memory: "128Mi" 11 | cpu: "128m" 12 | livenessDelay: 15 13 | 14 | env: ## environment variables 15 | MONGODB_HOST: mongodb 16 | MONGODB_PORT: "27017" 17 | 18 | secrets: ## sensitive data 19 | MONGODB_USER: 'YWRtaW4=' 20 | MONGODB_PASSWORD: 'cGFzc3dvcmQxMjM=' -------------------------------------------------------------------------------- /11-section-eleven/grade-submission-portal/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: grade-submission-portal 3 | description: A Helm chart for deploying the Grade Submission Portal, a frontend service for managing student grade submissions in a Kubernetes environment. 4 | version: 1.0.0 -------------------------------------------------------------------------------- /11-section-eleven/grade-submission-portal/grade-submission-portal-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rslim087a/kubernetes-course/9a8bacdd62d0cbff62acb37008e8181330c5a56b/11-section-eleven/grade-submission-portal/grade-submission-portal-1.0.0.tgz -------------------------------------------------------------------------------- /11-section-eleven/grade-submission-portal/templates/grade-submission-portal-config.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ .Values.microservice.name }}-config 5 | namespace: {{ .Values.microservice.namespace }} 6 | data: 7 | GRADE_SERVICE_HOST: {{ .Values.env.GRADE_SERVICE_HOST }} -------------------------------------------------------------------------------- /11-section-eleven/grade-submission-portal/templates/grade-submission-portal-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: {{ .Values.microservice.name }} 5 | namespace: {{ .Values.microservice.namespace }} 6 | spec: 7 | replicas: 1 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 11 | template: 12 | metadata: 13 | labels: 14 | app.kubernetes.io/name: grade-submission 15 | app.kubernetes.io/component: frontend 16 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 17 | spec: 18 | containers: 19 | - name: {{ .Values.microservice.name }} 20 | image: {{ .Values.workload.image }} 21 | livenessProbe: 22 | httpGet: 23 | path: /healthz 24 | port: http 25 | initialDelaySeconds: {{ .Values.workload.livenessDelay }} 26 | periodSeconds: 5 27 | readinessProbe: 28 | httpGet: 29 | path: /readyz 30 | port: http 31 | periodSeconds: 5 32 | envFrom: 33 | - configMapRef: 34 | name: {{ .Values.microservice.name }}-config 35 | resources: 36 | requests: 37 | memory: {{ .Values.workload.resources.memory }} 38 | cpu: {{ .Values.workload.resources.cpu }} 39 | limits: 40 | memory: {{ .Values.workload.resources.memory }} 41 | ports: 42 | - name: http 43 | containerPort: {{ .Values.workload.port }} -------------------------------------------------------------------------------- /11-section-eleven/grade-submission-portal/templates/grade-submission-portal-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: {{ .Values.microservice.name }}-ingress 5 | namespace: {{ .Values.microservice.namespace }} 6 | spec: 7 | ingressClassName: nginx 8 | rules: 9 | - http: 10 | paths: 11 | - pathType: Prefix 12 | path: "/" 13 | backend: 14 | service: 15 | name: {{ .Values.microservice.name }} 16 | port: 17 | number: {{ .Values.workload.port }} 18 | -------------------------------------------------------------------------------- /11-section-eleven/grade-submission-portal/templates/grade-submission-portal-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ .Values.microservice.name }} 5 | namespace: {{ .Values.microservice.namespace }} 6 | spec: 7 | type: ClusterIP 8 | selector: 9 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 10 | ports: 11 | - port: {{ .Values.workload.port }} 12 | targetPort: {{ .Values.workload.port }} -------------------------------------------------------------------------------- /11-section-eleven/grade-submission-portal/values.yaml: -------------------------------------------------------------------------------- 1 | microservice: ## general service details 2 | name: grade-submission-portal 3 | namespace: grade-submission 4 | replicas: 1 5 | 6 | workload: ## container specific configurations 7 | image: rslim087/kubernetes-course-grade-submission-portal 8 | port: 5001 9 | resources: 10 | memory: "128Mi" 11 | cpu: "200m" 12 | livenessDelay: 15 13 | 14 | env: ## environment variables 15 | GRADE_SERVICE_HOST: grade-submission-api 16 | 17 | 18 | ## upgrade to include host for ingress -------------------------------------------------------------------------------- /11-section-eleven/mongodb/mongodb-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: mongodb-secret 5 | namespace: grade-submission 6 | type: Opaque 7 | data: 8 | MONGO_INITDB_ROOT_USERNAME: 'YWRtaW4=' ## assumes this is base64 encoded, and interprets as admin 9 | MONGO_INITDB_ROOT_PASSWORD: 'cGFzc3dvcmQxMjM=' ## assumes this is base64 encoded, and interprets as password123 -------------------------------------------------------------------------------- /11-section-eleven/mongodb/mongodb-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: mongodb 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | app.kubernetes.io/instance: mongodb 9 | ports: 10 | - port: 27017 11 | targetPort: 27017 -------------------------------------------------------------------------------- /11-section-eleven/mongodb/mongodb-statefulset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: StatefulSet 3 | metadata: 4 | name: mongodb 5 | namespace: grade-submission 6 | spec: 7 | selector: 8 | matchLabels: 9 | app.kubernetes.io/instance: mongodb 10 | serviceName: mongodb ## mongodb-0 mongodb-1 11 | replicas: 1 12 | template: 13 | metadata: 14 | labels: 15 | app.kubernetes.io/name: grade-submission 16 | app.kubernetes.io/component: database 17 | app.kubernetes.io/instance: mongodb 18 | spec: 19 | containers: 20 | - name: mongodb 21 | image: mongo:4.4 22 | envFrom: 23 | - secretRef: 24 | name: mongodb-secret 25 | ports: 26 | - containerPort: 27017 27 | volumeMounts: 28 | - name: mongodb-persistent-storage 29 | mountPath: /data/db 30 | volumeClaimTemplates: 31 | - metadata: 32 | name: mongodb-persistent-storage 33 | spec: 34 | accessModes: [ "ReadWriteOnce" ] 35 | resources: 36 | requests: 37 | storage: 1Gi -------------------------------------------------------------------------------- /12-section-twelve/grade-submission-api/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: grade-submission-api 3 | description: A Helm chart for deploying the Grade Submission API, a backend service for managing grade data. 4 | version: 1.0.3 -------------------------------------------------------------------------------- /12-section-twelve/grade-submission-api/templates/grade-submission-api-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: {{ .Values.microservice.name }} 5 | namespace: {{ .Values.microservice.namespace }} 6 | spec: 7 | replicas: {{ .Values.microservice.replicas }} 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 11 | strategy: 12 | type: RollingUpdate 13 | rollingUpdate: 14 | maxUnavailable: 50% 15 | maxSurge: 1 16 | template: 17 | metadata: 18 | labels: 19 | app.kubernetes.io/name: grade-submission 20 | app.kubernetes.io/component: backend 21 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 22 | spec: 23 | containers: 24 | - name: {{ .Values.microservice.name }} 25 | image: {{ .Values.workload.image }} 26 | livenessProbe: 27 | httpGet: 28 | path: /healthz 29 | port: {{ .Values.workload.port }} 30 | initialDelaySeconds: {{ .Values.workload.livenessDelay }} 31 | periodSeconds: 5 32 | readinessProbe: 33 | httpGet: 34 | path: /readyz 35 | port: {{ .Values.workload.port }} 36 | periodSeconds: 5 37 | envFrom: 38 | - secretRef: 39 | name: {{ .Values.microservice.name }}-secret 40 | resources: 41 | requests: 42 | memory: {{ .Values.workload.resources.memory }} 43 | cpu: {{ .Values.workload.resources.cpu }} 44 | limits: 45 | memory: {{ .Values.workload.resources.memory }} 46 | ports: 47 | - name: http 48 | containerPort: {{ .Values.workload.port }} -------------------------------------------------------------------------------- /12-section-twelve/grade-submission-api/templates/grade-submission-api-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: {{ .Values.microservice.name }}-secret 5 | namespace: {{ .Values.microservice.namespace }} 6 | type: Opaque 7 | stringData: 8 | MONGODB_URI: {{ .Values.secrets.MONGODB_URI }} -------------------------------------------------------------------------------- /12-section-twelve/grade-submission-api/templates/grade-submission-api-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ .Values.microservice.name }} 5 | namespace: {{ .Values.microservice.namespace }} 6 | spec: 7 | selector: 8 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 9 | ports: 10 | - port: {{ .Values.workload.port }} 11 | targetPort: {{ .Values.workload.port }} -------------------------------------------------------------------------------- /12-section-twelve/grade-submission-api/values.yaml: -------------------------------------------------------------------------------- 1 | microservice: ## general service details 2 | name: grade-submission-api 3 | namespace: grade-submission 4 | replicas: 2 5 | 6 | workload: ## container specific configurations 7 | image: rslim087/kubernetes-course-grade-submission-api:stateless-v4 8 | port: 3000 9 | resources: 10 | memory: "128Mi" 11 | cpu: "128m" 12 | livenessDelay: 15 13 | 14 | secrets: ## sensitive data 15 | MONGODB_URI: 'mongodb://mongodb.mongodb.svc.cluster.local:27017' -------------------------------------------------------------------------------- /12-section-twelve/grade-submission-portal/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: grade-submission-portal 3 | description: A Helm chart for deploying the Grade Submission Portal, a frontend service for managing student grade submissions in a Kubernetes environment. 4 | version: 1.0.0 -------------------------------------------------------------------------------- /12-section-twelve/grade-submission-portal/templates/grade-submission-portal-config.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ .Values.microservice.name }}-config 5 | namespace: {{ .Values.microservice.namespace }} 6 | data: 7 | GRADE_SERVICE_HOST: {{ .Values.env.GRADE_SERVICE_HOST }} -------------------------------------------------------------------------------- /12-section-twelve/grade-submission-portal/templates/grade-submission-portal-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: {{ .Values.microservice.name }} 5 | namespace: {{ .Values.microservice.namespace }} 6 | spec: 7 | replicas: 1 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 11 | template: 12 | metadata: 13 | labels: 14 | app.kubernetes.io/name: grade-submission 15 | app.kubernetes.io/component: frontend 16 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 17 | spec: 18 | containers: 19 | - name: {{ .Values.microservice.name }} 20 | image: {{ .Values.workload.image }} 21 | livenessProbe: 22 | httpGet: 23 | path: /healthz 24 | port: http 25 | initialDelaySeconds: {{ .Values.workload.livenessDelay }} 26 | periodSeconds: 5 27 | readinessProbe: 28 | httpGet: 29 | path: /readyz 30 | port: http 31 | periodSeconds: 5 32 | envFrom: 33 | - configMapRef: 34 | name: {{ .Values.microservice.name }}-config 35 | resources: 36 | requests: 37 | memory: {{ .Values.workload.resources.memory }} 38 | cpu: {{ .Values.workload.resources.cpu }} 39 | limits: 40 | memory: {{ .Values.workload.resources.memory }} 41 | ports: 42 | - name: http 43 | containerPort: {{ .Values.workload.port }} -------------------------------------------------------------------------------- /12-section-twelve/grade-submission-portal/templates/grade-submission-portal-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: {{ .Values.microservice.name }}-ingress 5 | namespace: {{ .Values.microservice.namespace }} 6 | spec: 7 | ingressClassName: nginx 8 | rules: 9 | - http: 10 | paths: 11 | - pathType: Prefix 12 | path: "/" 13 | backend: 14 | service: 15 | name: {{ .Values.microservice.name }} 16 | port: 17 | number: {{ .Values.workload.port }} 18 | -------------------------------------------------------------------------------- /12-section-twelve/grade-submission-portal/templates/grade-submission-portal-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ .Values.microservice.name }} 5 | namespace: {{ .Values.microservice.namespace }} 6 | spec: 7 | type: ClusterIP 8 | selector: 9 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 10 | ports: 11 | - port: {{ .Values.workload.port }} 12 | targetPort: {{ .Values.workload.port }} -------------------------------------------------------------------------------- /12-section-twelve/grade-submission-portal/values.yaml: -------------------------------------------------------------------------------- 1 | microservice: ## general service details 2 | name: grade-submission-portal 3 | namespace: grade-submission 4 | replicas: 1 5 | 6 | workload: ## container specific configurations 7 | image: rslim087/kubernetes-course-grade-submission-portal 8 | port: 5001 9 | resources: 10 | memory: "128Mi" 11 | cpu: "200m" 12 | livenessDelay: 15 13 | 14 | env: ## environment variables 15 | GRADE_SERVICE_HOST: grade-submission-api 16 | 17 | 18 | ## upgrade to include host for ingress -------------------------------------------------------------------------------- /12-section-twelve/mongodb/values.yaml: -------------------------------------------------------------------------------- 1 | useStatefulSet: true 2 | 3 | auth: 4 | enabled: false 5 | 6 | image: 7 | registry: docker.io 8 | repository: mongo 9 | tag: 6.0.4-jammy 10 | 11 | persistence: 12 | mountPath: /data/db -------------------------------------------------------------------------------- /13-section-thirteen/grade-submission-api/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: grade-submission-api 3 | description: A Helm chart for deploying the Grade Submission API, a backend service for managing grade data. 4 | version: 1.0.3 -------------------------------------------------------------------------------- /13-section-thirteen/grade-submission-api/templates/grade-submission-api-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: {{ .Values.microservice.name }} 5 | namespace: {{ .Values.microservice.namespace }} 6 | spec: 7 | replicas: {{ .Values.microservice.replicas }} 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 11 | strategy: 12 | type: RollingUpdate 13 | rollingUpdate: 14 | maxUnavailable: 50% 15 | maxSurge: 1 16 | template: 17 | metadata: 18 | labels: 19 | app.kubernetes.io/name: grade-submission 20 | app.kubernetes.io/component: backend 21 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 22 | spec: 23 | containers: 24 | - name: {{ .Values.microservice.name }} 25 | image: {{ .Values.workload.image }} 26 | livenessProbe: 27 | httpGet: 28 | path: /healthz 29 | port: {{ .Values.workload.port }} 30 | initialDelaySeconds: {{ .Values.workload.livenessDelay }} 31 | periodSeconds: 5 32 | readinessProbe: 33 | httpGet: 34 | path: /readyz 35 | port: {{ .Values.workload.port }} 36 | periodSeconds: 5 37 | envFrom: 38 | - secretRef: 39 | name: {{ .Values.microservice.name }}-secret 40 | resources: 41 | requests: 42 | memory: {{ .Values.workload.resources.memory }} 43 | cpu: {{ .Values.workload.resources.cpu }} 44 | limits: 45 | memory: {{ .Values.workload.resources.memory }} 46 | ports: 47 | - name: http 48 | containerPort: {{ .Values.workload.port }} -------------------------------------------------------------------------------- /13-section-thirteen/grade-submission-api/templates/grade-submission-api-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: {{ .Values.microservice.name }}-secret 5 | namespace: {{ .Values.microservice.namespace }} 6 | type: Opaque 7 | stringData: 8 | MONGODB_URI: {{ .Values.secrets.MONGODB_URI }} -------------------------------------------------------------------------------- /13-section-thirteen/grade-submission-api/templates/grade-submission-api-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ .Values.microservice.name }} 5 | namespace: {{ .Values.microservice.namespace }} 6 | spec: 7 | selector: 8 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 9 | ports: 10 | - port: {{ .Values.workload.port }} 11 | targetPort: {{ .Values.workload.port }} -------------------------------------------------------------------------------- /13-section-thirteen/grade-submission-api/values.yaml: -------------------------------------------------------------------------------- 1 | microservice: ## general service details 2 | name: grade-submission-api 3 | namespace: grade-submission 4 | replicas: 2 5 | 6 | workload: ## container specific configurations 7 | image: rslim087/kubernetes-course-grade-submission-api:stateless-v4 8 | port: 3000 9 | resources: 10 | memory: "128Mi" 11 | cpu: "128m" 12 | livenessDelay: 15 13 | 14 | secrets: ## sensitive data 15 | MONGODB_URI: 'mongodb://user:password123@mongodb-grade-submission-svc.mongodb.svc.cluster.local:27017/grades' -------------------------------------------------------------------------------- /13-section-thirteen/grade-submission-portal/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: grade-submission-portal 3 | description: A Helm chart for deploying the Grade Submission Portal, a frontend service for managing student grade submissions in a Kubernetes environment. 4 | version: 1.0.0 -------------------------------------------------------------------------------- /13-section-thirteen/grade-submission-portal/templates/grade-submission-portal-config.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ .Values.microservice.name }}-config 5 | namespace: {{ .Values.microservice.namespace }} 6 | data: 7 | GRADE_SERVICE_HOST: {{ .Values.env.GRADE_SERVICE_HOST }} -------------------------------------------------------------------------------- /13-section-thirteen/grade-submission-portal/templates/grade-submission-portal-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: {{ .Values.microservice.name }} 5 | namespace: {{ .Values.microservice.namespace }} 6 | spec: 7 | replicas: 1 8 | selector: 9 | matchLabels: 10 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 11 | template: 12 | metadata: 13 | labels: 14 | app.kubernetes.io/name: grade-submission 15 | app.kubernetes.io/component: frontend 16 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 17 | spec: 18 | containers: 19 | - name: {{ .Values.microservice.name }} 20 | image: {{ .Values.workload.image }} 21 | livenessProbe: 22 | httpGet: 23 | path: /healthz 24 | port: http 25 | initialDelaySeconds: {{ .Values.workload.livenessDelay }} 26 | periodSeconds: 5 27 | readinessProbe: 28 | httpGet: 29 | path: /readyz 30 | port: http 31 | periodSeconds: 5 32 | envFrom: 33 | - configMapRef: 34 | name: {{ .Values.microservice.name }}-config 35 | resources: 36 | requests: 37 | memory: {{ .Values.workload.resources.memory }} 38 | cpu: {{ .Values.workload.resources.cpu }} 39 | limits: 40 | memory: {{ .Values.workload.resources.memory }} 41 | ports: 42 | - name: http 43 | containerPort: {{ .Values.workload.port }} -------------------------------------------------------------------------------- /13-section-thirteen/grade-submission-portal/templates/grade-submission-portal-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: {{ .Values.microservice.name }}-ingress 5 | namespace: {{ .Values.microservice.namespace }} 6 | spec: 7 | ingressClassName: nginx 8 | rules: 9 | - http: 10 | paths: 11 | - pathType: Prefix 12 | path: "/" 13 | backend: 14 | service: 15 | name: {{ .Values.microservice.name }} 16 | port: 17 | number: {{ .Values.workload.port }} 18 | -------------------------------------------------------------------------------- /13-section-thirteen/grade-submission-portal/templates/grade-submission-portal-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ .Values.microservice.name }} 5 | namespace: {{ .Values.microservice.namespace }} 6 | spec: 7 | type: ClusterIP 8 | selector: 9 | app.kubernetes.io/instance: {{ .Values.microservice.name }} 10 | ports: 11 | - port: {{ .Values.workload.port }} 12 | targetPort: {{ .Values.workload.port }} -------------------------------------------------------------------------------- /13-section-thirteen/grade-submission-portal/values.yaml: -------------------------------------------------------------------------------- 1 | microservice: ## general service details 2 | name: grade-submission-portal 3 | namespace: grade-submission 4 | replicas: 1 5 | 6 | workload: ## container specific configurations 7 | image: rslim087/kubernetes-course-grade-submission-portal 8 | port: 5001 9 | resources: 10 | memory: "128Mi" 11 | cpu: "200m" 12 | livenessDelay: 15 13 | 14 | env: ## environment variables 15 | GRADE_SERVICE_HOST: grade-submission-api 16 | 17 | 18 | ## upgrade to include host for ingress -------------------------------------------------------------------------------- /13-section-thirteen/mongodb/mongodb-grade-submission.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: mongodbcommunity.mongodb.com/v1 2 | kind: MongoDBCommunity 3 | metadata: 4 | name: mongodb-grade-submission 5 | namespace: mongodb 6 | spec: 7 | members: 1 8 | type: ReplicaSet 9 | version: "6.0.5" 10 | security: 11 | authentication: 12 | modes: ["SCRAM"] 13 | users: 14 | - name: user 15 | db: grades 16 | passwordSecretRef: 17 | name: mongodb-user-password 18 | roles: 19 | - name: readWrite 20 | db: grades 21 | scramCredentialsSecretName: mongodb-grade-submission 22 | 23 | statefulSet: 24 | spec: 25 | template: 26 | spec: 27 | containers: 28 | - name: mongodb-agent 29 | image: "quay.io/mongodb/mongodb-agent-ubi:12.0.32.7857-1" -------------------------------------------------------------------------------- /13-section-thirteen/mongodb/mongodb-user-password.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: mongodb-user-password 5 | namespace: mongodb 6 | type: Opaque 7 | data: 8 | password: 'cGFzc3dvcmQxMjM=' -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Become a Cloud and DevOps Engineer 2 | 3 | Learn every tool that matters: https://rayanslim.com 4 | --------------------------------------------------------------------------------