diff --git a/Act-3/argocd-test-app.yaml b/Act-3/argocd-test-app.yaml index a4d89a9..7cb7c12 100644 --- a/Act-3/argocd-test-app.yaml +++ b/Act-3/argocd-test-app.yaml @@ -10,10 +10,10 @@ metadata: spec: project: default source: - # Using a public example repo that will fail + # Deploy the healthy workshop manifest; keep the broken manifest for exercises. repoURL: https://github.com/microsoftgbb/agentic-platform-engineering.git targetRevision: main - path: Act-3/argocd/apps + path: Act-3/argocd/deploy destination: server: https://kubernetes.default.svc namespace: default diff --git a/Act-3/argocd/deploy/aks-store-all-in-one.yaml b/Act-3/argocd/deploy/aks-store-all-in-one.yaml new file mode 100644 index 0000000..dcf332b --- /dev/null +++ b/Act-3/argocd/deploy/aks-store-all-in-one.yaml @@ -0,0 +1,627 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: mongodb +spec: + serviceName: mongodb + replicas: 1 + selector: + matchLabels: + app: mongodb + template: + metadata: + labels: + app: mongodb + spec: + nodeSelector: + "kubernetes.io/os": linux + containers: + - name: mongodb + image: mcr.microsoft.com/mirror/docker/library/mongo:4.2 + ports: + - containerPort: 27017 + name: mongodb + resources: + requests: + cpu: 5m + memory: 75Mi + limits: + cpu: 25m + memory: 1024Mi + livenessProbe: + exec: + command: + - mongo + - "--eval" + - db.runCommand('ping').ok + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 3 + readinessProbe: + exec: + command: + - mongo + - "--eval" + - db.runCommand('ping').ok + initialDelaySeconds: 5 + periodSeconds: 5 + timeoutSeconds: 5 + failureThreshold: 3 +--- +apiVersion: v1 +kind: Service +metadata: + name: mongodb +spec: + ports: + - port: 27017 + selector: + app: mongodb + type: ClusterIP +--- +apiVersion: v1 +data: + rabbitmq_enabled_plugins: | + [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0]. +kind: ConfigMap +metadata: + name: rabbitmq-enabled-plugins +--- +apiVersion: v1 +kind: Secret +metadata: + name: rabbitmq-secrets +data: + RABBITMQ_DEFAULT_USER: dXNlcm5hbWU= + RABBITMQ_DEFAULT_PASS: cGFzc3dvcmQ= +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: rabbitmq +spec: + serviceName: rabbitmq + replicas: 1 + selector: + matchLabels: + app: rabbitmq + template: + metadata: + labels: + app: rabbitmq + spec: + nodeSelector: + "kubernetes.io/os": linux + containers: + - name: rabbitmq + image: mcr.microsoft.com/azurelinux/base/rabbitmq-server:3.13 + ports: + - containerPort: 5672 + name: rabbitmq-amqp + - containerPort: 15672 + name: rabbitmq-http + envFrom: + - secretRef: + name: rabbitmq-secrets + resources: + requests: + cpu: 10m + memory: 128Mi + limits: + cpu: 250m + memory: 256Mi + startupProbe: + tcpSocket: + port: 5672 + failureThreshold: 30 + initialDelaySeconds: 10 + periodSeconds: 10 + readinessProbe: + tcpSocket: + port: 5672 + failureThreshold: 3 + initialDelaySeconds: 5 + periodSeconds: 5 + livenessProbe: + tcpSocket: + port: 5672 + failureThreshold: 3 + initialDelaySeconds: 30 + periodSeconds: 10 + volumeMounts: + - name: rabbitmq-enabled-plugins + mountPath: /etc/rabbitmq/enabled_plugins + subPath: enabled_plugins + volumes: + - name: rabbitmq-enabled-plugins + configMap: + name: rabbitmq-enabled-plugins + items: + - key: rabbitmq_enabled_plugins + path: enabled_plugins +--- +apiVersion: v1 +kind: Service +metadata: + name: rabbitmq +spec: + selector: + app: rabbitmq + ports: + - name: rabbitmq-amqp + port: 5672 + targetPort: 5672 + - name: rabbitmq-http + port: 15672 + targetPort: 15672 + type: ClusterIP +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: order-service-configs +data: + ORDER_QUEUE_PORT: "5672" + ORDER_QUEUE_HOSTNAME: "rabbitmq" + ORDER_QUEUE_NAME: "orders" + FASTIFY_ADDRESS: "0.0.0.0" +--- +apiVersion: v1 +kind: Secret +metadata: + name: order-service-secrets +data: + ORDER_QUEUE_USERNAME: dXNlcm5hbWU= + ORDER_QUEUE_PASSWORD: cGFzc3dvcmQ= +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: order-service +spec: + replicas: 1 + selector: + matchLabels: + app: order-service + template: + metadata: + labels: + app: order-service + spec: + nodeSelector: + "kubernetes.io/os": linux + containers: + - name: order-service + image: ghcr.io/azure-samples/aks-store-demo/order-service:2.1.0 + ports: + - containerPort: 3000 + envFrom: + - configMapRef: + name: order-service-configs + - secretRef: + name: order-service-secrets + resources: + requests: + cpu: 1m + memory: 50Mi + limits: + cpu: 100m + memory: 256Mi + startupProbe: + httpGet: + path: /health + port: 3000 + failureThreshold: 5 + initialDelaySeconds: 20 + periodSeconds: 10 + readinessProbe: + httpGet: + path: /health + port: 3000 + failureThreshold: 3 + initialDelaySeconds: 3 + periodSeconds: 5 + livenessProbe: + httpGet: + path: /health + port: 3000 + failureThreshold: 5 + initialDelaySeconds: 3 + periodSeconds: 3 + initContainers: + - name: wait-for-rabbitmq + image: busybox:1.37.0 + command: + - sh + - -c + - until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done; + resources: + requests: + cpu: 1m + memory: 50Mi + limits: + cpu: 100m + memory: 256Mi +--- +apiVersion: v1 +kind: Service +metadata: + name: order-service +spec: + type: ClusterIP + ports: + - port: 3000 + targetPort: 3000 + selector: + app: order-service +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: makeline-service +spec: + replicas: 1 + selector: + matchLabels: + app: makeline-service + template: + metadata: + labels: + app: makeline-service + spec: + nodeSelector: + "kubernetes.io/os": linux + containers: + - name: makeline-service + image: ghcr.io/azure-samples/aks-store-demo/makeline-service:2.1.0 + ports: + - containerPort: 3001 + env: + - name: ORDER_QUEUE_URI + value: amqp://rabbitmq:5672 + - name: ORDER_QUEUE_USERNAME + valueFrom: + secretKeyRef: + name: rabbitmq-secrets + key: RABBITMQ_DEFAULT_USER + - name: ORDER_QUEUE_PASSWORD + valueFrom: + secretKeyRef: + name: rabbitmq-secrets + key: RABBITMQ_DEFAULT_PASS + - name: ORDER_QUEUE_NAME + value: orders + - name: ORDER_DB_URI + value: mongodb://mongodb:27017 + - name: ORDER_DB_NAME + value: orderdb + - name: ORDER_DB_COLLECTION_NAME + value: orders + resources: + requests: + cpu: 1m + memory: 6Mi + limits: + cpu: 5m + memory: 20Mi + startupProbe: + httpGet: + path: /health + port: 3001 + failureThreshold: 5 + initialDelaySeconds: 20 + periodSeconds: 10 + readinessProbe: + httpGet: + path: /health + port: 3001 + failureThreshold: 3 + initialDelaySeconds: 3 + periodSeconds: 5 + livenessProbe: + httpGet: + path: /health + port: 3001 + failureThreshold: 5 + initialDelaySeconds: 3 + periodSeconds: 3 +--- +apiVersion: v1 +kind: Service +metadata: + name: makeline-service +spec: + type: ClusterIP + ports: + - port: 3001 + targetPort: 3001 + selector: + app: makeline-service +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: product-service +spec: + replicas: 1 + selector: + matchLabels: + app: product-service + template: + metadata: + labels: + app: product-service + spec: + nodeSelector: + "kubernetes.io/os": linux + containers: + - name: product-service + image: ghcr.io/azure-samples/aks-store-demo/product-service:2.1.0 + ports: + - containerPort: 3002 + env: + - name: AI_SERVICE_URL + value: http://ai-service:5001/ + resources: + requests: + cpu: 1m + memory: 1Mi + limits: + cpu: 2m + memory: 20Mi + startupProbe: + httpGet: + path: /health + port: 3002 + failureThreshold: 3 + initialDelaySeconds: 5 + periodSeconds: 5 + readinessProbe: + httpGet: + path: /health + port: 3002 + failureThreshold: 3 + initialDelaySeconds: 3 + periodSeconds: 3 + livenessProbe: + httpGet: + path: /health + port: 3002 + failureThreshold: 5 + initialDelaySeconds: 3 + periodSeconds: 3 +--- +apiVersion: v1 +kind: Service +metadata: + name: product-service +spec: + type: ClusterIP + ports: + - port: 3002 + targetPort: 3002 + selector: + app: product-service +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: store-front +spec: + replicas: 1 + selector: + matchLabels: + app: store-front + template: + metadata: + labels: + app: store-front + spec: + nodeSelector: + "kubernetes.io/os": linux + containers: + - name: store-front + image: ghcr.io/azure-samples/aks-store-demo/store-front:2.1.0 + ports: + - containerPort: 8080 + name: store-front + resources: + requests: + cpu: 1m + memory: 200Mi + limits: + cpu: 1000m + memory: 512Mi + startupProbe: + httpGet: + path: /health + port: 8080 + failureThreshold: 3 + initialDelaySeconds: 5 + periodSeconds: 5 + readinessProbe: + httpGet: + path: /health + port: 8080 + failureThreshold: 3 + initialDelaySeconds: 3 + periodSeconds: 3 + livenessProbe: + httpGet: + path: /health + port: 8080 + failureThreshold: 5 + initialDelaySeconds: 3 + periodSeconds: 3 +--- +apiVersion: v1 +kind: Service +metadata: + name: store-front +spec: + ports: + - port: 80 + targetPort: 8080 + selector: + app: store-front + type: LoadBalancer +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: store-admin +spec: + replicas: 1 + selector: + matchLabels: + app: store-admin + template: + metadata: + labels: + app: store-admin + spec: + nodeSelector: + "kubernetes.io/os": linux + containers: + - name: store-admin + image: ghcr.io/azure-samples/aks-store-demo/store-admin:2.1.0 + ports: + - containerPort: 8081 + name: store-admin + resources: + requests: + cpu: 1m + memory: 200Mi + limits: + cpu: 1000m + memory: 512Mi + startupProbe: + httpGet: + path: /health + port: 8081 + failureThreshold: 3 + initialDelaySeconds: 5 + periodSeconds: 5 + readinessProbe: + httpGet: + path: /health + port: 8081 + failureThreshold: 3 + initialDelaySeconds: 3 + periodSeconds: 5 + livenessProbe: + httpGet: + path: /health + port: 8081 + failureThreshold: 5 + initialDelaySeconds: 3 + periodSeconds: 3 +--- +apiVersion: v1 +kind: Service +metadata: + name: store-admin +spec: + ports: + - port: 80 + targetPort: 8081 + selector: + app: store-admin + type: LoadBalancer +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: virtual-customer +spec: + replicas: 1 + selector: + matchLabels: + app: virtual-customer + template: + metadata: + labels: + app: virtual-customer + spec: + nodeSelector: + "kubernetes.io/os": linux + containers: + - name: virtual-customer + image: ghcr.io/azure-samples/aks-store-demo/virtual-customer:2.1.0 + env: + - name: ORDER_SERVICE_URL + value: http://order-service:3000/ + - name: ORDERS_PER_HOUR + value: "100" + resources: + requests: + cpu: 1m + memory: 1Mi + limits: + cpu: 2m + memory: 20Mi + readinessProbe: + exec: + command: + - cat + - /proc/1/status + failureThreshold: 3 + initialDelaySeconds: 3 + periodSeconds: 5 + livenessProbe: + exec: + command: + - cat + - /proc/1/status + failureThreshold: 5 + initialDelaySeconds: 10 + periodSeconds: 10 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: virtual-worker +spec: + replicas: 1 + selector: + matchLabels: + app: virtual-worker + template: + metadata: + labels: + app: virtual-worker + spec: + nodeSelector: + "kubernetes.io/os": linux + containers: + - name: virtual-worker + image: ghcr.io/azure-samples/aks-store-demo/virtual-worker:2.1.0 + env: + - name: MAKELINE_SERVICE_URL + value: http://makeline-service:3001 + - name: ORDERS_PER_HOUR + value: "100" + resources: + requests: + cpu: 1m + memory: 1Mi + limits: + cpu: 2m + memory: 20Mi + readinessProbe: + exec: + command: + - cat + - /proc/1/status + failureThreshold: 3 + initialDelaySeconds: 3 + periodSeconds: 5 + livenessProbe: + exec: + command: + - cat + - /proc/1/status + failureThreshold: 5 + initialDelaySeconds: 10 + periodSeconds: 10