Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
The following guide will show steps to deploy Joget on EKS using Terraform
Prerequisites
Configuring Terraform Remote Backend
Disclaimer: The Terraform code provisions the minimum required infrastructure. You may have to modify some of the parameters to ensure that it works in your environment. You may refer to the official AWS and Hashicorp documentation for more details
app_name=”<your-app-name>”
terraform init
terraform plan
to observe the resources that will be deployed (optional)terraform apply -auto-approve
infrastructure
directory and open main.tf
backend "s3" {
bucket = "xxx"
key = "terraform.infrastructure.tfstate"
region = "xxx"
dynamodb_table = "xxx"
}
Note: This process will create a local Terraform state. The remote state will only apply for infrastructure.
Deploying AWS Infrastructure
terraform.tfvars
file and ensure the following variables are includedapp_name=”<your-app-name>”
cluster_name=”<your-eks-cluster-name>”
rds_username=”<your-rds-username>”
rds_password=”<your-rds-password>”
terraform init
terraform plan
to observe the resources that will be deployed (optional)terraform apply -auto-approve
Note: This step will take some time, around 20-30 minutes.
Core Services and Resource Deployed
These are the core services and resources (non exhaustive) list deployed from Terraform:
Deploying Joget DX 8
kubectl apply -f joget-dx8-tomcat9-deployment.yaml
kubectl get pods -A
to obtain the status of the pods.Accessing Joget through Load Balancer
kubectl get ingress -A
. You should see the DNS under Address column as follows:k8s-namespace-RANDOM-STRING.REGION.elb.amazonaws.com
/jw
. It will redirect you to the database setup.Note: The Terraform IaC has RDS Aurora Serverless included in the Infrastructure, and as such, it will be deployed alongside the EKS. You may use the RDS to better synergize with the VPC configuration.
Using EFS with ReadWriteMany access mode
By default, the EKS cluster's Nodes will use EBS through EBS CSI Driver which only supports ReadWriteOnce. The Terraform already containing script to deploy EFS CSI Driver. To use EFS,
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: <your-efs-sc-name>
provisioner: efs.csi.aws.com
parameters:
provisioningMode: efs-ap
fileSystemId: <efs-file-id>
directoryPerms: "775"
reclaimPolicy: Retain
kubectl apply -f
<storageclass>.yamljoget-dx8-tomcat9-deployment.yaml
file to this:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: efs-claim
spec:
accessModes:
- ReadWriteMany
storageClassName: <your-efs-sc-name>
resources:
requests:
storage: 5Gi
kubectl delete pvc efs-claim
, then recreate it using kubectl apply -f joget-dx8-tomcat9-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: joget-dx8-tomcat9
labels:
app: joget-dx8-tomcat9
spec:
replicas: 1
selector:
matchLabels:
app: joget-dx8-tomcat9
template:
metadata:
labels:
app: joget-dx8-tomcat9
spec:
volumes:
- name: <efs-pv-name>
persistentVolumeClaim:
claimName: joget-dx8-tomcat9-pvc
securityContext:
runAsUser: 1000
fsGroup: 0
containers:
- name: joget-dx8-tomcat9
image: jogetworkflow/joget-dx8-tomcat9:latest
ports:
- containerPort: 8080
volumeMounts:
- name: <efs-pv-name>
mountPath: /opt/joget/wflow
env:
- name: KUBERNETES_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
Common Errors
Terraform
Kubernetes/EKS
aws_auth_users= [
{
userarn = "arn:aws:iam::<account-id>:user/<username>"
username = "<username>"
groups = ["system:masters"]
}
]
If you are using roles, you may append the aws_auth_roles block like so:
{
rolearn = “arn:aws:iam::<account-id>:role/<role-name>”
username = "<role-name>"
groups = ["system:masters"]
}