Create Oracle WebCenter Content domain

The WebCenter Content deployment scripts demonstrate the creation of Oracle WebCenter Content 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.

Contents

Prerequisites

Before you begin, complete the following steps:

  1. Review the Domain resource documentation.
  2. Review the requirements and limitations.
  3. Ensure that you have executed all the preliminary steps in Prepare your environment.
  4. Ensure that the database schemas were created and the WebLogic Kubernetes Operator are running.

Prepare to use the create domain script

The sample scripts for Oracle WebCenter Content domain deployment are available at ${WORKDIR}/create-wcc-domain.

You must edit create-domain-inputs.yaml (or a copy of it) located under ${WORKDIR}/create-wcc-domain/domian-home-on-pv to provide the details for your domain. Refer to the configuration parameters below to understand the information that you must provide in this file.

Configuration parameters

The following parameters can be provided in the inputs file.

Parameter Definition Default
sslEnabled Boolean indicating whether to enable SSL for each WebLogic Server instance. 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
clusterName Name of the WebLogic cluster instance to generate for the domain. By default the cluster name is ucm_cluster & ibr_cluster for the WebCenter Content domain. ucm_cluster
configuredManagedServerCount Number of Managed Server instances to generate for the domain. 5
createDomainFilesDir Directory on the host machine to locate all the files to create a WebLogic domain, including the script that is specified in the createDomainScriptName property. 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 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 in the createDomainScriptName property) 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 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 in the createDomainScriptsMountPath property. If you need to provide your own scripts to create the domain home, instead of using the built-it 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 WebCenter Content domain. If not specified, the value is derived from the domainUID as /shared/domains/<domainUID>. /u01/oracle/user_projects/domains/wccinfra
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 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. wccinfra
exposeAdminNodePort Boolean indicating if the Administration Server is exposed outside of the Kubernetes cluster. false
exposeAdminT3Channel Boolean indicating if the T3 administrative channel is exposed outside the Kubernetes cluster. false
image WebCenter Content Docker image. WebLogic Kubernetes Operator requires Oracle WebCenter Content 12.2.1.4.0 Refer to Obtain the Oracle WebCenter Content Docker image for details on how to obtain or create the image. oracle/wccontent:12.2.1.4.0
imagePullPolicy WebLogic Docker image pull policy. Legal values are IfNotPresent, Always, or 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 indicating whether to include the server .out to the pod’s stdout. true
initialManagedServerReplicas Number of UCM Managed Servers to initially start for the domain. 3
javaOptions Java options for starting the Administration Server and Managed Servers. A Java option can have references to one or more of the following pre-defined variables to obtain WebLogic domain information: $(DOMAIN_NAME), $(DOMAIN_HOME), $(ADMIN_NAME), $(ADMIN_PORT), and $(SERVER_NAME). If sslEnabled is set to true and the WebLogic demo certificate is used, add -Dweblogic.security.SSL.ignoreHostnameVerification=true to allow the Managed Servers to connect to the Administration Server while booting up. The WebLogic generated demo certificate in this environment typically 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/wccinfra
managedServerNameBase Base string used to generate Managed Server names. ucm_server
managedServerPort Port number for each Managed Server. By default the managedServerPort is 16200 for the ucm_server & managedServerPort is 16250 for the ibr_server. 16200
managedServerSSLPort SSL port number for each Managed Server. By default the managedServerSSLPort is 16201 for the ucm_server & managedServerSSLPort is 16251 for the ibr_server. 16201
namespace Kubernetes namespace in which to create the domain. wccns
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. wccinfra-domain-pvc
productionModeEnabled Boolean indicating if production mode is enabled for the domain. true
serverStartPolicy Determines which WebLogic Server instances will be started. Legal values are NEVER, IF_NEEDED, ADMIN_ONLY. IF_NEEDED
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. wccinfra-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. Please 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 WCC1. You may wish to make this the same as the domainUID in order to simplify matching domains to their RCU schemas. WCC1
rcuDatabaseURL The database URL. <YOUR DATABASE CONNECTION DETAILS>
rcuCredentialsSecret The Kubernetes secret containing the database credentials. wccinfra-rcu-credentials
ipmEnabled Boolean indicating whether to enable WebCenter Imaging application false
captureEnabled Boolean indicating whether to enable WebCenter Capture application false
adfuiEnabled Boolean indicating whether to enable WebCenter ADF UI application false
initialIpmServerReplicas Number of IPM Managed Servers to initially start for the domain. 0
initialCaptureServerReplicas Number of CAPTURE Managed Servers to initially start for the domain. 0
initialAdfuiServerReplicas Number of ADFUI Managed Servers to initially start for the domain. 0

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-inputs.yaml file. Those properties include the adminServerName, clusterName and managedServerNameBase. 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 ("-").

Note: The properties ipmEnabled, captureEnabled, adfuiEnabled are set to false by default and should be updated to true if you need to enable the respective applications. If any of those three applications (IPM, CAPTURE & ADFUI) are enabled, respective initial replica count must be a non-zero number.

The sample demonstrates how to create the Oracle WebCenter Content domain home and associated Kubernetes resources for that 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

Run the create domain script, specifying your inputs file and an output directory to store the generated artifacts:

$ cd ${WORKDIR}/create-wcc-domain/domain-home-on-pv/

$ ./create-domain.sh \
  -i create-domain-inputs.yaml \
  -o <path to output-directory>

The script will perform the following steps:

  • Create a directory for the generated Kubernetes YAML files for this domain if it does not already exist. The path name is <path to output-directory>/weblogic-domains/<domainUID>. If the directory already exists, its contents must be removed before using this script.
  • Create a Kubernetes job that will start up a utility Oracle WebCenter Content container and run offline WLST scripts to create the domain on the shared storage.
  • Run and wait for the job to finish.
  • Create a Kubernetes domain YAML file, domain.yaml, in the “output” directory that was created above. This YAML file can be used to create the Kubernetes resource using the kubectl create -f or kubectl apply -f command.
  • Create a convenient utility script, delete-domain-job.yaml, to clean up the domain home created by the create script.

Run the managed-server-wrapper script

Run managed-server-wrapper script, which internally applies the domain YAML. This script also applies initial configurations for Managed Server containers and readies Managed Servers for future inter-container communications.

$ cd ${WORKDIR}/create-wcc-domain/domain-home-on-pv/

$ ./start-managed-servers-wrapper.sh -o <path_to_output_directory> -p <load_balancer_port> -n <ibr_node_port> -m <ucm_node_port>

Note: In the above command, parameters -n and -m refers to the node-ports to be used for exposing IBR intradoc port and UCM intradoc port respectively. Suggested values for both these node-ports should be within a range of 30000-32767. Please keep in mind that <ibr_node_port> value must be specified at all time, whereas <ucm_node_port> value is only required when IPM and ADFUI Managed Servers are enabled.

Run the startup configuration scripts for IPM and WCCADF applications as applicable

Run the script configure-ipm-connection.sh to do startup configurations if IPM is enabled.

$ cd ${WORKDIR}/create-wcc-domain/domain-home-on-pv/
$ ./configure-ipm-connection.sh -l <load_balancer_external_ip> -p <load_balancer_port>

Run the script configure-wccadf-domain.sh to do startup configurations if ADFUI is enabled.

$ cd ${WORKDIR}/create-wcc-domain/domain-home-on-pv/
$ ./configure-wccadf-domain.sh -n <node_ip>

Patch the domain for the changes to be applied to the domain.

#STOP
$ kubectl patch domain DOMAINUID -n NAMESPACE --type='json' -p='[{"op": "replace", "path": "/spec/serverStartPolicy", "value": "NEVER" }]'

$ sleep 2m

#START
$ kubectl patch domain DOMAINUID -n NAMESPACE --type='json' -p='[{"op": "replace", "path": "/spec/serverStartPolicy", "value": "IF_NEEDED" }]'

The default domain created by the script has the following characteristics:

  • An Administration Server named AdminServer listening on port 7001.
  • A configured cluster named ucm_cluster of size 3.
  • A configured cluster named ibr_cluster of size 1.
  • A configured cluster named ipm_cluster of size 3.
  • A configured cluster named capture_cluster of size 3.
  • A configured cluster named wccadf_cluster of size 3.
  • Managed Servers, named ucm_cluster listening on port 16200.
  • Managed Servers, named ibr_cluster listening on port 16250.
  • Managed Servers, named ipm_cluster listening on port 16000.
  • Managed Servers, named capture_cluster listening on port 16400.
  • Managed Servers, named wccadf_cluster listening on port 16225.
  • Log files that are located in /shared/logs/<domainUID>.

Verify the results

The create domain script will verify that the domain was created, and will report failure if there was any 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.

Generated YAML files with the default inputs
Click here to see sample content of the generated `domain.yaml`.

Verify the domain

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.

Click here to see a sample domain description.

In the Status section of the output, the available servers and clusters are listed. Note that if this command is issued soon after the script finishes, there may be no servers available yet, or perhaps only the Administration Server but no Managed Servers. WebLogic Kubernetes Operator will start up the Administration Server first and wait for it to become ready before starting the Managed Servers.

Verify the pods

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 Managed Servers for ucm, ibr, ipm, capture and wccadf cluster are running.

$ kubectl get pod -n wccns
NAME                                                READY   STATUS      RESTARTS   AGE
rcu                                                 1/1     Running     0          78d
wccinfra-adminserver                                1/1     Running     0          9d
wccinfra-create-fmw-infra-sample-domain-job-l8r9d   0/1     Completed   0          9d
wccinfra-ibr-server1                                1/1     Running     0          9d
wccinfra-ucm-server1                                1/1     Running     0          9d
wccinfra-ucm-server2                                1/1     Running     0          9d
wccinfra-ucm-server3                                1/1     Running     0          9d
wccinfra-ipm-server1                                1/1     Running     0          9d
wccinfra-ipm-server2                                1/1     Running     0          9d
wccinfra-ipm-server3                                1/1     Running     0          9d
wccinfra-capture-server1                            1/1     Running     0          9d
wccinfra-capture-server2                            1/1     Running     0          9d
wccinfra-capture-server3                            1/1     Running     0          9d
wccinfra-wccadf-server1                             1/1     Running     0          9d
wccinfra-wccadf-server2                             1/1     Running     0          9d
wccinfra-wccadf-server3                             1/1     Running     0          9d

Verify the services

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.

Click here to see a sample list of services.

Scale-up/down Managed Server Counts

For an existing domain, these managed-server replica counts can be modified, independent of each other, by modifying the domain.yaml (to be handled by the customers with sufficient access). To scale up or scale down managed server counts in an existing domain, the following steps need to be performed.

$ cd ${WORKDIR}/create-wcc-domain/domain-home-on-pv/output/weblogic-domains/wccinfra/

# modify respective managed server replicas to scale up or scale down and save it.
$ vim domain.yaml

# Apply the updated domain.yaml configuration file
$ kubectl apply -f domain.yaml

Details required for configuring IBR provider on UCM

  1. Obtain details for service wccinfra-cluster-ibr-cluster-ext for the NodePort mapped to IBR intradoc port

    NAME                            TYPE      CLUSTER-IP    EXTERNAL-IP PORT(S)                      
    wccinfra-cluster-ibr-cluster-ext NodePort 10.109.247.52 <none>     5555:30555/TCP               
    
  2. Create the outgoing provider by providing following details and restart the servers.

    Please provide the NodePort value (in the above sample - 30555), as Server Port.

    Server Host Name:  <hostname in which IBR Server pod is deployed>
    
    Server Port: 30555
    

    wcc-provider-ucm-ibr

Configure an additional mount or shared space to a domain for Imaging and Capture

Optionally, if you want to configure an additional mount or shared space to a domain, for WebCenter Imaging and WebCenter Capture applications for file imports, refer to the Configure an Additional Mount or Shared-Space to a Domain for Imaging and Capture.