5 Avisión de una instancia

En esta sección se describe cómo aprovisionar su instancia de Oracle Blockchain Platform mediante Blockchain Platform Manager.

Antes de crear una instancia de Oracle Blockchain Platform

Antes de aprovisionar Oracle Blockchain Platform, decida si un desarrollador o instancia empresarial satisface sus necesidades.

Decisión de qué unidad de aprovisionamiento se va a utilizar

Al aprovisionar una instancia, puede elegir entre dos configuraciones. Actualmente no se admite la migración entre estas opciones.

Configuración Funciones
Desarrollador

El uso recomendado para esta forma inicial es el desarrollo y la evaluación.

  • 1 nodo de Fabric-CA
  • Red de servicio de pedidos de Fabric de 3 nodos
  • Repositorio de 1 nodo para metadatos de instancia
  • contenedores de ejecución de código de cadenas gestionados dinámicamente
  • Servicio de consola para interfaz de usuario web de operaciones
  • Servicio de proxy de REST para API de RESTful
  • Integración de servidor LDAP para autenticación y gestión de roles
Empresa

Configuración de instancias de alta disponibilidad, con un mayor recuento de réplicas para cada servicio.

  • 3 nodos de Fabric-CA
  • Red de servicio de pedidos de Fabric de 3 nodos
  • Repositorio de cluster de 3 nodos para alta disponibilidad de metadatos de instancia
  • Contenedores de ejecución de código de cadenas gestionados dinámicamente
  • Servicio de consola para la interfaz de usuario web de operaciones
  • Varias réplicas para el servicio de proxy REST para la API RESTful
  • Integración de servidor LDAP para autenticación y gestión de roles

Aprovisionamiento de una instancia mediante el gestor de plataformas de blockchain

Para crear una instancia de fundador o participante de blockchain en Blockchain Platform Manager, utilice el asistente Crear nueva instancia.

Hay dos tipos de instancias de Oracle Blockchain Platform que se pueden aprovisionar:
  • Organización fundadora: un entorno de blockchain completo, con una nueva red incluida a la que los participantes se pueden unir más adelante.

  • Instancia de participante: si ya hay una organización fundadora a la que desea unirse, puede crear una instancia de participante si sus credenciales le proporcionan acceso a la red. Tenga en cuenta que un participante no puede funcionar por sí solo.

  1. En Gestor de plataformas de blockchain, abra la página Instancias.
  2. Seleccione Crear instancia.
  3. Complete los siguientes campos:
    Campo Descripción
    Nombre de Instancia

    Introduzca un nombre para la instancia de Oracle Blockchain Platform.

    El nombre de la instancia de servicio:

    • Debe contener uno o más caracteres.
    • No debe exceder de 15 caracteres.
    • Debe empezar por una letra ASCII: de la a a la z.
    • Solo puede contener letras o números ASCII.
    • No debe contener guiones.
    • No debe contener ningún otro carácter especial.
    • Debe ser único en el dominio de identidad.
    Descripción

    Opcional:

    Introduzca una breve descripción de la instancia de Oracle Blockchain Platform.

    Nombre de Dominio

    Introduzca el nombre de dominio del cluster.

    Los nombres de host generados para los servicios de instancia de blockchain utilizan el nombre de dominio y el nombre de instancia como dominio principal y subdominio, respectivamente.

    Rol

    Seleccione Fundador para crear un entorno de cadena de bloques completo. Esta instancia se convierte en la organización fundadora y puede incorporar nuevos participantes en la red más adelante.

    Seleccione Participante para crear una instancia que se unirá a una red de cadenas de bloques existente creada en otro lugar antes de que se pueda utilizar esta instancia.

    Configuración
    Seleccione una unidad de aprovisionamiento que satisfaga las necesidades de su despliegue:
    • Desarrollador
    • Empresa
    Peers

    Especifique el número de nodos peer que se van a crear inicialmente en esta instancia de servicio. Puede crear nodos peer adicionales en la consola de Oracle Blockchain Platform más adelante.

  4. Haga clic en Crear instancia.

Requisitos posteriores de aprovisionamiento

Antes de acceder a la consola de servicio de Oracle Blockchain Platform, configure la resolución de nombre de host para los servicios de instancia de blockchain, similar a lo que hizo anteriormente para los nombres de host de Blockchain Platform Manager. Utilice el siguiente comando para obtener la lista de nombres de host para la instancia de blockchain creada:
kubectl get virtualservice -n <instance-namespace> -o json | jq -r
      .items[].spec.hosts[0]
Antes de acceder a la consola de servicio de Oracle Blockchain Platform, configure la resolución de nombre de host para los servicios de instancia de blockchain, de forma similar a la que hizo anteriormente para los nombres de host de Blockchain Platform Manager. Utilice el siguiente comando para obtener la lista de nombres de host para la instancia de blockchain creada:
kubectl get virtualservice -n <instance-namespace> -o json | jq -r
      .items[].spec.hosts[0]

Después de crear una instancia de Oracle Blockchain Platform Enterprise Edition, debe configurar el DNS para que los nombres de host públicos de los componentes se puedan resolver desde la red local OpenShift.

Después de crear una instancia, el nombre de la instancia y el dominio principal se utilizan como subdominio para los componentes de Oracle Blockchain Platform Enterprise Edition. Debe configurar el reenvío de DNS en la configuración de DNS por defecto para OpenShift, de modo que las solicitudes de DNS se reenvíen al pod de DNS personalizado en el que se resuelven los servicios expuestos. Complete los siguientes pasos para configurar el reenvío de DNS.
  1. Ejecute el siguiente comando.
    oc new-project obp-coredns
  2. Despliegue un servidor coredns personalizado en el espacio de nombres obp-coredns ejecutando el siguiente comando.
    kubectl apply -f <coredns-deployment-yaml-file>
    Utilice el siguiente archivo de manifiesto con el 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. Cree un archivo coredns-custom-configmap en formato YAML para la instancia de 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
        }
    
    En el ejemplo anterior, <instanceName> es el nombre de la instancia y <domain> es el dominio transferido al crear la instancia.
  4. Ejecute el siguiente comando para aplicar el objeto ConfigMap personalizado.
    kubectl apply -f <coredns-custom-configmap-yaml-file>
  5. Ejecute el siguiente comando para obtener la dirección IP del cluster. Registro de la dirección IP.
    kubectl get svc -n obp-coredns
  6. Ejecute el siguiente comando para editar el recurso personalizado de DNS OpenShift.
    kubectl edit dnses.operator/default
  7. Actualice la sección de zonas del recurso personalizado de DNS para utilizar los nombres de instancia y dominio, como se muestra en el siguiente ejemplo.
    ## 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>
    En el ejemplo anterior, <instanceName> es el nombre de la instancia y <domain> es el dominio principal.
  8. Para agregar nuevas instancias, agregue entradas al archivo coredns-custom-configmap y actualice el recurso personalizado de DNS OpenShift para el dominio de la nueva instancia, como se muestra en el siguiente ejemplo:
    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
    Debe parar y reiniciar la instancia de Blockchain Platform con Blockchain Platform Manager para que se apliquen los cambios de DNS.

Configurar DNS

Después de crear una instancia de Oracle Blockchain Platform Enterprise Edition, debe configurar el DNS para que los nombres de host públicos de los componentes se puedan resolver desde la red local OpenShift.

Después de crear una instancia, el nombre de la instancia y el dominio principal se utilizan como subdominio para los componentes de Oracle Blockchain Platform Enterprise Edition. Debe configurar el reenvío de DNS en la configuración de DNS por defecto para OpenShift, de modo que las solicitudes de DNS se reenvíen al pod de DNS personalizado en el que se resuelven los servicios expuestos. Complete los siguientes pasos para configurar el reenvío de DNS.
  1. Ejecute el siguiente comando.
    oc new-project obp-coredns
  2. Despliegue un servidor coredns personalizado en el espacio de nombres obp-coredns ejecutando el siguiente comando.
    kubectl apply -f <coredns-deployment-yaml-file>
    Utilice el siguiente archivo de manifiesto con el 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. Cree un archivo coredns-custom-configmap en formato YAML para la instancia de 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
        }
    
    En el ejemplo anterior, <instanceName> es el nombre de la instancia y <domain> es el dominio principal.
  4. Ejecute el siguiente comando para aplicar el objeto ConfigMap personalizado.
    kubectl apply -f <coredns-custom-configmap-yaml-file>
  5. Ejecute el siguiente comando para obtener la dirección IP del cluster. Registro de la dirección IP.
    kubectl get svc -n obp-coredns
  6. Ejecute el siguiente comando para editar el recurso personalizado de DNS OpenShift.
    kubectl edit dnses.operator/default
  7. Actualice la sección de zonas del recurso personalizado de DNS para utilizar los nombres de instancia y dominio, como se muestra en el siguiente ejemplo.
    ## 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>
    En el ejemplo anterior, <instanceName> es el nombre de la instancia y <domain> es el dominio principal.
  8. Para agregar nuevas instancias, agregue entradas al archivo coredns-custom-configmap y actualice el recurso personalizado de DNS OpenShift para el dominio de la nueva instancia, como se muestra en el siguiente ejemplo.
    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
    Debe parar y reiniciar la instancia para que se apliquen los cambios de DNS.
Antes de acceder a la consola de servicio de Oracle Blockchain Platform, configure la resolución de nombre de host para los servicios de instancia de blockchain, de forma similar a la que hizo anteriormente para los nombres de host de Blockchain Platform Manager. Utilice el siguiente comando para obtener la lista de nombres de host para la instancia de blockchain creada:
kubectl get virtualservice -n <instance-namespace> -o json | jq -r
      .items[].spec.hosts[0]

Agregar nodos adicionales al cluster

Es posible que la creación de la instancia falle debido a que no hay suficientes nodos en el cluster. Si esto ocurre, puede que necesite agregar más nodos al cluster.
  1. Ejecute el siguiente comando para comprobar si hay pods en estado Pendiente:
    kubectl get pods -n <instancename> | grep Pending
    Además, puede comprobar si no hay pods disponibles:
    kubectl get pods -n instancename
  2. A continuación, compruebe los nodos de trabajador disponibles:
    kubectl get nodes | grep worker
  3. Para comprobar si hay nodos disponibles para tomar nuevos pods, ejecute el siguiente comando en cada nodo de trabajador:
    kubectl describe node $<worker_node>
    donde <worker_node> es el nombre de un nodo de trabajador. Asegúrese de que el nodo de trabajador no supere el 100% de capacidad.
  4. Para agregar nodos adicionales, primero obtenga el número de MachineSets en el cluster:
    oc get machinesets -n openshift-machine-api
  5. Para cualquier MachineSets con menos de 2 nodos, intente ampliarlos.
    oc scale --replicas=2 machineset <obpee00-qtthx-worker-eastus2> -n openshift-machine-api
    donde <obpee00-qtthx-worker-eastus2> es un nombre de ejemplo de un MachineSet que desea ampliar a 2 nodos.
  6. Vuelva a consultar MachineSets hasta que la lista de nodos listos y disponibles alcance el número de nodos que ha seleccionado.
  7. Ahora puede volver a desplegar las instancias con fallos.

Una vez que la instancia se haya creado y aparezca en la lista Instancias, puede iniciar la consola de servicio desde el menú situado junto al nombre de la instancia. Utilice la consola para configurar la red como se describe en ¿Qué es la consola? en Uso de Oracle Blockchain Platform.