From 0b9ae974f3e7e2eb6da98e3434f57c79b7d27a18 Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 15 Oct 2025 21:23:22 -0700 Subject: [PATCH] add: dockerfile and deploy command --- Dockerfile | 11 +++++++++++ Makefile | 16 ++++++++++++++++ kubernetes.yaml | 41 +++++++++++++++++++++++++++++++++++++++++ kubernetes.yaml.tmpl | 41 +++++++++++++++++++++++++++++++++++++++++ src/bin/handler.rs | 3 ++- 5 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 Dockerfile create mode 100644 Makefile create mode 100644 kubernetes.yaml create mode 100644 kubernetes.yaml.tmpl diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3ddc3c8 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +# Build Stage +FROM rust:latest AS builder +WORKDIR /app +COPY . . +RUN cargo build --release + +# Runtime Stage +FROM debian:stable-slim +WORKDIR /app +COPY --from=builder /app/target/release/handler . +CMD ["./handler"] \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..243bacd --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ +MAJOR_VERSION = 0 +MINOR_VERSION = 0 +PATH_VERSION = 1 + +TAG = $(MAJOR_VERSION).$(MINOR_VERSION).$(PATH_VERSION) + +build: + docker build . -t skubelb-handler:$(TAG) + docker tag skubelb-handler:$(TAG) us-west4-docker.pkg.dev/nixernetes/images/skubelb-handler:$(TAG) + +kube: + cat kubernetes.yaml.tmpl | sed 's/TAG/$(TAG)/' > kubernetes.yaml + +deploy: build kube + docker push us-west4-docker.pkg.dev/nixernetes/images/skubelb-handler:$(TAG) + kubectl apply -f kubernetes.yaml diff --git a/kubernetes.yaml b/kubernetes.yaml new file mode 100644 index 0000000..5f8245d --- /dev/null +++ b/kubernetes.yaml @@ -0,0 +1,41 @@ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: skubelb + namespace: skubelb + labels: + k8s-app: skubelb +spec: + selector: + matchLabels: + name: skubelb + template: + metadata: + labels: + name: skubelb + spec: + tolerations: + # these tolerations are to have the daemonset runnable on control plane nodes + # remove them if your control plane nodes should not run pods + - key: node-role.kubernetes.io/control-plane + operator: Exists + effect: NoSchedule + - key: node-role.kubernetes.io/master + operator: Exists + effect: NoSchedule + containers: + - name: skubelb + image: us-west4-docker.pkg.dev/nixernetes/images/skubelb-handler:0.0.1 + env: + - name: NODE_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + command: ["sh", "-c", "./handler -s 10.128.0.2:8888 -l ${NODE_IP}"] + resources: + limits: + memory: 200Mi + requests: + cpu: 10m + memory: 100Mi + terminationGracePeriodSeconds: 30 \ No newline at end of file diff --git a/kubernetes.yaml.tmpl b/kubernetes.yaml.tmpl new file mode 100644 index 0000000..541ecb0 --- /dev/null +++ b/kubernetes.yaml.tmpl @@ -0,0 +1,41 @@ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: skubelb + namespace: skubelb + labels: + k8s-app: skubelb +spec: + selector: + matchLabels: + name: skubelb + template: + metadata: + labels: + name: skubelb + spec: + tolerations: + # these tolerations are to have the daemonset runnable on control plane nodes + # remove them if your control plane nodes should not run pods + - key: node-role.kubernetes.io/control-plane + operator: Exists + effect: NoSchedule + - key: node-role.kubernetes.io/master + operator: Exists + effect: NoSchedule + containers: + - name: skubelb + image: us-west4-docker.pkg.dev/nixernetes/images/skubelb-handler:TAG + env: + - name: NODE_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + command: ["sh", "-c", "./handler -s 10.128.0.2:8888 -l ${NODE_IP}"] + resources: + limits: + memory: 200Mi + requests: + cpu: 10m + memory: 100Mi + terminationGracePeriodSeconds: 30 \ No newline at end of file diff --git a/src/bin/handler.rs b/src/bin/handler.rs index 81ede7c..39332c8 100644 --- a/src/bin/handler.rs +++ b/src/bin/handler.rs @@ -3,7 +3,7 @@ use std::time::Duration; use clap::Parser; -use log::error; +use log::{error, info}; use anyhow::Result; use env_logger::Env; @@ -37,6 +37,7 @@ fn handle(remote: &str, listen: &str) -> Result<()> { let url = format!("http://{}/register/{}", remote, listen); loop { sleep(Duration::from_secs(20)); + info!("sending post to {}", url); client.post(&url).send()?; } } \ No newline at end of file