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. |
|
| 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 um fundador de blockchain ou uma instância participante no Blockchain Platform Manager, use o assistente de Criação de Nova Instância.
-
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.
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>\.com 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
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.
- 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 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 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 Pendente:
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.