天天看點

k8s/openshift部署Hyperledger burrow

目錄

    • 環境
    • 1. 安裝burrow
    • 2. 下載下傳chart
    • 3. 生成配置檔案(私鑰和位址)
    • 4. 部署
        • 4.1 建立項目、生成配置檔案
        • 4.2 修改配置檔案
        • 4.3 合并配置檔案
        • 4.4 開始安裝chart
        • 4.4 檢查網絡是否正常
        • 4.5 删除重來

環境

  • os:centos 7.6
  • openshift:3.11
  • helm:v2.13.0(以上版本,需支援mergeOverwrite)
  • jq:1.5

1. 安裝burrow

wget https://github.com/hyperledger/burrow/releases/download/v0.30.3/burrow_0.30.3_Linux_x86_64.tar.gz
mkdir burrow_bin&& tar -zxvf burrow_0.30.3_Linux_x86_64.tar.gz -C burrow_bin
cp burrow_bin/burrow /usr/bin/
rm -rf burrow_bin/ && rm -f burrow_0.30.3_Linux_x86_64.tar.gz
burrow -v
           

2. 下載下傳chart

我這裡使用了一個修改過的版本,預設值做了修改,并添加了web3端口支援。詳見 https://github.com/itling/burrow_helm_chart
$ git clone https://github.com/helm/charts.git
$ cd stable/burrow/
           

3. 生成配置檔案(私鑰和位址)

這裡生成5個節點配置,鍊名命名為pld-blockchain-dev-burrow

CHAIN_NAME應帶-burrow字尾,前面的名稱和部署chart名稱相同

$ CHAIN_NODES=5 CHAIN_NAME="pld-blockchain-dev-burrow" ./initialize.sh
Initializing 5 Validator Nodes
------------------------------

Writing kubernetes template files for validators secrets, and configmaps.
Building the genesis spec with burrow (0.30.3+commit.ffccfb69eb9465b3a5b5a747139e081b9f095fdd+2020-04-05T21:34:13Z).
Creating keys and necessary deploy files...
Saved keys and genesis as /root/helm/charts/stable/burrow/setup.yaml
Saved example 'values.yaml' as /root/helm/charts/stable/burrow/addresses.yaml
Done
           

4. 部署

4.1 建立項目、生成配置檔案

$ oc new-project burrow-dev
$ oc apply -f 
$ oc apply -f setup.yaml -n burrow-dev
secret/pld-blockchain-dev-burrow-keys-000 created
secret/pld-blockchain-dev-burrow-keys-001 created
secret/pld-blockchain-dev-burrow-keys-002 created
secret/pld-blockchain-dev-burrow-keys-003 created
secret/pld-blockchain-dev-burrow-keys-004 created
configmap/pld-blockchain-dev-burrow-genesis created
           

4.2 修改配置檔案

修改value.yaml配置檔案

burrow --version版本應該和image.tag保持一緻

image:
  repository: hyperledger/burrow
  tag: 0.30.3
  pullPolicy: IfNotPresent

chain:
  logLevel: info
  extraSeeds: []
  testing: false
  restore:
    enabled: false
    dumpURL: ""

config:
  BurrowDir: ".burrow"
  Tendermint:
    Seeds: ""
    SeedMode: false
    ListenHost: "0.0.0.0"
    ListenPort: "26656"
    ExternalAddress: ""
    Moniker: ""
  Keys:
    GRPCServiceEnabled: true
    AllowBadFilePermissions: true
    RemoteAddress: ""
    KeysDirectory: "/keys"
  RPC:
    Info:
      Enabled: true
      ListenHost: "0.0.0.0"
      ListenPort: "26658"
    Profiler:
      Enabled: false
      ListenHost: "0.0.0.0"
      ListenPort: "6060"
    GRPC:
      Enabled: true
      ListenHost: "0.0.0.0"
      ListenPort: "10997"
    Metrics:
      Enabled: true
      ListenHost: "0.0.0.0"
      ListenPort: "9102"
      MetricsPath: "/metrics"
      BlockSampleSize: 100
    Web3:
      Enabled: true
      ListenHost: "0.0.0.0"
      ListenPort: "26660"
  Logging:
    ExcludeTrace: true
    NonBlocking: true
    RootSink:
      Output:
        OutputType: "stderr"
        Format: "json"

validators:
- name: Validator_0
  address: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  nodeAddress: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

contracts:
  # wait required to ensure chain readiness
  enabled: false
  image: ""
  tag: ""
  deploy: ""

extraArgs: {}
environment:
  inline: {}
  secrets: []

organization: "user"

persistence:
  enabled: true
  size: 10Gi
  storageClass: 
  accessMode: ReadWriteOnce
  persistentVolumeReclaimPolicy: "Delete"

peer:
  service:
    type: ClusterIP
  ingress:
    enabled: false
    hosts: []

grpc:
  service:
    type: ClusterIP
    loadBalance: true
  ingress:
    enabled: false
    hosts: []
    annotations: {}
    tls: {}
web3:
  service:
    type: ClusterIP
    loadBalance: true
  ingress:
    enabled: false
    hosts: []
    annotations: {}
    tls: {}
    
info:
  service:
    type: ClusterIP
    loadBalance: true
  ingress:
    enabled: false
    # exposing partial ingress only exposes
    # the /accounts and /blocks paths outside the cluster
    partial: false
    pathLeader: "/"
    annotations: {}
    hosts: []
    tls: {}

resources:
  limits:
    cpu: 500m
    memory: 1Gi
  requests:
    cpu: 100m
    memory: 256Mi

livenessProbe:
  enabled: true
  path: /status?block_seen_time_within=10m
  initialDelaySeconds: 240
  timeoutSeconds: 1
  periodSeconds: 30

readinessProbe:
  enabled: true
  path: /status
  initialDelaySeconds: 5
  initialDelaySeconds: 5

podAnnotations: {}
podLabels: {}

# Affinity for pod assignment
# Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
        - matchExpressions:
            - key: blockchain
              operator: In
              values:
                - dev

# Tolerations for pod assignment
# Ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
tolerations: 
  - effect: NoExecute
    key: blockchain
    operator: Equal
    value: dev

# Node labels for pod assignment
# Ref: https://kubernetes.io/docs/user-guide/node-selection/
nodeSelector: {}
           

這裡加了節點容忍和親和,這個叢集有幾台機器專門用來跑burrow

$ kubectl get node --show-labels |grep blockchain
compute18.domain.local   Ready     compute   40d       v1.11.0+d4cacc0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,blockchain=dev,cpumanager=false,kubernetes.io/hostname=compute18.domain.local,kubevirt.io/schedulable=false,node-role.kubernetes.io/compute=true
compute19.domain.local   Ready     compute   40d       v1.11.0+d4cacc0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,blockchain=dev,cpumanager=false,kubernetes.io/hostname=compute19.domain.local,kubevirt.io/schedulable=false,node-role.kubernetes.io/compute=true
compute20.domain.local   Ready     compute   40d       v1.11.0+d4cacc0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,blockchain=dev,cpumanager=false,kubernetes.io/hostname=compute20.domain.local,kubevirt.io/schedulable=false,node-role.kubernetes.io/compute=true
           

4.3 合并配置檔案

将生成的位址配置檔案合并進values.yaml

cat addresses.yaml >> values.yaml
           

4.4 開始安裝chart

helm client安裝請參考:https://blog.csdn.net/kk3909/article/details/105441313

–name應該和CHAIN_NAME的字首保持一緻

helm install .   \
--set chain.nodes=5 \
--namespace burrow-dev \
--name pld-blockchain-dev \
--values values.yaml 
           

4.4 檢查網絡是否正常

建立路由(選擇

pld-blockchain-dev-burrow-info

服務),浏覽器打開http://your-ingress-domain/consensus,檢視peers資訊。

4.5 删除重來

oc delete secret pld-blockchain-dev-burrow-keys
oc delete -f setup.yaml -n burrow-dev
helm delete pld-blockchain-dev
helm del --purge pld-blockchain-dev
           

繼續閱讀