5 Provisionar uma Instância

Esta seção descreve como provisionar sua instância do Oracle Blockchain Platform usando o Blockchain Platform Manager.

Antes de Criar uma Instância do Oracle Blockchain Platform

Antes de provisionar o Oracle Blockchain Platform, decida se uma instância de desenvolvedor ou empresa atende às suas necessidades.

Decidindo Qual Forma de Provisionamento Usar

Ao provisionar uma instância, você escolhe entre duas configurações. A migração entre essas opções não é suportada no momento.

Configuração Funcionalidades
Desenvolvedor

O uso recomendado para esta configuração inicial é o desenvolvimento e a avaliação.

  • 1 nó de Autoridade de Certificação do Fabric
  • Rede de Serviço do Fabric Ordering de 3 nós
  • Repositório de 1 nó para metadados da instância
  • Contêineres de execução de chaincode gerenciados dinamicamente
  • Serviço de console para interface do usuário Web de operações
  • Serviço proxy REST para API RESTful
  • Integração do servidor LDAP para autenticação e gerenciamento de funções
Empresarial

Configuração de instância altamente disponível, com maior contagem de réplicas para cada serviço.

  • 3 nós Fabric-CA
  • Rede de Serviço do Fabric Ordering de 3 nós
  • Repositório de cluster de 3 nós para alta disponibilidade de metadados da instância
  • Contêineres de execução de chaincode gerenciados dinamicamente
  • Serviço de console para interface de usuário web de operações
  • Várias réplicas para o serviço de proxy REST para a API RESTful
  • Integração do servidor LDAP para autenticação e gerenciamento de funções

Provisionar uma Instância usando o Blockchain Platform Manager

Para criar um fundador de blockchain ou uma instância participante no Blockchain Platform Manager, use o assistente de Criação de Nova Instância.

Há dois tipos de instâncias do Oracle Blockchain Platform que você pode provisionar:
  • Organização fundadora: um ambiente blockchain completo, incluindo uma nova rede à qual os participantes podem se juntar posteriormente.

  • Instância do participante: se já houver uma organização fundadora à qual você deseja ingressar, você poderá criar uma instância do participante se suas credenciais fornecerem acesso à rede. Observe que um participante não pode funcionar sozinho.

  1. No Blockchain Platform Manager, abra a página Instâncias.
  2. Selecione Criar Instância.
  3. Preencha os campos a seguir.
    Campo Descrição
    Nome da Instância

    Digite um nome para sua instância do Oracle Blockchain Platform.

    O nome da instância de serviço:

    • Deve conter um ou mais caracteres.
    • Não pode exceder 15 caracteres.
    • Deve começar com uma letra ASCII: a a z.
    • Deve conter apenas letras ou números ASCII.
    • Não deve conter um hífen.
    • Não deve conter nenhum outro caractere especial.
    • Deve ser exclusivo dentro do domínio de identidades.
    Descrição

    Opcional.

    Digite uma breve descrição da instância do Oracle Blockchain Platform.

    Nome do Domínio

    Digite o nome do domínio do cluster.

    Os nomes de host gerados para os serviços da Instância Blockchain usam o nome do domínio e o nome da instância como domínio pai e subdomínio, respectivamente.

    Atribuição

    Selecione Fundador para criar um ambiente de blockchain completo. Esta instância se torna a organização fundadora e você pode integrar novos participantes na rede posteriormente.

    Selecione Participante para criar uma instância que ingressará em uma rede blockchain existente criada em outro lugar para que essa instância possa ser usada.

    Configuração
    Selecione uma forma de provisionamento que atenda às necessidades da sua implantação:
    • Desenvolvedor
    • Empresarial
    Pares

    Especifique o número de nós pares a serem criados inicialmente nesta instância de serviço. Você pode criar nós pares adicionais na console do Oracle Blockchain Platform posteriormente.

  4. Clique em Criar Instância.

Provisionando Pós-requisitos

Antes de acessar a console de serviços do Oracle Blockchain Platform, configure a resolução do nome do host para os serviços da instância de blockchain, semelhante ao que você fez anteriormente para os nomes de host do Blockchain Platform Manager. Use o seguinte comando para obter a lista de nomes de host da instância blockchain criada:
kubectl get virtualservice -n <instance-namespace> -o json | jq -r
      .items[].spec.hosts[0]
Antes de acessar o console de serviços do Oracle Blockchain Platform, configure a resolução de nome de host para os serviços de instância de blockchain, semelhante ao que você fez anteriormente para os nomes de host do Blockchain Platform Manager. Use o seguinte comando para obter a lista de nomes de host da instância de blockchain criada:
kubectl get virtualservice -n <instance-namespace> -o json | jq -r
      .items[].spec.hosts[0]

Depois de criar uma instância do Oracle Blockchain Platform Enterprise Edition, configure o DNS para que os nomes de host público dos componentes possam ser resolvidos na rede Local OpenShift.

Depois que você cria uma instância, o nome da instância e o domínio pai são usados como subdomínio para os componentes do Oracle Blockchain Platform Enterprise Edition. Configure o encaminhamento de DNS na configuração de DNS padrão para OpenShift, para que as solicitações de DNS sejam encaminhadas ao pod de DNS personalizado em que os serviços expostos sejam resolvidos. Siga as etapas abaixo para configurar o encaminhamento de DNS.
  1. Execute o seguinte comando.
    oc new-project obp-coredns
  2. Implante um servidor coredns personalizado no namespace obp-coredns executando o comando a seguir.
    kubectl apply -f <coredns-deployment-yaml-file>
    Use o arquivo de manifesto a seguir com o 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. Crie um arquivo coredns-custom-configmap no formato YAML para sua instância 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
        }
    
    No exemplo anterior, <instanceName> é o nome da instância e <domain> é o domínio passado ao criar a instância.
  4. Execute o comando a seguir para aplicar o objeto ConfigMap personalizado.
    kubectl apply -f <coredns-custom-configmap-yaml-file>
  5. Execute o comando a seguir para obter o endereço IP do cluster. Registre o endereço IP.
    kubectl get svc -n obp-coredns
  6. Execute o comando a seguir para editar o recurso personalizado DNS OpenShift.
    kubectl edit dnses.operator/default
  7. Atualize a seção de zonas do recurso personalizado de DNS para usar seus nomes de instância e domínio, conforme mostrado no exemplo a seguir.
    ## 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>
    No exemplo anterior, <instanceName> é o nome da instância e <domain> é o domínio pai.
  8. Para adicionar novas instâncias, adicione entradas ao arquivo coredns-custom-configmap e atualize o recurso personalizado de DNS OpenShift para o domínio da nova instância, conforme mostrado no seguinte exemplo:
    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
    Interrompa e reinicie a instância do Blockchain Platform usando o Blockchain Platform Manager para que as alterações de DNS entrem em vigor.

Configurar DNS

Depois de criar uma instância do Oracle Blockchain Platform Enterprise Edition, configure o DNS para que os nomes de host público dos componentes possam ser resolvidos na rede Local OpenShift.

Depois que você cria uma instância, o nome da instância e o domínio pai são usados como subdomínio para os componentes do Oracle Blockchain Platform Enterprise Edition. Configure o encaminhamento de DNS na configuração de DNS padrão para OpenShift, para que as solicitações de DNS sejam encaminhadas ao pod de DNS personalizado em que os serviços expostos sejam resolvidos. Siga as etapas abaixo para configurar o encaminhamento de DNS.
  1. Execute o seguinte comando.
    oc new-project obp-coredns
  2. Implante um servidor coredns personalizado no namespace obp-coredns executando o comando a seguir.
    kubectl apply -f <coredns-deployment-yaml-file>
    Use o arquivo de manifesto a seguir com o 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. Crie um arquivo coredns-custom-configmap no formato YAML para sua instância 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
        }
    
    No exemplo anterior, <instanceName> é o nome da instância e <domain> é o domínio pai.
  4. Execute o comando a seguir para aplicar o objeto ConfigMap personalizado.
    kubectl apply -f <coredns-custom-configmap-yaml-file>
  5. Execute o comando a seguir para obter o endereço IP do cluster. Registre o endereço IP.
    kubectl get svc -n obp-coredns
  6. Execute o comando a seguir para editar o recurso personalizado DNS OpenShift.
    kubectl edit dnses.operator/default
  7. Atualize a seção de zonas do recurso personalizado de DNS para usar seus nomes de instância e domínio, conforme mostrado no exemplo a seguir.
    ## 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>
    No exemplo anterior, <instanceName> é o nome da instância e <domain> é o domínio pai.
  8. Para adicionar novas instâncias, adicione entradas ao arquivo coredns-custom-configmap e atualize o recurso personalizado DNS OpenShift para o domínio da nova instância, conforme mostrado no exemplo a seguir.
    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
    Interrompa e reinicie a instância para que as alterações de DNS tenham efeito.
Antes de acessar o console de serviços do Oracle Blockchain Platform, configure a resolução de nome de host para os serviços de instância de blockchain, semelhante ao que você fez anteriormente para os nomes de host do Blockchain Platform Manager. Use o seguinte comando para obter a lista de nomes de host da instância de blockchain criada:
kubectl get virtualservice -n <instance-namespace> -o json | jq -r
      .items[].spec.hosts[0]

Adicionar Nós Adicionais ao Cluster

É possível que a criação da instância falhe por causa de nós insuficientes no cluster. Se isso ocorrer, talvez você precise adicionar mais nós ao cluster.
  1. Execute o seguinte comando para verificar pods no estado Pendente:
    kubectl get pods -n <instancename> | grep Pending
    Além disso, você pode verificar se não há pods disponíveis:
    kubectl get pods -n instancename
  2. Em seguida, verifique os nós de trabalho disponíveis:
    kubectl get nodes | grep worker
  3. Para verificar se há nós disponíveis para obter novos pods, execute o seguinte comando em cada nó de trabalho:
    kubectl describe node $<worker_node>
    em que <worker_node> é o nome de um nó de trabalho. Certifique-se de que o nó de trabalho não exceda 100% da capacidade.
  4. Para adicionar mais nós, primeiro obtenha o número MachineSets no cluster:
    oc get machinesets -n openshift-machine-api
  5. Para qualquer MachineSets com menos de 2 nós, tente escalá-los.
    oc scale --replicas=2 machineset <obpee00-qtthx-worker-eastus2> -n openshift-machine-api
    em que <obpee00-qtthx-worker-eastus2> é um nome de exemplo de MachineSet que você deseja dimensionar para 2 nós.
  6. Consulte o MachineSets novamente até que a lista de nós prontos e disponíveis atinja o número de nós selecionados.
  7. Agora você pode reimplantar suas instâncias com falha.

Depois que sua instância tiver sido criada e estiver listada na lista Instâncias, você poderá iniciar a console de serviço no menu ao lado do nome da instância. Use a console para configurar sua rede conforme descrito em Qual é a Console? em Usando o Oracle Blockchain Platform.