Unable to bootstrap fabric orderer in k8s

8/22/2017

I'm trying to start fabric inside dockers and got error:

2017-08-22 13:24:33.544 UTC [orderer/main] main -> INFO 001 Starting orderer:
 Version: 1.0.1
 Go version: go1.7.5
 OS/Arch: linux/amd64
2017-08-22 13:24:33.552 UTC [orderer/main] initializeSecureServerConfig -> INFO 002 Starting orderer with TLS enabled
2017-08-22 13:24:33.577 UTC [bccsp_sw] openKeyStore -> DEBU 003 KeyStore opened at [/var/hyperledger/orderer/msp/keystore]...done
2017-08-22 13:24:33.577 UTC [bccsp] initBCCSP -> DEBU 004 Initialize BCCSP [SW]
2017-08-22 13:24:33.577 UTC [msp] getPemMaterialFromDir -> DEBU 005 Reading directory /var/hyperledger/orderer/msp/signcerts
2017-08-22 13:24:33.577 UTC [msp] getPemMaterialFromDir -> DEBU 006 Inspecting file /var/hyperledger/orderer/msp/signcerts/orderer.example.com-cert.pem
2017-08-22 13:24:33.578 UTC [msp] getPemMaterialFromDir -> DEBU 007 Reading directory /var/hyperledger/orderer/msp/cacerts
2017-08-22 13:24:33.578 UTC [msp] getPemMaterialFromDir -> DEBU 008 Inspecting file /var/hyperledger/orderer/msp/cacerts/ca.example.com-cert.pem
2017-08-22 13:24:33.578 UTC [msp] getPemMaterialFromDir -> DEBU 009 Reading directory /var/hyperledger/orderer/msp/admincerts
2017-08-22 13:24:33.578 UTC [msp] getPemMaterialFromDir -> DEBU 00a Inspecting file /var/hyperledger/orderer/msp/admincerts/Admin@example.com-cert.pem
2017-08-22 13:24:33.578 UTC [msp] getPemMaterialFromDir -> DEBU 00b Reading directory /var/hyperledger/orderer/msp/intermediatecerts
2017-08-22 13:24:33.578 UTC [msp] getMspConfig -> DEBU 00c Intermediate certs folder not found at [/var/hyperledger/orderer/msp/intermediatecerts]. Skipping. [stat /var/hyperledger/orderer/msp/intermediatecerts: no such file or directory]
2017-08-22 13:24:33.578 UTC [msp] getPemMaterialFromDir -> DEBU 00d Reading directory /var/hyperledger/orderer/msp/tlscacerts
2017-08-22 13:24:33.578 UTC [msp] getPemMaterialFromDir -> DEBU 00e Inspecting file /var/hyperledger/orderer/msp/tlscacerts/tlsca.example.com-cert.pem
2017-08-22 13:24:33.579 UTC [msp] getPemMaterialFromDir -> DEBU 00f Reading directory /var/hyperledger/orderer/msp/tlsintermediatecerts
2017-08-22 13:24:33.579 UTC [msp] getMspConfig -> DEBU 010 TLS intermediate certs folder not found at [/var/hyperledger/orderer/msp/tlsintermediatecerts]. Skipping. [stat /var/hyperledger/orderer/msp/tlsintermediatecerts: no such file or directory]
2017-08-22 13:24:33.579 UTC [msp] getPemMaterialFromDir -> DEBU 011 Reading directory /var/hyperledger/orderer/msp/crls
2017-08-22 13:24:33.579 UTC [msp] getMspConfig -> DEBU 012 crls folder not found at [/var/hyperledger/orderer/msp/crls]. Skipping. [stat /var/hyperledger/orderer/msp/crls: no such file or directory]
2017-08-22 13:24:33.579 UTC [msp] getMspConfig -> DEBU 013 MSP configuration file not found at [/var/hyperledger/orderer/msp/config.yaml]: [stat /var/hyperledger/orderer/msp/config.yaml: no such file or directory]
2017-08-22 13:24:33.579 UTC [msp] NewBccspMsp -> DEBU 014 Creating BCCSP-based MSP instance
2017-08-22 13:24:33.579 UTC [msp] GetLocalMSP -> DEBU 015 Created new local MSP
2017-08-22 13:24:33.579 UTC [msp] Setup -> DEBU 016 Setting up MSP instance OrdererMSP
2017-08-22 13:24:33.579 UTC [msp/identity] newIdentity -> DEBU 017 Creating identity instance for ID &{OrdererMSP acdb2548cf319bf1f33343ca692b77e27c37ed62cbee54781f3eddd83b6a918f}
2017-08-22 13:24:33.580 UTC [msp/identity] newIdentity -> DEBU 018 Creating identity instance for ID &{OrdererMSP 1687c8eece2d3177a8edd5954c7705ca32d75d1ce9a3b5254ff36dffc4e873b4}
2017-08-22 13:24:33.580 UTC [msp/identity] newIdentity -> DEBU 019 Creating identity instance for ID &{OrdererMSP 1687c8eece2d3177a8edd5954c7705ca32d75d1ce9a3b5254ff36dffc4e873b4}
2017-08-22 13:24:33.581 UTC [msp/identity] newIdentity -> DEBU 01a Creating identity instance for ID &{OrdererMSP 36ef22e61bccb5f9f750732c35bcacbf60b7f098f5283ca6b04419a1c7901a21}
2017-08-22 13:24:33.581 UTC [bccsp_sw] loadPrivateKey -> DEBU 01b Loading private key [1ba4dfae43e9131da5c2ce3873b5f5530013d2c619e14fd76d867ed200fbefaf] at [/var/hyperledger/orderer/msp/keystore/1ba4dfae43e9131da5c2ce3873b5f5530013d2c619e14fd76d867ed200fbefaf_sk]...
2017-08-22 13:24:33.581 UTC [msp/identity] newIdentity -> DEBU 01c Creating identity instance for ID &{OrdererMSP 36ef22e61bccb5f9f750732c35bcacbf60b7f098f5283ca6b04419a1c7901a21}
2017-08-22 13:24:33.582 UTC [msp] Validate -> DEBU 01d MSP OrdererMSP validating identity
2017-08-22 13:24:33.582 UTC [orderer/main] createLedgerFactory -> DEBU 01e Ledger dir: /var/hyperledger/production/orderer
2017-08-22 13:24:33.582 UTC [kvledger.util] CreateDirIfMissing -> DEBU 01f CreateDirIfMissing [/var/hyperledger/production/orderer/index/]
2017-08-22 13:24:33.582 UTC [kvledger.util] logDirStatus -> DEBU 020 Before creating dir - [/var/hyperledger/production/orderer/index/] does not exist
2017-08-22 13:24:33.582 UTC [kvledger.util] logDirStatus -> DEBU 021 After creating dir - [/var/hyperledger/production/orderer/index/] exists
panic: Unable to bootstrap orderer. Error unmarshalling genesis block: proto: can't skip unknown wire type 7 for common.Block

goroutine 1 [running]:
panic(0xb62660, 0xc42037e3d0)
          /opt/go/src/runtime/panic.go:500 +0x1a1
github.com/hyperledger/fabric/orderer/common/bootstrap/file.    (*fileBootstrapper).GenesisBlock(0xc42037e2f0, 0xc42037e2f0)
          /opt/gopath/src/github.com/hyperledger/fabric/orderer/common/bootstrap/file/bootstrap.go:49 +0x198
main.initializeBootstrapChannel(0xc4201dd440, 0x122e2a0, 0xc420386160)
      /opt/gopath/src/github.com/hyperledger/fabric/orderer/main.go:161 +0x759
main.initializeMultiChainManager(0xc4201dd440, 0x122aea0, 0x1272e88, 0xc4201d9e30, 0x1)
      /opt/gopath/src/github.com/hyperledger/fabric/orderer/main.go:210 +0xa0
main.main()
      /opt/gopath/src/github.com/hyperledger/fabric/orderer/main.go:75 +0x392

In my case mounting host path is not possible because cluster could be operated from different machines. As k8s not supporting recursively config maps I resolved it with archive file.

Here is my rc manifest:

apiVersion: v1
kind: ReplicationController
metadata:
  creationTimestamp: null
  labels:
    service: orderer-example-com
  name: orderer-example-com
  namespace: fabric
spec:
  replicas: 1
  selector:
    service: orderer-example-com
  template:
    metadata:
      creationTimestamp: null
      labels:
        service: orderer-example-com
    spec:
      containers:
      - command: ["/bin/sh", "-c", "mkdir -p /var/hyperledger/orderer && chmod +x /root/start_orderer.sh && /root/start_orderer.sh"]
        env:
        - name: ORDERER_GENERAL_GENESISMETHOD
          value: file
        - name: ORDERER_GENERAL_GENESISFILE
          value: /var/hyperledger/orderer/genesis.block
        - name: ORDERER_GENERAL_LOCALMSPID
          value: OrdererMSP
        - name: ORDERER_GENERAL_LOCALMSPDIR
          value: /var/hyperledger/orderer/msp

        - name: ORDERER_GENERAL_LISTENADDRESS
          value: 0.0.0.0
        - name: ORDERER_GENERAL_LOGLEVEL
          value: DEBUG
        - name: ORDERER_GENERAL_TLS_ENABLED
          value: "true"

        - name: ORDERER_GENERAL_TLS_PRIVATEKEY
          value: "/var/hyperledger/orderer/tls/server.key"
        - name: ORDERER_GENERAL_TLS_CERTIFICATE
          value: "/var/hyperledger/orderer/tls/server.crt"
        - name: ORDERER_GENERAL_TLS_ROOTCAS
          value: "[/var/hyperledger/orderer/tls/ca.crt]"
        image: hyperledger/fabric-orderer:x86_64-1.0.1
        name: orderer-example-com
        volumeMounts:
        - name: orderer-stuff-vol
          mountPath: /var/hyperledger/
        - name: start-orderer-vol
          mountPath: /root
        ports:
        - containerPort: 7050
        resources: {}
      restartPolicy: Always
      serviceAccountName: ""
      volumes:
      - name: start-orderer-vol
        configMap:
          name: start-orderer-cm
      - name: orderer-stuff-vol
        configMap:
          name: orderer-stuff-cm
status:
  replicas: 0

And service manifest

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  name: orderer-example-com
  namespace: fabric
spec:
  type: NodePort
  ports:
   - name: "7050"
     nodePort: 30001
     port: 7050
     targetPort: 7050
  selector:
    service: orderer-example-com
status:
  loadBalancer: {}

Here is my ConfigMaps

user@DESKTOP:~/bx_fabric/Separete_nodes/k8s$ kubectl -n fabric get cm
orderer-stuff-cm           2         22h
start-orderer-cm           1         1h

user@DESKTOP-BJJGP5A:~/bx_fabric/Separete_nodes/k8s$ ls -l orderer_stuff
total 12
-rw-rw---x 1 user user 9076 Aug 21 18:11 genesis.block
drwxrwxrwx 0 user user 512 Aug  7 17:48 msp
drwxrwxrwx 0 user user 512 Aug  7 17:55 tls

oleks@DESKTOP-BJJGP5A:~/bx_fabric/Separete_nodes/k8s$ cat start_orderer.sh
mkdir -p /var/hyperledger/orderer
tar -xvf /var/hyperledger/orderer_stuff.tar -C /var/hyperledger/orderer
chown -R root.root /var/hyperledger/orderer
orderer

Please, can you help me to ind root cause of this error? Let me know if any additional data needs. Thank you

-- Alexandr Borisenko
hyperledger-fabric
kubernetes

1 Answer

8/25/2017

It's resolved. Genesis.block is binary file and configmap not works properly with bin files. So, I mounted Genesis.block as secret and it's works. Issue closed

-- Alexandr Borisenko
Source: StackOverflow