[mintnet-kubernetes] upgrade to work with tm 0.10.0 and basecoin 0.5.0

This commit is contained in:
Anton Kaliaev 2017-05-30 18:23:26 +03:00
parent 35a2a58ac0
commit e1f268b9d2
No known key found for this signature in database
GPG Key ID: 7B6881D965918214
8 changed files with 75 additions and 360 deletions

View File

@ -64,7 +64,7 @@ spec:
annotations: annotations:
pod.beta.kubernetes.io/init-containers: '[{ pod.beta.kubernetes.io/init-containers: '[{
"name": "tm-gen-validator", "name": "tm-gen-validator",
"image": "tendermint/tendermint:0.9.0", "image": "tendermint/tendermint:0.10.0",
"imagePullPolicy": "IfNotPresent", "imagePullPolicy": "IfNotPresent",
"command": ["bash", "-c", " "command": ["bash", "-c", "
set -ex\n set -ex\n
@ -82,7 +82,7 @@ spec:
containers: containers:
- name: tm - name: tm
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
image: tendermint/tendermint:0.9.0 image: tendermint/tendermint:0.10.0
resources: resources:
requests: requests:
cpu: 50m cpu: 50m
@ -111,7 +111,7 @@ spec:
configMapKeyRef: configMapKeyRef:
name: tm-config name: tm-config
key: validators key: validators
- name: TMROOT - name: TMHOME
value: /tendermint value: /tendermint
command: command:
- bash - bash
@ -152,7 +152,7 @@ spec:
done done
seeds=$(IFS=','; echo "${seeds[*]}") seeds=$(IFS=','; echo "${seeds[*]}")
tendermint node --seeds="$seeds" --moniker="`hostname`" --proxy_app="unix:///socks/app.sock" tendermint node --p2p.seeds="$seeds" --moniker="`hostname`" --proxy_app="unix:///socks/app.sock"
volumeMounts: volumeMounts:
- name: tmdir - name: tmdir
mountPath: /tendermint mountPath: /tendermint

View File

@ -25,13 +25,13 @@ make create
3. get account's address of the second pod 3. get account's address of the second pod
``` ```
ADDR=`kubectl exec -c app tm-1 -- cat /app/key.json | grep "address" | tr -d "\""` ADDR=`kubectl exec -c app tm-1 -- cat /app/key.json | jq ".address" | tr -d"\""`
``` ```
4. send 5 coins to it from the first pod 4. send 5 coins to it from the first pod
``` ```
kubectl exec -c app tm-0 -- basecoin tx send --to "0x$ADDR" --amount 5 kubectl exec -c app tm-0 -- basecoin tx send --to "0x$ADDR" --amount 5mycoin --from /app/key.json
``` ```

View File

@ -46,38 +46,49 @@ metadata:
name: app-config name: app-config
data: data:
genesis.json: |- genesis.json: |-
[ {
"base/chainID", "chain_id": "chain-tTH4mi",
"test_chain_id", "app_options": {
"base/account", "accounts": [
{ {
"coins" : [ "pub_key": "tm-0",
{"denom": "blank", "amount": 1000} "coins": [
], {
"pub_key" : ["tm-0"] "denom": "mycoin",
}, "amount": 1000000000
"base/account", }
{ ]
"coins" : [ },
{"denom": "blank", "amount": 1000} {
], "pub_key": "tm-1",
"pub_key" : ["tm-1"] "coins": [
}, {
"base/account", "denom": "mycoin",
{ "amount": 1000000000
"coins" : [ }
{"denom": "blank", "amount": 1000} ]
], },
"pub_key" : ["tm-2"] {
}, "pub_key": "tm-2",
"base/account", "coins": [
{ {
"coins" : [ "denom": "mycoin",
{"denom": "blank", "amount": 1000} "amount": 1000000000
], }
"pub_key" : ["tm-3"] ]
},
{
"pub_key": "tm-3",
"coins": [
{
"denom": "mycoin",
"amount": 1000000000
}
]
}
]
} }
] }
--- ---
apiVersion: policy/v1beta1 apiVersion: policy/v1beta1
kind: PodDisruptionBudget kind: PodDisruptionBudget
@ -103,7 +114,7 @@ spec:
annotations: annotations:
pod.beta.kubernetes.io/init-containers: '[{ pod.beta.kubernetes.io/init-containers: '[{
"name": "tm-gen-validator", "name": "tm-gen-validator",
"image": "tendermint/tendermint:0.9.0", "image": "tendermint/tendermint:0.10.0",
"imagePullPolicy": "IfNotPresent", "imagePullPolicy": "IfNotPresent",
"command": ["bash", "-c", " "command": ["bash", "-c", "
set -ex\n set -ex\n
@ -119,7 +130,7 @@ spec:
}, },
{ {
"name": "app-gen-key", "name": "app-gen-key",
"image": "tendermint/basecoin:latest", "image": "tendermint/basecoin:0.5.0",
"imagePullPolicy": "IfNotPresent", "imagePullPolicy": "IfNotPresent",
"command": ["bash", "-c", " "command": ["bash", "-c", "
set -ex\n set -ex\n
@ -137,7 +148,7 @@ spec:
containers: containers:
- name: tm - name: tm
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
image: tendermint/tendermint:0.9.0 image: tendermint/tendermint:0.10.0
ports: ports:
- containerPort: 46656 - containerPort: 46656
name: p2p name: p2p
@ -159,7 +170,7 @@ spec:
configMapKeyRef: configMapKeyRef:
name: tm-config name: tm-config
key: validators key: validators
- name: TMROOT - name: TMHOME
value: /tendermint value: /tendermint
command: command:
- bash - bash
@ -200,7 +211,7 @@ spec:
done done
seeds=$(IFS=','; echo "${seeds[*]}") seeds=$(IFS=','; echo "${seeds[*]}")
tendermint node --seeds="$seeds" --moniker="`hostname`" --proxy_app="unix:///socks/app.sock" tendermint node --p2p.seeds="$seeds" --moniker="`hostname`" --proxy_app="unix:///socks/app.sock"
volumeMounts: volumeMounts:
- name: tmdir - name: tmdir
mountPath: /tendermint mountPath: /tendermint
@ -212,7 +223,10 @@ spec:
- name: app - name: app
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
image: tendermint/basecoin:latest image: tendermint/basecoin:0.5.0
env:
- name: BCHOME
value: /app
workingDir: /app workingDir: /app
command: command:
- bash - bash
@ -224,11 +238,11 @@ spec:
cp /etc/app/genesis.json genesis.json cp /etc/app/genesis.json genesis.json
fqdn_suffix=$(hostname -f | sed 's#[^.]*\.\(\)#\1#') fqdn_suffix=$(hostname -f | sed 's#[^.]*\.\(\)#\1#')
# for every "base/account" # for every "base/account"
i=3 i=0
length=$(cat genesis.json | jq ". | length") length=$(cat genesis.json | jq ".app_options.accounts | length")
while [[ $i -lt $length ]]; do while [[ $i -lt $length ]]; do
# extract pod name ("tm-0") # extract pod name ("tm-0")
pod=$(cat genesis.json | jq -r ".[$i].pub_key[0]") pod=$(cat genesis.json | jq -r ".app_options.accounts[$i].pub_key")
# wait until pod starts to serve its pub_key # wait until pod starts to serve its pub_key
set +e set +e
@ -245,16 +259,16 @@ spec:
# get its pub_key # get its pub_key
curl -s "http://$pod.$fqdn_suffix/app_pub_key.json" | jq "." > k.json curl -s "http://$pod.$fqdn_suffix/app_pub_key.json" | jq "." > k.json
# replace pod name with it (["tm-0"] => "[1, XXXXXXXXXXXXXXXXXXXX]") # replace pod name with it ("tm-0" => "{"type": ..., "data": ...}")
cat genesis.json | jq ".[$i].pub_key = $(cat k.json | jq '.')" > tmpgenesis && mv tmpgenesis genesis.json cat genesis.json | jq ".app_options.accounts[$i].pub_key = $(cat k.json | jq '.')" > tmpgenesis && mv tmpgenesis genesis.json
rm -f k.json rm -f k.json
i=$((i+2)) # skip "base/account" field itself i=$((i+1))
done done
rm -f /socks/app.sock # remove old socket rm -f /socks/app.sock # remove old socket
basecoin start --address="unix:///socks/app.sock" basecoin start --address="unix:///socks/app.sock" --without-tendermint
volumeMounts: volumeMounts:
- name: appdir - name: appdir
mountPath: /app mountPath: /app

View File

@ -1,3 +1,5 @@
**OUTDATED**
# Using with lightclient # Using with lightclient
We have an awesome cluster running, let's try to test this out without We have an awesome cluster running, let's try to test this out without

View File

@ -63,7 +63,7 @@ spec:
annotations: annotations:
pod.beta.kubernetes.io/init-containers: '[{ pod.beta.kubernetes.io/init-containers: '[{
"name": "tm-gen-validator", "name": "tm-gen-validator",
"image": "tendermint/tendermint:0.9.0", "image": "tendermint/tendermint:0.10.0",
"imagePullPolicy": "IfNotPresent", "imagePullPolicy": "IfNotPresent",
"command": ["bash", "-c", " "command": ["bash", "-c", "
set -ex\n set -ex\n
@ -81,7 +81,7 @@ spec:
containers: containers:
- name: tm - name: tm
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
image: tendermint/tendermint:0.9.0 image: tendermint/tendermint:0.10.0
ports: ports:
- containerPort: 46656 - containerPort: 46656
name: p2p name: p2p
@ -103,7 +103,7 @@ spec:
configMapKeyRef: configMapKeyRef:
name: tm-config name: tm-config
key: validators key: validators
- name: TMROOT - name: TMHOME
value: /tendermint value: /tendermint
command: command:
- bash - bash
@ -144,7 +144,7 @@ spec:
done done
seeds=$(IFS=','; echo "${seeds[*]}") seeds=$(IFS=','; echo "${seeds[*]}")
tendermint node --seeds="$seeds" --moniker="`hostname`" --proxy_app="unix:///socks/app.sock" tendermint node --p2p.seeds="$seeds" --moniker="`hostname`" --proxy_app="unix:///socks/app.sock"
volumeMounts: volumeMounts:
- name: tmdir - name: tmdir
mountPath: /tendermint mountPath: /tendermint
@ -163,10 +163,7 @@ spec:
- | - |
set -ex set -ex
go get -d github.com/tendermint/abci/cmd/counter go get github.com/tendermint/abci/cmd/counter
cd $GOPATH/src/github.com/tendermint/abci/
make get_deps
make install
rm -f /socks/app.sock # remove old socket rm -f /socks/app.sock # remove old socket

View File

@ -63,7 +63,7 @@ spec:
annotations: annotations:
pod.beta.kubernetes.io/init-containers: '[{ pod.beta.kubernetes.io/init-containers: '[{
"name": "tm-gen-validator", "name": "tm-gen-validator",
"image": "tendermint/tendermint:0.9.0", "image": "tendermint/tendermint:0.10.0",
"imagePullPolicy": "IfNotPresent", "imagePullPolicy": "IfNotPresent",
"command": ["bash", "-c", " "command": ["bash", "-c", "
set -ex\n set -ex\n
@ -81,7 +81,7 @@ spec:
containers: containers:
- name: tm - name: tm
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
image: tendermint/tendermint:0.9.0 image: tendermint/tendermint:0.10.0
ports: ports:
- containerPort: 46656 - containerPort: 46656
name: p2p name: p2p
@ -103,7 +103,7 @@ spec:
configMapKeyRef: configMapKeyRef:
name: tm-config name: tm-config
key: validators key: validators
- name: TMROOT - name: TMHOME
value: /tendermint value: /tendermint
command: command:
- bash - bash
@ -144,7 +144,7 @@ spec:
done done
seeds=$(IFS=','; echo "${seeds[*]}") seeds=$(IFS=','; echo "${seeds[*]}")
tendermint node --seeds="$seeds" --moniker="`hostname`" --proxy_app="dummy" tendermint node --p2p.seeds="$seeds" --moniker="`hostname`" --proxy_app="dummy"
volumeMounts: volumeMounts:
- name: tmdir - name: tmdir
mountPath: /tendermint mountPath: /tendermint

View File

@ -1,10 +0,0 @@
create:
@echo "==> Creating deployment"
@kubectl create -f app.yaml
destroy:
@echo "==> Destroying deployment"
@kubectl delete -f app.yaml
@kubectl delete pvc -l app=tm
.PHONY: create destroy

View File

@ -1,288 +0,0 @@
---
# Single pod installation (see basecoin for distributed setup)
apiVersion: v1
kind: Service
metadata:
annotations:
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
name: localchain
labels:
app: localchain
spec:
ports:
- port: 46656
name: p2p
- port: 46657
name: rpc
clusterIP: None
selector:
app: tm
---
apiVersion: v1
kind: ConfigMap
metadata:
name: tm-config
data:
validators: "tm-0"
validator.power: "10"
genesis.json: |-
{
"genesis_time": "2016-03-24T23:29:20.457Z",
"chain_id": "chain-iqwZgb",
"validators": [],
"app_hash": ""
}
pub_key_nginx.conf: |-
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
location /pub_key.json { root /usr/share/nginx/; }
location /app_pub_key.json { root /usr/share/nginx/; }
}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
genesis.json: |-
[
"base/chainID",
"test_chain_id",
"base/account",
{
"pub_key": ["tm-0"],
"coins": [
{"denom":"CITI/USD","amount":1000},
{"denom":"UBS/EURO","amount":1000}
]
}
]
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: tm-budget
spec:
selector:
matchLabels:
app: tm
minAvailable: 2
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: tm
spec:
serviceName: localchain
replicas: 1
template:
metadata:
labels:
app: tm
annotations:
pod.beta.kubernetes.io/init-containers: '[{
"name": "tm-gen-validator",
"image": "tendermint/tendermint:0.9.0",
"imagePullPolicy": "IfNotPresent",
"command": ["bash", "-c", "
set -ex\n
if [ ! -f /tendermint/priv_validator.json ]; then\n
tendermint gen_validator > /tendermint/priv_validator.json\n
# pub_key.json will be served by pub-key container\n
cat /tendermint/priv_validator.json | jq \".pub_key\" > /tendermint/pub_key.json\n
fi\n
"],
"volumeMounts": [
{"name": "tmdir", "mountPath": "/tendermint"}
]
},
{
"name": "app-gen-key",
"image": "tendermint/basecoin:latest",
"imagePullPolicy": "IfNotPresent",
"command": ["bash", "-c", "
set -ex\n
if [ ! -f /app/key.json ]; then\n
basecoin key new > /app/key.json\n
# pub_key.json will be served by app-pub-key container\n
cat /app/key.json | jq \".pub_key\" > /app/pub_key.json\n
fi\n
"],
"volumeMounts": [
{"name": "appdir", "mountPath": "/app"}
]
}]'
spec:
containers:
- name: tm
imagePullPolicy: IfNotPresent
image: tendermint/tendermint:0.9.0
ports:
- containerPort: 46656
name: p2p
- containerPort: 46657
name: rpc
env:
- name: VALIDATOR_POWER
valueFrom:
configMapKeyRef:
name: tm-config
key: validator.power
- name: VALIDATORS
valueFrom:
configMapKeyRef:
name: tm-config
key: validators
- name: TMROOT
value: /tendermint
command:
- bash
- "-c"
- |
set -ex
# copy template
cp /etc/tendermint/genesis.json /tendermint/genesis.json
# fill genesis file with validators
IFS=',' read -ra VALS_ARR <<< "$VALIDATORS"
fqdn_suffix=$(hostname -f | sed 's#[^.]*\.\(\)#\1#')
for v in "${VALS_ARR[@]}"; do
# wait until validator generates priv/pub key pair
set +e
curl -s "http://$v.$fqdn_suffix/pub_key.json" > /dev/null
ERR=$?
while [ "$ERR" != 0 ]; do
sleep 5
curl -s "http://$v.$fqdn_suffix/pub_key.json" > /dev/null
ERR=$?
done
set -e
# add validator to genesis file along with its pub_key
curl -s "http://$v.$fqdn_suffix/pub_key.json" | jq ". as \$k | {pub_key: \$k, amount: $VALIDATOR_POWER, name: \"$v\"}" > pub_validator.json
cat /tendermint/genesis.json | jq ".validators |= .+ [$(cat pub_validator.json)]" > tmpgenesis && mv tmpgenesis /tendermint/genesis.json
rm pub_validator.json
done
tendermint node --moniker="`hostname`" --proxy_app="unix:///socks/app.sock"
volumeMounts:
- name: tmdir
mountPath: /tendermint
- mountPath: /etc/tendermint/genesis.json
name: tmconfigdir
subPath: genesis.json
- name: socksdir
mountPath: /socks
- name: app
imagePullPolicy: IfNotPresent
image: tendermint/basecoin:latest
workingDir: /app
command:
- bash
- "-c"
- |
set -ex
# replace "tm-N" with public keys in genesis file
cp /etc/app/genesis.json genesis.json
fqdn_suffix=$(echo $(hostname -f) | sed 's#[^.]*\.\(\)#\1#')
# for every "base/account"
i=3
length=$(cat genesis.json | jq ". | length")
while [ $i -lt $length ]; do
# extract pod name ("tm-0")
pod=$(cat genesis.json | jq -r ".[$i].pub_key[0]")
# wait until pod starts to serve its pub_key
set +e
curl -s "http://$pod.$fqdn_suffix/app_pub_key.json" > /dev/null
ERR=$?
while [ "$ERR" != 0 ]; do
sleep 5
curl -s "http://$pod.$fqdn_suffix/app_pub_key.json" > /dev/null
ERR=$?
done
set -e
# get its pub_key
curl -s "http://$pod.$fqdn_suffix/app_pub_key.json" | jq "." > k.json
# replace pod name with it (["tm-0"] => "[1, XXXXXXXXXXXXXXXXXXXX]")
cat genesis.json | jq ".[$i].pub_key = $(cat k.json | jq '.')" > genesis.json
rm -f k.json
i=$((i+2)) # skip "base/account" field itself
done
rm -f /socks/app.sock # remove old socket
basecoin start --address="unix:///socks/app.sock"
volumeMounts:
- name: appdir
mountPath: /app
- mountPath: /etc/app/genesis.json
name: appconfigdir
subPath: genesis.json
- name: socksdir
mountPath: /socks
- name: pub-key
imagePullPolicy: IfNotPresent
image: nginx:latest
ports:
- containerPort: 80
name: pub-key
command:
- bash
- "-c"
- |
set -ex
# fixes 403 Permission Denied (open() "/tendermint/pub_key.json" failed (13: Permission denied))
# => we cannot serve from /tendermint, so we copy the file
mkdir -p /usr/share/nginx
cp /tendermint/pub_key.json /usr/share/nginx/pub_key.json
cp /app/pub_key.json /usr/share/nginx/app_pub_key.json
nginx -g "daemon off;"
volumeMounts:
- name: tmdir
mountPath: /tendermint
- name: appdir
mountPath: /app
- mountPath: /etc/nginx/conf.d/pub_key.conf
name: tmconfigdir
subPath: pub_key_nginx.conf
volumes:
- name: tmconfigdir
configMap:
name: tm-config
- name: appconfigdir
configMap:
name: app-config
- name: socksdir
emptyDir: {}
volumeClaimTemplates:
- metadata:
name: tmdir
annotations:
volume.alpha.kubernetes.io/storage-class: anything
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 2Gi
- metadata:
name: appdir
annotations:
volume.alpha.kubernetes.io/storage-class: anything
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 12Mi