The IBMStockTrader application rebuilt with Quarkus.
Ensure the following operators are installed in cluster:
[NOTE]: In OpenShift the operators can be installed via Operator Hub integration from Administrator console.
git clone https://github.com/kameshsampath/quarkus-stocktraderWe will refer to the cloned project sources folder as $PROJECT_HOME.
cd $PROJECT_HOMEoc apply -k k8s/keycloakBecause of the limitations with Keycloak Operator, the roles needs to be manually created by login into the Keycloak console.
The following roles need to be created:
-
api-admins
-
api-users
-
admins
Add the user1 part of the api-admins, to enable the user to perform API operations
To retrieve the Keycloak ADMIN_USERNAME and ADMIN_PASSWORD run the following command:
export ADMIN_USERNAME=$(kubectl get secrets credential-stocktrader-keycloak -oyaml | yq e - '.data.ADMIN_USERNAME' | base64 -d)
export ADMIN_PASSWORD=$(kubectl get secrets credential-stocktrader-keycloak -oyaml | yq e - '.data.ADMIN_PASSWORD' | base64 -d)You can find the Keycloak web console url using the command oc get -n keycloak routes.
oc apply -k k8s/kafka/prod|
Important
|
This should be done only on the target clusters, i.e. the clusters where the topics/data needs to mirrored, from the Kafka Cluster where sampledaytrader8 is deployed. |
Copy the $PROJECT_HOME/k8s/kafka-mirrormaker/daytrader-mirrormaker-example.yaml to $PROJECT_HOME/k8s/kafka-mirrormaker/daytrader-mirrormaker.yaml:
cp $PROJECT_HOME/k8s/kafka-mirrormaker/daytrader-mirrormaker-example.yaml $PROJECT_HOME/k8s/kafka-mirrormaker/daytrader-mirrormaker.yamlEdit and update the $PROJECT_HOME/k8s/kafka-mirrormaker/daytrader-mirrormaker.yaml for Kafka cluster external bootstrapserver LoadBalancer IP Address.
The Kafka cluster bootstrapservers can be retrieved using the command:
The legacy cluster is identified by alias daytrader-kafka-legacy in the file
$PROJECT_HOME/k8s/kafka-mirrormaker/daytrader-mirrormaker.yaml, and the bootstrap address found by the following command need to be updated as the value for daytrader-kafka-legacy.bootstrapServers:
oc get svc -n daytrader daytrader-kafka-external-bootstrap \
-ojsonpath='{.status.loadBalancer.ingress[0].ip}'|
Important
|
If any of your cluster is on AWS then use the following command: oc get svc -n daytrader daytrader-kafka-external-bootstrap \
-ojsonpath='{.status.loadBalancer.ingress[0].hostname}' |
The legacy cluster is identified by alias daytrader-kafka-modern in the file
$PROJECT_HOME/k8s/kafka-mirrormaker/daytrader-mirrormaker.yaml, and the bootstrap address found by the following command need to be updated as the value for daytrader-kafka-modern.bootstrapServers:
oc get svc -n daytrader daytrader-kafka-external-bootstrap \
-ojsonpath='{.status.loadBalancer.ingress[0].ip}'|
Important
|
If any of your cluster is on AWS then use the following command: oc get svc -n daytrader daytrader-kafka-external-bootstrap \
-ojsonpath='{.status.loadBalancer.ingress[0].hostname}' |
kustomize build $PROJECT_HOME/k8s/stock-quote/prod | oc apply -f -kustomize build $PROJECT_HOME/k8s/db/prod | oc apply -f -Login to the database admin console using user traderdb and password traderdb and import the schema.
Obtain an API Key from IEXCloud, copy the file $PROJECT_HOME/k8s/stock-quote/base/api-keys.env.example to
$PROJECT_HOME/k8s/stock-quote/base/api-keys.env:
cp $PROJECT_HOME/k8s/stock-quote/base/api-keys.env.example $PROJECT_HOME/k8s/stock-quote/base/api-keys.envEdit and update the IEX_API_KEY key in the file $PROJECT_HOME/k8s/stock-quote/base/api-keys.env to match your API Key.
kustomize build $PROJECT_HOME/k8s/stock-quote/prod | oc apply -f -kustomize build $PROJECT_HOME/k8s/portfolio/prod | oc apply -f -The portfolio deployment will fail to resolve the Keycloak url and hence will fail to start.
oc get pods -n daytrader -lapp=quarkus-portfolioThe output of the above command should be like:
NAME READY STATUS RESTARTS AGE
quarkus-portfolio-7d744cf954-kjf4r 0/1 CrashLoopBackOff 5 5m28sRun the following command to update the deployment:
KEYCLOAK_ROUTE=$(oc get route -n keycloak keycloak -o=jsonpath='{.spec.host}')
oc set env -n daytrader deploy/quarkus-portfolio QUARKUS_OIDC_AUTH_SERVER_URL="https://$KEYCLOAK_ROUTE/auth/realms/stocktrader"And now check the pod to be restarted:
oc get pods -n daytrader -lapp=quarkus-portfolio -wkustomize build $PROJECT_HOME/k8s/trade-orders-service/prod | oc apply -f -|
Note
|
The default image registry is |
As tradr is a static Single Page Application, it is required to update the environment and rebuild it:
cd $PROJECT_HOME/tradr
envsubst `$PROJECT_HOME/tradr/.env.example` > `$PROJECT_HOME/tradr/.env`
cd ..
make tradr_image_build_pushNow update the $PROJECT_HOME/k8s/tradr/base/deployment.yaml image to match the tradr image that you rebuilt.
make update_tradr_deployment_imagekustomize build $PROJECT_HOME/k8s/tradr/prod | oc apply -f -With all applications successfully deployed, your daytrader namespace should look like
oc get pods -n daytraderShow show an output like:
NAME READY STATUS RESTARTS AGE
daytrader-entity-operator-84687c54c6-5hjnn 3/3 Running 0 67m
daytrader-kafka-0 1/1 Running 0 67m
daytrader-kafka-1 1/1 Running 0 67m
daytrader-kafka-2 1/1 Running 0 67m
daytrader-mirror-maker2-mirrormaker2-5dd869f49-7hhx7 1/1 Running 0 25m
daytrader-zookeeper-0 1/1 Running 0 73m
daytrader-zookeeper-1 1/1 Running 0 73m
daytrader-zookeeper-2 1/1 Running 0 73m
db-adminer-7cfc4bb868-fw9qk 1/1 Running 0 25m
postgresql-756679bdd5-8xblx 1/1 Running 0 25m
quarkus-portfolio-7f58764ccf-lblhz 1/1 Running 0 3m28s
quarkus-stock-quote-86f86bc4d5-wvbrd 1/1 Running 0 21m
trade-orders-service-64fcb6dd98-27nk6 1/1 Running 0 17m
tradr-b55bd7dd-n7r5k 1/1 Running 0 17m|
Note
|
The application domain may vary according to your deployment |
oc get route trader-orders -n daytraderNAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
trader-orders trader-orders-daytrader.apps.gcp.kameshs.dev trade-orders-service 8080 edge Noneoc get route tradr -n daytraderShould show an output like:
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
tradr tradr-daytrader.apps.gcp.kameshs.dev tradr 8080 edge NoneTo be able to login into the application you might need to create the Keycloak client called tradr, login to the Keycloak console as did earlier and add a new client called tradr under realm stocktrader with root URL set to value of tradr OpenShift route.
