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. |
|
| Enterprise Configurazione dell'istanza ad alta disponibilità, con un numero di repliche più elevato per ogni servizio. |
|
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.
-
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.
Prerequisiti di provisioning
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]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.
- Eseguire il comando riportato di seguito.
oc new-project obp-coredns - Distribuire un server
corednspersonalizzato nello spazio di nomiobp-corednseseguendo il comando seguente.
Usare il seguente file manifesto con il 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 - Creare un file
coredns-custom-configmapin formato YAML per l'istanza blockchain.
Nell'esempio precedente,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>è il nome dell'istanza e<domain>è il dominio passato durante la creazione dell'istanza. - Eseguire il comando seguente per applicare l'oggetto
ConfigMappersonalizzato.kubectl apply -f <coredns-custom-configmap-yaml-file> - Eseguire il comando seguente per ottenere l'indirizzo IP del cluster. Registrare l'indirizzo IP.
kubectl get svc -n obp-coredns - Eseguire il comando seguente per modificare la risorsa personalizzata DNS OpenShift.
kubectl edit dnses.operator/default - Aggiornare la sezione delle zone della risorsa personalizzata DNS per utilizzare i nomi di istanza e dominio, come mostrato nell'esempio riportato di seguito.
Nell'esempio precedente,## 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>è il nome dell'istanza e<domain>è il dominio padre. - Per aggiungere nuove istanze, aggiungere voci al file
coredns-custom-configmape aggiornare la risorsa personalizzata DNS OpenShift per il dominio della nuova istanza come mostrato nell'esempio riportato di seguito.
Per rendere effettive le modifiche DNS, è necessario arrestare e riavviare l'istanza della piattaforma Blockchain utilizzando Blockchain Platform Manager.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
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.
- Eseguire il comando riportato di seguito.
oc new-project obp-coredns - Distribuire un server
corednspersonalizzato nello spazio di nomiobp-corednseseguendo il comando seguente.
Usare il seguente file manifesto con il 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 - Creare un file
coredns-custom-configmapin formato YAML per l'istanza blockchain.
Nell'esempio precedente,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>è il nome dell'istanza e<domain>è il dominio padre. - Eseguire il comando seguente per applicare l'oggetto
ConfigMappersonalizzato.kubectl apply -f <coredns-custom-configmap-yaml-file> - Eseguire il comando seguente per ottenere l'indirizzo IP del cluster. Registrare l'indirizzo IP.
kubectl get svc -n obp-coredns - Eseguire il comando seguente per modificare la risorsa personalizzata DNS OpenShift.
kubectl edit dnses.operator/default - Aggiornare la sezione delle zone della risorsa personalizzata DNS per utilizzare i nomi di istanza e dominio, come mostrato nell'esempio riportato di seguito.
Nell'esempio precedente,## 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>è il nome dell'istanza e<domain>è il dominio padre. - Per aggiungere nuove istanze, aggiungere voci al file
coredns-custom-configmape aggiornare la risorsa personalizzata DNS OpenShift per il dominio della nuova istanza come mostrato nell'esempio riportato di seguito.
Per rendere effettive le modifiche DNS, è necessario arrestare e riavviare l'istanza.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]Aggiungi nodi aggiuntivi al cluster
- Eseguire il comando seguente per verificare la presenza di pod con stato In sospeso:
Inoltre, puoi verificare che nessun pod sia disponibile:kubectl get pods -n <instancename> | grep Pendingkubectl get pods -n instancename - Successivamente, controllare i nodi di lavoro disponibili:
kubectl get nodes | grep worker - Per verificare se sono disponibili nodi per l'utilizzo di nuovi pod, eseguire il comando seguente su ciascun nodo di lavoro:
dove <worker_node> è il nome di un nodo di lavoro. Assicurarsi che il nodo di lavoro non superi la capacità del 100%.kubectl describe node $<worker_node> - Per aggiungere altri nodi, ottenere innanzitutto il numero di MachineSets nel cluster:
oc get machinesets -n openshift-machine-api - Per qualsiasi MachineSets con meno di 2 nodi, provare a ridimensionarli.
dove <obpee00-qtthx-worker-eastus2> è un nome di esempio di MachineSet che si desidera scalare a 2 nodi.oc scale --replicas=2 machineset <obpee00-qtthx-worker-eastus2> -n openshift-machine-api - Eseguire di nuovo una query su MachineSets finché la lista di nodi pronti e disponibili non raggiunge il numero di nodi selezionati.
- È 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.