├── user └── manifest.yaml ├── cart └── manifest.yaml ├── shipping └── manifest.yaml ├── catalogue └── manifest.yaml ├── payment └── manifest.yaml ├── redis └── manifest.yaml ├── mongodb └── manifest.yaml ├── rabbitmq └── manifest.yaml ├── mysql └── manifest.yaml └── web └── manifest.yaml /user/manifest.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: user-config 6 | data: 7 | REDIS_HOST: "redis" 8 | MONGO_URL: "mongodb://mongodb:27017/catalogue" 9 | --- 10 | apiVersion: apps/v1 11 | kind: Deployment 12 | metadata: 13 | name: user 14 | namespace: roboshop 15 | labels: 16 | name: user 17 | tier: app 18 | spec: 19 | replicas: 1 20 | selector: 21 | matchLabels: 22 | name: user 23 | tier: app 24 | template: 25 | metadata: 26 | labels: 27 | name: user 28 | tier: app 29 | spec: 30 | containers: 31 | - name: user 32 | imagePullPolicy: Always 33 | image: techworldwithsiva/user:v1 34 | envFrom: 35 | - configMapRef: 36 | name: user-config 37 | ports: 38 | - containerPort: 8080 39 | --- 40 | apiVersion: v1 41 | kind: Service 42 | metadata: 43 | name: user 44 | namespace: roboshop 45 | spec: 46 | selector: 47 | name: user 48 | tier: app 49 | ports: 50 | - protocol: TCP 51 | port: 80 52 | targetPort: 8080 -------------------------------------------------------------------------------- /cart/manifest.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: cart-config 6 | namespace: roboshop 7 | data: 8 | CATALOGUE_HOST: "http://catalogue" 9 | REDIS_HOST: "redis" 10 | --- 11 | apiVersion: apps/v1 12 | kind: Deployment 13 | metadata: 14 | name: cart 15 | namespace: roboshop 16 | labels: 17 | name: cart 18 | tier: app 19 | spec: 20 | replicas: 1 21 | selector: 22 | matchLabels: 23 | name: cart 24 | tier: app 25 | template: 26 | metadata: 27 | labels: 28 | name: cart 29 | tier: app 30 | spec: 31 | containers: 32 | - name: cart 33 | imagePullPolicy: Always 34 | image: techworldwithsiva/cart:k8 35 | envFrom: 36 | - configMapRef: 37 | name: cart-config 38 | ports: 39 | - containerPort: 8080 40 | --- 41 | apiVersion: v1 42 | kind: Service 43 | metadata: 44 | name: cart 45 | namespace: roboshop 46 | spec: 47 | selector: 48 | name: cart 49 | tier: app 50 | ports: 51 | - protocol: TCP 52 | port: 80 53 | targetPort: 8080 54 | 55 | -------------------------------------------------------------------------------- /shipping/manifest.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: shipping-config 6 | namespace: roboshop 7 | data: 8 | CART_ENDPOINT: "cart" 9 | DB_HOST: "mysql" 10 | --- 11 | apiVersion: apps/v1 12 | kind: Deployment 13 | metadata: 14 | name: shipping 15 | namespace: roboshop 16 | labels: 17 | name: shipping 18 | tier: app 19 | spec: 20 | replicas: 1 21 | selector: 22 | matchLabels: 23 | name: shipping 24 | tier: app 25 | template: 26 | metadata: 27 | labels: 28 | name: shipping 29 | tier: app 30 | spec: 31 | containers: 32 | - name: shipping 33 | imagePullPolicy: Always 34 | image: techworldwithsiva/shipping:k8 35 | envFrom: 36 | - configMapRef: 37 | name: shipping-config 38 | ports: 39 | - containerPort: 8080 40 | --- 41 | apiVersion: v1 42 | kind: Service 43 | metadata: 44 | name: shipping 45 | namespace: roboshop 46 | spec: 47 | selector: 48 | name: shipping 49 | tier: app 50 | ports: 51 | - protocol: TCP 52 | port: 80 53 | targetPort: 8080 54 | 55 | -------------------------------------------------------------------------------- /catalogue/manifest.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: catalogue-config 6 | namespace: roboshop 7 | data: 8 | MONGO_URL: "mongodb://mongodb:27017/catalogue" 9 | --- 10 | apiVersion: apps/v1 11 | kind: Deployment 12 | metadata: 13 | name: catalogue 14 | namespace: roboshop 15 | labels: 16 | name: catalogue 17 | tier: app 18 | spec: 19 | replicas: 1 20 | selector: 21 | matchLabels: 22 | name: catalogue 23 | tier: app 24 | template: 25 | metadata: 26 | labels: 27 | name: catalogue 28 | tier: app 29 | spec: 30 | containers: 31 | - name: catalogue 32 | imagePullPolicy: Always 33 | image: techworldwithsiva/catalogue:v1 34 | envFrom: 35 | - configMapRef: 36 | name: catalogue-config 37 | ports: 38 | - containerPort: 8080 39 | --- 40 | apiVersion: v1 41 | kind: Service 42 | metadata: 43 | name: catalogue 44 | namespace: roboshop 45 | spec: 46 | selector: 47 | name: catalogue 48 | tier: app 49 | ports: 50 | - protocol: TCP 51 | port: 80 52 | targetPort: 8080 53 | 54 | -------------------------------------------------------------------------------- /payment/manifest.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: payment-config 6 | namespace: roboshop 7 | data: 8 | CART_HOST: "cart:80" 9 | USER_HOST: "user" 10 | AMQP_HOST: "rabbitmq" 11 | --- 12 | apiVersion: apps/v1 13 | kind: Deployment 14 | metadata: 15 | name: payment 16 | namespace: roboshop 17 | labels: 18 | name: payment 19 | tier: app 20 | spec: 21 | replicas: 1 22 | selector: 23 | matchLabels: 24 | name: payment 25 | tier: app 26 | template: 27 | metadata: 28 | labels: 29 | name: payment 30 | tier: app 31 | spec: 32 | containers: 33 | - name: payment 34 | imagePullPolicy: Always 35 | image: techworldwithsiva/payment:k8 36 | envFrom: 37 | - configMapRef: 38 | name: payment-config 39 | ports: 40 | - containerPort: 8080 41 | --- 42 | apiVersion: v1 43 | kind: Service 44 | metadata: 45 | name: payment 46 | namespace: roboshop 47 | spec: 48 | selector: 49 | name: payment 50 | tier: app 51 | ports: 52 | - protocol: TCP 53 | port: 80 54 | targetPort: 8080 55 | 56 | -------------------------------------------------------------------------------- /redis/manifest.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: redis 6 | namespace: roboshop 7 | spec: 8 | clusterIP: None 9 | selector: 10 | name: redis 11 | tier: db 12 | ports: 13 | - protocol: TCP 14 | port: 6379 15 | targetPort: 6379 16 | name: redis 17 | --- 18 | apiVersion: apps/v1 19 | kind: StatefulSet 20 | metadata: 21 | name: redis 22 | namespace: roboshop 23 | spec: 24 | selector: 25 | matchLabels: 26 | name: redis # has to match .spec.template.metadata.labels 27 | tier: db 28 | serviceName: "redis" 29 | replicas: 1 # by default is 1 30 | template: 31 | metadata: 32 | labels: 33 | name: redis # has to match .spec.template.metadata.labels 34 | tier: db 35 | spec: 36 | containers: 37 | - name: redis 38 | image: redis 39 | ports: 40 | - containerPort: 6379 41 | name: redis 42 | volumeMounts: 43 | - name: redis-volume 44 | mountPath: /data 45 | volumeClaimTemplates: 46 | - metadata: 47 | name: redis-volume 48 | spec: 49 | accessModes: [ "ReadWriteOnce" ] 50 | storageClassName: "ebs-sc" 51 | resources: 52 | requests: 53 | storage: 1Gi -------------------------------------------------------------------------------- /mongodb/manifest.yaml: -------------------------------------------------------------------------------- 1 | 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: mongodb 6 | namespace: roboshop 7 | labels: 8 | app: mongodb 9 | spec: 10 | ports: 11 | - port: 27017 12 | name: mongodb 13 | clusterIP: None #headless service 14 | selector: 15 | name: mongodb 16 | tier: db 17 | --- 18 | apiVersion: apps/v1 19 | kind: StatefulSet 20 | metadata: 21 | name: mongodb 22 | namespace: roboshop 23 | spec: 24 | selector: 25 | matchLabels: 26 | name: mongodb # has to match .spec.template.metadata.labels 27 | tier: db 28 | serviceName: "mongodb" 29 | replicas: 1 # by default is 1 30 | template: 31 | metadata: 32 | labels: 33 | name: mongodb # has to match .spec.template.metadata.labels 34 | tier: db 35 | spec: 36 | containers: 37 | - name: mongodb 38 | image: techworldwithsiva/mongodb:v1 39 | ports: 40 | - containerPort: 27017 41 | name: mongodb 42 | volumeMounts: 43 | - name: mongodb-volume 44 | mountPath: /data/db 45 | volumeClaimTemplates: 46 | - metadata: 47 | name: mongodb-volume 48 | spec: 49 | accessModes: [ "ReadWriteOnce" ] 50 | storageClassName: "ebs-sc" 51 | resources: 52 | requests: 53 | storage: 1Gi -------------------------------------------------------------------------------- /rabbitmq/manifest.yaml: -------------------------------------------------------------------------------- 1 | 2 | --- 3 | apiVersion: v1 4 | kind: Service 5 | metadata: 6 | name: rabbitmq 7 | spec: 8 | clusterIP: None 9 | selector: 10 | name: rabbitmq 11 | tier: db 12 | ports: 13 | - port: 5672 14 | name: amqp 15 | - port: 15672 16 | name: http 17 | --- 18 | apiVersion: apps/v1 19 | kind: StatefulSet 20 | metadata: 21 | name: rabbitmq 22 | namespace: roboshop 23 | spec: 24 | selector: 25 | matchLabels: 26 | name: rabbitmq # has to match .spec.template.metadata.labels 27 | tier: db 28 | serviceName: "rabbitmq" 29 | replicas: 1 # by default is 1 30 | template: 31 | metadata: 32 | labels: 33 | name: rabbitmq # has to match .spec.template.metadata.labels 34 | tier: db 35 | spec: 36 | containers: 37 | - name: rabbitmq 38 | image: rabbitmq 39 | ports: 40 | - containerPort: 5672 41 | name: amqp 42 | - containerPort: 15672 43 | name: http 44 | volumeMounts: 45 | - name: rabbitmq-volume 46 | mountPath: /var/lib/rabbitmq 47 | volumeClaimTemplates: 48 | - metadata: 49 | name: rabbitmq-volume 50 | spec: 51 | accessModes: [ "ReadWriteOnce" ] 52 | storageClassName: "ebs-sc" 53 | resources: 54 | requests: 55 | storage: 1Gi -------------------------------------------------------------------------------- /mysql/manifest.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: mysql-config 6 | namespace: roboshop 7 | data: 8 | MYSQL_DATABASE: "cities" 9 | MYSQL_ALLOW_EMPTY_PASSWORD: "yes" 10 | --- 11 | apiVersion: v1 12 | kind: Secret 13 | metadata: 14 | name: mysql-secret 15 | namespace: roboshop 16 | type: Opaque 17 | data: 18 | MYSQL_USER: c2hpcHBpbmc= 19 | MYSQL_PASSWORD: c2VjcmV0 20 | --- 21 | apiVersion: v1 22 | kind: Service 23 | metadata: 24 | name: mysql 25 | namespace: roboshop 26 | spec: 27 | clusterIP: None 28 | selector: 29 | name: mysql 30 | tier: db 31 | ports: 32 | - protocol: TCP 33 | port: 3306 34 | targetPort: 3306 35 | name: mysql 36 | --- 37 | apiVersion: apps/v1 38 | kind: StatefulSet 39 | metadata: 40 | name: mysql 41 | namespace: roboshop 42 | spec: 43 | selector: 44 | matchLabels: 45 | name: mysql # has to match .spec.template.metadata.labels 46 | tier: db 47 | serviceName: "mysql" 48 | replicas: 1 # by default is 1 49 | template: 50 | metadata: 51 | labels: 52 | name: mysql # has to match .spec.template.metadata.labels 53 | tier: db 54 | spec: 55 | containers: 56 | - name: mysql 57 | image: techworldwithsiva/mysql:k8 58 | imagePullPolicy: Always 59 | args: 60 | - "--ignore-db-dir=lost+found" 61 | envFrom: 62 | - configMapRef: 63 | name: mysql-config 64 | - secretRef: 65 | name: mysql-secret 66 | ports: 67 | - containerPort: 3306 68 | name: mysql 69 | volumeMounts: 70 | - name: mysql-volume 71 | mountPath: /var/lib/mysql 72 | 73 | volumeClaimTemplates: 74 | - metadata: 75 | name: mysql-volume 76 | spec: 77 | accessModes: [ "ReadWriteOnce" ] 78 | storageClassName: "ebs-sc" 79 | resources: 80 | requests: 81 | storage: 1Gi -------------------------------------------------------------------------------- /web/manifest.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: nginx-config 5 | namespace: roboshop 6 | data: 7 | nginx.conf: | 8 | # this config is loading from nginx config map 9 | user nginx; 10 | worker_processes auto; 11 | pid /var/run/nginx.pid; 12 | 13 | error_log /var/log/nginx/error.log notice; 14 | 15 | events { 16 | worker_connections 768; 17 | # multi_accept on; 18 | } 19 | 20 | http { 21 | 22 | include /etc/nginx/mime.types; 23 | default_type application/octet-stream; 24 | 25 | log_format main '$remote_addr $time_local $request $status $body_bytes_sent $request_time'; 26 | 27 | access_log /var/log/nginx/access.log main; 28 | 29 | sendfile on; 30 | #tcp_nopush on; 31 | 32 | keepalive_timeout 65; 33 | 34 | #gzip on; 35 | 36 | include /etc/nginx/conf.d/*.conf; 37 | 38 | server { 39 | listen 80; 40 | server_name localhost; 41 | location / { 42 | root /usr/share/nginx/html; 43 | index index.html index.htm; 44 | } 45 | error_page 500 502 503 504 /50x.html; 46 | location = /50x.html { 47 | root /usr/share/nginx/html; 48 | } 49 | 50 | location /api/catalogue/ { 51 | proxy_pass http://catalogue/; 52 | } 53 | 54 | location /api/user/ { 55 | proxy_pass http://user/; 56 | } 57 | 58 | location /api/cart/ { 59 | proxy_pass http://cart/; 60 | } 61 | 62 | location /api/shipping/ { 63 | proxy_pass http://shipping/; 64 | } 65 | 66 | location /api/payment/ { 67 | proxy_pass http://payment/; 68 | } 69 | 70 | 71 | proxy_http_version 1.1; 72 | location /images/ { 73 | expires 5s; 74 | root /usr/share/nginx/html; 75 | try_files $uri /images/placeholder.jpg; 76 | } 77 | 78 | location /nginx_status { 79 | stub_status on; 80 | access_log off; 81 | } 82 | } 83 | 84 | } 85 | --- 86 | apiVersion: apps/v1 87 | kind: Deployment 88 | metadata: 89 | name: web 90 | namespace: roboshop 91 | labels: 92 | name: web 93 | tier: web 94 | spec: 95 | replicas: 1 96 | selector: 97 | matchLabels: 98 | name: web 99 | tier: web 100 | template: 101 | metadata: 102 | labels: 103 | name: web 104 | tier: web 105 | spec: 106 | containers: 107 | - name: web 108 | imagePullPolicy: Always 109 | image: techworldwithsiva/web:k8 110 | resources: 111 | requests: 112 | cpu: "100m" 113 | memory: "156Mi" 114 | limits: 115 | cpu: "150m" 116 | memory: "256Mi" 117 | ports: 118 | - containerPort: 80 119 | volumeMounts: 120 | - name: nginx-config 121 | mountPath: /etc/nginx/nginx.conf 122 | subPath: nginx.conf 123 | volumes: 124 | - name: nginx-config 125 | configMap: 126 | name: nginx-config 127 | items: 128 | - key: nginx.conf 129 | path: nginx.conf 130 | --- 131 | apiVersion: v1 132 | kind: Service 133 | metadata: 134 | name: web 135 | namespace: roboshop 136 | spec: 137 | type: LoadBalancer 138 | selector: 139 | name: web 140 | tier: web 141 | ports: 142 | - protocol: TCP 143 | port: 80 144 | targetPort: 80 145 | --- 146 | apiVersion: autoscaling/v1 147 | kind: HorizontalPodAutoscaler 148 | metadata: 149 | name: web-hpa 150 | namespace: roboshop 151 | spec: 152 | scaleTargetRef: 153 | apiVersion: apps/v1 154 | kind: Deployment 155 | name: web 156 | minReplicas: 1 157 | maxReplicas: 10 158 | targetCPUUtilizationPercentage: 50 --------------------------------------------------------------------------------