- Azure
- Azure Kubernetes Service 1.28.13
- Kubernetes Addons: Ingress NGINX Controller, ArgoCD, Argo Rollouts
- Azure Container Registry
- Github Repository
- Application Source Code & Kubernetes Manifest
- Github Actions Pipeline (CI)
- Slack for Notification
- Python > 3.11.x
- FastAPI > 0.115.0
- VSCode
File: docker-image.yml
- Checkout repo
- Setup Python
- Setup pip cache (actions/cache@v3)
- Install Dependencies and PyTest Application
- Upload Pytest Results as Github Actions Artifacts
- Post to a Slack channel
- Approve / Deny (environment)
- Checkout repo
- Setup Docker Buildx
- Login to ACR
- Build and Push Container Image to ACR (docker/build-push-action@v6.9.0) (registry type 빌드 캐시 사용)
- Modify Rollout Manifest by yq
- Post to a Slack channel
- Detect manifest change by Argo CD
- Auto Sync by Argo CD
- Blue / Green Deploy by Argo Rollouts
- Promote or Abort (Manually)
- Swap Active / Preview Service's Selector Hash
- Monitoring and rollback or not
Directory: /app
-
main.py: 샘플 GET / POST / PUT / DELETE 구현
-
test_rest.py: 빌드 전 pytest를 위한 샘플 테스트 코드
Directory: kubernetes
-
Gunicorn을 Uvicorn의 프로세스 매니저로 더이상 사용하지 않아도 되는 이유
Uvicorn에 서브 프로세스 들을 생성하고 관리할 수 있는 기능이 추가되었음 (다운된 프로세스 재시작 등)
-
Containerized 해서 k8s에 배포할 경우 Uvicorn의 Worker 프로세스를 여러개 만들기 보다 컨테이너당 1개의 프로세스로 구동하고 Deployment의 Replias 개수를 증설하는 것도 방법 중 하나