본문 바로가기

분류 전체보기

(221)
[k8s] 매니페스트 파일 작성 방법 매니페스트 파일 쿠버네티스에서는 클러스터 안에서 움직이는 컨테이너 애플리케이션이나 네트워크 설정, 배치 실행을 하는 잡 등과 같은 리소스를 작성합니다. 이와 같은 구체적인 설정 정보를 파일로 관리하는데, 이것이 매니페스트 파일(manifest file)입니다. 예를 들어 'Nginx가 움직이는 컨테이너 이미지를 바탕으로 한 웹 프론트 서버를 클러스터 안에서 10개 실행' 하는 경우 다음과 같이 매니페스트 파일을 작성합니다. #webserver.yaml apiVersion: apps/v1 kind: ReplicaSet metadata: name: webserver spec: replicas: 10 selector: matchLabels: app: webfront template: metadata: labe..
[k8s] 애플리케이션 설정 정보 관리(ConfigMap/Secrets) 쿠버네티스를 사용하면 컨테이너 애플리케이션이 클러스터 안의 어디에서 움직이고 있는지를 의식할 필요가 없어집니다. 그런데 애플리케이션이 공통으로 이용하는 환경변수 등을 컨테이너 안에 넣어버리면 환경이 바뀔 때 마다 이미지를 만들어야 하므로 번거롭습니다. 쿠버네티스에서는 이런 애플리케이션 정보를 일원 관리하는 장치가 있습니다. 컨피그맵(ConfigMap) 컨피그맵은 애플리케이션의 설정 정보, 구성 파일, 명령 인수, 포트 번호, 애플리케이션 고유의 식별 정보 등을 포드에서 참조할 수 있도록 해 주는 장치입니다. Key-Value 형으로 정보를 관리할 수 있습니다. 예를 들어 Nignx의 설정 파일 등 각 컨테이너에서 공통으로 만들고 싶은 것을 등록하여 일원 관리합니다. 컨피그맵의 정보는 볼륨으로서 마운트할 ..
[Flask] 비동기 호출(태스크 큐, 토픽 큐, RabbitMQ) 비동기 호출 마이크로서비스 아키텍처에서 비동기 호출은 하나의 애플리케이션 안에서 처리했던 작업들이 여러 개의 마이크로서비스로 분리되면서 중심 역할을 담당한다. 비동기 호출은 마이크로서비스 앱 안의 분리된 스레드나 프로세스처럼 단순하게 동작할 수 있다. 즉, 동시에 일어나는 HTTP 요청/응답을 간섭하지 않고 작업을 처리한다. 하지만 동일한 파이썬 프로세스에서 직접 모든 것을 처리하는 것은 좋지 않다. 프로세스가 종료되거나 재시작되면 어떻게 해야하며, 서비스를 확장하는 경우에는 문제가 생길 수 있다. 이 방식보다는 다른 프로그램에 메시지를 보내서 처리하는 것이 더욱 안정적이다. 이를 통해 마이크로서비스가 본연의 목적, 즉 클라이언트에 응답을 보내는 것에 집중하게 할 수 있다,. 태스크 큐 Celery 워커..
[k8s] Service - (ClusterIP, NodePort, LoadBalancer) 쿠버네티스 클러스터 안에서 실행된 Pod 대해 액세스할 때는 서비스(Service)를 정의합니다. 서비스는 쿠버네티스의 네트워크를 관리하는 것으로, 몇 가지 종류가 있습니다. Cluster IP 서비스에 의해 할당되는 IP 주소에는 Cluster IP와 External IP가 있습니다. Cluster IP는 클러스터 안의 Pod끼리 통신하기 위한 Private IP이며 External IP는 클러스터 외부에 공개하는 IP 주소입니다. 클러스터 내부에서만 접근할 수 있으며, 외부에서 접근이 불가능하므로 Port Forwarding이나 Proxy를 통해 접근해야합니다.또한 서비스 타입을 별도로 지정하지 않으면 ClusterIP가 Default로 설정됩니다. CluterIP 예시 apiVersion: v1 k..
[k8s] Pod의 특징 (Container, Label, NodeSelector) 1. Container 쿠버네티스에서는 하나의 독립적인 서비스를 제공할 수 있는 컨테이너들을 모아서 Pod로 관리합니다. 예를 들어 Pod안에는 애플리케이션 서버용 도커 컨테이너와 프록시 서버용 컨테이너 등과 관련된 것들을 모아서 관리할 수 있습니다. 쿠버네티스에서는 이 Pod가 애플리케이션의 디플로이 단위가 되며, 포드 단위로 컨테이너의 작성, 시작, 정지, 삭제 등과 같은 조작을 합니다. 특징으로는 다음과 같은 내용들이 있습니다. 동일한 Pod의 컨테이너는 반드시 동일한 노드 상에 동시에 디플로이 된다. 컨테이너는 서비스가 연결될 수 있도록 Port를 가지고 있는데, 같은 Pod안에서 Port는 중복될 수 없습니다. Pod안의 여러 컨테이너에서 가상 NIC(Private IP)를 공유하는 구성을 취하..
[백준 1202] 보석 도둑(C++ 풀이) https://www.acmicpc.net/problem/1202 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net 풀이 이 문제는 우선순위 큐를 이용하면 간단하게 풀 수 있다. 우선 보석의 정보와 가방의 정보를 담을 배열 그리고 우선순위 큐를 다음과 같이 정의한다. pair v_jewerly[MAX]; int v_bag[MAX]; priority_queue pq; 원래는 vector 자료형을 사용했었는데, 배열 최대크기(MAX = 300001)가 너..
[Flask] Session 객체를 이용한 동기식 호출 Session 객체 생성 Flask Application 객체의 extensions에는 애플리케이션의 특정 상태 등을 저장할 수 있습니다. 다음 코드는 Session 객체를 저장하는 용도로 사용합니다. extensions를 먼저 등록한 다음 Session을 추가합니다. #flask_session.py from requests import Session def setup_connector(app, name='default', **options): if not hasattr(app, 'extensions'): app.extensions = {} if 'connectors' not in app.extensions: app.extensions['connectors'] = {} session = Session()..
[AWS] AWS CLI를 이용하여 S3로 데이터 백업 하기 AWS 명령줄 인터페이스(AWS CLI) 설치하기 pip를 이용하여 awscli를 설치합니다. $ pip3 install --upgrade --user awscli ... Successfully installed PyYAML-5.4.1 awscli-1.22.26 botocore-1.23.26 colorama-0.4.3 docutils-0.15.2 jmespath-0.10.0 pyasn1-0.4.8 python-dateutil-2.8.2 rsa-4.7.2 s3transfer-0.5.0 urllib3-1.26.7 다양한 패키지들이 설치되게 됩니다. AWS 계정 환경 설치하기 AWS CLI를 AWS 계정에 연결하기 위해 액세스 키가 필요합니다. AWS 콘솔에서 오른쪽 상단의 계정명을 클릭하여 '보안 자격 증명..
[k8s] 쿠버네티스의 서버 구성(마스터와 노드) 쿠버네티스에서 스케줄링과 디스커버리를 사람이 하는 것이 아니라 쿠버네티스의 기능이 모두 수행합니다. 이를 실현하기 위해 클러스터의 서버 상에서 여러 개의 API가 연계되어 움직이고 있습니다. 따라서 먼저 쿠버네티스가 어떤 서버 구성으로 되어 있는 지를 이해할 필요가 있습니다. 스케줄링과 서비스 디스커버리 개념 [k8s] 스케쥴링과 서비스 디스커버리란 기존의 웹 3계층 시스템에서 프론트 서버, 업무 서버, DB 서버 등 기능별로 다른 서버에서 처리를 하는 것이 일반적이었습니다. 때문에 애플리케이션을 어디에 배치할지를 미리 정해 두고 거기 kimjingo.tistory.com 마스터(Master) 쿠버네티스의 클러스터 전체를 관리하는 역할을 담당합니다. 여러 대로 이루어진 클러스터 안의 노드의 리소스 사용 ..
[k8s] 스케쥴링과 서비스 디스커버리 기존의 웹 3계층 시스템에서 프론트 서버, 업무 서버, DB 서버 등 기능별로 다른 서버에서 처리를 하는 것이 일반적이었습니다. 때문에 애플리케이션을 어디에 배치할지를 미리 정해 두고 거기에 플로이하여 각 기능을 상호 호출하는 아키텍처로 되어있었습니다. 따라서 애플리케이션 개발자와 인프라 관리자는 둘 다 '어디에서 어떤 애플리케이션이 움직이는지'를 알고 있었습니다. 하지만 쿠버네티스에서는 애플리케이션이 디플로이되는 위치가 쿠버네티스에 의해 정해집니다. 한 애플리케이션이 디플로이되면 쿠버네티스가 클러스터 상태에서 비어 있는 위치를 찾아내서 자동으로 배치합니다. 즉 지금까지 사람이 해 왔떤 작업을 쿠버네티스가 해 준다는 것입니다. 그래서 '애플리케이션을 적절한 곳에 디플로이 하고', '디플로이된 애플리케이션..