5)Provisionner une instance
Cette section explique comment provisionner votre instance Oracle Blockchain Platform à l'aide de Blockchain Platform Manager.
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.
Choisir la forme de provisionnement à utiliser
Lors du provisionnement d'une instance, vous avez le choix entre deux configurations. La migration entre ces options n'est pas prise en charge actuellement.
| Configuration | Fonctionnalités |
|---|---|
| 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 plus élevé pour chaque service. |
|
Provisionner une instance à l'aide du gestionnaire de plate-forme Blockchain
Pour créer un fondateur de blockchain ou une instance de participant dans Blockchain Platform Manager, utilisez l'assistant Créer une instance.
-
Organisation fondatrice : environnement de chaîne de blocs complet, comprenant un nouveau réseau que les participants peuvent rejoindre plus tard.
-
Instance de participant : pour rejoindre une organisation fondatrice existante, vous pouvez créer une instance de participant si vos informations d'identification vous donnent accès au réseau. Notez qu'un participant ne peut pas fonctionner seul.
Provisionner les prérequis
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]Une fois que vous avez créé une instance Oracle Blockchain Platform Enterprise Edition, vous devez configurer 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 du cluster. 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 des zones de la ressource personnalisée DNS pour utiliser votre instance et vos noms de domaine, comme indiqué 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 indiqué 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
Une fois que vous avez créé une instance Oracle Blockchain Platform Enterprise Edition, vous devez configurer 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 du cluster. 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 des zones de la ressource personnalisée DNS pour utiliser votre instance et vos noms de domaine, comme indiqué 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 indiqué 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 au cluster
- 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 processus actif disponibles :
kubectl get nodes | grep worker - Pour vérifier si des noeuds sont disponibles pour accepter de nouveaux pods, exécutez la commande suivante sur chaque noeud de processus actif :
où <worker_node> est le nom d'un noeud de processus actif. Assurez-vous que la capacité du noeud de processus actif ne dépasse pas 100 %.kubectl describe node $<worker_node> - Pour ajouter des noeuds supplémentaires, commencez par obtenir le nombre de MachineSets dans le cluster :
oc get machinesets -n openshift-machine-api - Pour toute MachineSets comportant moins de 2 noeuds, essayez de les mettre à l'échelle.
où <obpee00-qtthx-worker-eastus2> est un exemple de nom MachineSet que vous voulez mettre à l'échelle jusqu'à 2 noeuds.oc scale --replicas=2 machineset <obpee00-qtthx-worker-eastus2> -n openshift-machine-api - Interrogez à 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 désormais redéployer les instances en échec.
Une fois l'instance créée et répertoriée dans la liste Instances, vous pouvez lancer la console de service à partir du menu en regard du nom de l'instance. Utilisez la console pour configurer votre réseau comme décrit dans Qu'est-ce que la console ? dans Utilisation d'Oracle Blockchain Platform.