- Configure fluent-bit to collect containerd logs from /var/log/containers/
- Add google-logging-enabled and google-monitoring-enabled metadata flags
- Add service account scopes for logging.write and monitoring.write
- Add labels to VMs for easier log filtering (k8sless=true, pod-name, namespace)
- Refactor cloud-init to use go:embed with separate cloud-init.yaml file
- Update main.go to delete pod/VM 1 minute after becoming Running
- Add .gitignore for k8sless binary
Container logs now appear in Cloud Logging under logName k8sless_containers
with proper timestamps and content extraction.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit adds the foundation for k8sless to actually run containers
via kubelet on GCE VMs:
- Add cloud-init configuration to install and configure kubelet on VM startup
- Implement kubelet client to query pod status via read-only API (port 10255)
- Update watcher to get real pod status from kubelet instead of just VM status
- Update Get/List operations to query kubelet when available
- Configure firewall rules to allow external access to kubelet API
- Add comprehensive documentation in CLAUDE.md
Key features:
- VMs run Container-Optimized OS with kubelet pre-installed
- Pod specs are stored in VM metadata and retrieved on startup
- Kubelet runs pods as static manifests from /etc/kubernetes/manifests/
- Pod lifecycle is accurately tracked: Pending → Running → Succeeded/Failed
- Supports host networking (no CNI configured)
Limitations:
- Container logs not available via read-only API (will add Cloud Logging)
- Hardcoded machine type and zone configurations
- Most pod operations still return "not implemented"
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>