5 Instanz bereitstellen
In diesem Abschnitt wird beschrieben, wie Sie Ihre Oracle Blockchain Platform-Instanz mit Blockchain Platform Manager bereitstellen.
Vor dem Erstellen einer Oracle Blockchain Platform-Instanz
Bevor Sie Oracle Blockchain Platform bereitstellen, entscheiden Sie, ob eine Entwickler- oder Unternehmensinstanz Ihren Anforderungen entspricht.
Zu verwendende Provisioning-Ausprägung bestimmen
Beim Provisioning einer Instanz können Sie zwischen zwei Konfigurationen wählen. Die Migration zwischen diesen Optionen wird derzeit nicht unterstützt.
| Konfiguration | Features |
|---|---|
| Entwickler Empfohlene Verwendung für diese Startausprägungen ist Entwicklung und Bewertung. |
|
| Enterprise Hochverfügbare Instanzkonfiguration mit höherer Replikatanzahl für jeden Service. |
|
Instanz mit Blockchain Platform Manager bereitstellen
Um eine Blockchain-Gründer- oder Teilnehmerinstanz in Blockchain Platform Manager zu erstellen, verwenden Sie den Assistenten "Neue Instanz erstellen".
-
Gründerorganisation: eine vollständige Blockchain-Umgebung, einschließlich eines neuen Netzwerks, dem Teilnehmer später beitreten können.
-
Teilnehmerinstanz: Wenn bereits eine Gründerorganisation vorhanden ist, der Sie beitreten möchten, können Sie eine Teilnehmerinstanz erstellen, sofern Sie mit Ihren Zugangsdaten Zugriff auf das Netzwerk haben. Beachten Sie, dass ein Teilnehmer nicht alleine arbeiten kann.
Nachträgliche Provisioning-Voraussetzungen
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]Nachdem Sie eine Oracle Blockchain Platform Enterprise Edition-Instanz erstellt haben, müssen Sie DNS so konfigurieren, dass öffentliche Hostnamen der Komponenten aus dem lokalen Netzwerk OpenShift aufgelöst werden können.
- Führen Sie den folgenden Befehl aus.
oc new-project obp-coredns - Stellen Sie einen benutzerdefinierten
coredns-Server im Namespaceobp-corednsbereit, indem Sie den folgenden Befehl ausführen.
Verwenden Sie die folgende Manifestdatei mit dem Befehl.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 - Erstellen Sie eine
coredns-custom-configmap-Datei im YAML-Format für Ihre Blockchain-Instanz.
Im vorherigen Beispiel istapiVersion: 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>der Name der Instanz und<domain>die Domain, die beim Erstellen der Instanz übergeben wird. - Führen Sie den folgenden Befehl aus, um das benutzerdefinierte Objekt
ConfigMapanzuwenden.kubectl apply -f <coredns-custom-configmap-yaml-file> - Führen Sie den folgenden Befehl zum Abrufen der Cluster-IP-Adresse aus. Notieren Sie sich die IP-Adresse.
kubectl get svc -n obp-coredns - Führen Sie den folgenden Befehl aus, um die benutzerdefinierte DNS-Ressource OpenShift zu bearbeiten.
kubectl edit dnses.operator/default - Aktualisieren Sie den Abschnitt "Zonen" der benutzerdefinierten DNS-Ressource, um Ihre Instanz- und Domainnamen zu verwenden, wie im folgenden Beispiel dargestellt.
Im vorherigen Beispiel ist## 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>der Name der Instanz und<domain>die übergeordnete Domain. - Um neue Instanzen hinzuzufügen, fügen Sie Einträge zur Datei
coredns-custom-configmaphinzu, und aktualisieren Sie die benutzerdefinierte DNS-Ressource OpenShift für die Domain der neuen Instanz, wie im folgenden Beispiel dargestellt:
Sie müssen die Blockchain Platform-Instanz mit Blockchain Platform Manager stoppen und neu starten, damit DNS-Änderungen wirksam werden.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
DNS konfigurieren
Nachdem Sie eine Oracle Blockchain Platform Enterprise Edition-Instanz erstellt haben, müssen Sie DNS so konfigurieren, dass öffentliche Hostnamen der Komponenten aus dem lokalen Netzwerk OpenShift aufgelöst werden können.
- Führen Sie den folgenden Befehl aus.
oc new-project obp-coredns - Stellen Sie einen benutzerdefinierten
coredns-Server im Namespaceobp-corednsbereit, indem Sie den folgenden Befehl ausführen.
Verwenden Sie die folgende Manifestdatei mit dem Befehl.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 - Erstellen Sie eine
coredns-custom-configmap-Datei im YAML-Format für Ihre Blockchain-Instanz.
Im vorherigen Beispiel istapiVersion: 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>der Name der Instanz und<domain>die übergeordnete Domain. - Führen Sie den folgenden Befehl aus, um das benutzerdefinierte Objekt
ConfigMapanzuwenden.kubectl apply -f <coredns-custom-configmap-yaml-file> - Führen Sie den folgenden Befehl zum Abrufen der Cluster-IP-Adresse aus. Notieren Sie sich die IP-Adresse.
kubectl get svc -n obp-coredns - Führen Sie den folgenden Befehl aus, um die benutzerdefinierte DNS-Ressource OpenShift zu bearbeiten.
kubectl edit dnses.operator/default - Aktualisieren Sie den Abschnitt "Zonen" der benutzerdefinierten DNS-Ressource, um Ihre Instanz- und Domainnamen zu verwenden, wie im folgenden Beispiel dargestellt.
Im vorherigen Beispiel ist## 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>der Name der Instanz und<domain>die übergeordnete Domain. - Um neue Instanzen hinzuzufügen, fügen Sie Einträge zur Datei
coredns-custom-configmaphinzu, und aktualisieren Sie die benutzerdefinierte DNS-Ressource OpenShift für die Domain der neuen Instanz, wie im folgenden Beispiel dargestellt.
Sie müssen die Instanz stoppen und neu starten, damit DNS-Änderungen wirksam werden.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]Weitere Knoten zu Cluster hinzufügen
- Führen Sie den folgenden Befehl aus, um nach Pods mit dem Status "Ausstehend" zu suchen:
Außerdem können Sie prüfen, ob keine Pods verfügbar sind:kubectl get pods -n <instancename> | grep Pendingkubectl get pods -n instancename - Prüfen Sie anschließend die verfügbaren Worker-Knoten:
kubectl get nodes | grep worker - Um zu prüfen, ob Knoten für neue Pods verfügbar sind, führen Sie den folgenden Befehl für jeden Worker-Knoten aus:
wobei <worker_node> der Name eines Worker-Knotens ist. Stellen Sie sicher, dass der Worker-Knoten die Kapazität von 100% nicht überschreitet.kubectl describe node $<worker_node> - Um zusätzliche Knoten hinzuzufügen, rufen Sie zuerst die Anzahl von MachineSets im Cluster ab:
oc get machinesets -n openshift-machine-api - Versuchen Sie für jede MachineSets mit weniger als 2 Knoten, sie zu skalieren.
wobei <obpee00-qtthx-worker-eastus2> ein Beispielname einer MachineSet ist, die auf 2 Knoten hochskaliert werden soll.oc scale --replicas=2 machineset <obpee00-qtthx-worker-eastus2> -n openshift-machine-api - Fragen Sie die MachineSets erneut ab, bis die Liste der verfügbaren Knoten die Anzahl der ausgewählten Knoten erreicht.
- Sie können Ihre nicht erfolgreichen Instanzen jetzt erneut bereitstellen.
Nachdem die Instanz erstellt wurde und in der Liste "Instanzen" aufgeführt wird, können Sie die Servicekonsole aus dem Menü neben dem Instanznamen starten. Verwenden Sie die Konsole, um Ihr Netzwerk zu konfigurieren, wie unter Was ist die Konsole? in Oracle Blockchain Platform verwenden beschrieben.