여러 호스트의 많은 컨테이너를 쉽게 조정하는 것이 쿠버네티스
앱을 컨테이너로 빌드해 실행해보기 위해 간단한 코드를 작성해볼수있다.
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!\n"
@app.route("/version")
def version():
return "Helloworld 1.0\n"
if __name__=="__main__":
apprun(host='0.0.0.0')
위의 코드를 도커화 한다.
requirements.txt
Flask==0.12
uwsgi==2.0.15
Dockerfile
FROM ubuntu:18.10
RUN apt-get update -y && \
apt-get install -y python3-pip python3-dev
COPY requirements.txt /app/requirements.txt
WORKDIR /app
RUN pip3 install -r requirements.txt
COPY . /app
ENDPOINT ["python3", "app.py"]
docker build로 컨테이너를 빌드하여 로컬에 실행이 가능한 이미지로 저장
docker run으로 컨테이너 이미지를 시작
$> docker build -t py-server .
$> docker run -d py-server
쿠버네티스 API를 사용해 컨테이너를 클러스터라고 부르는 노드 모음에 배포
- 마스터는 제어 영역을 실행함
- 노드는 컨테이너를 실행
- 노드는 VM이다
컨테이너를 노드에 배포할 때, Pod(파드)라고 부르는 래퍼 사용하기가 가능함.
Pod(파드)란?
Pod(파드)는 쿠버네티스 애플리케이션의 기본 실행 단위이다. 쿠버네티스 객체 모델 중 만들고 배포할 수 있는 가장 작고 간단한 단위이다. 파드는클러스터(Cluster)에서의 Running 프로세스를 나타냄.
파드는 애플리케이션 컨테이너(또는, 몇몇의 경우, 다중 컨테이너), 저장소 리소스, 특정 네트워크 IP 그리고,container가 동작하기 위해 만들어진 옵션들을 캡슐화 한다.
파드는 배포의 단위를 말한다. 아마 단일 컨테이너로 구성되어 있거나, 강하게 결합되어 리소스를 공유하는 소수의 컨테이너로 구성되어 있는쿠버네티스에서의 애플리케이션 단일 인스턴스를 의미함.
도커는 쿠버네티스 파드에서 사용되는 가장 대표적인 컨테이너 런타임이지만, 파드는 다른컨테이너 런타임역시 지원한다.
kubectl
kuberctl run을 사용해 Pod에서 컨테이너 실행이 가능하다. (kubectl은 쿠버네티스 API에 대한 명령줄 클라이언트임)
아래와 같은 명령어로 Pod에서 실행 중인 컨테이너에 배포를 시작한다
아래의 경우 컨테이너는 NGINX 서버의 이미지이다.
$> kubectl run nginx --image=nginx:1.15.7
파드들이 어떻게 떠있는지 알 수 있는 명령어
$> kubectl get pods
기본적으로 클러스터 안에서만 사용되며, 임시 IP를 가져오는 pod
고정 IP에서 공개적으로 사용할 수 있도록 kubectl expose를 실행하여 로드밸런서를 배포에 연결이 가능하다.
$> kubectl expose deployments nginx --port=80 --type=LoadBalancer
서비스의 공개 IP를 가져오려면 다음과 같다.
$> kubectl get services
배포를 확장하려면 다음과 같다
$> kubectl scale nginx --replicas=3
각종 매개변수를 사용해 자동 확장을 실행하거나 지능적 관리를 하려면 프로그래밍 로직 뒤에 자동 확장 배치가 가능하다.
$> kubectl autoscale nginx --min=10 --max=15 --cpu=80
'cloud' 카테고리의 다른 글
IaaS와 PaaS (0) | 2019.11.26 |
---|---|
Google Cloud On Board (2019.11.26) (0) | 2019.11.26 |