The SOA deployment scripts demonstrate the creation of an Oracle SOA Suite domain home on an existing Kubernetes persistent volume (PV) and persistent volume claim (PVC). The scripts also generate the domain YAML file, which can then be used to start the Kubernetes artifacts of the corresponding domain.
Before you begin, complete the following steps:
The sample scripts for Oracle SOA Suite domain deployment are available at ${WORKDIR}/create-soa-domain
.
You must edit create-domain-inputs.yaml
(or a copy of it) to provide the details for your domain.
Refer to the configuration parameters below to understand the information that you must
provide in this file.
The following parameters can be provided in the inputs file.
Parameter | Definition | Default |
---|---|---|
sslEnabled |
Boolean value that indicates whether SSL must be enabled for each WebLogic Server instance. To enable end-to-end SSL access during load balancer setup, set sslEnabled to true and also, set appropriate value for the javaOptions property as detailed in this table. |
false |
adminPort |
Port number for the Administration Server inside the Kubernetes cluster. | 7001 |
adminServerSSLPort |
SSL port number of the Administration Server inside the Kubernetes cluster. | 7002 |
adminNodePort |
Port number of the Administration Server outside the Kubernetes cluster. | 30701 |
adminServerName |
Name of the Administration Server. | AdminServer |
configuredManagedServerCount |
Number of Managed Server instances to generate for the domain. | 5 |
soaClusterName |
Name of the SOA WebLogic Server cluster instance to generate for the domain. By default, the cluster name is soa_cluster . This configuration parameter is applicable only for soa and soaosb domain types. |
soa_cluster |
osbClusterName |
Name of the Oracle Service Bus WebLogic Server cluster instance to generate for the domain. By default, the cluster name is osb_cluster . This configuration parameter is applicable only for osb and soaosb domain types. |
osb_cluster |
createDomainFilesDir |
Directory on the host machine to locate all the files to create a WebLogic Server domain, including the script that is specified in the createDomainScriptName parameter. By default, this directory is set to the relative path wlst , and the create script will use the built-in WLST offline scripts in the wlst directory to create the WebLogic Server domain. An absolute path is also supported to point to an arbitrary directory in the file system. The built-in scripts can be replaced by the user-provided scripts as long as those files are in the specified directory. Files in this directory are put into a Kubernetes config map, which in turn is mounted to the createDomainScriptsMountPath , so that the Kubernetes pod can use the scripts and supporting files to create a domain home. |
wlst |
createDomainScriptsMountPath |
Mount path where the create domain scripts are located inside a pod. The create-domain.sh script creates a Kubernetes job to run the script (specified by the createDomainScriptName parameter) in a Kubernetes pod to create a domain home. Files in the createDomainFilesDir directory are mounted to this location in the pod, so that the Kubernetes pod can use the scripts and supporting files to create a domain home. |
/u01/weblogic |
createDomainScriptName |
Script that the create domain script uses to create a WebLogic Server domain. The create-domain.sh script creates a Kubernetes job to run this script to create a domain home. The script is located in the in-pod directory that is specified by the createDomainScriptsMountPath parameter. If you need to provide your own scripts to create the domain home, instead of using the built-in scripts, you must use this property to set the name of the script that you want the create domain job to run. |
create-domain-job.sh |
domainHome |
Home directory of the SOA domain. If not specified, the value is derived from the domainUID as /shared/domains/<domainUID> . |
/u01/oracle/user_projects/domains/soainfra |
domainPVMountPath |
Mount path of the domain persistent volume. | /u01/oracle/user_projects |
domainUID |
Unique ID that will be used to identify this particular domain. Used as the name of the generated WebLogic Server domain as well as the name of the Kubernetes domain resource. This ID must be unique across all domains in a Kubernetes cluster. This ID cannot contain any character that is not valid in a Kubernetes service name. | soainfra |
domainType |
Type of the domain. Mandatory input for Oracle SOA Suite domains. You must provide one of the supported domain type values: soa (deploys a SOA domain with Enterprise Scheduler (ESS)), osb (deploys an Oracle Service Bus domain), and soaosb (deploys a domain with SOA, Oracle Service Bus, and Enterprise Scheduler (ESS)). |
soa |
exposeAdminNodePort |
Boolean value indicating if the Administration Server is exposed outside of the Kubernetes cluster. | false |
exposeAdminT3Channel |
Boolean value indicating if the T3 administrative channel is exposed outside the Kubernetes cluster. | false |
httpAccessLogInLogHome |
Boolean value indicating if server HTTP access log files should be written to the same directory as logHome . If false , server HTTP access log files will be written to the directory specified in the WebLogic Server domain home configuration. |
true |
image |
SOA Suite Docker image. The operator requires Oracle SOA Suite 12.2.1.4. Refer to Obtain the Oracle SOA Suite Docker image for details on how to obtain or create the image. | soasuite:12.2.1.4 |
imagePullPolicy |
Oracle SOA Suite Docker image pull policy. Valid values are IfNotPresent , Always , Never . |
IfNotPresent |
imagePullSecretName |
Name of the Kubernetes secret to access the Docker Store to pull the WebLogic Server Docker image. The presence of the secret will be validated when this parameter is specified. | |
includeServerOutInPodLog |
Boolean value indicating whether to include the server .out to the pod’s stdout. | true |
initialManagedServerReplicas |
Number of Managed Servers to initially start for the domain. | 1 |
javaOptions |
Java options for initiating the Administration Server and Managed Servers. A Java option can have references to one or more of the following predefined variables to obtain WebLogic Server domain information: $(DOMAIN_NAME) , $(DOMAIN_HOME) , $(ADMIN_NAME) , $(ADMIN_PORT) , and $(SERVER_NAME) . If sslEnabled is set to true , add -Dweblogic.ssl.Enabled=true -Dweblogic.security.SSL.ignoreHostnameVerification=true to allow the Managed Servers to connect to the Administration Server while booting up. In this environment, the demo certificate generated by the WebLogic Server contains a host name that is different from the runtime container’s host name. |
-Dweblogic.StdoutDebugEnabled=false |
logHome |
The in-pod location for the domain log, server logs, server out, and Node Manager log files. If not specified, the value is derived from the domainUID as /shared/logs/<domainUID> . |
/u01/oracle/user_projects/domains/logs/soainfra |
soaManagedServerNameBase |
Base string used to generate Managed Server names in the SOA cluster. The default value is soa_server . This configuration parameter is applicable only for soa and soaosb domain types. |
soa_server |
osbManagedServerNameBase |
Base string used to generate Managed Server names in the Oracle Service Bus cluster. The default value is osb_server . This configuration parameter is applicable only for osb and soaosb domain types. |
osb_server |
soaManagedServerPort |
Port number for each Managed Server in the SOA cluster. This configuration parameter is applicable only for soa and soaosb domain types. |
8001 |
osbManagedServerPort |
Port number for each Managed Server in the Oracle Service Bus cluster. This configuration parameter is applicable only for osb and soaosb domain types. |
9001 |
soaManagedServerSSLPort |
SSL port number for each Managed Server in the SOA cluster. This configuration parameter is applicable only for soa and soaosb domain types. |
8002 |
osbManagedServerSSLPort |
SSL port number for each Managed Server in the Oracle Service Bus cluster. This configuration parameter is applicable only for osb and soaosb domain types. |
9002 |
namespace |
Kubernetes namespace in which to create the domain. | soans |
persistentVolumeClaimName |
Name of the persistent volume claim created to host the domain home. If not specified, the value is derived from the domainUID as <domainUID>-weblogic-sample-pvc . |
soainfra-domain-pvc |
productionModeEnabled |
Boolean value indicating if production mode is enabled for the domain. | true |
serverStartPolicy |
Determines which WebLogic Server instances will be started. Valid values are Never , IfNeeded , or AdminOnly . |
IfNeeded |
t3ChannelPort |
Port for the T3 channel of the NetworkAccessPoint. | 30012 |
t3PublicAddress |
Public address for the T3 channel. This should be set to the public address of the Kubernetes cluster. This would typically be a load balancer address. For development environments only: In a single server (all-in-one) Kubernetes deployment, this may be set to the address of the master, or at the very least, it must be set to the address of one of the worker nodes. | If not provided, the script will attempt to set it to the IP address of the Kubernetes cluster. |
weblogicCredentialsSecretName |
Name of the Kubernetes secret for the Administration Server’s user name and password. If not specified, then the value is derived from the domainUID as <domainUID>-weblogic-credentials . |
soainfra-domain-credentials |
weblogicImagePullSecretName |
Name of the Kubernetes secret for the Docker Store, used to pull the WebLogic Server image. | |
serverPodCpuRequest , serverPodMemoryRequest , serverPodCpuCLimit , serverPodMemoryLimit |
The maximum amount of compute resources allowed, and minimum amount of compute resources required, for each server pod. Refer to the Kubernetes documentation on Managing Compute Resources for Containers for details. |
Resource requests and resource limits are not specified. |
rcuSchemaPrefix |
The schema prefix to use in the database. For example SOA1 . You may wish to make this the same as the domainUID in order to simplify matching domains to their RCU schemas. |
SOA1 |
rcuDatabaseURL |
The database URL. | oracle-db.default.svc.cluster.local:1521/devpdb.k8s |
rcuCredentialsSecret |
The Kubernetes secret containing the database credentials. | soainfra-rcu-credentials |
persistentStore |
The persistent store for ‘JMS servers’ and ‘Transaction log store’ in the domain. Valid values are jdbc , file . |
jdbc |
Note that the names of the Kubernetes resources in the generated YAML files may be formed with the
value of some of the properties specified in the create-domain-inputs.yaml
file. Those properties include
the adminServerName
, soaClusterName
, and soaManagedServerNameBase
etc. If those values contain any
characters that are invalid in a Kubernetes service name, those characters are converted to
valid values in the generated YAML files. For example, an uppercase letter is converted to a
lowercase letter and an underscore ("_")
is converted to a hyphen ("-")
.
The sample demonstrates how to create an Oracle SOA Suite domain home and associated Kubernetes resources for the domain. In addition, the sample provides the capability for users to supply their own scripts to create the domain home for other use cases. The generated domain YAML file could also be modified to cover more use cases.
Run the create domain script, specifying your inputs file and an output directory to store the generated artifacts:
$ ./create-domain.sh \
-i create-domain-inputs.yaml \
-o <path to output-directory>
The script will perform the following steps:
<path to output-directory>/weblogic-domains/<domainUID>
.
If the directory already exists, its contents must be removed before using this script.domain.yaml
, in the “output” directory that was created above.delete-domain-job.yaml
, to clean up the domain home
created by the create script.Review the Read Me file of each patch listed in the following MOS notes, depending on your Oracle Linux version.
Also, for SOA bundle 12.2.1.4.230827 patch post install tasks, see 35748499. Refer Section 6: Post-Installation Instructions in the Read Me file for instructions related to purge and maven plugin.
You can ignore the instructions to clean PS3 maven plugin files, since it will be automated as part of container image creation.
Perform the following steps to purge.
Create a YAML file named soapostinstall.yaml
with the following sample. The necessary SQL scripts are mounted inside pod at “/soa_purge”.
Note: Replace the domain namespace
soans
and SOA Suite imagesoasuite:12.2.1.4
with the details specific to your environment in the following sample YAML.
apiVersion: v1
kind: Pod
metadata:
name: soapostinstall
namespace: soans
labels:
app.kubernetes.io/name: dbclient
spec:
containers:
- name: dbclient-container
image: ghcr.io/oracle/oraclelinux8-instantclient:21
command: ['sh', '-c', 'echo The dbclient pod is running! && sleep 3600']
volumeMounts:
- mountPath: "/soa_purge"
name: soa-shared-volume
initContainers:
- name: soa-oh
image: soasuite:12.2.1.4
command: ['sh', '-c', "cp -rf /u01/oracle/soa/common/sql/soainfra/sql/oracle/122140/ /soa_purge"]
volumeMounts:
- mountPath: "/soa_purge"
name: soa-shared-volume
volumes:
- name: soa-shared-volume
Apply the YAML to create a Kubernetes pod named soapostinstall
in the soans
namespace.
$ kubectl apply -f soapostinstall.yaml
Start a bash shell in the soapostinstall
pod.
$ kubectl exec -it -n soans soapostinstall -- bash
A bash shell opens in the soapostinstall
pod.
[root@soapostinstall /]#
Reload the SOA purge scripts as a SOAINFRA user.
Change the directory to the location where the scripts for post installation steps are stored.
[root@soapostinstall /]# cd /soa_purge/122140/soa_purge12/
Connect to the database as a SOAINFRA user.
[root@soapostinstall /]# sqlplus <SOAINFRA_USER>/<PASSWORD>@<DATABASE_SERVICE>
For example, if the schema prefix is SOA1
, schema password is Oradoc_db1
and connection string to database is oracle-db.default.svc.cluster.local:1521/devpdb.k8s
, you can connect to database as SOAINFRA user using the following command.
[root@soapostinstall /]# sqlplus SOA1_SOAINFRA/Oradoc_db1@oracle-db.default.svc.cluster.local:1521/devpdb.k8s
Execute the following script.
SQL> @soa_purge_scripts.sql
SQL> show errors
Verify the SOA purge scripts.
Change the directory to location where the SOA purge scripts are stored.
[root@soapostinstall /]# cd /soa_purge/122140/verify12/
Connect to the database as a SOAINFRA user.
[root@soapostinstall /]# sqlplus SOA1_SOAINFRA/Oradoc_db1@oracle-db.default.svc.cluster.local:1521/devpdb.k8s
Execute the following script.
SQL> @soa_verify_scripts.sql
SQL> show errors
Recreate the auto purge jobs with new jobs added in 12.2.1.4.201210SOABP.
Change the directory to location where scripts are stored.
[root@soapostinstall /]# cd /soa_purge/122140/soa_purge12/soa
Connect to the database as a SOAINFRA user.
[root@soapostinstall /]# sqlplus SOA1_SOAINFRA/Oradoc_db1@oracle-db.default.svc.cluster.local:1521/devpdb.k8s
Execute the following script.
SQL> @loadcompbasedpurgeprogram.sql
SQL> show errors
The domain.yaml
created by create-domain.sh
script above has details about the Oracle SOA Suite Domain and Cluster Kubernetes resources. You can create Oracle SOA Suite Domain using the kubectl create -f
or kubectl apply -f
command:
```
$ kubectl apply -f <path to output-directory>/weblogic-domains/<domainUID>/domain.yaml
```
The default domain created by the script has the following characteristics:
AdminServer
listening on port 7001
.soa_cluster
of size 5.soa_server1
listening on port 8001
./shared/logs/<domainUID>
.Refer to the troubleshooting page to troubleshoot issues during the domain creation.
The create domain script verifies that the domain was created, and reports failure if there is an error. However, it may be desirable to manually verify the domain, even if just to gain familiarity with the various Kubernetes objects that were created by the script.
To confirm that the domain was created, enter the following command:
$ kubectl describe domain DOMAINUID -n NAMESPACE
Replace DOMAINUID
with the domainUID
and NAMESPACE
with the actual namespace.
In the Status
section of the output, the available servers and clusters are listed.
Note that if this command is issued very soon after the script finishes, there may be
no servers available yet, or perhaps only the Administration Server but no Managed Servers.
The operator will start up the Administration Server first and wait for it to become ready
before starting the Managed Servers.
Enter the following command to see the pods running the servers:
$ kubectl get pods -n NAMESPACE
Here is an example of the output of this command. You can verify that an Administration Server and a Managed Server for each cluster (SOA and Oracle Service Bus) are running for soaosb
domain type.
$ kubectl get pods -n soans
NAME READY STATUS RESTARTS AGE
soainfra-adminserver 1/1 Running 0 53m
soainfra-osb-server1 1/1 Running 0 50m
soainfra-soa-server1 1/1 Running 0 50m
Enter the following command to see the services for the domain:
$ kubectl get services -n NAMESPACE
Here is an example of the output of this command. You can verify that services for Administration Server and Managed Servers (for SOA and Oracle Service Bus clusters) are created for soaosb
domain type.