5 Provisionar uma Instância
Esta seção descreve como provisionar sua instância do Oracle Blockchain Platform usando o Gerenciador do Blockchain Platform.
Antes de Criar uma Instância do Oracle Blockchain Platform
Antes de provisionar o Oracle Blockchain Platform, decida se uma instância do desenvolvedor ou da 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. |
|
| Empresarial Configuração de instância altamente disponível, com maior contagem de réplicas para cada serviço. |
|
Provisionar uma Instância usando o Blockchain Platform Manager
Para criar uma instância do fundador ou participante de blockchain no Blockchain Platform Manager, use o assistente Criar Nova Instância.
-
Organização fundadora: um ambiente blockchain completo, incluindo uma nova rede à qual os participantes podem se associar mais tarde.
-
Instância do Participante: se já houver uma organização fundadora que você deseja associar, você poderá criar uma instância de participante se suas credenciais fornecerem acesso à rede. Observe que um participante não pode funcionar por conta própria.
Provisionando Pós-requisitos
kubectl get virtualservice -n <instance-namespace> -o json | jq -r
.items[].spec.hosts[0]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.
- Execute o seguinte comando.
oc new-project obp-coredns - Implante um servidor
corednspersonalizado no namespaceobp-corednsexecutando o comando a seguir.
Use o arquivo de manifesto a seguir com o comando.kubectl apply -f <coredns-deployment-yaml-file>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 - Crie um arquivo
coredns-custom-configmapno formato YAML para sua instância de blockchain.
No exemplo anterior,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 }<instanceName>é o nome da instância e<domain>é o domínio passado ao criar a instância. - Execute o comando a seguir para aplicar o objeto
ConfigMappersonalizado.kubectl apply -f <coredns-custom-configmap-yaml-file> - Execute o comando a seguir para obter o endereço IP do cluster. Registre o endereço IP.
kubectl get svc -n obp-coredns - Execute o comando a seguir para editar o recurso personalizado DNS OpenShift.
kubectl edit dnses.operator/default - 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.
No exemplo anterior,## 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><instanceName>é o nome da instância e<domain>é o domínio pai. - Para adicionar novas instâncias, adicione entradas ao arquivo
coredns-custom-configmape atualize o recurso personalizado de DNS OpenShift para o domínio da nova instância, conforme mostrado no seguinte exemplo:
Interrompa e reinicie a instância do Blockchain Platform usando o Blockchain Platform Manager para que as alterações de DNS entrem em vigor.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
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.
- Execute o seguinte comando.
oc new-project obp-coredns - Implante um servidor
corednspersonalizado no namespaceobp-corednsexecutando o comando a seguir.
Use o arquivo de manifesto a seguir com o comando.kubectl apply -f <coredns-deployment-yaml-file>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 - Crie um arquivo
coredns-custom-configmapno formato YAML para sua instância de blockchain.
No exemplo anterior,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 }<instanceName>é o nome da instância e<domain>é o domínio pai. - Execute o comando a seguir para aplicar o objeto
ConfigMappersonalizado.kubectl apply -f <coredns-custom-configmap-yaml-file> - Execute o comando a seguir para obter o endereço IP do cluster. Registre o endereço IP.
kubectl get svc -n obp-coredns - Execute o comando a seguir para editar o recurso personalizado DNS OpenShift.
kubectl edit dnses.operator/default - Atualize a seção de zonas do recurso personalizado de DNS para usar seus nomes de instância e domínio, conforme mostrado no seguinte exemplo:
No exemplo anterior,## 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><instanceName>é o nome da instância e<domain>é o domínio pai. - Para adicionar novas instâncias, adicione entradas ao arquivo
coredns-custom-configmape atualize o recurso personalizado DNS OpenShift para o domínio da nova instância, conforme mostrado no exemplo a seguir.
Interrompa e reinicie a instância para que as alterações de DNS tenham efeito.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
kubectl get virtualservice -n <instance-namespace> -o json | jq -r
.items[].spec.hosts[0]Adicionar Nós Adicionais ao Cluster
- Execute o seguinte comando para verificar pods no estado
Pending:
Além disso, você pode verificar se não há pods disponíveis:kubectl get pods -n <instancename> | grep Pendingkubectl get pods -n instancename - Em seguida, verifique os nós de trabalho disponíveis:
kubectl get nodes | grep worker - Para verificar se há nós disponíveis para obter novos pods, execute o seguinte comando em cada nó de trabalho:
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.kubectl describe node $<worker_node> - Para adicionar mais nós, primeiro obtenha o número MachineSets no cluster:
oc get machinesets -n openshift-machine-api - Para qualquer MachineSets com menos de 2 nós, tente escalá-los.
em que <obpee00-qtthx-worker-eastus2> é um nome de exemplo de MachineSet que você deseja dimensionar para 2 nós.oc scale --replicas=2 machineset <obpee00-qtthx-worker-eastus2> -n openshift-machine-api - Consulte o MachineSets novamente até que a lista de nós prontos e disponíveis atinja o número de nós selecionados.
- Agora você pode reimplantar suas instâncias com falha.
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.
- Execute o seguinte comando.
oc new-project obp-coredns - Implante um servidor
corednspersonalizado no namespaceobp-corednsexecutando o comando a seguir.
Use o arquivo de manifesto a seguir com o comando.kubectl apply -f <coredns-deployment-yaml-file>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 - Crie um arquivo
coredns-custom-configmapno formato YAML para sua instância de blockchain.
No exemplo anterior,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 }<instanceName>é o nome da instância e<domain>é o domínio passado ao criar a instância. - Execute o comando a seguir para aplicar o objeto
ConfigMappersonalizado.kubectl apply -f <coredns-custom-configmap-yaml-file> - Execute o comando a seguir para obter o endereço IP do cluster. Registre o endereço IP.
kubectl get svc -n obp-coredns - Execute o comando a seguir para editar o recurso personalizado DNS OpenShift.
kubectl edit dnses.operator/default - 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.
No exemplo anterior,## 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><instanceName>é o nome da instância e<domain>é o domínio pai. - Para adicionar novas instâncias, adicione entradas ao arquivo
coredns-custom-configmape atualize o recurso personalizado de DNS OpenShift para o domínio da nova instância, conforme mostrado no seguinte exemplo:
Interrompa e reinicie a instância do Blockchain Platform usando o Blockchain Platform Manager para que as alterações de DNS entrem em vigor.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
<ISTIO-EXTERNAL-IP> console.myobp.founder.com auth.myobp.founder.comEm que <ISTIO-EXTERNAL-IP> é o valor ClusterIP do Serviço Kubernetes do istio-ingressgateway. Para cada instância adicional, atualize a mesma entrada de arquivo de hosts anexando os novos nomes de host à linha existente; não crie uma nova linha por instância.
Adicionar Nós Adicionais ao Cluster
- Execute o seguinte comando para verificar pods no estado
Pending:
Além disso, você pode verificar se não há pods disponíveis:kubectl get pods -n <instancename> | grep Pendingkubectl get pods -n instancename - Em seguida, verifique os nós de trabalho disponíveis:
kubectl get nodes | grep worker - Para verificar se há nós disponíveis para obter novos pods, execute o seguinte comando em cada nó de trabalho:
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.kubectl describe node $<worker_node> - Para adicionar mais nós, primeiro obtenha o número MachineSets no cluster:
oc get machinesets -n openshift-machine-api - Para qualquer MachineSets com menos de 2 nós, tente escalá-los.
em que <obpee00-qtthx-worker-eastus2> é um nome de exemplo de MachineSet que você deseja dimensionar para 2 nós.oc scale --replicas=2 machineset <obpee00-qtthx-worker-eastus2> -n openshift-machine-api - Consulte o MachineSets novamente até que a lista de nós prontos e disponíveis atinja o número de nós selecionados.
- 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.