5 Avisión de una instancia
En esta sección se describe cómo aprovisionar su instancia de Oracle Blockchain Platform mediante Blockchain Platform Manager.
Antes de crear una instancia de Oracle Blockchain Platform
Antes de aprovisionar Oracle Blockchain Platform, decida si un desarrollador o instancia empresarial satisface sus necesidades.
Decisión de qué unidad de aprovisionamiento se va a utilizar
Al aprovisionar una instancia, puede elegir entre dos configuraciones. Actualmente no se admite la migración entre estas opciones.
| Configuración | Funciones |
|---|---|
| Desarrollador El uso recomendado para esta forma inicial es el desarrollo y la evaluación. |
|
| Empresa Configuración de instancias de alta disponibilidad, con un mayor recuento de réplicas para cada servicio. |
|
Aprovisionamiento de una instancia mediante el gestor de plataformas de blockchain
Para crear una instancia de fundador o participante de blockchain en Blockchain Platform Manager, utilice el asistente Crear nueva instancia.
-
Organización fundadora: un entorno de blockchain completo, con una nueva red incluida a la que los participantes se pueden unir más adelante.
-
Instancia de participante: si ya hay una organización fundadora a la que desea unirse, puede crear una instancia de participante si sus credenciales le proporcionan acceso a la red. Tenga en cuenta que un participante no puede funcionar por sí solo.
Requisitos posteriores de aprovisionamiento
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]Después de crear una instancia de Oracle Blockchain Platform Enterprise Edition, debe configurar el DNS para que los nombres de host públicos de los componentes se puedan resolver desde la red local OpenShift.
- Ejecute el siguiente comando.
oc new-project obp-coredns - Despliegue un servidor
corednspersonalizado en el espacio de nombresobp-corednsejecutando el siguiente comando.
Utilice el siguiente archivo de manifiesto con el 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 - Cree un archivo
coredns-custom-configmapen formato YAML para la instancia de blockchain.
En el ejemplo 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>es el nombre de la instancia y<domain>es el dominio transferido al crear la instancia. - Ejecute el siguiente comando para aplicar el objeto
ConfigMappersonalizado.kubectl apply -f <coredns-custom-configmap-yaml-file> - Ejecute el siguiente comando para obtener la dirección IP del cluster. Registro de la dirección IP.
kubectl get svc -n obp-coredns - Ejecute el siguiente comando para editar el recurso personalizado de DNS OpenShift.
kubectl edit dnses.operator/default - Actualice la sección de zonas del recurso personalizado de DNS para utilizar los nombres de instancia y dominio, como se muestra en el siguiente ejemplo.
En el ejemplo 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>es el nombre de la instancia y<domain>es el dominio principal. - Para agregar nuevas instancias, agregue entradas al archivo
coredns-custom-configmapy actualice el recurso personalizado de DNS OpenShift para el dominio de la nueva instancia, como se muestra en el siguiente ejemplo:
Debe parar y reiniciar la instancia de Blockchain Platform con Blockchain Platform Manager para que se apliquen los cambios de DNS.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
Después de crear una instancia de Oracle Blockchain Platform Enterprise Edition, debe configurar el DNS para que los nombres de host públicos de los componentes se puedan resolver desde la red local OpenShift.
- Ejecute el siguiente comando.
oc new-project obp-coredns - Despliegue un servidor
corednspersonalizado en el espacio de nombresobp-corednsejecutando el siguiente comando.
Utilice el siguiente archivo de manifiesto con el 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 - Cree un archivo
coredns-custom-configmapen formato YAML para la instancia de blockchain.
En el ejemplo 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>es el nombre de la instancia y<domain>es el dominio principal. - Ejecute el siguiente comando para aplicar el objeto
ConfigMappersonalizado.kubectl apply -f <coredns-custom-configmap-yaml-file> - Ejecute el siguiente comando para obtener la dirección IP del cluster. Registro de la dirección IP.
kubectl get svc -n obp-coredns - Ejecute el siguiente comando para editar el recurso personalizado de DNS OpenShift.
kubectl edit dnses.operator/default - Actualice la sección de zonas del recurso personalizado de DNS para utilizar los nombres de instancia y dominio, como se muestra en el siguiente ejemplo.
En el ejemplo 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>es el nombre de la instancia y<domain>es el dominio principal. - Para agregar nuevas instancias, agregue entradas al archivo
coredns-custom-configmapy actualice el recurso personalizado de DNS OpenShift para el dominio de la nueva instancia, como se muestra en el siguiente ejemplo.
Debe parar y reiniciar la instancia para que se apliquen los cambios de DNS.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]Agregar nodos adicionales al cluster
- Ejecute el siguiente comando para comprobar si hay pods en estado Pendiente:
Además, puede comprobar si no hay pods disponibles:kubectl get pods -n <instancename> | grep Pendingkubectl get pods -n instancename - A continuación, compruebe los nodos de trabajador disponibles:
kubectl get nodes | grep worker - Para comprobar si hay nodos disponibles para tomar nuevos pods, ejecute el siguiente comando en cada nodo de trabajador:
donde <worker_node> es el nombre de un nodo de trabajador. Asegúrese de que el nodo de trabajador no supere el 100% de capacidad.kubectl describe node $<worker_node> - Para agregar nodos adicionales, primero obtenga el número de MachineSets en el cluster:
oc get machinesets -n openshift-machine-api - Para cualquier MachineSets con menos de 2 nodos, intente ampliarlos.
donde <obpee00-qtthx-worker-eastus2> es un nombre de ejemplo de un MachineSet que desea ampliar a 2 nodos.oc scale --replicas=2 machineset <obpee00-qtthx-worker-eastus2> -n openshift-machine-api - Vuelva a consultar MachineSets hasta que la lista de nodos listos y disponibles alcance el número de nodos que ha seleccionado.
- Ahora puede volver a desplegar las instancias con fallos.
Una vez que la instancia se haya creado y aparezca en la lista Instancias, puede iniciar la consola de servicio desde el menú situado junto al nombre de la instancia. Utilice la consola para configurar la red como se describe en ¿Qué es la consola? en Uso de Oracle Blockchain Platform.