요즘 애플리케이션의 구동 환경은 클라우드 네이티브로 가면서 쿠버네티스를 많이 선택하는 추세인데 그 밑바탕에는 도커 컨테이너가 깔려있습니다. 아마 개발자라면 컨테이너가 생소하지 않을 텐데요. 이런 컨테이너를 각티슈 케이스로 판매하는 곳이 있습니다. 무릇 개발자라면 이런 제품 하나쯤은 책상에 두고 싶어 하죠. 저도 진작부터 하나 갖고 싶었습니다. 그런데 제품 판매가 알리 익스프레스에서 이뤄지다 보니 몇 주는 고민하고 있었네요. 고민하는 시간에 주문했으면 벌써 받고도 남았을 거라는. 역시 고민은 배송을 늦출 뿐이라는 말이 맞는 것 같습니다. 그런데 이 제품을 이제 한국에서도 쉽게 구할 수 있게 됐습니다. 바로 인카토스를 통해서입니다. 제품 박스에는 조립 방법이 적혀있습니다. 설명서에 한글은 없지만 대충 그림만..
컨테이너를 생성할 때 제한은 아래와 같이 해줍니다. 메모리는 b, k, m, g로 설정할 수 있습니다. 여기서 적용되는 메모리 제한은 hard limit입니다. 해당 메모리를 초과해서 사용하려고 하면 OOM(out of memory)이 발생됩니다. $ docker run -d -it --name local-python --memory=1g python:3.8-slim /bin/bash 한편, memory를 따로 설정하지 않으면 0으로 적용됩니다. 즉, 호스트의 메모리 전체를 공유해서 사용하게 됩니다. 잘 적용되었는지는 inspect 옵션을 통해 확인할 수 있습니다. $ docker inspect local-python | grep Memory "Memory": 1073741824, "KernelMemor..
macOS에서 docker를 사용하기 위해 그간 Docker Desktop을 사용해왔었는데 유료화 소식이 전해져 왔다. Docker Desktop은 개인은 무료, 기업은 직원이 250명 이상이거나 연매출이 대략 110억($10 million) 이상인 경우 유료 버전을 사용해야 한다 (아직 유예기간 있음). https://www.docker.com/blog/updating-product-subscriptions/ Docker is Updating and Extending Our Product Subscriptions - Docker Blog Learn from Docker experts to simplify and advance your app development and management with Do..
이전 글에서 Airflow란 무엇인지 알아봤습니다. 이번 글에서는 플랫폼을 구축해보고 기본적인 터미널 명령어를 살펴보도록 하겠습니다. 위에 그림에 있는 것처럼 airflow를 구축하기 위해서는 webserver, scheduler, worker, database까지 함께 움직이는 서비스가 많습니다. 이것들이 조합되면 airflow라고 하는 워크플로 플랫폼이 완성되는 겁니다. 여기 있는 서비스를 하나씩 설치하면서 고생하기에는 우리의 시간이 넉넉하지 않죠? 이번 글은 airflow를 제일 빠르고 간편한 방법으로 만날 수 있는 docker-compose를 통한 설치 방법을 알아봅니다. # docker로 airflow 설치 airflow를 운영하려는 환경에 docker-compose가 설치되어 있는지, 설치되어..
컨테이너와 컨테이너 인스턴스라는 용어로 본문에 많이 등장합니다. 컨테이너 인스턴스는 클러스터에 묶여있는 EC2 인스턴스를 나타냅니다. 표준 표현을 따르다 보니 본문을 읽는데 어려움이 있을 수 있습니다. 이번 글에서는 Task, Container에 CPU와 Memory 설정에 대해 알아봅니다. ECS를 처음 접하면 리소스를 설정하는 곳이 너무 많아서 정신이 혼미해질 정도인데요, 추려보면 다음과 같습니다. 인스턴스의 CPU, Memory 설정 (인스턴스 타입에 따라 고정, 혹은 custom 사용) task의 CPU, Memory 설정 container의 CPU, Memory 설정 위에서 아래로 갈수록 작은 개념으로 이어집니다. 직감적으로 보면 container는 task 안에서 돌기 때문에 당연히 task에..
ECS를 구축, 관리하기 위해서는 그 안에서 사용되는 용어를 이해해야 합니다. 이번 글에서 ECS에서 통용되는 용어들의 개념을 이해하도록 합니다. 자원 개념 위에서 아래로 내려갈수록 큰 개념으로 생각하시면 됩니다. container는 ECS에서 가장 작은 단위, cluster가 가장 큰 단위입니다. # container 단순히 시야가 제한된 리눅스 프로세스입니다. namespace 분리로 컨테이너 환경 안에서 호스트의 프로세스 목록을 볼 수 없고, 루트 디렉터리 변경으로 호스트의 디렉터리를 볼 수 없도록 제한합니다. (chroot) 끝으로 제어 그룹을 통해 컨테이너가 접근할 수 있는 자원을 제어합니다. (control group) 우리가 알고 있는 바로 그 컨테이너의 원리죠? # task definiti..
본문을 읽기 전에 Zombie, Orphan 프로세스란 무엇인지 알고 있을 필요가 있다. 관련된 내용은 다음 글에 매우 잘 정리가 되어 있으니 참고하기 바란다. - Zombie process reaping 에 대하여, Container에서 고려할 부분들 컨테이너를 생성할 때 한 개의 일만 처리하게 설계하면 좋겠지만 그렇지 못한 경우도 분명 생길 수 있다. 간혹 자식(child process)을 만들어서 일을 시켜야 하는 경우가 있는데 새로운 컨테이너를 생성하거나 API 통신으로 동작시키는 것보다 나은 상황이 있기 때문이다. 아무튼, 이렇게 자식 프로세스를 만들어서 일을 시켜보면 의도치 않게 자식이 고아가 되는 경우가 발생한다. 자식의 자식의 자식 이라던가... 뭐 물론 좋은 설계는 아니지만. 이런 경우가..
여기 블로그 글을 RSS 받으시는 분들은 아시겠지만 저는 도커 환경을 꽤 좋아합니다. 일단 1) PC를 군더더기 없이 깔끔하게 사용할 수 있는 장점이 있고 2) 정리할때도 깔끔하게 할 수 있습니다. 3) 나중에 다른 시스템으로 옮길 때 호환성은 이루말 할수 없습니다. 아무튼, 이런 장점들 때문에 웬만하면 모든 개발을 도커에서 진행하고 있는데 아래와 같은 상황을 마주했습니다. 한참 딥러닝 모델을 개발하고, 이를 jupyter notebook으로 inference등의 테스트를 진행하려고 보니, Host 머신에서 jupyter의 포트로 접속 할 수가 없지 않겠습니까? Host에서 컨테이너 내부의 포트로 접속하려면 PNAT나 Proxy를 사용해야 하는데 이런것들은 처음 컨테이너를 생성할 때 지정을 해줘야 하는 ..
GPU를 사용하는 머신러닝 환경을 구축하기 위해서는 virtualenv, anaconda 등 파이썬의 가상환경을 통한 다양한 방법이 제시되는데 이와 같은 환경에는 문제가 하나 있다. 바로 다양한 버전의 CUDA를 사용하는데 상당히 제한적이라는 것인데, 이게 왜 문제가 되는가 하면 여려가지 전제를 이야기 할 필요가 있다. 보통 다양한 버전의 CUDA를 필요로 하는 경우는 여러개의 프로젝트를 병행으로 개발하는 상태이고 한개의 워크스테이션(혹은 클라우드 인스턴스)에 여러명의 엔지니어가 접속해서 작업을 진행하게 된다. 이때 A라는 엔지니어가 잘못 건드린 글로벌한 CUDA 설정이 B 개발자에게까지 영향을 줄 수 있는 상황이 충분히 존재한다. 이건 혼자 사용하는 머신이라도 마찬가지다. 참담하게도 이런경우에는 시스템..
docker container 내부에서 pytorch 로 기계학습을 진행하는 도중에 아래와 같은 에러메시지가 발생되는 경우가 있습니다. RuntimeError: DataLoader worker (pid 13881) is killed by signal: Bus error. 위 에러는 도커로 컨테이너를 생성하게 되면 호스트와 컨테이너는 공유하는 메모리 공간이 생기게 되는데 이 공간에 여유가 없어서 발생되는 에러입니다. 리눅스의 경우에는 컨테이너 내부에서 아래와 같이 df 명령어로 확인이 가능합니다. (base) root@2a48ab5fd651:~/ml# df -h Filesystem Size Used Avail Use% Mounted on overlay 427G 59G 347G 15% / tmpfs 64M ..
Google Kubernetes Engine (GKE) 관련해서 앞서 2개의 글을 통해 대략적인 이해를 할 수 있었을 것으로 예상된다. 이번 포스팅에서는 더 깊은 이해를 위해 터미널을 통해 실제 앱을 kubernetes 로 배포하고 업데이트를 진행 해보자. 이 예제의 내용은 qwiklabs - Hello Node Kubernetes 를 통해서도 확인할 수 있다. 아래 예제는 모두 클라우드 셸에서 진행한 것이지만 구글 클라우드 SDK 가 설치된 다른 환경에서 진행하더라도 무리는 없다.Node.js 애플리케이션 생성우선 실습에서 사용하는 간단한 Node.js 앱을 작성해보자. 코드는 아래와 같다. // server.js var http = require('http'); var handleRequest = f..
Google 의 Container 기술 구글은 10년 이상 전부터 리눅스 컨테이너 기술을 관리해 오면서 3개의 Container management systems 을 구축 했는데, 통합 Container Cluster Manager Borg 로 시작해서 차세대 Container Cluster Manager Omega, 그리고 이제부터 살펴볼 Kubernetes (보통 쿠버네티스 라고 읽음)가 있겠다. Kubernetes 는 오픈소스 프로젝트 이기 때문에 GitHub 에 소스가 공개되어 있고 필요하다면 contribute 하거나 Apache License 2.0 에 맞게 사용하면 된다. 사실 Kubernetes 를 사용하기 위해서는 가상화 기술이나 Container 에 대한 최소한의 지식이 필요하기 때문에..
- Total
- Today
- Yesterday