CSP/Azure

GitOps for AKS (1)

모클 2024. 5. 31. 09:21

https://learn.microsoft.com/ko-kr/azure/architecture/example-scenario/gitops-aks/gitops-blueprint-aks

안녕하세요 오늘은 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