- Introduction
- Steps Taken to Complete the Assignment
- Relevant Screenshots
- Challenges Faced
- Cleanup
- Project Structure and Key Files
- What I Learned
This documentation outlines the implementation of ArgoCD for a canary deployment strategy. It covers the steps I took ,challenges encountered during the process, how they were resolved, and includes additional information such as cleanup steps and screenshots for visual representation.
- Installed ArgoCD on Kubernetes cluster following official documentation.
- Configured ArgoCD server and accessed the UI to manage applications.
- Created deployment manifests for my-app using Kubernetes YAML files.
- Defined the desired state of the application, including replicas, labels, and container specifications.
- Implemented a canary deployment strategy using Argo Rollouts for my-app.
- Specified canary steps in the rollout definition for gradual rollout and testing.
- Monitored the canary release progress to ensure successful completion.
- Built and pushed a new Docker image for my-app with updated features (new2).
- Updated the rollout definition (rollout.yaml) to use the new Docker image (cappybara12/assignment-ai-planet:new2).
- Used kubectl commands to monitor rollout progress and pod statuses.
- Leveraged Argo Rollouts UI to visualize the deployment pipeline and canary steps.
- Created comprehensive documentation detailing the assignment process, challenges faced, and solutions implemented.
- Added relevant screenshots to the documentation for visual clarity.
- Wrote a "Clean Up" section in README.md to provide instructions for removing all resources created during the assignment from the Kubernetes cluster.
Include relevant screenshots in the documentation to enhance visual understanding and showcase the implementation process.
-
Screenshot 1: ArgoCD UI showing the deployment pipeline for the my-app-rollout.

-
Screenshot 3: Successful Canary Deployment being shown in the image below ,Implementing a Canary Release with Argo Rollouts. The output shows that the rollout named my-app-rollout is in a Healthy state, and the canary deployment strategy has completed all 7 steps, with the final step SetWeight: 100 and ActualWeight: 100, indicating that the new version (cappybara12/assignment-ai-planet:new-tag2) is now receiving 100% of the traffic.

-
Screenshot 4: Terminal output of the
kubectl get podscommand displaying pod statuses. -
Screenshot 5: ArgoCD server running on localhost and accessible via port-forwarding.
The initial setup of the ArgoCD server involved following official documentation and online tutorials. Post-restart issues were encountered but resolved by switching back to the correct Kubernetes context.
Resolution: Troubleshooting skills were utilized to identify and resolve configuration issues, ensuring the successful setup of the ArgoCD server.
Creating a rollout definition with a canary strategy presented challenges related to invalid specifications and rollout failures.
Resolution: Through trial and error, the rollout.yaml file was corrected, and each step was configured according to ArgoCD's requirements. This experience enhanced understanding of canary deployments and YAML configurations.
Updating Docker images and deploying them via ArgoCD posed challenges regarding image version inconsistencies and rollout states.
Resolution: In-depth review and correction of rollout.yaml and deployment.yaml files led to successful image updates and rollout deployments, ensuring application stability.
To cleanly remove all resources created during this assignment from the Kubernetes cluster , I follwed these steps:
-
To Delete the Deployed Application:
kubectl delete rollout my-app-rollout -
To sdlete Argo CD Installation:
kubectl delete -n argocd --allto remove the
argocdnamespace as wellkubectl delete namespace argocd -
To delete Argo Rollouts Installation:
kubectl delete -n argocd --all -
Remove Any Additional Resources:
kubectl delete namespace arogocd -
Verify Cluster Clean-up: After executing all the deletion commands, I neeeded to verify that the resoruces are dleted which I by this command:
kubectl get all --all-namespaces
The manifests folder contains the Kubernetes YAML files used for deploying the my-app application. Here's a brief overview of the key files inside the manifests folder:
- deployment.yaml: Defines the deployment configuration for the
my-appapplication, including container specifications, labels, and replicas. - service.yaml: Defines the Kubernetes Service for the
my-appdeployment, exposing it internally within the cluster. - rollout.yaml: Contains the rollout definition using Argo Rollouts for implementing a canary deployment strategy.
The rollout.yaml file specifies the canary deployment strategy using Argo Rollouts. Here's a breakdown of the key sections in rollout.yaml:
- apiVersion: Specifies the API version for Argo Rollouts (
argoproj.io/v1alpha1). - kind: Defines the resource type as a Rollout.
- metadata: Contains metadata such as the name of the rollout (
my-app-rollout) and the namespace (argocd). - spec: Defines the rollout's specifications, including replicas, selector labels, template for pod creation, and the canary strategy with incremental steps and pause durations.
This structured approach helps in understanding the organization of project files and the purpose of each key file, particularly focusing on the rollout.yaml file that implements the canary deployment strategy using Argo Rollouts.
During this assignment, I delved into several key areas of DevOps and deployment strategies. Here are some abstract insights and learnings:
- Embracing Canary Deployments: Understanding the nuances of canary deployments, including the gradual rollout and monitoring strategies, deepened my grasp of continuous delivery practices.
- Leveraging DevOps Tools: Working with ArgoCD and Argo Rollouts showcased the power of declarative deployment tools in managing complex application lifecycles efficiently.
- Troubleshooting and Problem Solving: Dealing with challenges such as YAML configuration errors and rollout failures honed my troubleshooting skills and taught me valuable lessons in resilience and persistence.
This documentation not only captures the technical steps but also reflects on the learning journey and growth as a DevOps practitioner throughout the assignment.


