Ethereum handshake failed id=e8d86dae37655a1b conn=dyndial err=Genesis block mismatch — dfc3e94e54007bba (!= 573969da5d11c81a) ????
Quorum的7node example若是使用docker按照官方的方法來建鏈目前是沒問題且最順利的版本,但若是部屬在K8s上則會出現上面錯誤,從字面上來看是說創世區塊不匹配,其主要原因如下:


在官方的 ConfigMap描述檔裡所定義的 genesis-geth.json內容中的chainId為10,但是在deployments.yaml裡面的NETWORK_ID卻是1101,也就是如果以官方的範例來跑的話會造成創世區塊不正確,因為這兩個值必須一定要相等。
為什麼明明把NETWORK_ID和chainId改成相同值卻還是產生一樣的問題???
若之前在同一個環境部屬過一次失敗時,就算把NETWORK_ID與chainId改為正常並重新佈署依舊還是會得到失敗的結果?為什麼?

仔細看deployments.yaml的後端儲存卷採用的是hostPath的方式,hostPath是利用worker-node的storage來作為儲存空間,因為第一次佈署錯誤的創世區塊已經寫入storage中,就算把pod都刪除一樣沒辦法把storage清除,導致後續的錯誤。

可以試著進入geth.ipc下輸入admin.nodeInfo.protocols 可以發現chainId依舊還是第一次部署的值10,也就是不管你的ConfigMap怎麼修改都無法改變它。

紅匡的部分,就算你只把genesis_created這個作為flag的檔案給刪除讓他再從新進入條件式並重新產生創世區塊也會導致鏈的錯誤發生,原因是錯誤的創世區塊已經寫入storage,這個已經產生的事實你是無法改變它的,你唯一能做的只有刪光所有worker-node的storage。
建議修改後端儲存卷綁定的方式,減少與worker-node的相依性。