프로그래밍/쿠버네티스 8

[쿠버네티스] 8. EKS 무작정 사용하기 (1)

EKS는 AWS에서 제공하는 쿠버네티스 서비스이다. 쿠버네티스 특성상 마스터노드가 터지면 안되는데 AWS에서 이를 최대한 안 터지도록 고가용성을 보장한다. 또한 관리해야할 여러 요소들을 AWS에서 관리해준다. EKS를 사용하면 클러스터를 구축해서 아래 요소들을 사용할 수 있다. 이용 요금 클러스터를 하나 생성하면 시간당 0.1달러를 지불한다. 프리티어는 따로 없고 쿠버네티스에서 생성한 워커노드에 따라 가격이 달라진다. EC2를 생성한다면 그 스펙에 맞는 EC2비용이 추가로 지불되고 Fargate를 사용한다면 사용한 만큼의 Fargate요금이 지불될 것이다. 권한 설정 ECR에서 한 것처럼 EKS도 액세스키를 위해 권한이 있는 사용자가 필요하다. EKS의 모든 기능을 사용할 수 있도록 권한을 부여하자. 그..

[쿠버네티스] 7. 파일로 쿠버네티스 사용하기

지금까지 우리는 쿠버네티스를 구성하면서 터미널에 명령어를 입력하여 사용하는 명령적(Imperative)접근방식을 이용했다. 쿠버네티스는 선언적(Declarative)접근방식도 지원하는데 이번엔 이 방식을 사용해보자. 선언적 접근방식 선언적 접근방식은 터미널에 입력했던 설정들을 파일로 작성하여 실행하는 방식이다. 해당 방식은 IaC(Infrastructure as a Code)로도 잘 알려져있어 널리 쓰이고 있다. 이 방식의 장점은 편리하고 수정이 용이하다는 것이다. 우선 해당 방식을 사용하기 위해 지금까지 사용한 모든 객체를 삭제한다. kubectl delete deployment/server kubectl delete service/server 파일 작성 https://kubernetes.io/docs..

[쿠버네티스] 6. 쿠버네티스 핵심 기능

Scaling 쿠버네티스는 파드의 개수를 늘려 자동으로 로드밸런싱을 하는 scaling 기능을 제공한다. 이 기능을 한번 사용해보자. # main.py from fastapi import FastAPI import uvicorn import socket app = FastAPI() @app.get("/") async def root(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('pwnbit.kr', 443)) ipaddr = sock.getsockname()[0] return {"message": "Hello Wonderful World", "ipaddr": ipaddr} if __name__ == "__main__"..

[쿠버네티스] 5. Deployment 업데이트

현재 배포중인 deployment에서 코드 변경등의 이유로 업데이트를 하고 싶을 수 있다. 어떻게 업데이트를 하는지 알아보자. Deployment 업데이트 # main.py from fastapi import FastAPI import uvicorn app = FastAPI() @app.get("/") async def root(): return {"message": "Hello Wonderful World"} if __name__ == "__main__": uvicorn.run(app, port=8000, host="0.0.0.0") 코드를 위와 같이 업데이트했다. 일단 업데이트했으니 이미지를 빌드해야한다. docker build --tag riroan/myserver . docker push riro..

[쿠버네티스] 4. Service

쿠버네티스 배포하기에서 발생한 오류를 해결해보자. 지난시간에 Service 객체가 존재하여 pod를 외부와 소통하는 역할을 한다고 하는데 무엇인지 알아보자. Pod IP address 우선 pod는 접속하기 위한 고유의 IP주소를 가지고 있다. 일단 해당 IP주소를 확인해보자. minikube dashboard minikube dashboard --url # url만 표시 위 명령어를 실행하면 웹사이트가 하나 나온다. 왼쪽 메뉴에서 pod로 들어가 실행중인 pod를 확인해보자. pod의 IP주소를 확인할 수 있다. 그렇다면 이 IP로 접속하면 문제가 해결될까? 아쉽게도 불가능하다. 해당 IP는 클러스터 내부에서 사용하는 IP이기때문에 클러스터 외부에 있는 우리는 직접 접근이 불가능하다. 또한 해당 IP는..

[쿠버네티스] 3. 쿠버네티스 구성요소

지난시간 마지막에 발생한 문제를 해결하기 위해 쿠버네티스 구성요소에는 어떤게 있는지 각 요소가 무슨 역할을 하는지 아는것이 좋다. 이번시간에 한번 정리해보도록 하자. Overview 쿠버네티스 구성을 간략하게 나타내면 위 그림과 같이 나온다. 기본적으로 클러스터는 하나의 마스터노드와 여러개의 워커노드로 이루어져있다. 여기서 클러스터는 하나의 쿠버네티스를 나타내는 논리적 단위로 생각하면 된다. 노드는 PC, 컨테이너, 가상머신등 하나의 서버라고 생각하면 된다. Master Node 마스터노드(컨트롤 플레인)는 kubectl로 통신하기 위한 노드이다. 우리는 minikube를 도커 드라이버로 사용하기때문에 컨테이너형태로 사용중이다. Scheduler: 각 노드의 조건과 상태를 고려해 특정 자원을 어떤 워커 ..

[쿠버네티스] 2. 쿠버네티스로 배포하기

이제 쿠버네티스를 사용해서 배포해보자. 일단 배포하기 위한 도커 이미지가 있어야 한다. 간단하게 하나 만들어보자. 도커 이미지 생성 # main.py from fastapi import FastAPI import uvicorn app = FastAPI() @app.get("/") async def root(): return {"message": "Hello World"} if __name__ == "__main__": uvicorn.run(app, port=8000, host="0.0.0.0") # Dockerfile FROM python:3.11 WORKDIR /app COPY . . RUN pip install -r requirements.txt EXPOSE 8000 CMD ["python", "ma..

[쿠버네티스] 1. 쿠버네티스 시작하기

쿠버네티스 쿠버네티스는 컨테이너환경으로 배포할 때 자동으로 관리해주는 컨테이너 오케스트레이션 도구이다. 여기에서 컨테이너는 도커에서 사용하는 그 컨테이너를 의미한다. 컨테이너는 도커만 있는것이 아니기 때문에 다른 도구에도 활용할 수 있다. 쿠버네티스의 편리한 점은 컨테이너가 어떠한 이유로 종료되면 자동으로 복구해주고, 트래픽이 많아지면 오토스케일링도 해주고, 현재 컨테이너들의 상태를 보여주는 대시보드도 보여주는 등 다양한 기능을 제공하기 때문이다. 배포할 때 일일히 사람이 확인해야 하는 작업을 자동으로 해준다. 쿠버네티스 설치하기 학습용으로 쿠버네티스를 사용할때 미니큐브를 자주 사용하곤 한다. 그래서 미니큐브를 사용할 예정이다. (2코어 이상의 cpu가 필요하다.) curl -Lo minikube htt..