- Built arm64 image -
localhost/packet-capture-operator:latest - Saved image -
/tmp/packet-capture-operator.tar - Deployed to kind cluster:
- ✅ Namespace:
packet-capture-system - ✅ CRD:
packetcaptures.capture.k8s.io - ✅ RBAC: ServiceAccount, ClusterRole, ClusterRoleBinding
- ✅ Deployment:
packet-capture-controller-manager
- ✅ Namespace:
Since Docker isn't available with your Podman setup, you need to manually load the image into kind nodes.
If you have Podman machine running with Docker compatibility:
# Set Docker socket
export DOCKER_HOST="unix://${HOME}/.local/share/containers/podman/machine/podman-machine-default/podman.sock"
# Load image to kind
kind load image-archive /tmp/packet-capture-operator.tar --name kind# Find kind nodes (they run as containers)
podman ps | grep kind
# For each node (replace <node-name> with actual container name):
podman cp /tmp/packet-capture-operator.tar <node-name>:/tmp/image.tar
podman exec <node-name> ctr -n k8s.io images import /tmp/image.tar
podman exec <node-name> rm /tmp/image.tarExample:
podman cp /tmp/packet-capture-operator.tar kind-control-plane:/tmp/image.tar
podman exec kind-control-plane ctr -n k8s.io images import /tmp/image.tar
podman cp /tmp/packet-capture-operator.tar kind-worker:/tmp/image.tar
podman exec kind-worker ctr -n k8s.io images import /tmp/image.tar
podman cp /tmp/packet-capture-operator.tar kind-worker2:/tmp/image.tar
podman exec kind-worker2 ctr -n k8s.io images import /tmp/image.tarIf you have Docker Desktop installed:
kind load image-archive /tmp/packet-capture-operator.tar --name kindexport KUBECONFIG=/Users/pijablon/Downloads/projects/kind/kubeconfig
# Check if image is loaded on nodes
kubectl get nodes -o wide
kubectl debug node/kind-control-plane -it --image=alpine -- crictl images | grep packet-capture
# Check operator status
kubectl get pods -n packet-capture-system
kubectl logs -n packet-capture-system deployment/packet-capture-controller-manager
# Check if operator is ready
kubectl get deployment -n packet-capture-systemOnce the operator pod is running:
# Apply a basic capture
kubectl apply -f examples/basic-capture.yaml
# Watch the capture
kubectl get pc -w
# Check capture details
kubectl describe pc basic-capture
# View capture jobs
kubectl get jobs -l app=packet-capture
# Check job logs
kubectl logs -l app=packet-captureThis means the image isn't loaded on the node. Follow the manual loading steps above.
kubectl get pods -n packet-capture-system
# If you see ImagePullBackOff, load the image to nodeskubectl get pod -n packet-capture-system -o wide
# Note the NODE column, then load image to that specific node# On each node
podman exec kind-control-plane crictl images | grep packet-capture
podman exec kind-worker crictl images | grep packet-capture
podman exec kind-worker2 crictl images | grep packet-capture# Set kubeconfig
export KUBECONFIG=/Users/pijablon/Downloads/projects/kind/kubeconfig
# Check everything
kubectl get all -n packet-capture-system
kubectl get pc -A
# View logs
kubectl logs -n packet-capture-system -l control-plane=controller-manager --tail=100 -f
# Delete a capture
kubectl delete pc basic-capture
# Restart operator
kubectl rollout restart deployment/packet-capture-controller-manager -n packet-capture-system- Load the image to kind nodes using one of the methods above
- Verify the operator pod is running
- Test with
examples/basic-capture.yaml - Try other examples:
pod-to-pod-capture.yaml,cidr-based-capture.yaml