5 Eseguire il provisioning di un'istanza

Questa sezione descrive come eseguire il provisioning dell'istanza di Oracle Blockchain Platform utilizzando Blockchain Platform Manager.

Prima di creare un'istanza di Oracle Blockchain Platform

Prima di eseguire il provisioning di Oracle Blockchain Platform, decidere se un'istanza sviluppatore o enterprise soddisfa le proprie esigenze.

Decidere quale forma di provisioning utilizzare

Quando si esegue il provisioning di un'istanza, è possibile scegliere tra due configurazioni. La migrazione tra queste opzioni non è attualmente supportata.

Configurazione Funzioni
Sviluppatore

L'uso consigliato per questa forma iniziale è lo sviluppo e la valutazione.

  • 1 nodo Fabric-CA
  • Rete di servizio per gli ordini Fabric a 3 nodi
  • Repository a 1 nodo per i metadati dell'istanza
  • Container per l'esecuzione del codice catena gestiti in modo dinamico
  • Servizio console per interfaccia utente Web Operations
  • Servizio proxy REST per l'API RESTful
  • Integrazione del server LDAP per l'autenticazione e la gestione dei ruoli
Enterprise

Configurazione dell'istanza ad alta disponibilità, con un numero di repliche più elevato per ogni servizio.

  • 3 nodi Fabric-CA
  • Rete di servizio per gli ordini Fabric a 3 nodi
  • Repository cluster a 3 nodi per l'alta disponibilità dei metadati dell'istanza
  • Container per l'esecuzione del codice catena gestiti in modo dinamico
  • Servizio console per interfaccia utente Web Operations
  • Più repliche per il servizio proxy REST per l'API RESTful
  • Integrazione del server LDAP per l'autenticazione e la gestione dei ruoli

Eseguire il provisioning di un'istanza utilizzando Blockchain Platform Manager

Per creare un fondatore o un'istanza partecipante della blockchain in Blockchain Platform Manager, utilizzare la procedura guidata Crea nuova istanza.

Esistono due tipi di istanze di Oracle Blockchain Platform di cui è possibile eseguire il provisioning:
  • Organizzazione fondatore: un ambiente blockchain completo, che include una nuova rete a cui i partecipanti possono aderire in seguito.

  • Istanza partecipante: se esiste già un'organizzazione fondatore a cui si desidera partecipare, è possibile creare un'istanza partecipante se le credenziali consentono di accedere alla rete. Si noti che un partecipante non può funzionare da solo.

  1. In Blockchain Platform Manager aprire la pagina Istanze.
  2. Selezionare Crea istanza.
  3. Completare i seguenti campi:
    Campo Descrizione
    Nome istanza

    Immettere un nome per l'istanza di Oracle Blockchain Platform.

    Nome istanza del servizio:

    • Deve contenere uno o più caratteri.
    • La lunghezza del nome non deve superare 15 caratteri.
    • Deve iniziare con una lettera ASCII: da a a z.
    • Deve contenere solo lettere o numeri ASCII.
    • Non deve contenere un trattino.
    • Non deve contenere altri caratteri speciali.
    • Deve essere univoco all'interno del dominio di Identity.
    Descrizione

    Facoltativo.

    Immettere una breve descrizione dell'istanza di Oracle Blockchain Platform.

    Nome dominio

    Immettere il nome del dominio per il cluster.

    I nomi host generati per i servizi dell'istanza blockchain utilizzano rispettivamente il nome dominio e il nome istanza come dominio padre e dominio secondario.

    Role

    Selezionare Founder per creare un ambiente blockchain completo. Questa istanza diventa l'organizzazione fondatrice e puoi inserire nuovi partecipanti nella rete in un secondo momento.

    Selezionare Partecipante per creare un'istanza che entrerà a far parte di una rete blockchain esistente creata altrove prima di poter utilizzare questa istanza.

    Configurazione
    Selezionare una forma di provisioning che soddisfi le esigenze della distribuzione:
    • Sviluppatore
    • Enterprise
    Pari livello

    Specificare il numero di nodi peer da creare inizialmente in questa istanza del servizio. È possibile creare nodi peer aggiuntivi nella console di Oracle Blockchain Platform in un secondo momento.

  4. Fare clic su Crea istanza.

Prerequisiti di provisioning

Prima di accedere alla console del servizio Oracle Blockchain Platform, configurare la risoluzione del nome host per i servizi dell'istanza blockchain, in modo simile a quanto fatto in precedenza per i nomi host di Blockchain Platform Manager. Utilizzare il comando riportato di seguito per ottenere la lista dei nomi host per l'istanza blockchain creata.
kubectl get virtualservice -n <instance-namespace> -o json | jq -r
      .items[].spec.hosts[0]
Prima di accedere alla console del servizio Oracle Blockchain Platform, configurare la risoluzione del nome host per i servizi dell'istanza blockchain, in modo simile a quello eseguito in precedenza per i nomi host di Blockchain Platform Manager. Utilizzare il comando seguente per ottenere la lista dei nomi host per l'istanza blockchain creata:
kubectl get virtualservice -n <instance-namespace> -o json | jq -r
      .items[].spec.hosts[0]

Dopo aver creato un'istanza di Oracle Blockchain Platform Enterprise Edition, è necessario configurare il DNS in modo che i nomi host pubblici dei componenti siano risolvibili dalla rete locale OpenShift.

Dopo aver creato un'istanza, il nome dell'istanza e il dominio padre vengono utilizzati come sottodominio per i componenti di Oracle Blockchain Platform Enterprise Edition. È necessario impostare l'inoltro DNS sulla configurazione DNS predefinita per OpenShift, in modo che le richieste DNS vengano inoltrate al pod DNS personalizzato in cui vengono risolti i servizi esposti. Per configurare l'inoltro DNS, completare i passi riportati di seguito.
  1. Eseguire il comando riportato di seguito.
    oc new-project obp-coredns
  2. Distribuire un server coredns personalizzato nello spazio di nomi obp-coredns eseguendo il comando seguente.
    kubectl apply -f <coredns-deployment-yaml-file>
    Usare il seguente file manifesto con il comando.
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns
      namespace: obp-coredns
    data:
      Corefile: |-
        .:1053 {
          errors
          health {
            lameduck 5s
          }
          ready
          kubernetes cluster.local in-addr.arpa ip6.arpa {
            pods insecure
            fallthrough in-addr.arpa ip6.arpa
          }
          prometheus :9153
          forward . /etc/resolv.conf
          cache 30
          loop
          reload
          loadbalance
        }
        import custom/*.server
     
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: obp-coredns
      name: obp-coredns
      namespace: obp-coredns
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: obp-coredns
      strategy:
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: obp-coredns
        spec:
          containers:
          - args:
            - -conf
            - /etc/coredns/Corefile
            image: docker.io/coredns/coredns:latest
            imagePullPolicy: IfNotPresent
            livenessProbe:
              failureThreshold: 5
              httpGet:
                path: /health
                port: 8080
                scheme: HTTP
              initialDelaySeconds: 60
              periodSeconds: 10
              successThreshold: 1
              timeoutSeconds: 5
            name: coredns
            ports:
            - containerPort: 1053
              name: dns
              protocol: UDP
            - containerPort: 1053
              name: dns-tcp
              protocol: TCP
            - containerPort: 9153
              name: metrics
              protocol: TCP
            readinessProbe:
              failureThreshold: 3
              httpGet:
                path: /ready
                port: 8181
                scheme: HTTP
              periodSeconds: 10
              successThreshold: 1
              timeoutSeconds: 1
            resources:
              limits:
                memory: 170Mi
              requests:
                cpu: 100m
                memory: 70Mi
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                add:
                - NET_BIND_SERVICE
                drop:
                - all
              readOnlyRootFilesystem: true
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
            volumeMounts:
            - mountPath: /etc/coredns
              name: config-volume
              readOnly: true
            - mountPath: /etc/coredns/custom
              name: custom-config-volume
              readOnly: true
          dnsPolicy: Default
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          serviceAccount: obp-coredns
          serviceAccountName: obp-coredns
          terminationGracePeriodSeconds: 30
          volumes:
          - configMap:
              defaultMode: 420
              items:
              - key: Corefile
                path: Corefile
              name: coredns
            name: config-volume
          - configMap:
              defaultMode: 420
              name: coredns-custom
              optional: true
            name: custom-config-volume
     
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: obp-coredns
      name: obp-coredns
      namespace: obp-coredns
    spec:
      ports:
      - name: dns
        port: 53
        protocol: UDP
        targetPort: 1053
      - name: dns-tcp
        port: 53
        protocol: TCP
        targetPort: 1053
      - name: metrics
        port: 9153
        protocol: TCP
        targetPort: 9153
      selector:
        app: obp-coredns
      sessionAffinity: None
      type: ClusterIP
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: obp-coredns
      namespace: obp-coredns
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: obp-coredns
    rules:
    - apiGroups:
      - ""
      resources:
      - endpoints
      - services
      - pods
      - namespaces
      verbs:
      - list
      - watch
    - apiGroups:
      - ""
      resources:
      - nodes
      verbs:
      - get
    - apiGroups:
      - discovery.k8s.io
      resources:
      - endpointslices
      verbs:
      - list
      - watch
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: obp-coredns
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: obp-coredns
    subjects:
    - kind: ServiceAccount
      name: obp-coredns
      namespace: obp-coredns
    
  3. Creare un file coredns-custom-configmap in formato YAML per l'istanza blockchain.
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom
      namespace: obp-coredns
    data:
      obp.server: |2
     
        <instanceName>.<domain>:1053 {
            log
            kubernetes cluster.local in-addr.arpa ip6.arpa {
                pods insecure
                fallthrough in-addr.arpa ip6.arpa
            }
            rewrite stop {
                name regex (.*)\.<instanceName>\.<domain>\.com istio-ingressgateway.istio-system.svc.cluster.local answer auto
            }
            forward . /etc/resolv.conf
        }
    
    Nell'esempio precedente, <instanceName> è il nome dell'istanza e <domain> è il dominio passato durante la creazione dell'istanza.
  4. Eseguire il comando seguente per applicare l'oggetto ConfigMap personalizzato.
    kubectl apply -f <coredns-custom-configmap-yaml-file>
  5. Eseguire il comando seguente per ottenere l'indirizzo IP del cluster. Registrare l'indirizzo IP.
    kubectl get svc -n obp-coredns
  6. Eseguire il comando seguente per modificare la risorsa personalizzata DNS OpenShift.
    kubectl edit dnses.operator/default
  7. Aggiornare la sezione delle zone della risorsa personalizzata DNS per utilizzare i nomi di istanza e dominio, come mostrato nell'esempio riportato di seguito.
    ## Add the following section to the dns custom resource under spec
      servers:
      - forwardPlugin:
          policy: Random
          upstreams:
          - 192.0.2.233
        name: obp-server
        zones:
        - <instanceName>.<domain>
    Nell'esempio precedente, <instanceName> è il nome dell'istanza e <domain> è il dominio padre.
  8. Per aggiungere nuove istanze, aggiungere voci al file coredns-custom-configmap e aggiornare la risorsa personalizzata DNS OpenShift per il dominio della nuova istanza come mostrato nell'esempio riportato di seguito.
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom
      namespace: obp-coredns
    data:
      obp.server: |2
     
        myobp.example.com:1053 {
            log
            kubernetes cluster.local in-addr.arpa ip6.arpa {
                pods insecure
                fallthrough in-addr.arpa ip6.arpa
            }
            rewrite stop {
                name regex (.*)\.myobp\.example\.com istio-ingressgateway.istio-system.svc.cluster.local answer auto
            }
            forward . /etc/resolv.conf
        }
     
        otherobp.example.org:1053 {
            log
            kubernetes cluster.local in-addr.arpa ip6.arpa {
                pods insecure
                fallthrough in-addr.arpa ip6.arpa
            }
            rewrite stop {
                name regex (.*)\.otherobp\.example\.org istio-ingressgateway.istio-system.svc.cluster.local answer auto
            }
            forward . /etc/resolv.conf
        }
    
    
    
    ## Edit the Openshift's DNS custom resource
    kubectl edit dnses.operator/default
     
    ## Add the new instance domain to the existing .spec.servers.zones
      servers:
      - forwardPlugin:
          policy: Random
          upstreams:
          - 192.0.2.233
        name: obp-server
        zones:
        - myobp.example.com
        - otherobp.example.org
    Per rendere effettive le modifiche DNS, è necessario arrestare e riavviare l'istanza della piattaforma Blockchain utilizzando Blockchain Platform Manager.

Configura DNS

Dopo aver creato un'istanza di Oracle Blockchain Platform Enterprise Edition, è necessario configurare il DNS in modo che i nomi host pubblici dei componenti siano risolvibili dalla rete locale OpenShift.

Dopo aver creato un'istanza, il nome dell'istanza e il dominio padre vengono utilizzati come sottodominio per i componenti di Oracle Blockchain Platform Enterprise Edition. È necessario impostare l'inoltro DNS sulla configurazione DNS predefinita per OpenShift, in modo che le richieste DNS vengano inoltrate al pod DNS personalizzato in cui vengono risolti i servizi esposti. Per configurare l'inoltro DNS, completare i passi riportati di seguito.
  1. Eseguire il comando riportato di seguito.
    oc new-project obp-coredns
  2. Distribuire un server coredns personalizzato nello spazio di nomi obp-coredns eseguendo il comando seguente.
    kubectl apply -f <coredns-deployment-yaml-file>
    Usare il seguente file manifesto con il comando.
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns
      namespace: obp-coredns
    data:
      Corefile: |-
        .:1053 {
          errors
          health {
            lameduck 5s
          }
          ready
          kubernetes cluster.local in-addr.arpa ip6.arpa {
            pods insecure
            fallthrough in-addr.arpa ip6.arpa
          }
          prometheus :9153
          forward . /etc/resolv.conf
          cache 30
          loop
          reload
          loadbalance
        }
        import custom/*.server
     
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: obp-coredns
      name: obp-coredns
      namespace: obp-coredns
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: obp-coredns
      strategy:
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: obp-coredns
        spec:
          containers:
          - args:
            - -conf
            - /etc/coredns/Corefile
            image: docker.io/coredns/coredns:latest
            imagePullPolicy: IfNotPresent
            livenessProbe:
              failureThreshold: 5
              httpGet:
                path: /health
                port: 8080
                scheme: HTTP
              initialDelaySeconds: 60
              periodSeconds: 10
              successThreshold: 1
              timeoutSeconds: 5
            name: coredns
            ports:
            - containerPort: 1053
              name: dns
              protocol: UDP
            - containerPort: 1053
              name: dns-tcp
              protocol: TCP
            - containerPort: 9153
              name: metrics
              protocol: TCP
            readinessProbe:
              failureThreshold: 3
              httpGet:
                path: /ready
                port: 8181
                scheme: HTTP
              periodSeconds: 10
              successThreshold: 1
              timeoutSeconds: 1
            resources:
              limits:
                memory: 170Mi
              requests:
                cpu: 100m
                memory: 70Mi
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                add:
                - NET_BIND_SERVICE
                drop:
                - all
              readOnlyRootFilesystem: true
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
            volumeMounts:
            - mountPath: /etc/coredns
              name: config-volume
              readOnly: true
            - mountPath: /etc/coredns/custom
              name: custom-config-volume
              readOnly: true
          dnsPolicy: Default
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          serviceAccount: obp-coredns
          serviceAccountName: obp-coredns
          terminationGracePeriodSeconds: 30
          volumes:
          - configMap:
              defaultMode: 420
              items:
              - key: Corefile
                path: Corefile
              name: coredns
            name: config-volume
          - configMap:
              defaultMode: 420
              name: coredns-custom
              optional: true
            name: custom-config-volume
     
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: obp-coredns
      name: obp-coredns
      namespace: obp-coredns
    spec:
      ports:
      - name: dns
        port: 53
        protocol: UDP
        targetPort: 1053
      - name: dns-tcp
        port: 53
        protocol: TCP
        targetPort: 1053  
      - name: metrics
        port: 9153
        protocol: TCP
        targetPort: 9153
      selector:
        app: obp-coredns
      sessionAffinity: None
      type: ClusterIP
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: obp-coredns
      namespace: obp-coredns
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: obp-coredns
    rules:
    - apiGroups:
      - ""
      resources:
      - endpoints
      - services
      - pods
      - namespaces
      verbs:
      - list
      - watch
    - apiGroups:
      - ""
      resources:
      - nodes
      verbs:
      - get
    - apiGroups:
      - discovery.k8s.io
      resources:
      - endpointslices
      verbs:
      - list
      - watch
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: obp-coredns
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: obp-coredns
    subjects:
    - kind: ServiceAccount
      name: obp-coredns
      namespace: obp-coredns
    
  3. Creare un file coredns-custom-configmap in formato YAML per l'istanza blockchain.
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom
      namespace: obp-coredns
    data:
      obp.server: |2
     
        <instanceName>.<domain>:1053 {
            log
            kubernetes cluster.local in-addr.arpa ip6.arpa {
                pods insecure
                fallthrough in-addr.arpa ip6.arpa
            }
            rewrite stop {
                name regex (.*)\.<instanceName>\.<domain>\ istio-ingressgateway.istio-system.svc.cluster.local answer auto
            }
            forward . /etc/resolv.conf
        }
    
    Nell'esempio precedente, <instanceName> è il nome dell'istanza e <domain> è il dominio padre.
  4. Eseguire il comando seguente per applicare l'oggetto ConfigMap personalizzato.
    kubectl apply -f <coredns-custom-configmap-yaml-file>
  5. Eseguire il comando seguente per ottenere l'indirizzo IP del cluster. Registrare l'indirizzo IP.
    kubectl get svc -n obp-coredns
  6. Eseguire il comando seguente per modificare la risorsa personalizzata DNS OpenShift.
    kubectl edit dnses.operator/default
  7. Aggiornare la sezione delle zone della risorsa personalizzata DNS per utilizzare i nomi di istanza e dominio, come mostrato nell'esempio riportato di seguito.
    ## Add the following section to the dns custom resource under spec
      servers:
      - forwardPlugin:
          policy: Random
          upstreams:
          - 192.0.2.233
        name: obp-server
        zones:
        - <instanceName>.<domain>
    Nell'esempio precedente, <instanceName> è il nome dell'istanza e <domain> è il dominio padre.
  8. Per aggiungere nuove istanze, aggiungere voci al file coredns-custom-configmap e aggiornare la risorsa personalizzata DNS OpenShift per il dominio della nuova istanza come mostrato nell'esempio riportato di seguito.
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom
      namespace: obp-coredns
    data:
      obp.server: |2
     
        myobp.example.com:1053 {
            log
            kubernetes cluster.local in-addr.arpa ip6.arpa {
                pods insecure
                fallthrough in-addr.arpa ip6.arpa
            }
            rewrite stop {
                name regex (.*)\.myobp\.example\.com istio-ingressgateway.istio-system.svc.cluster.local answer auto
            }
            forward . /etc/resolv.conf
        }
     
        otherobp.example.org:1053 {
            log
            kubernetes cluster.local in-addr.arpa ip6.arpa {
                pods insecure
                fallthrough in-addr.arpa ip6.arpa
            }
            rewrite stop {
                name regex (.*)\.otherobp\.example\.org istio-ingressgateway.istio-system.svc.cluster.local answer auto
            }
            forward . /etc/resolv.conf
        }
    
    
    
    ## Edit the Openshift's DNS custom resource
    kubectl edit dnses.operator/default
     
    ## Add the new instance domain to the existing .spec.servers.zones
      servers:
      - forwardPlugin:
          policy: Random
          upstreams:
          - 192.0.2.233
        name: obp-server
        zones:
        - myobp.example.com
        - otherobp.example.org
    Per rendere effettive le modifiche DNS, è necessario arrestare e riavviare l'istanza.
Prima di accedere alla console del servizio Oracle Blockchain Platform, configurare la risoluzione del nome host per i servizi dell'istanza blockchain, in modo simile a quello eseguito in precedenza per i nomi host di Blockchain Platform Manager. Utilizzare il comando seguente per ottenere la lista dei nomi host per l'istanza blockchain creata:
kubectl get virtualservice -n <instance-namespace> -o json | jq -r
      .items[].spec.hosts[0]

Aggiungi nodi aggiuntivi al cluster

È possibile che la creazione dell'istanza non riesca a causa di nodi insufficienti nel cluster. In tal caso, potrebbe essere necessario aggiungere altri nodi al cluster.
  1. Eseguire il comando seguente per verificare la presenza di pod con stato In sospeso:
    kubectl get pods -n <instancename> | grep Pending
    Inoltre, puoi verificare che nessun pod sia disponibile:
    kubectl get pods -n instancename
  2. Successivamente, controllare i nodi di lavoro disponibili:
    kubectl get nodes | grep worker
  3. Per verificare se sono disponibili nodi per l'utilizzo di nuovi pod, eseguire il comando seguente su ciascun nodo di lavoro:
    kubectl describe node $<worker_node>
    dove <worker_node> è il nome di un nodo di lavoro. Assicurarsi che il nodo di lavoro non superi la capacità del 100%.
  4. Per aggiungere altri nodi, ottenere innanzitutto il numero di MachineSets nel cluster:
    oc get machinesets -n openshift-machine-api
  5. Per qualsiasi MachineSets con meno di 2 nodi, provare a ridimensionarli.
    oc scale --replicas=2 machineset <obpee00-qtthx-worker-eastus2> -n openshift-machine-api
    dove <obpee00-qtthx-worker-eastus2> è un nome di esempio di MachineSet che si desidera scalare a 2 nodi.
  6. Eseguire di nuovo una query su MachineSets finché la lista di nodi pronti e disponibili non raggiunge il numero di nodi selezionati.
  7. È ora possibile ridistribuire le istanze non riuscite.

Una volta creata l'istanza ed elencata nell'elenco Istanze, è possibile avviare la console del servizio dal menu accanto al nome dell'istanza. Utilizzare la console per configurare la rete come descritto in Che cos'è la console? in Utilizzo di Oracle Blockchain Platform.