diff --git a/Makefile b/Makefile index f34d997e2457114f48a9ef4066498d514bb811ef..51543127e6f45931a8417c7cbd1c4dcf4d35e901 100644 --- a/Makefile +++ b/Makefile @@ -160,6 +160,15 @@ tests-e2e: prereqs ## Run e2e tests $(OCI_BIN) save -o ebpf-agent.tar localhost/ebpf-agent:test GOOS=$(GOOS) go test -p 1 -timeout 30m -v -mod vendor -tags e2e ./e2e/... +.PHONY: create-and-deploy-kind-cluster +create-and-deploy-kind-cluster: prereqs ## Create a kind cluster and deploy the agent. + scripts/kind-cluster.sh + +.PHONY: destroy-kind-cluster +destroy-kind-cluster: ## Destroy the kind cluster. + oc delete -f scripts/agent.yml + kind delete cluster + ##@ Images # note: to build and push custom image tag use: IMAGE_ORG=myuser VERSION=dev s diff --git a/README.md b/README.md index f184e5916dfb5e981b2a61303ecb87264ec6aecd..7d03999c8eb3220cf601934f491c7c91ed06629f 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,22 @@ and whether they worked (✅) or did not (❌): | Kind | 1.23.5 | ❌ | ✅ | | OpenShift | 1.23.3 | ✅ | ✅ | +## Running on KinD cluster + +### How to run on kind cluster + +Install KinD and the ebpf agent and export KUBECONFIG +```sh +make create-and-deploy-kind-cluster +export KUBECONFIG=$(pwd)/scripts/kubeconfig +``` + +### Deleting the kind cluster + +In order to delete the kind cluster: +```sh +make destroy-kind-cluster +``` ## Development receipts diff --git a/scripts/agent.yml b/scripts/agent.yml new file mode 100644 index 0000000000000000000000000000000000000000..1b2499a09f871606e2d7c666d9f6ebe3ed4ae134 --- /dev/null +++ b/scripts/agent.yml @@ -0,0 +1,57 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: netobserv-privileged +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: netobserv-ebpf-agent + namespace: netobserv-privileged + labels: + k8s-app: netobserv-ebpf-agent +spec: + selector: + matchLabels: + k8s-app: netobserv-ebpf-agent + template: + metadata: + labels: + k8s-app: netobserv-ebpf-agent + spec: + hostNetwork: true + dnsPolicy: ClusterFirstWithHostNet + containers: + - name: netobserv-ebpf-agent + image: localhost/ebpf-agent:test + securityContext: + privileged: true + runAsUser: 0 + env: + - name: SAMPLING + value: "1" + - name: CACHE_ACTIVE_TIMEOUT + value: 200ms + - name: LOG_LEVEL + value: debug + - name: FLOWS_TARGET_HOST + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: FLOWS_TARGET_PORT + value: "9999" + - name: ENABLE_RTT + value: "true" + - name: ENABLE_PKT_DROPS + value: "true" + - name: ENABLE_DNS_TRACKING + value: "true" + volumeMounts: + - name: bpf-kernel-debug + mountPath: /sys/kernel/debug + mountPropagation: Bidirectional + volumes: + - name: bpf-kernel-debug + hostPath: + path: /sys/kernel/debug + type: Directory diff --git a/scripts/kind-cluster.sh b/scripts/kind-cluster.sh new file mode 100755 index 0000000000000000000000000000000000000000..5acd39a7b826e31b0905f023b04e9d837226754a --- /dev/null +++ b/scripts/kind-cluster.sh @@ -0,0 +1,69 @@ +#!/usr/bin/env bash +set -eux + +DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +KIND_IMAGE="kindest/node:v1.27.3" + +# deploy_kind installs the kind cluster +deploy_kind() { + cat <<EOF | kind create cluster --image ${KIND_IMAGE} --config=- --kubeconfig=${DIR}/kubeconfig +kind: Cluster +apiVersion: kind.x-k8s.io/v1alpha4 +networking: + podSubnet: $NET_CIDR_IPV4,$NET_CIDR_IPV6 + serviceSubnet: $SVC_CIDR_IPV4,$SVC_CIDR_IPV6 + ipFamily: $IP_FAMILY +nodes: +- role: control-plane + kubeadmConfigPatches: + - | + kind: ClusterConfiguration + apiServer: + extraArgs: + v: "5" + controllerManager: + extraArgs: + v: "5" + scheduler: + extraArgs: + v: "5" +- role: worker +- role: worker +EOF +} + +# install_netobserv-agent will install the daemonset +# into each kind docker container +install_netobserv-agent() { +docker build . -t localhost/ebpf-agent:test +kind load docker-image localhost/ebpf-agent:test +kubectl apply -f ${DIR}/agent.yml +} + +# print_success prints a little success message at the end of the script +print_success() { + set +x + echo "Your kind cluster was created successfully" + echo "Run the following to load the kubeconfig:" + echo "export KUBECONFIG=${DIR}/kubeconfig" + set -x +} + +KIND_CLUSTER_NAME="${KIND_CLUSTER_NAME:-kind}" +IP_FAMILY=${IP_FAMILY:-dual} +NET_CIDR_IPV4=${NET_CIDR_IPV4:-10.244.0.0/16} +SVC_CIDR_IPV4=${SVC_CIDR_IPV4:-10.96.0.0/16} +NET_CIDR_IPV6=${NET_CIDR_IPV6:-fd00:10:244::/48} +SVC_CIDR_IPV6=${SVC_CIDR_IPV6:-fd00:10:96::/112} + +# At the minimum, deploy the kind cluster +deploy_kind +export KUBECONFIG=${DIR}/kubeconfig +oc label node kind-worker node-role.kubernetes.io/worker= +oc label node kind-worker2 node-role.kubernetes.io/worker= + +install_netobserv-agent + +# Print success at the end of this script +print_success