안녕하세요 오늘은 ArgoCD,Github Actions 및 AKS에서 GitOps를 사용하여 CI/CD 구현하는 프로젝트를 진행해보도록 하겠습니다.
🔹사전작업
- Github에 GitOps Repository를 생성해줍니다.
- local 환경에서 GitOps 폴더를 생성하신뒤, 간단한 nginx 프로젝트 구조를 만들어줍니다.
- 각 파일들에 대해 소스코드를 작성해줍니다.
- /src/index.html 파일
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Nginx App</title>
</head>
<body>
<h1>Welcome to My Nginx App!</h1>
<p>This is a simple static website served by Nginx.</p>
</body>
</html>
- Dockerfile
# Nginx를 기반 이미지로 사용합니다.
FROM nginx:latest
# Nginx 기본 설정 파일을 대체합니다.
COPY nginx.conf /etc/nginx/nginx.conf
# 웹 콘텐츠를 Nginx 컨테이너의 기본 서비스 디렉토리로 복사합니다.
COPY src /usr/share/nginx/html
# 80 포트로 서비스합니다.
EXPOSE 80
- nginx.conf 파일
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
- ci-cd-pipeline.yml 파일
name: CI/CD Pipeline
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build Docker image
run: docker build -t my-nginx-app .
docker_build:
needs: build
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Docker image
run: |
docker build -t ${{ secrets.DOCKER_USERNAME }}/my-nginx-app:${{ github.sha }} .
docker push ${{ secrets.DOCKER_USERNAME }}/my-nginx-app:${{ github.sha }}
deploy:
needs: docker_build
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure kubectl
uses: azure/setup-kubectl@v1
with:
version: 'latest'
- name: Set up Kubeconfig
run: |
echo "${{ secrets.KUBE_CONFIG }}" > $HOME/.kube/config
- name: Deploy to AKS using ArgoCD
run: |
argocd login ${{ secrets.ARGOCD_SERVER }} --username ${{ secrets.ARGOCD_USERNAME }} --password ${{ secrets.ARGOCD_PASSWORD }} --insecure
argocd app sync my-nginx-app
argocd app wait my-nginx-app --health
- 생성한 repository에 연결한 후, 코드를 커밋 및 푸시해줍니다.
git remote add origin <https://github.com/seungho-Cloud/GitOps>
git add .
git commit -m "Initial commit with Nginx setup"
git push origin master
- GitOps repository에 push된 상태
🔹AKS 클러스터/컨테이너 레지스트리 생성
powershell을 관리자 권한으로 실행시켜 준 뒤 azure에 로그인을 해줍니다.
- az login
- 리소스 그룹 생성
# azure cli 로 로그인을 해줍니다.
$ az login
# "gitops" 이름으로, "Korea Central" 지역에 리소스 그룹을 생성해줍니다.
$ az group create --name gitops --location "korea Central”
- aks 클러스터 생성 (생성 시 5분정도 소요됩니다.)
# "gitops" 리소스그룹에 "gitops_cluster" 이름으로 node 2개를 가진 클러스터를 생성해줍니다.
$ az aks create --resource-group "gitops" --name "gitops_cluster" --node-count 2 \\
--genereate-ssh-keys
- azure portal > cluster 에서 들어가보시면 Succeeded(Running) 상태가 된 것을 확인해줍니다.
- 생성된 클러스터 확인
#gitops_cluster에 연결
$ az aks get-credentials --resource-group gitops --name gitops_cluster
#현재 연결되어있는 클러스터 확인
$ kubectl confing current-context
# 현재 생성된 노드 수 확인
$ kubectl get nodes
- ACR(Azure Container Registry) 생성
# "gitops" 리소스그룹에 "gitopsacr5020" 이름을 가진 ACR을 생성합니다.
$ az acr create --resource-group gitops --name gitopsacr5020 --sku Basic
- ACR 로그인 정보 가져오기
GitHub Actions에서 사용할 수 있도록 ACR 로그인 정보를 가져옵니다.
# 내 gitopsacr5020 레지스트리가 admin권한을 가지도록 해줍니다.
$ az acr update -n gitopsacr5020 --admin-enabled true
# 내 ACR_USERNAME 확인
$ az acr credential show --name $ACR_NAME --query "username" --output tsv
# 내 ACR_PASSWORD 확인
$ az acr credential show --name $ACR_NAME --query "passwords[0].value" --output tsv
'CSP > Azure' 카테고리의 다른 글
Prometheus & Grafana 설치 (0) | 2024.06.05 |
---|---|
GitOps for AKS (2) (0) | 2024.05.31 |
[Azure] Resource Manager (0) | 2024.05.02 |
[Azure] Azure 리소스 만들기 (0) | 2024.04.30 |
[Azure] Azure 가상네트워크 만들기 (0) | 2024.04.30 |