5 Provisionnement d'une instance
Cette section décrit comment provisionner votre instance Oracle Blockchain Platform à l'aide du gestionnaire de plate-forme Blockchain.
Avant de créer une instance Oracle Blockchain Platform
Avant de provisionner Oracle Blockchain Platform, déterminez si une instance de développeur ou d'entreprise répond à vos besoins.
Décider de la forme de provisionnement à utiliser
Lors du provisionnement d'une instance, vous choisissez entre deux configurations. La migration entre ces options n'est pas prise en charge actuellement.
| Configuration | Fonctions |
|---|---|
| Développeur L'utilisation recommandée pour cette forme de départ est le développement et l'évaluation. |
|
| Entreprise Configuration d'instance hautement disponible, avec un nombre de répliques supérieur pour chaque service. |
|
Provisionner une instance à l'aide du gestionnaire Blockchain Platform
Pour créer une instance du fondateur ou du participant de la chaîne de blocs dans le gestionnaire de plate-forme de chaîne de blocs, utilisez l'Assistant Créer une nouvelle instance.
-
Organisation fondatrice : Environnement complet de chaîne de blocs, notamment un nouveau réseau auquel les participants peuvent accéder plus tard.
-
Instance participante : S'il existe déjà une organisation fondatrice à laquelle vous souhaitez vous joindre, vous pouvez créer une instance participante si vos données d'identification vous permettent d'accéder au réseau. Notez qu'un participant ne peut pas fonctionner seul.
Post-requis de provisionnement
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]Après avoir créé une instance Oracle Blockchain Platform Enterprise Edition, vous devez configurer un DNS afin que les noms d'hôte publics des composants puissent être résolus à partir du réseau local OpenShift.
- Exécutez la commande suivante .
oc new-project obp-coredns - Déployez un serveur
corednspersonnalisé dans l'espace de nomsobp-corednsen exécutant la commande suivante.
Utilisez le fichier manifeste suivant avec la commande.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 - Créez un fichier
coredns-custom-configmapau format YAML pour votre instance de chaîne de blocs.
Dans l'exemple précédent,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>est le nom de l'instance et<domain>est le domaine transmis lors de la création de l'instance. - Exécutez la commande suivante pour appliquer l'objet
ConfigMappersonnalisé.kubectl apply -f <coredns-custom-configmap-yaml-file> - Exécutez la commande suivante pour obtenir l'adresse IP de la grappe. Enregistrez l'adresse IP.
kubectl get svc -n obp-coredns - Exécutez la commande suivante pour modifier la ressource personnalisée DNS OpenShift.
kubectl edit dnses.operator/default - Mettez à jour la section Zones de la ressource personnalisée DNS pour utiliser votre instance et vos noms de domaine, comme illustré dans l'exemple suivant.
Dans l'exemple précédent,## 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>est le nom de l'instance et<domain>est le domaine parent. - Pour ajouter de nouvelles instances, ajoutez des entrées au fichier
coredns-custom-configmapet mettez à jour la ressource personnalisée DNS OpenShift pour le domaine de la nouvelle instance, comme illustré dans l'exemple suivant :
Vous devez arrêter et redémarrer l'instance Blockchain Platform à l'aide de Blockchain Platform Manager pour que les modifications DNS prennent effet.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
Configurer le DNS
Après avoir créé une instance Oracle Blockchain Platform Enterprise Edition, vous devez configurer un DNS afin que les noms d'hôte publics des composants puissent être résolus à partir du réseau local OpenShift.
- Exécutez la commande suivante .
oc new-project obp-coredns - Déployez un serveur
corednspersonnalisé dans l'espace de nomsobp-corednsen exécutant la commande suivante.
Utilisez le fichier manifeste suivant avec la commande.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 - Créez un fichier
coredns-custom-configmapau format YAML pour votre instance de chaîne de blocs.
Dans l'exemple précédent,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>est le nom de l'instance et<domain>est le domaine parent. - Exécutez la commande suivante pour appliquer l'objet
ConfigMappersonnalisé.kubectl apply -f <coredns-custom-configmap-yaml-file> - Exécutez la commande suivante pour obtenir l'adresse IP de la grappe. Enregistrez l'adresse IP.
kubectl get svc -n obp-coredns - Exécutez la commande suivante pour modifier la ressource personnalisée DNS OpenShift.
kubectl edit dnses.operator/default - Mettez à jour la section Zones de la ressource personnalisée DNS pour utiliser votre instance et vos noms de domaine, comme illustré dans l'exemple suivant.
Dans l'exemple précédent,## 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>est le nom de l'instance et<domain>est le domaine parent. - Pour ajouter de nouvelles instances, ajoutez des entrées au fichier
coredns-custom-configmapet mettez à jour la ressource personnalisée DNS OpenShift pour le domaine de la nouvelle instance, comme illustré dans l'exemple suivant.
Vous devez arrêter et redémarrer l'instance pour que les modifications DNS prennent effet.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]Ajouter des noeuds supplémentaires à la grappe
- Exécutez la commande suivante pour rechercher les pods à l'état En attente :
De plus, vous pouvez vérifier qu'aucun pod n'est disponible :kubectl get pods -n <instancename> | grep Pendingkubectl get pods -n instancename - Vérifiez ensuite les noeuds de travail disponibles :
kubectl get nodes | grep worker - Pour vérifier s'il existe des noeuds disponibles pour prendre de nouveaux pods, exécutez la commande suivante sur chaque noeud de travail :
où <worker_node> est le nom d'un noeud de travail. Assurez-vous que la capacité du noeud de travail ne dépasse pas 100 %.kubectl describe node $<worker_node> - Pour ajouter des noeuds supplémentaires, obtenez d'abord le nombre de MachineSets dans la grappe :
oc get machinesets -n openshift-machine-api - Pour toute MachineSets avec moins de 2 noeuds, essayez de les mettre à l'échelle.
où <obpee00-qtthx-worker-eastus2> est un exemple de nom d'un MachineSet que vous voulez mettre à l'échelle à 2 noeuds.oc scale --replicas=2 machineset <obpee00-qtthx-worker-eastus2> -n openshift-machine-api - Interrogez de nouveau MachineSets jusqu'à ce que la liste des noeuds prêts et disponibles atteigne le nombre de noeuds que vous avez sélectionnés.
- Vous pouvez maintenant redéployer vos instances en échec.
Une fois votre instance créée et listée dans la liste Instances, vous pouvez lancer la console de service à partir du menu à côté du nom de l'instance. Utilisez la console pour configurer votre réseau, comme décrit dans À quoi sert la console? dans Utilisation d'Oracle Blockchain Platform.