ci: Fix integ-test container build and webhook readiness race (#411)
- ci: Build operator image on host, load into minikube via image load
Every PR’s integration-test matrix has been failing on the container-build step:
1 pulling image moby/buildkit:buildx-stable-1 3.0s done
1 ERROR: failed to inspect pulled image moby/buildkit:buildx-stable-1:
Error response from daemon: 404 page not foundmake: *** [Makefile:168: container] Error 1
Root cause: the composite action ran ‘eval $(minikube docker-env) && make container’, which points ‘docker buildx build –load’ at minikube’s internal containerd. That path has no pre-configured buildx builder, so buildx autobootstraps one by pulling ‘moby/buildkit:buildx-stable-1’ inside minikube — a path that has been consistently returning 404 on ‘docker inspect’ after the initial manifest fetch for the past week.
Fix:
Add docker/setup-buildx-action (same pin the release workflow uses) to explicitly provision a buildx builder against the host Docker daemon, with a driver image pinned by the action’s own release.
Drop ‘eval $(minikube docker-env)’ before ‘make container’. The image is built against the host daemon (using the buildx builder from step 1) and then explicitly pushed into minikube via ‘minikube image load’. This mirrors the digest-validation branch of the same composite action, which already uses ‘minikube image load’ rather than swapping the Docker socket.
VERSION extraction from versions.txt is straight from the Makefile so a bumped operator version doesn’t require a workflow edit.
Only affects the source-build path; the digest-validation path is untouched.
- ci: Fix webhook readiness race in operator integ-test setup
The ‘Wait for operator ready’ step used:
kubectl wait –for=condition=Ready pod –all -n amazon-cloudwatch
‘kubectl wait –all’ succeeds immediately when zero pods match, which is the normal state right after ‘make deploy’ (the ReplicaSet has not yet created the operator pod). The workflow then proceeded to apply an AmazonCloudWatchAgent CR while the webhook pod was ~1s old, failing with:
failed calling webhook “mamazoncloudwatchagent.kb.io”: … connect: connection refused
Replace it with:
- ‘kubectl rollout status deployment/cloudwatch-controller-manager’ — tracks desired vs available replicas, no zero-object race.
- Poll the cloudwatch-webhook-service Endpoints object until it has at least one address — a Ready pod does not guarantee the service endpoints are programmed, and CR admission goes through that service.
- ci: Gate integ-test start on webhook actually serving admission
The previous gate (deployment rollout + Endpoints populated) still raced: the manager Deployment in config/manager/manager.yaml has no readiness probe, so the pod reports Ready the instant the container starts, rollout completes ~1s after apply, Endpoints get an address immediately — all before the webhook TLS server has bound its port. The first CR apply then fails with ‘connection refused’.
The binary’s /readyz is a plain healthz.Ping (main.go) and does not gate on GetWebhookServer().StartedChecker(), so no pod-level gate can close this race without a source change.
Instead, probe the webhook end-to-end: poll ‘kubectl apply –dry-run=server’ of a minimal AmazonCloudWatchAgent CR until admission succeeds. Server-side dry-run passes through the full mutating+validating webhook chain without persisting anything, making it an exact readiness signal for what the tests do next.
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802047560号
Amazon CloudWatch Agent Operator
The Amazon CloudWatch Agent Operator is software developed to manage the CloudWatch Agent on kubernetes.
Supported Languages:
This repo is based off of the OpenTelemetry Operator
Build and Deployment
make containermake deployPre requisites
Have an existing kubernetes cluster, such as minikube
Install cert-manager on your cluster
Getting started
You should see logs that look similar to below
Helpful tools
make manifeststo create crds and roles inconfig/crdandconfig/rbacmake generateSecurity
See CONTRIBUTING for more information.
License
This project is licensed under the Apache-2.0 License.