diff --git a/README.md b/README.md index 2f06ebae..39b882bf 100644 --- a/README.md +++ b/README.md @@ -162,6 +162,35 @@ cd .corp ./gradlew account-service:bootRun ``` +## Usage (K8s) + +The following are instructions to build and deploy all TraderX apps to your local enviroment using [tilt](https://tilt.dev) and kustomize files. + +## Prerequistes +- Running [Docker](https://www.docker.com/products/docker-desktop/) or similar +- Running K8s - [Kind](https://kind.sigs.k8s.io/) /[Minikube](https://minikube.sigs.k8s.io/docs/start/)/[k3s](https://k3s.io/) or similar +- Install an [Ingress Controller](https://kubernetes.github.io/ingress-nginx/deploy/) + +### Preflight checks + +``` +kubectl get pods +``` + +or + +Check your cluster is running using the epic tool `k9s` - https://k9scli.io/ + +### Start Tilt + +This command will build and start all locally built applications and deploy them to your local K8s environment. + +``` +cd ./gitops/local/ +tilt up +``` + + # Getting Involved ### Project Meetings diff --git a/gitops/base/account-service/deployment.yaml b/gitops/base/account-service/deployment.yaml new file mode 100644 index 00000000..8c22673e --- /dev/null +++ b/gitops/base/account-service/deployment.yaml @@ -0,0 +1,31 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: account-service + name: account-service +spec: + replicas: 1 + selector: + matchLabels: + app: account-service + strategy: + type: Recreate + template: + metadata: + labels: + app: account-service + spec: + containers: + - name: account-service + env: + - name: ACCOUNT_SERVICE_PORT + value: "18088" + - name: DATABASE_TCP_HOST + value: database + image: traderx/account-service + imagePullPolicy: IfNotPresent + ports: + - containerPort: 18088 + protocol: TCP + restartPolicy: Always diff --git a/gitops/base/account-service/kustomization.yaml b/gitops/base/account-service/kustomization.yaml new file mode 100644 index 00000000..bc221ac1 --- /dev/null +++ b/gitops/base/account-service/kustomization.yaml @@ -0,0 +1,3 @@ +resources: + - service.yaml + - deployment.yaml diff --git a/gitops/base/account-service/service.yaml b/gitops/base/account-service/service.yaml new file mode 100644 index 00000000..f821b9e8 --- /dev/null +++ b/gitops/base/account-service/service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + app: account-service + name: account-service +spec: + ports: + - name: "18088" + port: 8080 + targetPort: 18088 + selector: + app: account-service diff --git a/gitops/base/database/deployment.yaml b/gitops/base/database/deployment.yaml new file mode 100644 index 00000000..d6eb58eb --- /dev/null +++ b/gitops/base/database/deployment.yaml @@ -0,0 +1,27 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: database-deployment + labels: + app: database +spec: + replicas: 2 + selector: + matchLabels: + app: database + template: + metadata: + labels: + app: database + spec: + containers: + - name: database-app + image: traderx/database + imagePullPolicy: IfNotPresent + ports: + - containerPort: 18082 + protocol: TCP + - containerPort: 18083 + protocol: TCP + - containerPort: 18084 + protocol: TCP diff --git a/gitops/base/database/kustomization.yaml b/gitops/base/database/kustomization.yaml new file mode 100644 index 00000000..bc221ac1 --- /dev/null +++ b/gitops/base/database/kustomization.yaml @@ -0,0 +1,3 @@ +resources: + - service.yaml + - deployment.yaml diff --git a/gitops/base/database/service.yaml b/gitops/base/database/service.yaml new file mode 100644 index 00000000..1ba25953 --- /dev/null +++ b/gitops/base/database/service.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: database +spec: + selector: + app: database + ports: + - name: "18082" + port: 18082 + targetPort: 18082 + - name: "18083" + port: 18083 + targetPort: 18083 + - name: "18084" + port: 18084 + targetPort: 18084 \ No newline at end of file diff --git a/gitops/base/ingress/ingress.yaml b/gitops/base/ingress/ingress.yaml new file mode 100644 index 00000000..56f04352 --- /dev/null +++ b/gitops/base/ingress/ingress.yaml @@ -0,0 +1,89 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: traderx-ingress + annotations: + nginx.ingress.kubernetes.io/rewrite-target: /$2 +spec: + ingressClassName: nginx + rules: + - host: localhost + http: + paths: + - path: /account-service(/|$)(.*) + pathType: Prefix + backend: + service: + name: account-service + port: + number: 8080 + - path: /db-web(/|$)(.*) + pathType: Prefix + backend: + service: + name: database + port: + number: 18084 + - path: /ng-cli-ws + pathType: Prefix + backend: + service: + name: web-front-end-angular + port: + number: 8080 + - path: /people-service(/|$)(.*) + pathType: Prefix + backend: + service: + name: people-service + port: + number: 8080 + - path: /position-service(/|$)(.*) + pathType: Prefix + backend: + service: + name: position-service + port: + number: 8080 + - path: /reference-data(/|$)(.*) + pathType: Prefix + backend: + service: + name: reference-data + port: + number: 8080 + - path: /socket.io/ + pathType: Prefix + backend: + service: + name: trade-feed + port: + number: 8080 + - path: /trade-feed(/|$)(.*) + pathType: Prefix + backend: + service: + name: trade-feed + port: + number: 8080 + - path: /trade-service(/|$)(.*) + pathType: Prefix + backend: + service: + name: trade-service + port: + number: 8080 + - path: /trade-processor(/|$)(.*) + pathType: Prefix + backend: + service: + name: trade-processor + port: + number: 8080 + - path: /traderx(/|$)(.*) + pathType: Prefix + backend: + service: + name: web-front-end-angular + port: + number: 8080 \ No newline at end of file diff --git a/gitops/base/ingress/kustomization.yaml b/gitops/base/ingress/kustomization.yaml new file mode 100644 index 00000000..b009f504 --- /dev/null +++ b/gitops/base/ingress/kustomization.yaml @@ -0,0 +1,2 @@ +resources: + - ingress.yaml diff --git a/gitops/base/people-service/deployment.yaml b/gitops/base/people-service/deployment.yaml new file mode 100644 index 00000000..6fcd46ab --- /dev/null +++ b/gitops/base/people-service/deployment.yaml @@ -0,0 +1,26 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: people-service + name: people-service +spec: + replicas: 1 + selector: + matchLabels: + app: people-service + strategy: + type: Recreate + template: + metadata: + labels: + app: people-service + spec: + containers: + - name: people-service + image: traderx/people-service + imagePullPolicy: IfNotPresent + ports: + - containerPort: 18089 + protocol: TCP + restartPolicy: Always diff --git a/gitops/base/people-service/kustomization.yaml b/gitops/base/people-service/kustomization.yaml new file mode 100644 index 00000000..bc221ac1 --- /dev/null +++ b/gitops/base/people-service/kustomization.yaml @@ -0,0 +1,3 @@ +resources: + - service.yaml + - deployment.yaml diff --git a/gitops/base/people-service/service.yaml b/gitops/base/people-service/service.yaml new file mode 100644 index 00000000..29594d8e --- /dev/null +++ b/gitops/base/people-service/service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + app: people-service + name: people-service +spec: + ports: + - name: "18089" + port: 8080 + targetPort: 18089 + selector: + app: people-service diff --git a/gitops/base/position-service/deployment.yaml b/gitops/base/position-service/deployment.yaml new file mode 100644 index 00000000..f4eb6302 --- /dev/null +++ b/gitops/base/position-service/deployment.yaml @@ -0,0 +1,33 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: position-service + name: position-service +spec: + replicas: 1 + selector: + matchLabels: + app: position-service + strategy: + type: Recreate + template: + metadata: + labels: + app: position-service + spec: + containers: + - name: position-service + env: + - name: DATABASE_TCP_HOST + value: database + - name: POSITION_SERVICE_PORT + value: "18090" + image: traderx/position-service + imagePullPolicy: IfNotPresent + ports: + - containerPort: 18090 + protocol: TCP + workingDir: /position-service + restartPolicy: Always + diff --git a/gitops/base/position-service/kustomization.yaml b/gitops/base/position-service/kustomization.yaml new file mode 100644 index 00000000..bc221ac1 --- /dev/null +++ b/gitops/base/position-service/kustomization.yaml @@ -0,0 +1,3 @@ +resources: + - service.yaml + - deployment.yaml diff --git a/gitops/base/position-service/service.yaml b/gitops/base/position-service/service.yaml new file mode 100644 index 00000000..139524e6 --- /dev/null +++ b/gitops/base/position-service/service.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + app: position-service + name: position-service +spec: + ports: + - name: "18090" + port: 8080 + targetPort: 18090 + + selector: + app: position-service diff --git a/gitops/base/reference-data/deployment.yaml b/gitops/base/reference-data/deployment.yaml new file mode 100644 index 00000000..9f3945b1 --- /dev/null +++ b/gitops/base/reference-data/deployment.yaml @@ -0,0 +1,30 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: reference-data + name: reference-data +spec: + replicas: 1 + selector: + matchLabels: + app: reference-data + strategy: + type: Recreate + template: + metadata: + labels: + app: reference-data + spec: + containers: + - name: reference-data + env: + - name: REFERENCE_DATA_SERVICE_PORT + value: "18095" + image: traderx/reference-data + imagePullPolicy: IfNotPresent + ports: + - containerPort: 18085 + protocol: TCP + workingDir: /reference-data + restartPolicy: Always diff --git a/gitops/base/reference-data/kustomization.yaml b/gitops/base/reference-data/kustomization.yaml new file mode 100644 index 00000000..bc221ac1 --- /dev/null +++ b/gitops/base/reference-data/kustomization.yaml @@ -0,0 +1,3 @@ +resources: + - service.yaml + - deployment.yaml diff --git a/gitops/base/reference-data/service.yaml b/gitops/base/reference-data/service.yaml new file mode 100644 index 00000000..f3e45466 --- /dev/null +++ b/gitops/base/reference-data/service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + app: reference-data + name: reference-data +spec: + ports: + - name: "18085" + port: 8080 + targetPort: 18085 + selector: + app: reference-data diff --git a/gitops/base/trade-feed/deployment.yaml b/gitops/base/trade-feed/deployment.yaml new file mode 100644 index 00000000..3759bc29 --- /dev/null +++ b/gitops/base/trade-feed/deployment.yaml @@ -0,0 +1,30 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: trade-feed + name: trade-feed +spec: + replicas: 1 + selector: + matchLabels: + app: trade-feed + strategy: + type: Recreate + template: + metadata: + labels: + app: trade-feed + spec: + containers: + - image: traderx/trade-feed + imagePullPolicy: IfNotPresent + name: trade-feed + env: + - name: TRADE_FEED_PORT + value: "18086" + ports: + - containerPort: 18086 + protocol: TCP + workingDir: /trade-feed + restartPolicy: Always diff --git a/gitops/base/trade-feed/kustomization.yaml b/gitops/base/trade-feed/kustomization.yaml new file mode 100644 index 00000000..bc221ac1 --- /dev/null +++ b/gitops/base/trade-feed/kustomization.yaml @@ -0,0 +1,3 @@ +resources: + - service.yaml + - deployment.yaml diff --git a/gitops/base/trade-feed/service.yaml b/gitops/base/trade-feed/service.yaml new file mode 100644 index 00000000..dd9cf700 --- /dev/null +++ b/gitops/base/trade-feed/service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + app: trade-feed + name: trade-feed +spec: + ports: + - name: "18086" + port: 8080 + targetPort: 18086 + selector: + app: trade-feed diff --git a/gitops/base/trade-processor/deployment.yaml b/gitops/base/trade-processor/deployment.yaml new file mode 100644 index 00000000..d540635e --- /dev/null +++ b/gitops/base/trade-processor/deployment.yaml @@ -0,0 +1,27 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: trade-processor-deployment + labels: + app: trade-processor +spec: + replicas: 2 + selector: + matchLabels: + app: trade-processor + template: + metadata: + labels: + app: trade-processor + spec: + containers: + - name: trade-processor-app + image: traderx/trade-processor + imagePullPolicy: IfNotPresent + ports: + - containerPort: 18091 + env: + - name: DATABASE_TCP_HOST + value: database + - name: TRADE_FEED_HOST + value: trade-feed diff --git a/gitops/base/trade-processor/kustomization.yaml b/gitops/base/trade-processor/kustomization.yaml new file mode 100644 index 00000000..bc221ac1 --- /dev/null +++ b/gitops/base/trade-processor/kustomization.yaml @@ -0,0 +1,3 @@ +resources: + - service.yaml + - deployment.yaml diff --git a/gitops/base/trade-processor/service.yaml b/gitops/base/trade-processor/service.yaml new file mode 100644 index 00000000..07ba5dd4 --- /dev/null +++ b/gitops/base/trade-processor/service.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Service +metadata: + name: trade-processor +spec: + selector: + app: trade-processor + ports: + - port: 8080 + targetPort: 18091 \ No newline at end of file diff --git a/gitops/base/trade-service/deployment.yaml b/gitops/base/trade-service/deployment.yaml new file mode 100644 index 00000000..9a69a7e5 --- /dev/null +++ b/gitops/base/trade-service/deployment.yaml @@ -0,0 +1,38 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: trade-service + name: trade-service +spec: + replicas: 1 + selector: + matchLabels: + app: trade-service + strategy: + type: Recreate + template: + metadata: + labels: + app: trade-service + spec: + containers: + - env: + - name: ACCOUNT_SERVICE_HOST + value: account-service + - name: DATABASE_TCP_HOST + value: database + - name: PEOPLE_SERVICE_HOST + value: people-service + - name: REFERENCE_DATA_HOST + value: reference-data + - name: TRADE_FEED_HOST + value: trade-feed + image: traderx/trade-service + imagePullPolicy: IfNotPresent + name: trade-service + ports: + - containerPort: 18092 + protocol: TCP + workingDir: /trade-service + restartPolicy: Always \ No newline at end of file diff --git a/gitops/base/trade-service/kustomization.yaml b/gitops/base/trade-service/kustomization.yaml new file mode 100644 index 00000000..bc221ac1 --- /dev/null +++ b/gitops/base/trade-service/kustomization.yaml @@ -0,0 +1,3 @@ +resources: + - service.yaml + - deployment.yaml diff --git a/gitops/base/trade-service/service.yaml b/gitops/base/trade-service/service.yaml new file mode 100644 index 00000000..272b5dd7 --- /dev/null +++ b/gitops/base/trade-service/service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + app: trade-service + name: trade-service +spec: + ports: + - name: "18092" + port: 8080 + targetPort: 18092 + selector: + app: trade-service diff --git a/gitops/base/web-front-end/deployment.yaml b/gitops/base/web-front-end/deployment.yaml new file mode 100644 index 00000000..30a7805d --- /dev/null +++ b/gitops/base/web-front-end/deployment.yaml @@ -0,0 +1,30 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: web-front-end-angular + name: web-front-end-angular +spec: + replicas: 1 + selector: + matchLabels: + app: web-front-end-angular + strategy: + type: Recreate + template: + metadata: + labels: + app: web-front-end-angular + spec: + containers: + - image: traderx/web-front-end-angular + imagePullPolicy: IfNotPresent + name: web-front-end-angular + env: + - name: WEB_FRONT_END_START_MODE + value: "start-prod" + ports: + - containerPort: 18093 + protocol: TCP + workingDir: /web-front-end/angular + restartPolicy: Always diff --git a/gitops/base/web-front-end/kustomization.yaml b/gitops/base/web-front-end/kustomization.yaml new file mode 100644 index 00000000..bc221ac1 --- /dev/null +++ b/gitops/base/web-front-end/kustomization.yaml @@ -0,0 +1,3 @@ +resources: + - service.yaml + - deployment.yaml diff --git a/gitops/base/web-front-end/service.yaml b/gitops/base/web-front-end/service.yaml new file mode 100644 index 00000000..7643b12b --- /dev/null +++ b/gitops/base/web-front-end/service.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + app: web-front-end-angular + name: web-front-end-angular +spec: + ports: + - name: "18093" + port: 8080 + targetPort: 18093 + protocol: TCP + selector: + app: web-front-end-angular diff --git a/gitops/local/Tiltfile b/gitops/local/Tiltfile new file mode 100644 index 00000000..7d81e97c --- /dev/null +++ b/gitops/local/Tiltfile @@ -0,0 +1,12 @@ +docker_build('traderx/database', './../../database/.') +docker_build('traderx/account-service', './../../account-service/.') +docker_build('traderx/people-service', './../../people-service/.') +docker_build('traderx/position-service', './../../position-service/.') +docker_build('traderx/reference-data', './../../reference-data/.') +docker_build('traderx/trade-feed', './../../trade-feed/.') +docker_build('traderx/trade-processor', './../../trade-processor/.') +docker_build('traderx/trade-service', './../../trade-service/.') +docker_build('traderx/web-front-end-angular', './../../web-front-end/angular/.') +yaml = kustomize(('./traderx')) +print(yaml) +k8s_yaml(yaml) \ No newline at end of file diff --git a/gitops/local/traderx/kustomization.yaml b/gitops/local/traderx/kustomization.yaml new file mode 100644 index 00000000..5246424c --- /dev/null +++ b/gitops/local/traderx/kustomization.yaml @@ -0,0 +1,16 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: traderx + +resources: + - namespace.yaml + - ../../base/ingress + - ../../base/database + - ../../base/account-service + - ../../base/people-service + - ../../base/position-service + - ../../base/reference-data + - ../../base/trade-feed + - ../../base/trade-processor + - ../../base/trade-service + - ../../base/web-front-end \ No newline at end of file diff --git a/gitops/local/traderx/namespace.yaml b/gitops/local/traderx/namespace.yaml new file mode 100644 index 00000000..6d8c3a70 --- /dev/null +++ b/gitops/local/traderx/namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: traderx + labels: + name: traderx