neutrinoのgke環境

作ってみた

前提

  1. GCPプロジェクト準備済
  2. GCLOUDをinstall済
  3. dockerをinstall済
  4. kubectlをinstall済

GKE

まずはクラスタを作る。 対象のプロジェクトが存在するconfigurationを指定する。

gcloud config configurations activate CONFIGURATION_NAME  

続いて、空のクラスタを作成する。

gcloud container clusters create candy-neutrino --machine-type=n1-standard-1 --num-nodes=1 --region asia-northeast1-a  
gcloud container clusters describe candy-neutrino  

続いて、今後のローカルでのkubectlとの連携のために、credentialを渡す。

$ gcloud container clusters get-credentials candy-neutrino --zone asia-northeast1-a
Fetching cluster endpoint and auth data.  
kubeconfig entry generated for test-cluster.  
$ kubectl config get-contexts

対象のコンテキストが指定されていることを確認する。

docker

Container Registry を認証するには、gcloud を Docker 認証ヘルパーとして使用する。

gcloud auth configure-docker  

これができたら、imageをbuildし、gcrにpushする。

cd lnd  
docker build . -t gcr.io/<PROJECT_NAME>/candy-neutrino:latest --no-cache  

下記を実行すると、下記の用にイメージが表示されるはずだ。

$ docker images
gcr.io/bruwbird/candy-neutrino                                latest              aaaaaaaaaaaa        25 hours ago        72.7MB  

続いて、このイメージをGCRにプッシュする。

docker push gcr.io/<PROJECT_NAME>/candy-neutrino:latest  
gcloud container images list  

.envをシークレットとして展開する。

cp .env.sample .env  
kubectl create secret generic neutrino-secret --from-env-file=.env  

deploy

statefulsetを利用する。

sed -i  "bak" "s/your-project-ID/<PROJECT_NAME>/g" StatefulSet.yaml  
$ kubectl apply -f StatefulSet.yaml --record
statefulset.apps/candy-neutrino created  
kubectl apply -f service.yaml  
service/candy-neutrino-s created  

一定時間が経過すると、podsが作成されていることが確認できる。

$ kubectl get pods
NAME         READY     STATUS    RESTARTS   AGE  
candy-neutrino-0   1/1       Running   1          99m  

volumeは下記の通り。

~/g/g/Y/candy-neutrino ❯❯❯ kubectl get pvc -o wide                                                                                                                             2019/12/30 17:50:36 [master]
NAME                                      STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE  
candy-neutrino-storage-candy-neutrino-0   Bound     pvc-97ab8e3a-2ae0-11ea-a85b-42010a920041   10Gi       RWO            standard       6m7s  

動作

実際にコンテナの中に入り、動作確認をする。

kubectl exec -it candy-neutrino-0 bash  
lncli create  
Input wallet password:  
Confirm password:


Do you have an existing cipher seed mnemonic you want to use? (Enter y/n): n

Your cipher seed can optionally be encrypted.  
Input your passphrase if you wish to encrypt it (or press enter to proceed without a cipher seed passphrase): 

Generating fresh cipher seed...

!!!YOU MUST WRITE DOWN THIS SEED TO BE ABLE TO RESTORE THE WALLET!!!

---------------BEGIN LND CIPHER SEED---------------
 1. abstract   2. high       3. biology   4. slight 
 5. weekend    6. tonight    7. mystery   8. submit 
 9. easily    10. royal     11. wood     12. figure 
13. benefit   14. ordinary  15. ceiling  16. item  
17. lottery   18. next      19. opera    20. clump  
21. faith     22. copper    23. song     24. tuition  
---------------END LND CIPHER SEED-----------------

!!!YOU MUST WRITE DOWN THIS SEED TO BE ABLE TO RESTORE THE WALLET!!!

lnd successfully initialized!  

このあとの作業に使うlnd node用のGUIツールとしては、zapを推奨。

prepare keys

tls及びmacaroonsは、lappsを稼働させるときに必要になるケースが多い。
下記のshellを実行し、tlsを再作成する。

cd lnd  
./rebuild-tls.sh

localに落とす時はkubectl cpを利用する。

kubectl cp candy-neutrino-0:root/.lnd/data/chain/bitcoin/testnet/admin.macaroon ./admin.macaroon  
kubectl cp candy-neutrino-0:/root/.lnd/tls.cert ./tls.cert  

monitoring

必要に応じてlndmonを構築することをおすすめする。 https://github.com/YusukeShimizu/lndmon-gke