test: update testing infrastructure to make development easier
Signed-off-by: Jakob Beckmann <f4z3r-github@pm.me>
This commit is contained in:
parent
cb062413fa
commit
66790265ef
|
|
@ -4,3 +4,4 @@ bin/
|
||||||
target/
|
target/
|
||||||
Dockerfile
|
Dockerfile
|
||||||
Makefile
|
Makefile
|
||||||
|
.devbox/
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,20 @@
|
||||||
# syntax=docker/dockerfile:1
|
# syntax=docker/dockerfile:1
|
||||||
FROM rust:1.77-bookworm as builder
|
FROM ghcr.io/rust-cross/cargo-zigbuild:0.20.1 AS builder
|
||||||
|
|
||||||
|
ARG TARGETARCH=x86_64
|
||||||
|
|
||||||
|
WORKDIR /tmp
|
||||||
|
|
||||||
|
RUN rustup target add ${TARGETARCH}-unknown-linux-musl
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
RUN --mount=type=cache,target=/usr/local/cargo/registry \
|
RUN --mount=type=cache,target=/usr/local/cargo/registry \
|
||||||
--mount=type=cache,target=/app/target \
|
--mount=type=cache,target=/app/target \
|
||||||
cargo build --release && cp target/release/wasmcloud-operator .
|
cargo zigbuild --release --target x86_64-unknown-linux-musl --locked && \
|
||||||
|
cp target/${TARGETARCH}-unknown-linux-musl/release/wasmcloud-operator .
|
||||||
|
|
||||||
FROM gcr.io/distroless/cc-debian12
|
FROM scratch
|
||||||
COPY --from=builder /app/wasmcloud-operator /usr/local/bin/
|
COPY --from=builder /app/wasmcloud-operator /usr/local/bin/
|
||||||
ENTRYPOINT ["/usr/local/bin/wasmcloud-operator"]
|
ENTRYPOINT ["/usr/local/bin/wasmcloud-operator"]
|
||||||
|
|
|
||||||
22
Makefile
22
Makefile
|
|
@ -1,8 +1,9 @@
|
||||||
repo := ghcr.io/wasmcloud/wasmcloud-operator
|
repo := ghcr.io/wasmcloud/wasmcloud-operator
|
||||||
|
local_repo := localhost:5001/wasmcloud-operator
|
||||||
version := $(shell git rev-parse --short HEAD)
|
version := $(shell git rev-parse --short HEAD)
|
||||||
platforms := linux/amd64,linux/arm64
|
platforms := linux/amd64,linux/arm64
|
||||||
|
|
||||||
.PHONY: build-dev-image build-image buildx-image
|
.PHONY: build-dev-image build-image buildx-image setup teardown build-local-dev-image push-local-dev-image deploy-local-dev-image update-local-dev-image
|
||||||
build-image:
|
build-image:
|
||||||
docker build -t $(repo):$(version) .
|
docker build -t $(repo):$(version) .
|
||||||
|
|
||||||
|
|
@ -11,3 +12,22 @@ buildx-image:
|
||||||
|
|
||||||
build-dev-image:
|
build-dev-image:
|
||||||
docker build -t $(repo):$(version)-dev -f Dockerfile.local .
|
docker build -t $(repo):$(version)-dev -f Dockerfile.local .
|
||||||
|
|
||||||
|
setup:
|
||||||
|
cd hack && bash ./run-kind-cluster.sh
|
||||||
|
|
||||||
|
teardown:
|
||||||
|
cd hack && bash ./teardown-kind-cluster.sh
|
||||||
|
|
||||||
|
build-local-dev-image:
|
||||||
|
docker build -t $(local_repo):latest -f Dockerfile.local .
|
||||||
|
|
||||||
|
push-local-dev-image:
|
||||||
|
docker push $(local_repo):latest
|
||||||
|
|
||||||
|
deploy-local-dev-image:
|
||||||
|
kubectl kustomize deploy/local | kubectl apply -f -
|
||||||
|
|
||||||
|
# deleting pod makes it pull a new version thanks to pullPolicy always
|
||||||
|
update-local-dev-image:
|
||||||
|
kubectl delete pod -n wasmcloud-operator -l "app=wasmcloud-operator"
|
||||||
|
|
|
||||||
58
README.md
58
README.md
|
|
@ -212,9 +212,61 @@ data:
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
|
|
||||||
- Make sure you have a Kubernetes cluster running locally. Some good options
|
### KinD
|
||||||
include [Kind](https://kind.sigs.k8s.io/) or Docker Desktop.
|
|
||||||
- `RUST_LOG=info cargo run`
|
Make sure you have `kind`, `kubectl`, and `helm` installed. Then you can run `make setup` to create
|
||||||
|
a KinD cluster with NATS and wadm installed.
|
||||||
|
|
||||||
|
### Deploy Local Code
|
||||||
|
|
||||||
|
Once KinD is set up, run the following:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# build a docker image from the current code
|
||||||
|
make build-local-dev-image
|
||||||
|
# push the image to a registry available to kind
|
||||||
|
make push-local-dev-image
|
||||||
|
# deploy the operator using the pushed image
|
||||||
|
make deploy-local-dev-image
|
||||||
|
```
|
||||||
|
|
||||||
|
### Deploying Test Custom Resources
|
||||||
|
|
||||||
|
You can deploy custom resources to test the operator using the following commands:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# deploy a host configuration
|
||||||
|
kubectl apply -f hack/wasmcloud-hostconfig-sample.yaml
|
||||||
|
# once the hosts are available, deploy a sample application
|
||||||
|
kubectl apply -f https://raw.githubusercontent.com/wasmCloud/wasmcloud-operator/main/examples/quickstart/hello-world-application.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Update the Image
|
||||||
|
|
||||||
|
After performing local changes to the code, you can update the operator running in the KinD cluster
|
||||||
|
using:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# re-build a docker image from the current code
|
||||||
|
make build-local-dev-image
|
||||||
|
# re-push the image to a registry available to kind
|
||||||
|
make push-local-dev-image
|
||||||
|
# update the existing deployment with the new image
|
||||||
|
make update-local-dev-image
|
||||||
|
```
|
||||||
|
|
||||||
|
### Local Deployment of the Operator
|
||||||
|
|
||||||
|
You can locally run the operator outside any Kubernetes cluster using:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
RUST_LOG=info cargo run --bin wasmcloud-operator
|
||||||
|
```
|
||||||
|
|
||||||
|
> Note that the operator will try to connect to NATS using the configured URI from the
|
||||||
|
> `WasmCloudHostConfig` resources. Since this is likely a DNS entry only resolvable within the
|
||||||
|
> Kuberntees cluster, you will need to ensure traffic is correctly routed to NATS in order for this
|
||||||
|
> to work (e.g. using an entry in your `/etc/hosts` and a port-forward to the NATS service.
|
||||||
|
|
||||||
## Types crate
|
## Types crate
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
config:
|
||||||
|
cluster:
|
||||||
|
enabled: true
|
||||||
|
replicas: 3
|
||||||
|
leafnodes:
|
||||||
|
enabled: true
|
||||||
|
jetstream:
|
||||||
|
enabled: true
|
||||||
|
fileStore:
|
||||||
|
pvc:
|
||||||
|
size: 10Gi
|
||||||
|
merge:
|
||||||
|
domain: default
|
||||||
|
|
@ -18,7 +18,7 @@ fi
|
||||||
# https://github.com/kubernetes-sigs/kind/issues/2875
|
# https://github.com/kubernetes-sigs/kind/issues/2875
|
||||||
# https://github.com/containerd/containerd/blob/main/docs/cri/config.md#registry-configuration
|
# https://github.com/containerd/containerd/blob/main/docs/cri/config.md#registry-configuration
|
||||||
# See: https://github.com/containerd/containerd/blob/main/docs/hosts.md
|
# See: https://github.com/containerd/containerd/blob/main/docs/hosts.md
|
||||||
cat <<EOF | kind create cluster --image kindest/node:v1.29.4 --config=-
|
cat <<EOF | kind create cluster -n wasmcloud-operator-test --image kindest/node:v1.34.0 --config=-
|
||||||
kind: Cluster
|
kind: Cluster
|
||||||
apiVersion: kind.x-k8s.io/v1alpha4
|
apiVersion: kind.x-k8s.io/v1alpha4
|
||||||
containerdConfigPatches:
|
containerdConfigPatches:
|
||||||
|
|
@ -36,7 +36,7 @@ EOF
|
||||||
# We want a consistent name that works from both ends, so we tell containerd to
|
# We want a consistent name that works from both ends, so we tell containerd to
|
||||||
# alias localhost:${reg_port} to the registry container when pulling images
|
# alias localhost:${reg_port} to the registry container when pulling images
|
||||||
REGISTRY_DIR="/etc/containerd/certs.d/localhost:${reg_port}"
|
REGISTRY_DIR="/etc/containerd/certs.d/localhost:${reg_port}"
|
||||||
for node in $(kind get nodes); do
|
for node in $(kind get nodes -n wasmcloud-operator-test); do
|
||||||
docker exec "${node}" mkdir -p "${REGISTRY_DIR}"
|
docker exec "${node}" mkdir -p "${REGISTRY_DIR}"
|
||||||
cat <<EOF | docker exec -i "${node}" cp /dev/stdin "${REGISTRY_DIR}/hosts.toml"
|
cat <<EOF | docker exec -i "${node}" cp /dev/stdin "${REGISTRY_DIR}/hosts.toml"
|
||||||
[host."http://${reg_name}:5000"]
|
[host."http://${reg_name}:5000"]
|
||||||
|
|
@ -62,3 +62,15 @@ data:
|
||||||
host: "localhost:${reg_port}"
|
host: "localhost:${reg_port}"
|
||||||
help: "https://kind.sigs.k8s.io/docs/user/local-registry/"
|
help: "https://kind.sigs.k8s.io/docs/user/local-registry/"
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
# 6. Wait for cluster to come up
|
||||||
|
sleep 5s
|
||||||
|
kubectl -n kube-system wait --for=condition=Ready --timeout=60s pod -l "component=kube-apiserver"
|
||||||
|
|
||||||
|
# 7. Install NATS
|
||||||
|
helm repo add nats https://nats-io.github.io/k8s/helm/charts/
|
||||||
|
helm upgrade --install -f ./nats-values.yaml nats nats/nats
|
||||||
|
kubectl wait --for=condition=Ready --timeout=600s pod -l "app.kubernetes.io/name=nats"
|
||||||
|
|
||||||
|
# 8. Install WADM
|
||||||
|
helm install wadm -f ./wadm-values.yaml --version 0.2.0 oci://ghcr.io/wasmcloud/charts/wadm
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/sh
|
||||||
|
set -o errexit
|
||||||
|
|
||||||
|
# 1. Delete kind cluster
|
||||||
|
kind delete cluster -n wasmcloud-operator-test
|
||||||
|
|
||||||
|
# 2. Delete local registry
|
||||||
|
docker stop kind-registry
|
||||||
|
docker rm kind-registry
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
wadm:
|
||||||
|
config:
|
||||||
|
nats:
|
||||||
|
server: "nats.default.svc.cluster.local:4222"
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
apiVersion: k8s.wasmcloud.dev/v1alpha1
|
||||||
|
kind: WasmCloudHostConfig
|
||||||
|
metadata:
|
||||||
|
name: my-wasmcloud-cluster
|
||||||
|
spec:
|
||||||
|
# The number of wasmCloud host pods to run
|
||||||
|
hostReplicas: 2
|
||||||
|
# The lattice to connect the hosts to
|
||||||
|
lattice: default
|
||||||
|
# Additional labels to apply to the host other than the defaults set in the operator
|
||||||
|
hostLabels:
|
||||||
|
some-label: value
|
||||||
|
# The address to connect to nats
|
||||||
|
natsAddress: nats://nats.default.svc.cluster.local
|
||||||
|
# Which wasmCloud version to use
|
||||||
|
version: 1.0.4
|
||||||
|
|
||||||
Loading…
Reference in New Issue