실습 내용: https://learn.microsoft.com/ko-kr/azure/aks/tutorial-kubernetes-prepare-app

 


 

(1)Ubuntu 가상머신 만들고 cmd에서 접속

sudo apt-get update
sudo apt-get upgrade

(2) docker 설치, 권한변경 후 재접속

(3) Git 에서 샘플 예제 clone하기

git clone https://github.com/Azure-Samples/azure-voting-app-redis.git

# 파일 확인
ls

# clone한 프로젝트로 들어가기
cd azure-voting-app-redis

# 폴더 구조보기
ls -al

 

 

clone한 파일 안 구조

(4) yaml파일 살펴보고 docker compose 기능 알아보기 

# yaml 파일 내용보기
cat docker-compose.yaml

---------------------내용---------------------------
version: '3'
services:
  azure-vote-back:
    image: mcr.microsoft.com/oss/bitnami/redis:6.0.8
    container_name: azure-vote-back
    environment:
      ALLOW_EMPTY_PASSWORD: "yes"
    ports:
        - "6379:6379"

  azure-vote-front:
    build: ./azure-vote
    image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
    container_name: azure-vote-front
    environment:
      REDIS: azure-vote-back
    ports:
        - "8080:80"
        
---------------------------------------------------------
#위의 내용으로 보아 docker-compose.yaml파일은  azure-vote-back(백엔드) 과   azure-vote-front(프론트엔드) 컨테이너로 이루어져 있다
# 고로 compose는 필요한 컨테이너를 한꺼번에 돌리게 사용하게끔 하는 것이다.

(5) docker compose 설치

sudo apt-get install docker-compose   #docker-compse 도구 설치

(6) docker compose 실행

docker-compose up -d                  # docker compose 파일을 찾아서 실행시킨다, yaml파일 속 컨테이너의 image를 만들고 daemon모드로 실행한다,


docker images    # 두개의 이미지 잘 설치됐나 확인
docker ps        # 실행 중인 컨테이너 확인, 주소들이 할당된 것도 볼 수 있다.

(7) 컨테이너들이 잘 실행되는지 확인-접속을 ip address로 접속해보자

-가상머신의 ip주소 확인

-'ip주소:cmd창의 프론트엔드 포트' 넘버 넣어서 접속해보기 : 안됨

 

  그 이유: 일단 가상머신은 네트워크가 방화벽에 쌓여있고 열어서 사용하는 방식을 사용하기 때문

네트워크 8080에 대한 방화벽 풀기 위해 애저 포탈 가상머신의 네트워킹 설정 > 인바운드(서버쪽으로 들어오는 트래픽

)/아웃바운드 포트 규칙이 있다. 또 클라우드는 인바운드 트래픽에 대해서는 전혀 비용을 받지 않는다는 것도 다시 상기해보며 인바운드 포트 규칙 추가 해보기

 

 

우리는 지금 웹에 접속하는 것이기 때문에 http를 해도좋지만 우리가 원하는 포트 선택을 위해 custom하고 8080입력.

만들고 나면 이제 규칙이 추가돼고 방화벽에 규칙이 적용될 것이다.

 

이제 아웃바운드 규칙도 만들어준다. 

 

이제 다시 시도해보면 접속이 된다.

실행되는 앱


컴포즈 파일에 있던 것 중지시킨다

# 메모리 자체에서 compose를 제거(서비스 자체를 없앰)
docker-compose down

# 확인
docker ps
docker images        # image파일만 남아있다.

# 서비스 다시 살리기
docker-compose up

<(자습서2)컨테이너 레지스트리(ACR) 만들기>

위에 과정은 docker 이미지를 만들고 compose 파일로 만들어보는 것 까지였다.
그런데 다른데 배포할 때는 이미지를 어딘가 저장해야할 것이다(docker hub 등)
지난 시간에는DockerHub를 이용해 이미지를 저장하고 minikube를 이용하여 워크노드와 pod등을 관리했다.

이번 과정에서는 클라우드를 이용해 ACR(Azure container resistry) 도커 이미지를 Push해서 넣어보자
또 클라우드 쿠버네티스(AKS)를 통해 pod를 만들고 ACR에서 이미지를 가져오고 관리하게 해보자: 실제 서비스

 

 

(1)Azure cli를 설치하고 로그인- ubuntu ver, 설치옵션에서 cmd에서 할 것(옵션1만 해도 된다)

https://learn.microsoft.com/ko-kr/cli/azure/install-azure-cli-linux?pivots=apt 

 

Linux에 Azure CLI 설치

Linux에서 Azure CLI를 수동으로 설치하고 실행하는 방법을 알아봅니다. 하나의 명령 또는 단계별 프로세스를 통해 Linux 컴퓨터에 Azure CLI를 설치할 수 있습니다.

learn.microsoft.com

# 설치확인
az --version

#az 명령어?
#azure와 관련된 명령 내릴 수 있는 명령어

az login 
# 아래 나온 주소+코드로 접속

Azure CLI 명령어 도구 만들기(Azure Container Registry 만들기)

# Azure CLI에서 리소스 그룹의 목록을 보기
az group list

# 테이블 형태로 그룹 리스트를 보여주는데 | 0503 키워드들어간걸로 찾아줌 (여기서 0503은 내 리소스그룹이름)
# '|'(pipe line)는 한 명령의 출력을 다른 명령에 이어줘서 사용한다. 
# grep은 키워드로 찾기
az group list --output table | grep 0503

# 결과를 txt 파일로 만들어 저장해버리기  (> 파이프를 꺽쇠모양으로)
az group list --output table > a.txt

#파일 지우기
rm a.txt


# az acr 만들기, sku는 스펙을 뜻한다
az acr create --resource-group 0503 --name 0503acr --sku Basic
# (az acr create --resource-group myResourceGroup --name <acrName> --sku Basic)

# 결과보기

이제 해당 리소스 그룹에 acr 생성된 것 확인 가능


azure acr 로그인(컨테이너 레지스트리에 로그인) = 디렉토리에 인증

az acr login --name 0503acr
더보기

디렉토리에 인증?

 

회사에서 서버하나 만들고 그 서버에 직원들 아이디와 암호 만들었다.

그러다가 회사가 커져서 서버가  여러대로 늘었다.

그래서 다른 서버에도 직원들 아이디와 암호를 복사해두고 다 따로 관리해줘야하는데

이게 힘드니까 '디렉토리' 라는 개념을 만들었다.

 

디렉토리에서는 서버들이 하나로 연결돼어 있다. 그래서 어느 서버에 들어가던 디렉토리에 인증을 받고 들어가서 하면 다 통일된 관리 가능

 

마이크로소프트에서는 active directory(ad)라는 것을 만듦, 그 후 클라우드 서비스가 나오며 개념이 확장되어 Azure active directory(aad)가 나오게 된다.

 

# image 목록 확인
docker images

#ACR에서 azure-vote-front 컨테이너 이미지를 사용하려면 레지스트리의 로그인 서버 주소로 이미지에 태그를 지정해야 함. 태그는 이미지 레지스트리에 컨테이너 이미지를 푸시할 때 라우팅에 사용
az acr list --resource-group 0503 --query "[].{acrLoginServer:loginServer}" --output table
# 출력에 acr 주소가 생성

# acr 주소 사용하여 image들이 acr을 바라보도록 tagging
docker tag mcr.microsoft.com/azuredocs/azure-vote-front:v1 0503acr.azurecr.io/azure-vote-front:v1

# tagging 됐는지 확인
docker images

# acr 주소 사용하여 push
docker push 0503acr.azurecr.io/azure-vote-front:v1

이제 리눅스의 acr에 docker image가 push 되었다.

# 생성한 acr repository에 있는 이미지 리스트로 출력
az acr repository list --name 0503acr --output table

docker images 해서 다시 확인

# 태깅한 버전 목록 확인
az acr repository show-tags --name 0503acr --repository azure-vote-front --output table

3. AKS(Azure Kubernetes Service) 클러스터 배포

https://learn.microsoft.com/ko-kr/azure/aks/tutorial-kubernetes-deploy-cluster?tabs=azure-cli 

 

목표 : ACR에 있는걸 AKS에 가져와서 배포

 

(1) AKS 만들기

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 2 \                                      #워크 노트
    --generate-ssh-keys \
    --attach-acr 0503acr
    az aks create \
    
# 위에 코드 아래처럼 필요한대로 수정 후 사용
    
az aks create \
    --resource-group 0503 \
    --name 0503aks \
    --node-count 2 \                                      
    --generate-ssh-keys \
    --attach-acr 0503acr \
    --location eastus2             # 지역 설정

설치 완료된 모습

이제 애저 포탈에도 보면 aks 생겨나있다

더보기

애저에 같이 생겨난 VMss 란?

 

버츄얼 머신을 미리 두 대정도 세팅을 해주는 것이다(virtual machine scale set)

여기에 우리가 세팅만 잘하면 vm가 부하돼면 추가로 가상머신이 생긴다.

그리고 그 vmss에는 부하 분산기라는 게 껴있어서 사용자가 늘어나면 서버에 적절히 나눠보내줌

또 서버를 하나로 묶기위해 가상 네트워크인 v-net도 필요하게 된다.

 

밖에서 보면 부하분산기만 보이는 구조. 즉 ip넘버는 하나만 필요한 것(부하분산기의 공용 ip넘버, 부하분산기 =load balancer)

 

---

azure VMss 쿠버네티스를 붙이게 된다면 쿠버네티스에 워크노드가 부족할 때마다 자동으로 사용가능해진다

그래서 AKS를 만들면 VMss가 같이 생긴다

 

여기서 새로생긴 공용 ip주소는 부하 분산 장치가 사용하는 것이고 가상 네트워크, 확장집합(vmss)가 생긴 거 볼 수 있다.

 

쿠버네티스 cli 설치

sudo az aks install-cli

# 잘 설치되었는지 확인할 겸 로그인 인증(리소스 그룹과 aks 이름 수정)
az aks get-credentials --resource-group 0503 --name 0503aks

# Kubernetes 클러스터에 대한 연결 확인(Kubernetes 클러스터는 여러 개의 노드로 구성된 컴퓨팅 환경)
kubectl get nodes
# 출력되는 값은 연결되어있는 가상머신이다

4. AKS(Azure Kubernetes Service)에서 애플리케이션 실행

https://learn.microsoft.com/ko-kr/azure/aks/tutorial-kubernetes-deploy-application?tabs=azure-cli 

 

 

# 리소스 그룹에 있는 acr 리스트 보기
az acr list --resource-group 0503 --query "[].{acrLoginServer:loginServer}" --output table

# 소스 파일 수정해보자(git에서 받은 파일 있는 디렉토리에서 해야 열림)
vi azure-vote-all-in-one-redis.yaml
------------------------------------------------------
이부분의 경로를 

containers:
- name: azure-vote-front
  image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
  
 이렇게  acr 경로로 수정
  
  containers:
- name: azure-vote-front
  image: <acrName>.azurecr.io/azure-vote-front:v1
  ------------------------------------------------------

:wq 하고 저장닫기

 

애플리케이션 배포


# 해당파일 기반으로 배포하라

kubectl apply -f azure-vote-all-in-one-redis.yaml

애플리케이션 테스트

# -w 옵션과 같은게 --watch 로 계속 감시하는 옵션
kubectl get service azure-vote-front --watch

이제 external ip를 웹에 복붙해보면 잘나온다

: aks로 배포해서 이제 port 넘버없이 접속할 수 있다.

 


5.AKS(Azure Kubernetes Service)에서 애플리케이션 크기 조정

https://learn.microsoft.com/ko-kr/azure/aks/tutorial-kubernetes-scale?tabs=azure-cli 

 

수동으로 Pod 크기 조정



# 전체 pod 갯수 확인
kubectl get pods
# 이때 결과에 restart한 얘들은 좀 불안정한 pod

# pod 크기 조정, pod 갯수 늘리기
kubectl scale --replicas=5 deployment/azure-vote-front

# 전체 pod 갯수 확인
kubectl get pods 
# 이제 pod가 azure-vote-front에 관한 pod가 5개로 늘었다.

Pod 자동 크기 조정

#  AKS 클러스터 버전확인
az aks show --resource-group 0503 --name 0503aks --query kubernetesVersion --output table

# 크기 조정, cpu %가 50을 넘으면 하나씩 pod늘리기, 기본 pod는 3개 유지, 최대 10개까지만
kubectl autoscale deployment azure-vote-front --cpu-percent=50 --min=3 --max=10

# 자동 조정기의 상태를 확인
kubectl get hpa

 

 

수동으로 AKS 노드 크기 조정

# 노드의 갯수 변경
az aks scale --resource-group 0503 --name 0503aks --node-count 3

지금까지 한일:

git hub에서 소스코드 다운받아서 이걸 가지고 웹사이트를 운영, 이 내용을 기반으로 도커 이미지를 나왔다. 도커 이미지를 만들때 우린 도커 컴포즈를 이용했다. 그리고 만들어진 이미지를 acr에다가 올렸다. 그리고 acr에 올린 내용을 aks(애저 쿠버네티스 서비스)로 올려서 서비스에 접속했다.

 

클라우드기 때문에 오토 스케일링이나 노드 증가를 시키는 일을 할 수 있었다. 

 

이 다음 튜토리얼에서 할일:

소스코드에서 변경사항이 발생이 됐을 때, acr과 aks에도 업데이트 해야하는데 이걸 묶어서 업데이트하는 걸 해보자.

이런 과정을 devop라고 부른다.

 

devops: 프로젝트 계획짜고 설계해서 코딩해서 만들면 패키지나 라이브러리로 build한다. 그후 테스트하고 정식으로 release한다. 그 후 배포(deploy)하고 운영하고 잘돌아가는지 모니터링도 하고 모니터링에서 나오는 피드백 나오면 다시 계획짜고.... 반복...

 

MLOps: 데이터 프로세싱하고 머신러닝으로 개발하고 운영하고 피드백 받고 다시 데이터 프로세싱...

 


자습서 6,7 개별적으로 해보기

https://learn.microsoft.com/ko-kr/azure/aks/tutorial-kubernetes-app-update?tabs=azure-cli 

 

 

'Linux' 카테고리의 다른 글

Docker(4) vi 에디터를 이용해서 docker 만들기  (0) 2023.05.02
Docker(3) vi editor 기본  (0) 2023.05.01
Docker(2) 설치 및 기본 사용, vi 편집  (0) 2023.05.01
Docker(1)  (0) 2023.05.01
리눅스의 셸, 파일 디렉토리  (1) 2023.04.28

+ Recent posts