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

Before deployment you need to configure Product Master YAML file that you downloaded from IBM® Support Fix Central.

Before you begin

Fix Pack 11 and later
  • Before proceeding with deployment of the IBM Product Master, ensure that you meet the software and hardware requirements. For more information, see System requirements - Containers.
  • 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 removing a deployment, it is recommended to take a 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>"
    #OpenSearch details for Free Text Search
      opensearch_host: "https://<OpenSearch hostname>"
      opensearch_user: "<OpenSearch username>"
      opensearch_pass: "<OpenSearch password>"
      opensearch_port: "<OpenSearch port>"
      opensearch_ssl_crt: "<OpenSearch 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>"
    #Magento connector details
      magento_user: "<Magento service username>"
      magento_pass: "<Magento service password>"
      magento_host: "<Magento IP  or hostname>"
      magento_port: "<Magento connector port>"
      magento_ipm_user: "<application username>"
      magento_ipm_pass: "<application password>"
      magento_ipm_company: "<application Magento company name>"
    #IBM MQ details
      mq_app_user: "<MQ service username>"
      mq_app_pass: "<MQ service password>"
      mq_ui_pass: "<MQ user interface password>"
    #Update the following details only if SAML SSO is required, else you can remove these entries
    ---
    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: magento-connector-log-volume
      namespace: default
      labels:
        svc: magento-connector-log-volume
    spec:
      capacity:
        storage: 2Gi
      accessModes:
        - ReadWriteOnce
      storageClassName: standard
      hostPath:
        path: /mnt/ipm12/magento-connector
    
    You can specify any value for the path: /mnt/ipm12.
    ipm_12.0.x_cr.yaml
    Important: Starting from IBM Product Master Fix Pack 11, you must use block storage for the log location and file storage for the app data location. These file_storageclass and block_storageclass properties get applied to all the pods. You can no longer use the storage_class_name property in the ipm_12.0.x_cr.yaml file.
    apiVersion: productmaster.ibm.com/v1
    kind: ProductMaster
    metadata:
      name: productmaster
    spec:
      license:
        accept: true
    
      deployment_platform:
        openshift:
          enable: 1
          domain_name: ""
          block_storageclass: ""
          file_storageclass: ""
        self_managed_k8s:
          enable: 0
          domain_name: ""
          block_storageclass: ""
          file_storageclass: ""
        aws_eks:
          enable: 0
          certificate_arn: ""
          block_storageclass: ""
          file_storageclass: ""
    
      version: 12.0.11
    
      autoScaleConfig: false
    
      enable:
        fts: 1
        vendor: 1
        dam: 1
        ml: 1
        gds: 1
        logsearch: 0
        wkc: 0
        sso: 0
        mountmgr: 1
        connector:
          magento: 0
      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: false
    
      volume_details:
        admin:
          log:
            name: admin-log-volume
            access_modes: ReadWriteOnce	
            storage: 2Gi
        ftspim:
          log:
            name: ftspim-log-volume
            access_modes: ReadWriteOnce		
            storage: 2Gi
        ftsind:
          log:
            name: ftsind-log-volume
            access_modes: ReadWriteOnce		
            storage: 2Gi
        personaui:
          log:
            name: personaui-log-volume
            access_modes: ReadWriteOnce	
            storage: 2Gi
        restapi:
          log:
            name: restapi-log-volume
            access_modes: ReadWriteOnce		
            storage: 2Gi
        wfl:
          log:
            name: wfl-log-volume
            access_modes: ReadWriteOnce		
            storage: 2Gi
        sch:
          log:
            name: sch-log-volume
            access_modes: ReadWriteOnce		
            storage: 2Gi
        gds:
          log:
            name: gds-log-volume
            access_modes: ReadWriteOnce		
            storage: 2Gi
        appdata:
          name: appdata-volume
          access_modes: ReadWriteMany	  
          storage: 10Gi
        magento:
          log:
            name: magento-connector-log-volume
            access_modes: ReadWriteOnce		
            storage: 2Gi
        messagearchive:
          log:
            name: messagearchive-log-volume
            access_modes: ReadWriteOnce		
            storage: 2Gi
          ########################################################################
          # This is file storage
          ########################################################################
        mq:
          data:
            name: mq-data-volume
            access_modes: ReadWriteOnce		
            storage: 1Gi
        mongodb:
          data:
            name: mongodb-data-volume
            access_modes: ReadWriteOnce		
            storage: 1Gi
          log:
            name: mongodb-log-volume
            access_modes: ReadWriteOnce		
            storage: 1Gi
        ml:
          log:
            name: ml-log-volume
            access_modes: ReadWriteOnce		
            storage: 2Gi
    
      ################################
    
      ml_service:
        replica_count: 1
        minreplicas: 1
        maxreplicas: 5
        image: ipm-ml
        imagetag: 12.0.x
        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
        minreplicas: 1
        maxreplicas: 10
        image: ipm-admin
        imagetag: 12.0.x
        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
        minreplicas: 1
        maxreplicas: 10
        image: ipm-wfl
        imagetag: 12.0.x
        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: 61
        resources:
          requests:
            memory: 1536Mi
            cpu: 600m
          limits:
            memory: 2048Mi
            cpu: 800m
    
      sch_service:
        replica_count: 1
        minreplicas: 1
        maxreplicas: 10
        image: ipm-sch
        imagetag: 12.0.x
        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
        minreplicas: 1
        maxreplicas: 10
        image: ipm-gds
        imagetag: 12.0.x
        memflag: -Xmx1024m -Xms48m
        gds_app_type: Supply
        gds_datapool_gln: 8380160030003
        gds_self_gln: 0864471000477
        company_name: supply
        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
    
      magento_service:
        replica_count: 1
        image: ipm-magento-connector
        imagetag: 12.0.x
        memflag: -Xmx1024m -Xms48m
        mg_company: magento3
        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
    
      messagearchive_service:
        replica_count: 1
        image: ipm-message-archive-service
        imagetag: 12.0.x
        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
    
      ftsind_service:
        replica_count: 1
        minreplicas: 1
        maxreplicas: 5
        image: ipm-fts-indexer
        imagetag: 12.0.x
        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
        minreplicas: 1
        maxreplicas: 5
        image: ipm-fts-pim
        imagetag: 12.0.x
        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
        minreplicas: 1
        maxreplicas: 5
        image: ipm-personaui
        imagetag: 12.0.x
        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
        minreplicas: 1
        maxreplicas: 10
        image: ipm-restapi
        imagetag: 12.0.x
        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: 5.3.6
        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
    
      ibm_mq_service:
        replica_count: 1
        image: ipm-mq
        imagetag: 9.3.0.4-r1
        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: 7.0.2
        privileged: false
        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
    
      fluentd_service:
        image: fluent/fluentd-kubernetes-daemonset
        imagetag: v1.16.2-debian-opensearch-1.0
        resources:
          requests:
            memory: 50Mi
            cpu: 50m
          limits:
            memory: 150Mi
            cpu: 100m
  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.