Pulse via GitOps
Pulse
Sample app in this lab — HTTP service monitor with dashboard, API, and Kubernetes health probes. is not installed with raw kubectl apply on the Deployment. Managed Argo CD
Argo CD — GitOps controller that syncs cluster state from Git repositories. syncs pulse-deploy from CodeCommit
AWS managed Git hosting — GitHub alternative used for app source and deploy manifests in this lab. — same Application pattern as kpack via GitOps and Kueue via GitOps.
This page is stage 3 · App from the architecture overview stages diagram: Application pulse (path: .) — Deployment, Service, and pods. Not the kpack Image CR also named pulse.
Work from the repository root (paths below use demo/…).
Prerequisites
Section titled “Prerequisites”- kpack via GitOps — cluster registered for Argo CD, Application kpack Synced/Healthy,
pulse:mainin ECR
Amazon Elastic Container Registry — stores OCI images built by kpack; EKS pulls from here. (or expectImagePullBackOffuntil the build finishes) - CodeCommit publish —
pulse-deployhasmain(root Kustomize:base/only)
Cluster registration (in-cluster secret + access policy) was completed on the kpack page. Re-apply those steps only if you skipped that page.
Set variables
Section titled “Set variables”export AWS_PROFILE=sandboxexport AWS_PAGER=""export AWS_REGION=ap-southeast-2export CLUSTER_NAME=cluster-1export CODECOMMIT_DEPLOY=pulse-deploy
export CLUSTER_ARN=$(aws eks describe-cluster \ --name "$CLUSTER_NAME" \ --region "$AWS_REGION" \ --query 'cluster.arn' \ --output text)export CODECOMMIT_DEPLOY_URL="https://git-codecommit.${AWS_REGION}.amazonaws.com/v1/repos/${CODECOMMIT_DEPLOY}"
echo "CLUSTER_ARN=$CLUSTER_ARN"Deploy Pulse with Argo CD
Section titled “Deploy Pulse with Argo CD”Destination server must be the EKS cluster ARN. Do not use destination.name: in-cluster alone (managed Argo CD will not sync that way):
mkdir -p demo/.generated/argocd
cat > demo/.generated/argocd/application.yaml <<EOFapiVersion: argoproj.io/v1alpha1kind: Applicationmetadata: name: pulse namespace: argocdspec: project: default source: repoURL: ${CODECOMMIT_DEPLOY_URL} targetRevision: main path: . destination: server: ${CLUSTER_ARN} namespace: default syncPolicy: automated: prune: true selfHeal: true syncOptions: - CreateNamespace=trueEOF
kubectl apply -f demo/.generated/argocd/application.yamlkubectl -n argocd get application pulseRight after create, SYNC STATUS / HEALTH STATUS may be blank for a few seconds while Argo CD reconciles.
What you see while it syncs
Section titled “What you see while it syncs”kubectl -n argocd get application pulse -o widekubectl -n argocd get applications -o widekubectl -n default get deploy,svc,pods -l app.kubernetes.io/name=pulseTypical sequence (often under a minute when pulse:main is already in ECR):
- Application Synced / Progressing, then Healthy — revision matches Application kpack (same
pulse-deploymain) - In
default: Deployment pulse, LoadBalancer Service pulse, ConfigMap pulse-config, pod Ready - You have two Applications on
pulse-deploy: kpack (path: kpack) and pulse (path: .)
Optional wait:
kubectl -n default wait deploy/pulse --for=condition=available --timeout=5mkubectl -n argocd get applications -o wideConfirm in the Argo CD UI: cluster cluster-1 → Capabilities → lab-argocd → Applications kpack and pulse.
LoadBalancer hostname (for Verify the service):
kubectl -n default get svc pulse -o jsonpath='{.status.loadBalancer.ingress[0].hostname}{"\n"}'CNB lifecycle — then Verify the service.