Configuring Product Master deployment YAML (Fix Pack 6 and later)

Before deployment you need to configure Product Master YAML file.

Before you begin

  • Ensure the system requirements for Container are met and required software is installed.
  • File storage is mandatory for ‘appdata’ persistent volume. We recommend File storage for all the persistent volumes. If you use file storage ‘access_modes’ should be set to ReadWriteMany.
  • All persistent volume claims are mandatory for successful deployment.
  • Before performing un-deployment, it is recommended to take complete backup of all the persistent volumes.

Procedure

  1. Review and update secret values in the app_secrets.yaml file.
    1. Generate self-signed certificate or procure valid certificate that is issued by the certificate authority for applying to the Ingress routes, which in turn are applied to application URLs. Convert certificate and key to Base64 format by using the following command.
      
      cat crt.cert | base64
      cat cert.key | base64
      Convert the output to single line for the crt.cert and cert.key files.
  2. Update the values in the app_secrets.yaml file in the following format.
    apiVersion: v1
    kind: Secret
    metadata:
      name: app-secret
      namespace: <namespace>
    type: Opaque
    stringData:
    #Database details 
      db_type: "<db2 / oracle>"
      db_name: "<DB name>"
      db_host: "<IP  or hostname of DB>"
      db_user: "<DB username>"
      db_pass: "<DB password. For FP5 and earlier releases provide encrypted password.>"
      db_port: "<DB server port>"
    #SSL details
      db_ssl_crt: "<database plain text ssl certificate>"
    #IBM Watson Knowledge Catalog details
      cpd_host_url: "<CPD host URL>"
      cpd_user_name: "<CPD User name>"
      wkc_auth_api_key: "<WKC API Key>"
      wkc_catalog_name: "<WKC Catalog name>"  
    #Simple Mail Transfer Protocol (SMTP) details
      smtp_address: "<SMTP server hostname>"
      from_address: "<From email address>"
      smtp_port: "<SMTP server port>"
      smtp_user: "<SMTP username or API key>"
      smtp_pass: "<SMTP password>"
      smtp_additional_props: "<SMTP additional properties>"
    #Security Assertion Markup Language (SAML) Single sign-on (SSO) details
      sso_company: "<company code>"
      sso_config_adminui: "<AdminUI SAML WebSSO configuration for IBM WebSphere® Liberty, in the <samlWebSso20>..</samlWebSso20>> format"
      sso_config_personaui: "<PersonaUI SAML WebSSO configuration for IBM WebSphere® Liberty, in the format <samlWebSso20>..</samlWebSso20>>"
      sso_idp_metadata: "<Identity provider metadata file content>"
    
    apiVersion: v1
    kind: Secret
    metadata:
      name: tls-secret
      namespace: <namespace>
    type: kubernetes.io/tls
    data:
    #Specify the Base64 converted domain name certificate and key in a single line without any space
      tls.crt: ""
      tls.key: "" 
  3. Following is a list of sample deployment files for your reference.
    catalog_source.yaml
    
    apiVersion: operators.coreos.com/v1alpha1
    kind: CatalogSource
    metadata:
      name: ibm-productmaster-catalog
      namespace: <namespace>
    spec:
      displayName: IBM Product Master
      publisher: IBM
      sourceType: grpc
      image: registry.ng.bluemix.net/product_master/ipm-operator-catalog@<DIGEST_VALUE>
    
    operator_group.yaml
    
    apiVersion: operators.coreos.com/v1alpha2
    kind: OperatorGroup
    metadata:
      name: ibm-productmaster-catalog-group
      namespace: <namespace>
    spec:
      targetNamespaces:
      - <namespace>
    
    subscription.yaml
    
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: ibm-productmaster-catalog-subscription
      namespace: <namespace>
    spec:
      channel: v1.0
      name: productmaster-operator
      installPlanApproval: Automatic
      source: ibm-productmaster-catalog
      sourceNamespace: <namespace>
    
    volumes.yaml
    
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: appdata-volume
      namespace: default
      labels:
        svc: appdata-volume
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteMany
      storageClassName: standard
      hostPath:
        path: /mnt/ipm12/appdata
    ---
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: admin-log-volume
      namespace: default
      labels:
        svc: admin-log-volume
    spec:
      capacity:
        storage: 2Gi
      accessModes:
        - ReadWriteOnce
      storageClassName: standard
      hostPath:
        path: /mnt/ipm12/admin
    ---
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: ftsind-log-volume
      namespace: default
      labels:
        svc: ftsind-log-volume
    spec:
      capacity:
        storage: 2Gi
      accessModes:
        - ReadWriteOnce
      storageClassName: standard
      hostPath:
        path: /mnt/ipm12/ftsindlog
    
    ---
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: ftspim-log-volume
      namespace: default
      labels:
        svc: ftspim-log-volume
    spec:
      capacity:
        storage: 2Gi
      accessModes:
        - ReadWriteOnce
      storageClassName: standard
      hostPath:
        path: /mnt/ipm12/ftspimlog
    ---
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: gds-log-volume
      namespace: default
      labels:
        svc: gds-log-volume
    spec:
      capacity:
        storage: 2Gi
      accessModes:
        - ReadWriteOnce
      storageClassName: standard
      hostPath:
        path: /mnt/ipm12/gds
    ---
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: ml-log-volume
      namespace: default
      labels:
        svc: ml-log-volume
    spec:
      capacity:
        storage: 2Gi
      accessModes:
        - ReadWriteOnce
      storageClassName: standard
      hostPath:
        path: /mnt/ipm12/ml
    ---
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: mongodb-data-volume
      namespace: default
      labels:
        svc: mongodb-data-volume
    spec:
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      storageClassName: standard
      hostPath:
        path: /mnt/ipm12/mongodb
    ---
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: mongodb-log-volume
      namespace: default
      labels:
        svc: mongodb-log-volume
    spec:
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      storageClassName: standard
      hostPath:
        path: /mnt/ipm12/mongodblog
    ---
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: mq-data-volume
      namespace: default
      labels:
        svc: mq-data-volume
    spec:
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      storageClassName: standard
      hostPath:
        path: /mnt/ipm12/mq-data
    ---
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: personaui-log-volume
      namespace: default
      labels:
        svc: personaui-log-volume
    spec:
      capacity:
        storage: 2Gi
      accessModes:
        - ReadWriteOnce
      storageClassName: standard
      hostPath:
        path: /mnt/ipm12/personaui
    ---
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: restapi-log-volume
      namespace: default
      labels:
        svc: restapi-log-volume
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteOnce
      storageClassName: standard
      hostPath:
        path: /mnt/ipm12/restapi
    ---
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: sch-log-volume
      namespace: default
      labels:
        svc: sch-log-volume
    spec:
      capacity:
        storage: 2Gi
      accessModes:
        - ReadWriteOnce
      storageClassName: standard
      hostPath:
        path: /mnt/ipm12/sch
    ---
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: wfl-log-volume
      namespace: default
      labels:
        svc: wfl-log-volume
    spec:
      capacity:
        storage: 2Gi
      accessModes:
        - ReadWriteOnce
      storageClassName: standard
      hostPath:
        path: /mnt/ipm12/wfl
    ---
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: elasticsearch-data-volume
      namespace: default
      labels:
        svc: elasticsearch-data-volume
    spec:
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      storageClassName: standard
      hostPath:
        path: /mnt/ipm12/elasticsearch-data
    
    You can specify any value for the path: /mnt/ipm12.
    ipm_12.0.x_cr.yaml
    
    apiVersion: productmaster.ibm.com/v1
    kind: ProductMaster
    metadata:
      name: productmaster
    spec:
      license:
        accept: true
      deployment_platform: 'openshift'
      #deployment_platform: 'k8s'
    
      version: 12.0.6
    
      domain_name: ""
    
      enable:
        fts: 1
        vendor: 1
        dam: 1
        ml: 1
        gds: 1
        wkc: 0
        sso: 1
        mountmgr: 1
      image:
        registry: registry.ng.bluemix.net/product_master
        pullpolicy: Always
    
      productmastersecret: "ipm-registry"
      app_secret_name: "app-secret"
      random_secret_name: "random-secret"
      certs_secret_name: "tls-secret"
    
      enable_volume_selectors: true
    
      volume_details:
        admin:
          log:
            name: admin-log-volume
            storage: 2Gi
            access_modes: ReadWriteOnce
            storage_class_name: standard
        ftspim:
          log:
            name: ftspim-log-volume
            storage: 2Gi
            access_modes: ReadWriteOnce
            storage_class_name: standard
        ftsind:
          log:
            name: ftsind-log-volume
            storage: 2Gi
            access_modes: ReadWriteOnce
            storage_class_name: standard
        personaui:
          log:
            name: personaui-log-volume
            storage: 2Gi
            access_modes: ReadWriteOnce
            storage_class_name: standard
        restapi:
          log:
            name: restapi-log-volume
            storage: 2Gi
            access_modes: ReadWriteOnce
            storage_class_name: standard
        wfl:
          log:
            name: wfl-log-volume
            storage: 2Gi
            access_modes: ReadWriteOnce
            storage_class_name: standard
        sch:
          log:
            name: sch-log-volume
            storage: 2Gi
            access_modes: ReadWriteOnce
            storage_class_name: standard
        gds:
          log:
            name: gds-log-volume
            storage: 2Gi
            access_modes: ReadWriteOnce
            storage_class_name: standard
        appdata:
          name: appdata-volume
          storage: 1Gi
          access_modes: ReadWriteMany
          storage_class_name: standard
          ########################################################################
          # This is file storage
          ########################################################################
        mq:
          data:
            name: mq-data-volume
            storage: 1Gi
            access_modes: ReadWriteOnce
            storage_class_name: standard
        mongodb:
          data:
            name: mongodb-data-volume
            storage: 1Gi
            access_modes: ReadWriteOnce
            storage_class_name: standard
          log:
            name: mongodb-log-volume
            storage: 1Gi
            access_modes: ReadWriteOnce
            storage_class_name: standard
        ml:
          log:
            name: ml-log-volume
            storage: 2Gi
            access_modes: ReadWriteOnce
            storage_class_name: standard
        elasticsearch:
          data:
            name: elasticsearch-data-volume
            claim: elasticsearch-data-volume-claim
            storage: 1Gi
            access_modes: ReadWriteOnce
            storage_class_name: standard
    
      ################################
    
      ml_service:
        replica_count: 1
        image: ipm-ml-ubi8
        imagetag: 12.0.6
        http:
          ext_port: 31005
        httpa:
          ext_port: 31105
        httpb:
          ext_port: 31205
        httpc:
          ext_port: 31305
        readiness_probe:
          initial_delay_seconds: 30
          timeout_seconds: 900
          period_seconds: 60
        liveness_probe:
          initial_delay_seconds: 30
          timeout_seconds: 900
          period_seconds: 60
        resources:
          requests:
            memory: 2048Mi
            cpu: 500m
          limits:
            memory: 3072Mi
            cpu: 600m
    
      admin_service:
        replica_count: 1
        image: ipm-admin-ubi8
        imagetag: 12.0.6
        memflag: -Xmx1024m -Xms256m
        evmemflag: -Xmx128m -Xms48m
        quememflag: -Xmx128m -Xms48m
        admmemflag: -Xmx128m -Xms48m
        readiness_probe:
          initial_delay_seconds: 90
          timeout_seconds: 900
          period_seconds: 10
        liveness_probe:
          initial_delay_seconds: 120
          timeout_seconds: 900
          period_seconds: 60
        resources:
          requests:
            memory: 2048Mi
            cpu: 1000m
          limits:
            memory: 3072Mi
            cpu: 1400m
    
      wfl_service:
        replica_count: 1
        image: ipm-wfl-ubi8
        imagetag: 12.0.6
        memflag: -Xmx1024m -Xms48m
        readiness_probe:
          initial_delay_seconds: 30
          timeout_seconds: 900
          period_seconds: 60
        liveness_probe:
          initial_delay_seconds: 30
          timeout_seconds: 900
          period_seconds: 60
        resources:
          requests:
            memory: 1536Mi
            cpu: 600m
          limits:
            memory: 2048Mi
            cpu: 800m
    
      sch_service:
        replica_count: 1
        image: ipm-sch-ubi8
        imagetag: 12.0.6
        memflag: -Xmx1024m -Xms48m
        readiness_probe:
          initial_delay_seconds: 30
          timeout_seconds: 900
          period_seconds: 60
        liveness_probe:
          initial_delay_seconds: 30
          timeout_seconds: 900
          period_seconds: 60
        resources:
          requests:
            memory: 1536Mi
            cpu: 600m
          limits:
            memory: 2048Mi
            cpu: 800m
    
      gds_service:
        replica_count: 1
        image: ipm-gds-ubi8
        imagetag: 12.0.6
        memflag: -Xmx1024m -Xms48m
        gds_app_type: Supply
        gds_datapool_gln: 8380160030003
        gds_self_gln: 0864471000477
        company_name: <Company where GDS module loaded>
        readiness_probe:
          initial_delay_seconds: 30
          timeout_seconds: 900
          period_seconds: 60
        liveness_probe:
          initial_delay_seconds: 30
          timeout_seconds: 900
          period_seconds: 60
        resources:
          requests:
            memory: 1536Mi
            cpu: 600m
          limits:
            memory: 2048Mi
            cpu: 800m
    
      ftsind_service:
        replica_count: 1
        image: ipm-fts-indexer-ubi8
        imagetag: 12.0.6
        memflag: -Xmx1024m -Xms256m
        readiness_probe:
          initial_delay_seconds: 30
          timeout_seconds: 900
          period_seconds: 10
        liveness_probe:
          initial_delay_seconds: 60
          timeout_seconds: 5000
          period_seconds: 60
        resources:
          requests:
            memory: 1536Mi
            cpu: 500m
          limits:
            memory: 2048Mi
            cpu: 600m
    
      ftspim_service:
        replica_count: 1
        image: ipm-fts-pim-ubi8
        imagetag: 12.0.6
        memflag: -Xmx1024m -Xms256m
        readiness_probe:
          initial_delay_seconds: 30
          timeout_seconds: 900
          period_seconds: 10
        liveness_probe:
          initial_delay_seconds: 60
          timeout_seconds: 900
          period_seconds: 60
        resources:
          requests:
            memory: 1536Mi
            cpu: 500m
          limits:
            memory: 2048Mi
            cpu: 600m
    
      personaui_service:
        replica_count: 1
        image: ipm-personaui-ubi8
        imagetag: 12.0.6
        maxmem: 1280
        readiness_probe:
          initial_delay_seconds: 30
          timeout_seconds: 900
          period_seconds: 60
        liveness_probe:
          initial_delay_seconds: 30
          period_seconds: 60
          timeout_seconds: 900
        resources:
          requests:
            memory: 1536Mi
            cpu: 1000m
          limits:
            memory: 2048Mi
            cpu: 1400m
    
      restapi_service:
        replica_count: 1
        image: ipm-restapi-ubi8
        imagetag: 12.0.6
        maxmem: 1536
        readiness_probe:
          initial_delay_seconds: 90
          timeout_seconds: 900
          period_seconds: 10
        liveness_probe:
          initial_delay_seconds: 120
          period_seconds: 60
          timeout_seconds: 900
        resources:
          requests:
            memory: 1536Mi
            cpu: 1000m
          limits:
            memory: 2048Mi
            cpu: 1400m
    
      hazelcast_service:
        replica_count: 1
        image: ipm-hazelcast
        imagetag: 4.2.4
        readiness_probe:
          initial_delay_seconds: 10
          timeout_seconds: 900
          period_seconds: 5
        liveness_probe:
          initial_delay_seconds: 15
          period_seconds: 10
          timeout_seconds: 900
        resources:
          requests:
            memory: 1002Mi
            cpu: 498m
          limits:
            memory: 1254Mi
            cpu: 612m
    
      elasticsearch_service:
        replica_count: 1
        image: ipm-elasticsearch
        imagetag: 7.16.2
        privileged: true
        readiness_probe:
          initial_delay_seconds: 60
          timeout_seconds: 900
          period_seconds: 10
        liveness_probe:
          initial_delay_seconds: 120
          timeout_seconds: 900
          period_seconds: 60
        resources:
          requests:
            memory: 2006Mi
            cpu: 498m
          limits:
            memory: 2506Mi
            cpu: 612m
    
      ibm_mq_service:
        replica_count: 1
        image: ipm-mq
        imagetag: 9.2.0.0-r2
        mq_qmgr_name: QM1
        mq_channel_name: DEV.APP.SVRCONN
        queue_connection_factory: ptpQcf
        inbound_queue_name: DEV.QUEUE.1
        outbound_queue_name: DEV.QUEUE.2
        readiness_probe:
          initial_delay_seconds: 30
          timeout_seconds: 5000
          period_seconds: 10
          port: http
        liveness_probe:
          initial_delay_seconds: 30
          timeout_seconds: 5000
          period_seconds: 10
          port: http
        service: productmaster-mq-service
        port: 1414
        resources:
          requests:
            memory: 240Mi
            cpu: 80m
          limits:
            memory: 300Mi
            cpu: 100m
    
      mongodb_service:
        replica_count: 1
        image: ipm-mongodb
        imagetag: 4.0.22
        privileged: true
        memflag: -Xmx2048m -Xms500m
        readiness_probe:
          initial_delay_seconds: 90
          timeout_seconds: 5000
          period_seconds: 10
        liveness_probe:
          initial_delay_seconds: 120
          timeout_seconds: 5000
          period_seconds: 110
        resources:
          requests:
            memory: 3216Mi
            cpu: 488m
          limits:
            memory: 3500Mi
            cpu: 600m
  4. Update the parameters in the ipm_12.0.x_cr.yamlfile before deployment as per the requirement. For more information, see ipm_12.0.x_cr.yaml file parameters.