Skip to content
This repository has been archived by the owner on Jul 29, 2024. It is now read-only.

migrate to k8s #8

Merged
merged 35 commits into from
Jun 9, 2023
Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
24f591e
WIP: migrate to k8s
SuperFluffy May 23, 2023
33fb8c1
quote ports so kubectl can unmarshal the fields
SuperFluffy May 23, 2023
015e3bd
define ingress
SuperFluffy May 23, 2023
0fcff44
add create-control-plane and kustomize just commands
steezeburger May 23, 2023
91d62d6
remove trailing white space. consistent endings for files used with k…
steezeburger May 23, 2023
1e5a5a6
fresh astria-dev-cluster.yml
steezeburger May 23, 2023
68e52c3
remove uneeded just command
steezeburger May 23, 2023
64c0cd2
fix justfile, reduce ingress
SuperFluffy May 24, 2023
dc4c78a
Merge remote-tracking branch 'origin/k8s' into steezeburger-k8s
steezeburger May 24, 2023
4f65c28
define an executor service, set localdev vhosts
SuperFluffy May 24, 2023
bb6e730
Merge remote-tracking branch 'origin/k8s' into steezeburger-k8s
steezeburger May 24, 2023
df1b1d4
rm ephemeral file that's not really needed
steezeburger May 24, 2023
88ff1b9
Merge pull request #9 from astriaorg/steezeburger-k8s
SuperFluffy May 24, 2023
9cd0f3d
update readme. add helpful just commands.
steezeburger May 24, 2023
5de0f4f
remove old podman cruft
steezeburger May 24, 2023
01cdb44
add more deps to README
steezeburger May 24, 2023
7727280
add metamask connect info to readme
steezeburger May 24, 2023
b1d0c3e
use link
steezeburger May 24, 2023
9ba7d81
dont use link
steezeburger May 24, 2023
41da480
remove gitignore cruft
steezeburger May 25, 2023
d7c1e3e
use better cleanup command
steezeburger Jun 2, 2023
822aa8b
add wait-for-astria just command
steezeburger Jun 2, 2023
528181d
more succient wait-for-astria
steezeburger Jun 2, 2023
30ce282
better clean command
steezeburger Jun 2, 2023
d3c18f0
better name for command that creates control plane
steezeburger Jun 2, 2023
0a99ac3
move helpful commands out of justfile
steezeburger Jun 2, 2023
f41d2fe
remove cruft
steezeburger Jun 2, 2023
79e194b
fix readme
steezeburger Jun 5, 2023
8d4b8f1
add timeout to wait-for-astria command
steezeburger Jun 5, 2023
1285b86
broken deployment
steezeburger Jun 6, 2023
45d6f07
use correct geth image everywhere
steezeburger Jun 6, 2023
e8555fa
upgrade metro image. use different local geth image while gh actions …
steezeburger Jun 7, 2023
ffeafda
metro 0.0.6
steezeburger Jun 8, 2023
f0f24d5
use go-ethereum:0.0.6
steezeburger Jun 8, 2023
d84aa7e
use images from repo
steezeburger Jun 9, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,3 @@ ConductorConfig.toml
# env
.env
tests/docker/.env

# generated yaml
/templates/astria_stack.yaml
86 changes: 40 additions & 46 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
# Astria Dev Cluster

This repository contains configuration and related scripts for running Astria with Podman.
This repository contains configuration and related scripts for running Astria with [`kind` (Kubernetes and Docker)](https://kind.sigs.k8s.io/).

## Dependencies

Main dependencies

* Rust - https://www.rust-lang.org/tools/install
* Podman - https://podman.io/getting-started/installation
* docker - https://docs.docker.com/get-docker/
* kubectl - https://kubernetes.io/docs/tasks/tools/
* kind - https://kind.sigs.k8s.io/docs/user/quick-start/#installation

For contract deployment:

Expand All @@ -16,60 +17,53 @@ For contract deployment:
## Setup

```bash
# init and start podman machine
podman machine init
podman machine start

# create template yaml
# NOTE - replace the executor_local_account with your own account address
podman run --rm \
-e pod_name=astria_stack \
-e celestia_home_volume=celestia-home-vol \
-e metro_home_volume=metro-home-vol \
-e executor_home_volume=executor-home-vol \
-e relayer_home_volume=relayer-home-vol \
-e conductor_home_volume=conductor-home-vol \
-e executor_local_account=0xb0E31D878F49Ec0403A25944d6B1aE1bf05D17E1 \
-e celestia_app_host_port=26657 \
-e bridge_host_port=26659 \
-e sequencer_host_port=1318 \
-e sequencer_host_grpc_port=9100 \
-e executor_host_http_port=8545 \
-e executor_host_grpc_port=50051 \
-e scripts_host_volume="$PWD"/container-scripts \
-v "$PWD"/templates:/data/templates \
dcagatay/j2cli:latest \
-o /data/templates/astria_stack.yaml \
/data/templates/astria_stack.yaml.jinja2

# run pod
podman play kube --log-level=debug templates/astria_stack.yaml

# deploy test contract
git clone https://github.com/joroshiba/test-contracts
cd test-contracts
export PRIV_KEY=123...
RUST_LOG=debug forge create --private-key $PRIV_KEY src/Storage.sol:Storage
# create control cluster
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you mention how to update executor_local_account?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will take care of this in #13

just create-cluster
steezeburger marked this conversation as resolved.
Show resolved Hide resolved

# ingress
just deploy-ingress-controller

# wait for ingress.
# NOTE: this may fail quickly with "error: no matching resources found".
# please retry the command
just wait-for-ingress-controller

# deploy
just deploy-astria
```

### Connecting Metamask
steezeburger marked this conversation as resolved.
Show resolved Hide resolved
* add custom network
* network name: `astria-local`
* rpc url: `http://executor.astria.localdev.me`
* chain id: `1337`
* currency symbol: `ETH`

### Helpful commands

```bash
# list running containers
podman ps
# logs
just logs-nginx-controller
just logs-astria
just logs-container geth-executor

# list nodes
kubectl get -n astria-dev-cluster nodes

# list pods
kubectl get --all-namespaces pods
kubectl get -n astria-dev-cluster pods

# stop running stack
podman pod stop astria_stack
# delete cluster and resources
just cleanup-astria
steezeburger marked this conversation as resolved.
Show resolved Hide resolved

# remove stack
podman pod rm astria_stack
# example of deploying contract w/ forge (https://github.com/foundry-rs/foundry)
RUST_LOG=debug forge create --private-key $PRIV_KEY --rpc-url "http://executor.astria.localdev.me" src/Storage.sol:Storage
```

### Helpful links

* https://podman.io/getting-started/
* https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
* https://kubernetes.io/docs/concepts/configuration/configmap/
* https://www.redhat.com/sysadmin/podman-play-kube-updates
* https://www.redhat.com/sysadmin/podman-mac-machine-architecture
* https://kubernetes.io/docs/reference/kubectl/cheatsheet/
* https://jamesdefabia.github.io/docs/user-guide/kubectl/kubectl_logs/
30 changes: 30 additions & 0 deletions justfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
default:
@just --list

create-cluster:
kind create cluster --config ./kubernetes/kind-cluster-config.yml

deploy-ingress-controller:
kubectl apply -f https://github.com/raw/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml

wait-for-ingress-controller:
kubectl wait --namespace ingress-nginx --for=condition=ready pod --selector=app.kubernetes.io/component=controller --timeout=600s

deploy-astria:
kubectl apply -k kubernetes/

wait-for-astria:
steezeburger marked this conversation as resolved.
Show resolved Hide resolved
kubectl get -n astria-dev-cluster pods --no-headers=true | awk '/deployment/{print $1}' | xargs -I{} kubectl wait --namespace astria-dev-cluster --for=condition=ready pod/{} --timeout=600s
steezeburger marked this conversation as resolved.
Show resolved Hide resolved

cleanup-astria:
kubectl delete all --all --namespace astria-dev-cluster
steezeburger marked this conversation as resolved.
Show resolved Hide resolved

# logs
logs-nginx-controller:
kubectl get -n ingress-nginx pods --no-headers=true | awk '/controller/{print $1}' | xargs kubectl logs -n ingress-nginx -f

logs-astria:
kubectl get -n astria-dev-cluster pods --no-headers=true | awk '/deployment/{print $1}' | xargs kubectl logs -n astria-dev-cluster -f

logs-container container:
kubectl get -n astria-dev-cluster pods --no-headers=true | awk '/deployment/{print $1}' | xargs kubectl logs -n astria-dev-cluster -f -c {{container}}
steezeburger marked this conversation as resolved.
Show resolved Hide resolved
64 changes: 64 additions & 0 deletions kubernetes/config-maps.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: celestia-env
namespace: astria-dev-cluster
data:
coins: "1000000000000000utia"
validator_stake: "5000000000utia"
chainid: "test"
keyring_backend: "test"
validator_key_name: "validator"
# evm address corresponds to private key:
# da6ed55cb2894ac2c9c10209c09de8e8b9d109b910338d5bf3d747a7e1fc9eb9
evm_address: "0x966e6f22781EF6a6A82BBB4DB3df8E225DfD9488"
home_dir: "/home/celestia"
bridge_host_port: "26659"
celestia_app_host_port: "26657"
---
apiVersion: v1
kind: ConfigMap
metadata:
name: metro-env
namespace: astria-dev-cluster
data:
coins: "1000000000000000utick"
validator_stake: "5000000000utick"
chainid: "private"
keyring_backend: "test"
validator_key_name: "validator"
# evm address corresponds to private key:
# da6ed55cb2894ac2c9c10209c09de8e8b9d109b910338d5bf3d747a7e1fc9eb9
evm_address: "0x966e6f22781EF6a6A82BBB4DB3df8E225DfD9488"
home_dir: "/home/metro"
sequencer_host_port: "1318"
sequencer_host_grpc_port: "9100"
---
apiVersion: v1
kind: ConfigMap
metadata:
name: geth-env
namespace: astria-dev-cluster
data:
executor_local_account: "0xb0E31D878F49Ec0403A25944d6B1aE1bf05D17E1"
home_dir: "/home/geth"
executor_host_http_port: "8545"
executor_host_grpc_port: "50051"
sequencer_host_grpc_port: "9100"
---
apiVersion: v1
kind: ConfigMap
metadata:
name: relayer-env
namespace: astria-dev-cluster
data:
home_dir: "/home/relayer"
---
apiVersion: v1
kind: ConfigMap
metadata:
name: conductor-env
namespace: astria-dev-cluster
data:
home_dir: "/home/conductor"
---
Loading