Create a new namespace
kubectl create namespace my-test
Create a new identity for infinispan identity.yaml
with content
credentials:
- username: testuser
password: testpassword
and deploy with kubectl create secret generic --from-file=identity.yaml external-infinispan-secret -n my-test
Install the infinispan operator
INFINISPAN_VERSION=1.1.1.Final
kubectl apply -f "https://raw.githubusercontent.com/infinispan/infinispan-operator/${INFINISPAN_VERSION}/deploy/crd.yaml" -n my-test
kubectl apply -f "https://raw.githubusercontent.com/infinispan/infinispan-operator/${INFINISPAN_VERSION}/deploy/rbac.yaml" -n my-test
kubectl apply -f "https://raw.githubusercontent.com/infinispan/infinispan-operator/${INFINISPAN_VERSION}/deploy/operator.yaml" -n my-test
According to https://infinispan.org/infinispan-operator/master/operator.html#adding_credentials-security, deploy an infinispan cluster infinispan-minimal.yaml
with content
apiVersion: infinispan.org/v1
kind: Infinispan
metadata:
name: example-infinispan
spec:
replicas: 2
security:
endpointSecretName: external-infinispan-secret
Deploy kogito trusty secrets trusty-secrets.yaml
with content
apiVersion: v1
kind: Secret
metadata:
name: kogito-external-infinispan-secret
type: Opaque
data:
user: dGVzdHVzZXI=
pass: dGVzdHBhc3N3b3Jk
Install kafka
TARGET_DIR="/tmp"
STRIMZI_VERSION=0.17.0
wget "https://github.com/strimzi/strimzi-kafka-operator/releases/download/${STRIMZI_VERSION}/strimzi-${STRIMZI_VERSION}.tar.gz"
tar zxf "${TARGET_DIR}/strimzi-${STRIMZI_VERSION}.tar.gz" -C "$TARGET_DIR"
find ${TARGET_DIR}/strimzi-${STRIMZI_VERSION}/install/cluster-operator -name '*RoleBinding*.yaml' -type f -exec sed -i "s/namespace: .*/namespace: trusty-demo/" {} \;
kubectl apply -f ${TARGET_DIR}/strimzi-${STRIMZI_VERSION}/install/cluster-operator/ -n my-test
And deploy a kafka broker kafka.yaml
apiVersion: kafka.strimzi.io/v1beta1
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
replicas: 1
listeners:
plain: {}
tls: {}
external:
type: nodeport
tls: false
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 100Gi
deleteClaim: false
config:
offsets.topic.replication.factor: 1
transaction.state.log.replication.factor: 1
transaction.state.log.min.isr: 1
zookeeper:
replicas: 1
storage:
type: persistent-claim
size: 100Gi
deleteClaim: false
entityOperator:
topicOperator: {}
userOperator: {}
Create the kafka topics
apiVersion: kafka.strimzi.io/v1beta1
kind: KafkaTopic
metadata:
name: trusty-explainability-request
labels:
strimzi.io/cluster: "my-cluster"
spec:
partitions: 1
replicas: 1
---
apiVersion: kafka.strimzi.io/v1beta1
kind: KafkaTopic
metadata:
name: trusty-explainability-result
labels:
strimzi.io/cluster: "my-cluster"
spec:
partitions: 1
replicas: 1
---
apiVersion: kafka.strimzi.io/v1beta1
kind: KafkaTopic
metadata:
name: kogito-tracing-decision
labels:
strimzi.io/cluster: "my-cluster"
spec:
partitions: 1
replicas: 1
---
apiVersion: kafka.strimzi.io/v1beta1
kind: KafkaTopic
metadata:
name: trusty-explainability-request
labels:
strimzi.io/cluster: "my-cluster"
spec:
partitions: 1
replicas: 1
---
apiVersion: kafka.strimzi.io/v1beta1
kind: KafkaTopic
metadata:
name: kogito-tracing-model
labels:
strimzi.io/cluster: "my-cluster"
spec:
partitions: 1
replicas: 1
---
And finally deploy the trusty instance
apiVersion: app.kiegroup.org/v1alpha1
kind: KogitoTrusty
metadata:
name: trusty
labels:
app: trusty
spec:
replicas: 1
image:
domain: quay.io
namespace: kiegroup
name: kogito-trusty-nightly
tag: 'latest'
selector:
app: trusty
kafka:
externalURI: my-cluster-kafka-bootstrap:9092
infinispan:
uri: example-infinispan:11222
useAuth: true
credentials:
secretName: kogito-external-infinispan-secret
usernameKey: user
passwordKey: pass
saslMechanism: DIGEST-MD5
useKogitoInfra: false
There should be already some errors in the logs of the container about the connection with infinispan. But if this is not the case you can deploy the dmn-tracing-quarkus example to trigger the creation of the cache and get the error:
You will need to deploy the resources from the operator folder
kubectl apply -f deploy/service_account.yaml -n my-test
kubectl apply -f deploy/role.yaml -n my-test
kubectl apply -f deploy/role_binding.yaml -n my-test
And deploy the service dmn-tracing-quarkus.yaml
apiVersion: app.kiegroup.org/v1alpha1
kind: KogitoRuntime
metadata:
name: dmn-tracing-quarkus
spec:
replicas: 1
image:
domain: quay.io
namespace: jrota
name: dmn-tracing-quarkus
tag: snap-1.9
selector:
app: dmn-tracing-quarkus
kafka:
externalURI: my-cluster-kafka-bootstrap:9092
status:
externalURI: "http://dmn-tracing-quarkus:8080"
conditions:
- lastTransitionTime: "1985-04-12T23:20:50.52Z"
lastUpdateTime: "1985-04-12T23:20:50.52Z"
message: ""
reason: ""
status: ""
type: ""
and expose it with
kubectl expose deployment dmn-tracing-quarkus -n my-test --type=NodePort --name=dmn-tracing-quarkus-np
minikube service dmn-tracing-quarkus-np -n my-test
get the minikube ip with minikube ip
and access the swagger ui for example in my case at http://172.17.0.3:32040/swagger-ui
execute a post request at /LoanEligibility
with the payload
{"Bribe": 1000,"Client": {"age": 43,"existing payments": 100,"salary": 1950},"Loan": {"duration": 15,"installment": 180}, "SupremeDirector": "Yes"}
And check the logs of the trusty pod again. The error is like the following
2020-09-08 13:37:49,479 WARNING [io.ver.cor.imp.BlockedThreadChecker] (vertx-blocked-thread-checker) Thread Thread[vert.x-eventloop-thread-1,5,main]=Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 3582 ms, time limit is 2000 ms: io.vertx.core.VertxException: Thread blocked
at java.base@11.0.8/jdk.internal.misc.Unsafe.park(Native Method)
at java.base@11.0.8/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:234)
at java.base@11.0.8/java.util.concurrent.CompletableFuture$Signaller.block(CompletableFuture.java:1798)
at java.base@11.0.8/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3128)
at java.base@11.0.8/java.util.concurrent.CompletableFuture.timedGet(CompletableFuture.java:1868)
at java.base@11.0.8/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2021)
at app//org.infinispan.client.hotrod.impl.Util.await(Util.java:51)
at app//org.infinispan.client.hotrod.RemoteCacheManager.createRemoteCache(RemoteCacheManager.java:475)
at app//org.infinispan.client.hotrod.RemoteCacheManager.getCache(RemoteCacheManager.java:314)
at app//org.infinispan.client.hotrod.RemoteCacheManager.getCache(RemoteCacheManager.java:278)
at app//org.kie.kogito.persistence.infinispan.cache.InfinispanCacheManager.getOrCreateCache(InfinispanCacheManager.java:82)
at app//org.kie.kogito.persistence.infinispan.cache.InfinispanCacheManager.getCache(InfinispanCacheManager.java:106)
at app//org.kie.kogito.persistence.infinispan.cache.InfinispanCacheManager_ClientProxy.getCache(InfinispanCacheManager_ClientProxy.zig:253)
at app//org.kie.kogito.trusty.storage.api.TrustyStorageServiceImpl.getDecisionsStorage(TrustyStorageServiceImpl.java:39)
at app//org.kie.kogito.trusty.storage.api.TrustyStorageServiceImpl_ClientProxy.getDecisionsStorage(TrustyStorageServiceImpl_ClientProxy.zig:212)
at app//org.kie.kogito.trusty.service.TrustyServiceImpl.storeDecision(TrustyServiceImpl.java:112)
at app//org.kie.kogito.trusty.service.TrustyServiceImpl.processDecision(TrustyServiceImpl.java:126)
at app//org.kie.kogito.trusty.service.TrustyServiceImpl_ClientProxy.processDecision(TrustyServiceImpl_ClientProxy.zig:273)
at app//org.kie.kogito.trusty.service.messaging.incoming.TraceEventConsumer.handleCloudEvent(TraceEventConsumer.java:77)
at app//org.kie.kogito.trusty.service.messaging.BaseEventConsumer$$Lambda$777/0x0000000840584040.accept(Unknown Source)
at java.base@11.0.8/java.util.Optional.ifPresent(Optional.java:183)
at app//org.kie.kogito.trusty.service.messaging.BaseEventConsumer.handleMessage(BaseEventConsumer.java:46)
at app//org.kie.kogito.trusty.service.messaging.incoming.TraceEventConsumer.handleMessage(TraceEventConsumer.java:53)
at app//org.kie.kogito.trusty.service.messaging.incoming.TraceEventConsumer_ClientProxy.handleMessage(TraceEventConsumer_ClientProxy.zig:265)
at app//org.kie.kogito.trusty.service.messaging.incoming.TraceEventConsumer_SmallRyeMessagingInvoker_handleMessage_0a3202593771bc7690b17ee1bf6da29477fe226e.invoke(TraceEventConsumer_SmallRyeMessagingInvoker_handleMessage_0a3202593771bc7690b17ee1bf6da29477fe226e.zig:48)
at app//io.smallrye.reactive.messaging.AbstractMediator.invoke(AbstractMediator.java:79)
at app//io.smallrye.reactive.messaging.SubscriberMediator.lambda$null$10(SubscriberMediator.java:181)
at app//io.smallrye.reactive.messaging.SubscriberMediator$$Lambda$742/0x00000008404f0840.apply(Unknown Source)
at app//io.smallrye.mutiny.operators.UniOnItemTransformToUni.invokeAndSubstitute(UniOnItemTransformToUni.java:31)
at app//io.smallrye.mutiny.operators.UniOnItemTransformToUni$2.onItem(UniOnItemTransformToUni.java:74)
at app//io.smallrye.mutiny.context.ContextPropagationUniInterceptor$1.lambda$onItem$1(ContextPropagationUniInterceptor.java:35)
at app//io.smallrye.mutiny.context.ContextPropagationUniInterceptor$1$$Lambda$423/0x00000008403c9440.run(Unknown Source)
at app//io.smallrye.context.SmallRyeThreadContext.lambda$withContext$0(SmallRyeThreadContext.java:217)
at app//io.smallrye.context.SmallRyeThreadContext$$Lambda$269/0x00000008402ed440.execute(Unknown Source)
at app//io.smallrye.mutiny.context.ContextPropagationUniInterceptor$1.onItem(ContextPropagationUniInterceptor.java:35)
at app//io.smallrye.mutiny.operators.UniSerializedSubscriber.onItem(UniSerializedSubscriber.java:72)
at app//io.smallrye.mutiny.context.ContextPropagationUniInterceptor$1.lambda$onItem$1(ContextPropagationUniInterceptor.java:35)
at app//io.smallrye.mutiny.context.ContextPropagationUniInterceptor$1$$Lambda$423/0x00000008403c9440.run(Unknown Source)
at app//io.smallrye.context.SmallRyeThreadContext.lambda$withContext$0(SmallRyeThreadContext.java:217)
at app//io.smallrye.context.SmallRyeThreadContext$$Lambda$269/0x00000008402ed440.execute(Unknown Source)
at app//io.smallrye.mutiny.context.ContextPropagationUniInterceptor$1.onItem(ContextPropagationUniInterceptor.java:35)
at app//io.smallrye.mutiny.operators.UniSerializedSubscriber.onItem(UniSerializedSubscriber.java:72)
at app//io.smallrye.mutiny.operators.UniCreateFromCompletionStage.lambda$forwardFromCompletionStage$1(UniCreateFromCompletionStage.java:30)
at app//io.smallrye.mutiny.operators.UniCreateFromCompletionStage$$Lambda$745/0x00000008404f2040.accept(Unknown Source)
at java.base@11.0.8/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
at java.base@11.0.8/java.util.concurrent.CompletableFuture.uniWhenCompleteStage(CompletableFuture.java:883)
at java.base@11.0.8/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:2251)
at java.base@11.0.8/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:143)
at app//io.smallrye.mutiny.operators.UniCreateFromCompletionStage.forwardFromCompletionStage(UniCreateFromCompletionStage.java:22)
at app//io.smallrye.mutiny.operators.UniCreateFromCompletionStage.subscribing(UniCreateFromCompletionStage.java:50)
at app//io.smallrye.mutiny.operators.UniSerializedSubscriber.subscribe(UniSerializedSubscriber.java:43)
at app//io.smallrye.mutiny.operators.UniSerializedSubscriber.subscribe(UniSerializedSubscriber.java:38)
at app//io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:30)
at app//io.smallrye.mutiny.context.ContextPropagationUniInterceptor$2.lambda$subscribing$0(ContextPropagationUniInterceptor.java:51)
at app//io.smallrye.mutiny.context.ContextPropagationUniInterceptor$2$$Lambda$329/0x00000008403a1c40.run(Unknown Source)
at app//io.smallrye.context.SmallRyeThreadContext.lambda$withContext$0(SmallRyeThreadContext.java:217)
at app//io.smallrye.context.SmallRyeThreadContext$$Lambda$269/0x00000008402ed440.execute(Unknown Source)
at app//io.smallrye.mutiny.context.ContextPropagationUniInterceptor$2.subscribing(ContextPropagationUniInterceptor.java:51)
at app//io.smallrye.mutiny.operators.UniSerializedSubscriber.subscribe(UniSerializedSubscriber.java:43)
at app//io.smallrye.mutiny.operators.UniSerializedSubscriber.subscribe(UniSerializedSubscriber.java:38)
at app//io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:30)
at app//io.smallrye.mutiny.operators.UniOnItemTransformToUni.subscribing(UniOnItemTransformToUni.java:65)
at app//io.smallrye.mutiny.operators.UniSerializedSubscriber.subscribe(UniSerializedSubscriber.java:43)
at app//io.smallrye.mutiny.operators.UniSerializedSubscriber.subscribe(UniSerializedSubscriber.java:38)
at app//io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:30)
at app//io.smallrye.mutiny.context.ContextPropagationUniInterceptor$2.lambda$subscribing$0(ContextPropagationUniInterceptor.java:51)
at app//io.smallrye.mutiny.context.ContextPropagationUniInterceptor$2$$Lambda$329/0x00000008403a1c40.run(Unknown Source)
at app//io.smallrye.context.SmallRyeThreadContext.lambda$withContext$0(SmallRyeThreadContext.java:217)
at app//io.smallrye.context.SmallRyeThreadContext$$Lambda$269/0x00000008402ed440.execute(Unknown Source)
at app//io.smallrye.mutiny.context.ContextPropagationUniInterceptor$2.subscribing(ContextPropagationUniInterceptor.java:51)
at app//io.smallrye.mutiny.operators.UniSerializedSubscriber.subscribe(UniSerializedSubscriber.java:43)
at app//io.smallrye.mutiny.operators.UniSerializedSubscriber.subscribe(UniSerializedSubscriber.java:38)
at app//io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:30)
at app//io.smallrye.mutiny.operators.UniOnItemOrFailureFlatMap.subscribing(UniOnItemOrFailureFlatMap.java:48)
at app//io.smallrye.mutiny.operators.UniSerializedSubscriber.subscribe(UniSerializedSubscriber.java:43)
at app//io.smallrye.mutiny.operators.UniSerializedSubscriber.subscribe(UniSerializedSubscriber.java:38)
at app//io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:30)
at app//io.smallrye.mutiny.context.ContextPropagationUniInterceptor$2.lambda$subscribing$0(ContextPropagationUniInterceptor.java:51)
at app//io.smallrye.mutiny.context.ContextPropagationUniInterceptor$2$$Lambda$329/0x00000008403a1c40.run(Unknown Source)
at app//io.smallrye.context.SmallRyeThreadContext.lambda$withContext$0(SmallRyeThreadContext.java:217)
at app//io.smallrye.context.SmallRyeThreadContext$$Lambda$269/0x00000008402ed440.execute(Unknown Source)
at app//io.smallrye.mutiny.context.ContextPropagationUniInterceptor$2.subscribing(ContextPropagationUniInterceptor.java:51)
at app//io.smallrye.mutiny.operators.UniSerializedSubscriber.subscribe(UniSerializedSubscriber.java:43)
at app//io.smallrye.mutiny.operators.UniSerializedSubscriber.subscribe(UniSerializedSubscriber.java:38)
at app//io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:30)
at app//io.smallrye.mutiny.operators.UniSubscribeToCompletionStage.subscribe(UniSubscribeToCompletionStage.java:32)
at app//io.smallrye.mutiny.groups.UniSubscribe.asCompletionStage(UniSubscribe.java:104)
at app//io.smallrye.mutiny.Uni.subscribeAsCompletionStage(Uni.java:162)
at app//io.smallrye.reactive.messaging.SubscriberMediator.lambda$processMethodReturningACompletionStage$11(SubscriberMediator.java:186)
at app//io.smallrye.reactive.messaging.SubscriberMediator$$Lambda$294/0x0000000840303040.apply(Unknown Source)
at app//io.smallrye.mutiny.streams.stages.FlatMapCompletionStageFactory$FlatMapCompletionStage.lambda$apply$0(FlatMapCompletionStageFactory.java:46)
at app//io.smallrye.mutiny.streams.stages.FlatMapCompletionStageFactory$FlatMapCompletionStage$$Lambda$318/0x0000000840379840.apply(Unknown Source)
at app//io.smallrye.mutiny.groups.MultiOnItem.lambda$transformToUni$5(MultiOnItem.java:290)
at app//io.smallrye.mutiny.groups.MultiOnItem$$Lambda$319/0x0000000840379c40.apply(Unknown Source)