Maximo Application Suite 고객 관리

IBM Maximo Manage 용 Apache Kafka 설치

Apache Kafka 는 외부 인터페이스에서 송수신되는 메시지에 대한 버퍼를 제공합니다. IBM® Maximo® Manage 소프트웨어가 외부 시스템과 인터페이스하지 않는 경우에는 Apache Kafka 가 필요하지 않습니다.

Red Hat® AMQ Streams 운영자는 엄격한 운영자를 기반으로 하며 온프레미스 설치를 위해 Kafka 를 설치하는 데 선호되는 방법입니다. 또한 클라우드 제공자가 관리하는 Kafka 서비스를 원하지 않는 경우 클라우드 기반 Maximo Application Suite 설치에서 Kafka 를 설치하는 데 사용할 수도 있습니다. 자세한 정보는 Red Hat AMQ Streams 연산자Strimzi 연산자를 참조하십시오.
팁: 이 태스크는 Ansible® 역할 Kafka를 사용하여 수행할 수도 있습니다. 자세한 정보는 Ansible 콜렉션이 있는 IBM Maximo Application Suite 설치카프카의 내용을 참조하십시오.

다음에 수행할 사항

Apache Kafka 스위트 매개변수를 구성하십시오. 자세한 내용은 설치하기 Apache Kafka 를 참조하세요.

Red Hat OpenShift Container Platform 웹 콘솔을 사용하여 설치

프로시저

  1. Red Hat OpenShift® Container Platform의 측면 탐색 메뉴에서 > 프로젝트 를 클릭한 후 프로젝트 작성을 클릭하십시오. kafka이름을 입력하고 작성 을 클릭하여 Kafka의 새 네임스페이스를 프로비저닝하십시오.
  2. 글로벌 탐색줄에서 YAML 가져오기 아이콘 더하기 아이콘을 클릭하십시오. 다음 YAML을 입력하십시오.
    
    ---
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: "kafka"
      namespace: "kafka"
    spec:
      targetNamespaces:
        - "kafka"
    ---
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: amq-streams
      namespace: "kafka"
    spec:
      channel: amq-streams-1.8.x
      installPlanApproval: Automatic
      name: amq-streams
      source: redhat-operators
      sourceNamespace: openshift-marketplace
    
    팁: AWS (BYOL) 버전 8.7의 Maximo Application Suite 의 경우 BAS 네임스페이스에 설치된 AMQ 스트림의 버전과 일치하도록 amq-streams-1.8.xamq-streams-1.7.x 로 변경하십시오.
  3. kafka 네임스페이스에서 운영자 그룹 및 등록 자원을 작성하려면 작성 을 클릭하십시오.
  4. 측면 탐색 메뉴에서 운영자 > 설치된 운영자를 클릭하십시오. AMQ Streams 를 검색하고 운영자 상태가 성공으로 설정되었는지 확인하십시오.
  5. 글로벌 탐색줄에서 YAML 가져오기 아이콘을 클릭하십시오. 다음 YAML 코드를 입력하십시오.
    
    ---
    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      name: "maskafka"
      namespace: "kafka"
    spec:
      # -------------------------------------------------------
      kafka:
        version: 2.7.0
        replicas: 3
        resources:
          requests:
            memory: 4Gi
            cpu: "1"
          limits:
            memory: 4Gi
            cpu: "2"
        jvmOptions:
          -Xms: 3072m
          -Xmx: 3072m
        config:
          offsets.topic.replication.factor: 3
          transaction.state.log.replication.factor: 3
          transaction.state.log.min.isr: 2
          log.message.format.version: "2.7"
          log.retention.hours: 24
          log.retention.bytes: 1073741824
          log.segment.bytes: 268435456
          log.cleaner.enable: true
          log.cleanup.policy: delete
          auto.create.topics.enable: false
        storage:
          type: jbod
          volumes:
            - id: 0
              type: persistent-claim
              class: "ocs-storagecluster-ceph-rbd"
              size: 100Gi
              deleteClaim: true
        authorization:
            type: simple
        listeners:
          - name: tls
            port: 9094
            type: route
            tls: true
            authentication:
              type: scram-sha-512
      # -------------------------------------------------------
      zookeeper:
        replicas: 3
        resources:
          requests:
            memory: 1Gi
            cpu: "0.5"
          limits:
            memory: 1Gi
            cpu: "1"
        jvmOptions:
          -Xms: 768m
          -Xmx: 768m
        storage:
          type: persistent-claim
          class: "ocs-storagecluster-ceph-rbd"
          size: 10Gi
          deleteClaim: true
      # -------------------------------------------------------
      entityOperator:
        userOperator: {}
        topicOperator: {}
    

    클러스터에 대해 지원되는 스토리지 클래스를 사용하도록 지정된 스토리지 클래스 ocs-storagecluster-ceph-rbd 을 (를) 수정하십시오.

  6. 작성 을 클릭하여 Kafka 클러스터를 작성하십시오.
  7. 측면 탐색 메뉴에서 워크로드 > StatefulSets 를 클릭하고 kafka 프로젝트로 전환하십시오. 두 개의 statefulset: maskafka-kafka( Kafka 브로커) 및 maskafka-zookeeper( Kafka ZooKeepers) 가 표시됩니다. 각 statefulset을 선택하고 각각에 준비 상태에 있는 세 개의 팟 (Pod) 이 있는지 확인하십시오.
  8. 글로벌 탐색줄에서 YAML 가져오기 아이콘을 클릭하십시오. 다음 YAML을 입력하십시오.
    
    ---
    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaUser
    metadata:
      name: "maskafkauser"
      labels:
        strimzi.io/cluster: "maskafka"
      namespace: "kafka"
    spec:
      authentication:
        type: scram-sha-512
      authorization:
        type: simple
        acls:
          - host: '*'
            operation: All
            resource:
              name: '*'
              patternType: literal
              type: topic
          - host: '*'
            operation: All
            resource:
              name: '*'
              patternType: literal
              type: group
          - host: '*' 
            operation: All
            resource:
              name: '*'
              patternType: literal
              type: cluster
          - host: '*'
            operation: All
            resource:
              name: '*'
              patternType: literal
              type: transactionalId
    
  9. Kafka에 대한 연결을 인증하기 위해 Maximo Application Suite 에서 사용되는 Kafka 사용자를 작성하려면 작성 을 클릭하십시오.
  10. 측면 탐색 메뉴에서 워크로드 > 시크릿 을 클릭하고 kafka 프로젝트로 전환하십시오. 사용자 엔티티 운영자가 maskafkauser 시크릿을 작성했는지 확인하십시오.
  11. 측면 탐색 메뉴에서 네트워킹 > 라우트 를 클릭하고 kafka 프로젝트로 전환하십시오. maskafka-kafka-tls-bootstrap 라우트가 작성되었는지 확인하십시오.
  12. Kafka 정보를 가져오십시오.
    1. Kafka 호스트 및 포트를 가져오려면 다음 코드를 입력하십시오.
      
      oc get Kafka.kafka.strimzi.io maskafka  -o jsonpath="{.status.listeners[0].addresses[0]}"
      
      샘플 출력
    2. Kafka CA 인증서를 가져오십시오.
      
      oc get Kafka.kafka.strimzi.io maskafka  -o jsonpath="{.status.listeners[0].certificates[0]}"
      
      샘플 출력
    3. Kafka 사용자 이름 및 비밀번호를 가져오십시오.
      
      oc extract secret/maskafkauser -n kafka --keys=sasl.jaas.config --to=-
    4. SASL (Simple Authentication and Security Layer) 메커니즘을 가져오십시오.
      
      oc get Kafka.kafka.strimzi.io maskafka -n kafka -o jsonpath='{.spec.kafka.listeners[0].authentication}' | jq -r . 
      
      샘플 출력:
      
      {
        "type": "scram-sha-512"
      }
      
      참고: SASL 메커니즘은 SCRAM-SHA-512입니다.

Red Hat OpenShift 명령행 인터페이스 (CLI) 를 사용하여 설치

프로시저

  1. bastion 호스트에서 Kafka를 설치하는 데 사용되는 네임스페이스, OperatorGroupSubscription 리소스를 포함하는 YAML 파일 kafka-sub.yaml을 작성하십시오.
    
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: "kafka"
    ---
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: "kafka"
      namespace: "kafka"
    spec:
      targetNamespaces:
        - "kafka"
    ---
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: amq-streams
      namespace: "kafka"
    spec:
      channel: amq-streams-1.8.x
      installPlanApproval: Automatic
      name: amq-streams
      source: redhat-operators
      sourceNamespace: openshift-marketplace
    
    팁: AWS (BYOL) 버전 8.7의 Maximo Application Suite 의 경우 BAS 네임스페이스에 설치된 AMQ 스트림의 버전과 일치하도록 amq-streams-1.8.xamq-streams-1.7.x 로 변경하십시오.
  2. kafka-sub.yaml 파일을 Red Hat OpenShift Container Platform 클러스터에 적용하십시오.
    
    oc apply -f kafka-sub.yaml
    
  3. AMQ Streams 운영자가 성공적으로 배치되었는지 확인하십시오.
    
    oc get csv -n kafka -l operators.coreos.com/amq-streams.kafka
    
    샘플 출력
  4. 배스천 호스트에서 Kafka 클러스터의 구성을 설명하는 Kafka 리소스를 포함하는 YAML 파일 kafka-cluster.yaml을 작성하십시오.
    
    ---
    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      name: "maskafka"
      namespace: "kafka"
    spec:
      # -------------------------------------------------------
      kafka:
        version: 2.7.0
        replicas: 3
        resources:
          requests:
            memory: 4Gi
            cpu: "1"
          limits:
            memory: 4Gi
            cpu: "2"
        jvmOptions:
          -Xms: 3072m
          -Xmx: 3072m
        config:
          offsets.topic.replication.factor: 3
          transaction.state.log.replication.factor: 3
          transaction.state.log.min.isr: 2
          log.message.format.version: "2.7"
          log.retention.hours: 24
          log.retention.bytes: 1073741824
          log.segment.bytes: 268435456
          log.cleaner.enable: true
          log.cleanup.policy: delete
          auto.create.topics.enable: false
        storage:
          type: jbod
          volumes:
            - id: 0
              type: persistent-claim
              class: "ocs-storagecluster-ceph-rbd"
              size: 100Gi
              deleteClaim: true
        authorization:
            type: simple
        listeners:
          - name: tls
            port: 9094
            type: route
            tls: true
            authentication:
              type: scram-sha-512
      # -------------------------------------------------------
      zookeeper:
        replicas: 3
        resources:
          requests:
            memory: 1Gi
            cpu: "0.5"
          limits:
            memory: 1Gi
            cpu: "1"
        jvmOptions:
          -Xms: 768m
          -Xmx: 768m
        storage:
          type: persistent-claim
          class: "ocs-storagecluster-ceph-rbd"
          size: 10Gi
          deleteClaim: true
      # -------------------------------------------------------
      entityOperator:
            userOperator: {}
            topicOperator: {}
    

    클러스터에 대해 지원되는 스토리지 클래스를 사용하도록 지정된 스토리지 클래스 ocs-storagecluster-ceph-rbd 를 수정했는지 확인하십시오.

  5. kafka-cluster.yaml 파일을 Red Hat OpenShift 클러스터에 적용하십시오.
    
    oc apply -f kafka-cluster.yaml
    
  6. Kafka 클러스터가 성공적으로 배치되었는지 확인하십시오. Kafka CR은 준비 상태입니다.

    다음 명령에 지정된 Kafka CR은 kafkas.ibmevents.ibm.com에서 제공하는 Kafka CR과의 모호성을 피하기 위해 해당 API 그룹 이름 kafkas.kafka.strimzi.io 로 완전히 규정됩니다.

    
    oc get kafkas.kafka.strimzi.io -n kafka
    
    샘플 출력
  7. 배스천 호스트에서 YAML 파일을 작성하십시오 kafka-user.yaml. 이 파일에는 Kafka에 대한 연결을 인증하기 위해 Maximo Application Suite 에서 사용하는 Kafka 사용자의 구성을 설명하는 KafkaUser 자원이 포함되어 있습니다.
    
    ---
    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaUser
    metadata:
      name: "maskafkauser"
      labels:
        strimzi.io/cluster: "maskafka"
      namespace: "kafka"
    spec:
      authentication:
        type: scram-sha-512
      authorization:
        type: simple
        acls:
          - host: '*'
            operation: All
            resource:
              name: '*'
              patternType: literal
              type: topic
          - host: '*'
            operation: All
            resource:
              name: '*'
              patternType: literal
              type: group
          - host: '*'
            operation: All
            resource:
              name: '*'
              patternType: literal
              type: cluster
          - host: '*'
            operation: All
            resource:
              name: '*'
              patternType: literal
              type: transactionalId
    
  8. kafka-user.yaml 파일을 Red Hat OpenShift 클러스터에 적용하십시오.
    
    oc apply -f kafka-user.yaml
    
  9. 사용자 엔티티 운영자가 maskafkauser 시크릿을 작성했는지 확인하십시오.
    
    oc get secret maskafkauser -n kafka
    
    샘플 출력
  10. Kafka 정보를 가져오십시오.
    1. Kafka 호스트 및 포트를 가져오십시오.
      
      oc get Kafka.kafka.strimzi.io maskafka  -o jsonpath="{.status.listeners[0].addresses[0]}"
      
      샘플 출력:
      
      {"host":"maskafka-kafka-tls-bootstrap-kafka.apps.cluster1.example-cluster.com","port":443}
      
    2. Kafka CA 인증서를 가져오십시오.
      
      oc get Kafka.kafka.strimzi.io maskafka  -o jsonpath="{.status.listeners[0].certificates[0]}"
      
      샘플 출력:
      
      -----BEGIN CERTIFICATE-----
      MIIFLTCCAxWgAwIBAgIUTExUl2XrdIPy6vZAtk9toGh2jbEwDQYJKoZIhvcNAQEN
      BQAwLTETMBEGA1UECgwKaW8uc3RyaW16aTEWMBQGA1UEAwwNY2x1c3Rlci1jYSB2
      MDAeFw0yMjA1MTEyMTAyMzFaFw0yMzA1MTEyMTAyMzFaMC0xEzARBgNVBAoMCmlv
      LnN0cmltemkxFjAUBgNVBAMMDWNsdXN0ZXItY2EgdjAwggIiMA0GCSqGSIb3DQEB
      AQUAA4ICDwAwggIKAoICAQDh6bYIudhZQ1/rR9IgSb7pzqTvtRiNOvzmnZPdtVtT
      q7lNLytPqpR6uuCIrhpuR0CPb++Rvjp2QrWgXr5VWBktT1MLk8WzDfX3+qxd5xC8
      B00EKneBZkhohxBdb0co8ipxDpQAFTy+SeXhuROd5vwLEuh3OJeZMEUfTcNfUbvo
      J/IHUIGeDmhK//DumQE79z3vfLc2EcQgenMo0VoBy4ooQ2o4B7Y3plXHuStvtn6h
      lam30rSA+p3nKskrMDDpNKadHtmCrwI/rZZBFYb7DTdUpi69NeW3TEMRXGG3dMdk
      YYTdKN0zkB5BTvRx5FC6GX+cz/Uq3SnxlSmWB1DT+2nlnlwzVAgbNdsW4HiDUIdI
      FBJyQDqWTH9e7aUv3RzlrT4c995YBTfh1Jdvq5mzneMf6lab7iZoW1hGYQLRRC5y
      v8iTycwHd7EEGf/tjGrJ/s5nWPgGv/DEOg95/UvTRz9dZUWRwHCFANd0LaFW/HdF
      qkhuiVZOKNXqfr7zxnCw/F+0408+vcR43HKUTwId7vql+F+EgjT69U5pDF4sh6ep
      SgLTHoCGd/bekq5HHkrylCOty+ZU9EEWp4fQD+wN3RzGxJ080AA3RjkqsXmHbd5e
      aXlnhDB68mWpoHFuJ6YciNBBXlC/2HhDeR7PiMD9Zj0/7A3UHZj4hHXcSQoCnSW7
      mwIDAQABo0UwQzAdBgNVHQ4EFgQU6yQKlZ+FEJyMkjsPxhmHERps1vgwEgYDVR0T
      AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQADggIB
      AEfcrS4I2xsbTuULMtHlOGLgv7Mo+aJ8Os+vCE+MvSMVrsSvslVnigzE6aSvi7Ys
      TTpstmAhIfOcEEqldRa5GcG6Az6NWlbskZXfftojWtjnZevkuRnn/xICdizX+mj4
      A3WL/GOVpTAWVUa5+lUh1AzFWhBw5kDvMxHyQhmpegt98ptxNpj5n9cHSWwJpjXl
      boNil+Y5kA4raWGa6gEOE0lwmLyS5pjOWCTCTD2MvldNakYPMqObVPE4DNia4qal
      huxOyxdr51KNBc7yVgQ1Fa7ZD+rF1a6aa6GwvwAKYNoxd7VW7fmZBSckpuWer9+R
      YCVvgE2a4vLnc5zLFwOfhjqaZSiIx0PMEmkHx1ZTriVg0GVZ8beU+I9BxUQsJyJU
      S4z9UaHexmYu/YRAQXKODw1xhqqR6oW2+CXYrtUvzN6kamFh8jN3AKf4PKA+TmjL
      maW0M7FVp+0Erne59hBcZhKG0QYx4AkjCwKclRwDBxXcBTcmXduDFeGzLub0napJ
      Uczo2zURQ7L6qPew9Guh0O1dnGp+kgi8T8kt/DniMvQBWDK3GvFi0A5mVjLQqMHQ
      HvAPzshx7Si1O45hepGK4fxQMcwAHw6c1V3j10R8RHh7bckld5mJ5Nh/BjZhk/LK
      N5Klfwoek0QSVAXQfnX1YtJfrHfz5+TYx0NnYTcgX6fE
      -----END CERTIFICATE-----
      
    3. Kafka 사용자 이름 및 비밀번호 가져오기
      
      oc extract secret/maskafkauser -n kafka --keys=sasl.jaas.config --to=-
    4. SASL 메커니즘을 가져오십시오.
      
      oc get Kafka.kafka.strimzi.io maskafka -n kafka -o jsonpath='{.spec.kafka.listeners[0].authentication}' | jq -r . 
      
      샘플 출력:
      
      {
        "type": "scram-sha-512"
      }
      
      참고: SASL 메커니즘은 SCRAM-SHA-512입니다.