2.1 컨테이너 애플리케이션 개발의 흐름

스텝1 개발 환경의 준비

-       에디터나 IDE 등을 설치하고 개발 언어별로 필요한 런타임이나 라이브러리 도입

스텝2 컨테이너 이미지의 작성 및 공유

-       컨테이너 작동을 하려면 애플리케이션을 움직이기 위해 필요한 바이너리, OS, 네트워크와 같은 ㅇ니프라 설ㅈ어이 모두 포함되어 있는 컨테이너 이미지를 작성해야 한다. 도커의 경우 DOCKERFILE이라는 텍스트 파일에 구성을 기술, 그것을 빌드한 것을 실행 환경에서 이용가능한 레포지토리로 공유한다.

스텝3 클러스터 작성 (실제 환경의 작성)

실제로 컨테이너 애플리케이션을 작동시키는 서버를 셋업한다.

개발 환경이나 테스트 환경에서는 로컬 머신에서 작동시킬 수도 있지만 서비스를 공개할 때는 자신이 보유한 온프레미스 환경에서 시스템을 구축하거나 클라우드 서비스를 이용한다.

 

2.2 개발 환경 준비

Visual studio code 설치

MS가 제공하는 오픈소스 소스코드 에디터이며 무료이다. Windows, macOS, Linux에서도 작동된다.

비주얼 스튜디오 마켓플레이스에서 제공하는 확장 기능을 넣어 커스터마이징하여 사용 할 수 있다.

 

Vs code 주요 지원기능

-       디버그 기능

-       구문 하이라이트

-       intelliSense(입력 보완 기구)

-       Git 연동

-       태스크 자동 실행

-       확장 기능 임베디드

-       통합 터미널 가능

Vs code에서 [view] -> [extensions]

Docker support for visual studio 설치

Visual studio code kubernetes tools 설치

 

Azure CLI 명령의 설치

https://aka.ms/installazurecliwindows

CMD를 통해 AZURE에 로그인한다

as login

 

이어서 다음 명령을 실행하여 리소스 프로바이더를 활성화한다.

az provider register -n Microsoft.Network

az provider register -n Microsoft.Storage

az provider register -n Microsoft.Compute

az provider register -n Microsoft.ContainerService

 

-       Azure cli 설치 문서 : https://docs.microsoft.com/ko-kr/cli/azure/install-azure-cli

-       Kubectl 명령의 설치 : https://storage.googleapis.com/kubernetes-release/release/v1.11.4/bin/windows/amd64/kubelctl.exe

 

설치후 버전 체크

$ kubectl version

 

Azure cli를 이용하면 az명령어로 kubectl 명령을 설치 할 수 있다. Azure의 경우 이 방법으로 진행한다.

Sudo az install-cli

 

Azure cloud shell은 브라우저에서 azure를 명령으로 조작할 수 있는 웹 애플리케이션이다. 클라이언트 단말이나 az명령을 설치하는 것이 어려운 경우에 사용하면 좋다.

개요 : https://docs.microsoft.com/ko-kr/azure/cloud-shell/overview

 

2.3 azure container registry

Azure Container Registry(이하 ACR)는 애져가 제공하는 컨테이너 이밎 공유 서비스다. 쿠버네티스 뿐만 아니라 DC/OS, Docker Swarm, Azure가 제공하는 컨테이너 실행 환경에서 이용할 수 있다.

 

(1)   레지스트리 작성

$ ACR_NAM=sampleACRResgistry

Azure에서는 리소스 그룹이라는 논리적 단위로 리소스를 관리한다.

$ ACR_RES_GROUP=$ACR_NAME

 

그리고 다음 명령어를 통해 리소스 그룹을 작성한다 로케이션은 한국 중부 리전을 사용한다.

$ az group create –resource-group $ACR_RES_GROUP –location koreacentral

 

이제 리소스 그룹이 생성되었으니 acr의 레지스트리를 작성한다.

$ az acr create –resource-group $ACR_RES_GROUP –name $ACR_NAME –sku Standard –location koreacentral

여기서 LOGIN SERVER의 값을 확인해야 한다. 이것이 컨테이너 레지스트리의 액세스 위치가 된다.

 

(2)   샘플 다운로드

예시에서는 아래와 같은 샘플 프로젝트를 사용한다

$ git clone https://github.com/ToruMakabe/Understanding-K8s

$ cd Uderstanding-K8s/chap02/

 

(3)   이미지 빌드

다음 명령어를 통해 빌드한다 이미지 이름은 photo-view이며 이미지의 식별을 위해 ‘v1.0’ 태그를 설정한다 이 이미지의 빌드에는 시간이 조금 걸린다.

az acr build –registry $ACR_NAME –image photo-view:v1.0 v1.0/

 

2.4 azure를 사용한 쿠버네티스 클러스터 작성

Azure Kubernetes Service(이하 AKS)를 이용하여 설명을 진행한다

(1) ACR AKS 연결하기

좀 전에 ACR에서 작성한 컨테이너 이미지는 AKS에서 작성한 쿠버네티스 클러스터 상에서 pull하여 움직인다.

그러기 위해서는 ACR AKS 사이에 인증을 해야 하기 때문에 Azure Active Directory의 서비스 프린서플을 사용한다.

서비스 프린 서플이란 azure의 리소스를 조작하는 애플리케이션을 위한 ID이다.

먼저 az acr show 명령을 실행하여 ACR의 리소스 ID를 취득한다. 다음 명령어를 사용하여 취득한 리소스 ID를 쉘 환경변수 ACR_ID에 설정한다.

 

$ ACR_ID=$(az acr show --name $ACR_NAME --query id --output tsv)

 

이후 서비스 프린서플 이름을 쉘 환경변수 SP_NAME에 설정한다.

(2) 클러스터 만들기

(3) 클러스터 연결을 위한 인증 정보 설정하기

 

KUBECTL 명령을 사용한 클러스터의 기본 조작

서비스 프린 서플이란 azure의 리

AKS를 사용하여 쿠버네티스 클러스터를 작성했으면 이제 kubectl 명령을 사용하여 클러스터를 조작할 수 있다.

kubectl은 기본적으로 다음과 같은 구문으로 사용한다.

kubectl  <명령> <타입> <이름> <플래그>

 

  • 명령
    • 클러스터에 대해 어떤 조작을 할지 지정
    • 자주쓰는 명령은 create / apply / get / delete, 상세보기 describe, 로그 확인은 logs
  • 타입
    • 쿠버네티스는 컨테이너 애플리케이션이든 네트워크 설정이든 잡 실행이든 모두 리소스라는 추상화된 개념으로 관리한다
    • 타입에는 단축명 이용할 수 있다
  • 이름
    • 리소스에는 식별을 위한 고유한 이름 존재
    • 이것을 리소스의 이름으로 지정, 이름은 대소문자 구분
    • 이름을 생략하면 모든 리소스의 상세정보가 표시된다
  • 플래그
    • 옵션으로 플래그를 지정한다.

 

 

 

 

'Develop Issue > Kubernetes' 카테고리의 다른 글

1. 컨테이너, 쿠버네티스란?  (1322) 2023.03.19

1.1         컨테이너 기술의 개요

컨테이너란?

컨테이너란 호스트 OS 상에 논리적인 구획(컨테이너)을 만들고, 애플리케이션을 실행시키는데 필요한 라이브러리나 애플리케이션 등을 하나로 모아 그것을 마치 전용 서버인 것처럼 사용할 수 있게 만든 것

 

컨테이너 기술에는 여러 가지가 있지만, 현재 쿠버네티스의 기본값으로 되어 있는 것은 도커(Docker).

 

호스트형 서버 가상화

호스트형 서버 가상화는 하드웨어상에 베이스가 되는 호스트 OS를 설치하고 호스트 OS에 가상화 소프트웨어를 설치한다.

컨테이너와는 달리 호스트 OS상에서 다른 게스트 OS를 작동시키므로 오버헤드가 매우 커진다.

 

하이퍼바이저형 서버 가상화

컨테이너 기술은 애플리케이션의 실행 환경을 모아놓음으로써 이식성을 높이고 스케일러블한 환경에서도 작동하는 것을 지향하고 있다.

 

컨테이너 애플리케이션 개발자의 흐름

(1)  컨테이너 애플리케이션의 빌드

도커는 애플리케이션의 실행에 필요한 프로그램 본체, 라이브러리, 미들웨어나 OS, 네트워크 설정 등을 하나로 모아 도커 이미지를 만든다. 도커의 경우 하나의 이미지에는 하나의 애플리케이션에만 넣어두고

여러 컨테이너를 조합하여 서비스를 구축할 것을 권장한다.

(2)  컨테이너 이미지 공유

컨테이너 이미지는 레시스트리로 공유할 수 있다. 예를들어 도커의 공식 레지스트리인 Docker Hub에서는 UbuntuCentOS와 같은 리눅스 디스트리뷰션의 기본 기능을 제공하는 베이스 이미지가 배포되어 있다.

(3)  컨테이너 애플리케이션의 실행

도커는 리눅스 상에서 컨테이너 단위로 서버 기능을 작동시킨다.

또 도커 이미지로부터 여러 개의 컨테이너를 시작시킬 수도 있다.

 

1.2         쿠버네티스의 개요

분산 환경에서 컨테이너 운용 관리

컨테이너는 개발 환경처럼 한 대의 머신에서 가동시킬 때는 손 쉽게 도입할 수 있다.

하지만 멀티호스트로 구성된 클러스터 구성에서 가동시키려면 컨테이너의 시작 및 정지와 같은 조작뿐만 아니라 호스트 간의 네트워크 연결이나 스토리지 관리, 컨테이너를 어떤 호스트에서 가동시킬지와 같은 스케줄링 기능이 필요하다.

게다가 컨테이너가 정상적으로 작동하고 있는지 아닌지를 확인하는 장치도 필요하다.

이러한 기능을 갖추고 있으면서 컨테이너를 통합 관리할 수 있는 툴을 컨테이너 오케스트레이션 툴이라고 한다.

쿠버네티스, 도커(Swarm 모드), Apache Mesos/Marathon

 

쿠버네티스의 특징

쿠버네티스는 대규모 분산환경에서 소수의 에지니어 만으로 컨테이너 애플리케이션을 관리하는 것을 모걱으로 한 오케스트레이션 툴이다.

쿠버네티스는 하드웨어 인스라스트럭쳐를 추상화하여 데이터센터 전체를 하나의 방대한 계산 리소스로 간주한다. 그 결과 개발자는 실제 서버를 의식할 필요 없이 컨테이너 애플리케이션을 디플로이하여 실행할 수 있다.

 

쿠버네티스의 주요 기능

-      여러 서버에서 컨테이너 관리

-      컨테이너 배포

-      컨테이너간 네트워크 관리

-      컨테이너 부하분산

-      컨테이너 감시

-      컨테이너 업데이트

-      장애 발생 시 자동 복구

이러한 내용들은 선언적 설정과 API 센트릭이 있다.

쿠버네티스에서는 시스템이 원래 되어 있어야할 모습을 정의 파일에 설정하여(선언적 설정) 장애가 발생해도 사람이 개입하지 않고 원래 되어 있어야 할 모습으로 수습할 수 있다.

 

일단 쿠버네티스를 시험해 보고 싶은 경우는 퍼블릭 클라우드가 제공하는 매니지드 서비스를 이용할 것을 권장한다.

Amazon Elastic Container Service for Kubernetes(Amazon EKS)

Google Kubernetes Engine(GKE)

Azure Kubernetes Service(AKS)

 

쿠버네티스의 유스케이스

마이크로 서비스의 운용 관리

쿠버네티스가 갖고 있는 수평 스케일링, 자기 복구, 부하 분산 등과 같은 기능을 활용 할 수 있다. 영구 데이터ㅢ 관리는 컨테이너가 아니라 클라우드의 데이터 관리 서비스를 사용하는 것이 좋다.

 

기계학습의 워크로드

대규모 데이터셋을 사용하는 심층학습의 트레이닝은 파라미터나 서버나 분산 학습을 위한 워커노드를 관리해야 한다. 컴퓨팅 리소스를 많이 필요로하는 워커노드에는 CPU와 같이 고가의 하드웨어를 온디맨드로 할당하도록 제어할 수 있다.

'Develop Issue > Kubernetes' 카테고리의 다른 글

2. 쿠버네티스의 환경 구축  (1392) 2023.03.23

+ Recent posts