DevOps/Docker & Kubernetes(26)
-
[Docker in Action] Running Software in containers (1)
Controlling containers: Building a website monitor 이번 포스팅에서는 아래와 같은 웹 서비스 구조를 Docker Container를 통해 설계해보며, Docker Container에 대한 이해도를 높여보려고 합니다. 아래의 서비스 구조는 다음과 같이 동작합니다. NGINX 이미지로부터 컨테이너를 생성합니다. 이 컨테이너에서 웹 서비스를 호스팅 합니다. NGINX 컨테이너에 문제가 생긴 경우 (Service Down) Watcher Agent는 이를 감지하고 있다가 mailer에게 알려줍니다. mailer는 컨테이너에 문제가 생겼다는 사실을 Watcher Agent로부터 받아서 관리자의 계정으로 메일을 보냅니다. Creating and starting a new co..
2022.04.09 -
[Docker in Action] Welcome to Docker
What is Docker? 도커는 프로그램을 빌드하고, 저장하고, 실행하는 방법을 제공하는 오픈소스 프로젝트로, 컨테이너(container)라는 OS Technology를 사용해서 안전하고 가벼운 프로그램 런타임 환경을 제공합니다. Hello World 각 OS환경에 맞는 도커를 설치한 뒤에, CLI(Command Line Interface)에 아래와 같은 명령어를 입력하면, 다음과 같이 여러 개의 레이어를 다운로드한 후에, "hello world"라는 문장을 출력하고 프로그램이 종료되는 것을 확인할 수 있습니다. 실제로 어떤 일이 일어나고 있는지를 조금 더 자세히 살펴보겠습니다. docker run dockerinaction/hello_world "docker run"이라는 명령어는 Docker에게 ..
2022.04.05 -
[Kubernetes in Action] Extending Kubernetes
Platforms built on top of Kubernetes (Helm) 이번 챕터에서는 Kubernetes를 조금 더 Custom 하게 사용할 수 있는 여러 방법들(CustomResourceDefinitions, Kubernetes Service Catalog)도 다루지만, 이번 포스팅에서는 해당 내용들보다는 실제로 현업에서 많이 사용되는 Kubernetes 확장 도구인 Helm을 위주로 가볍게 살펴보려고 합니다. Definition Helm은 공식 홈페이지에도 정의가 나와있는 것처럼 'Kubernetes의 패키지 관리'를 도와주는 도구입니다. Nodejs의 npm과 Python의 pip과 같은 역할을 한다고 생각할 수 있습니다. Helm을 이해하기 위해서는 다음 3가지 개념을 알아야 합니다. C..
2022.03.26 -
[Kubernetes in Action] Best practices for developing apps
Bringing everything together 앞선 여러 포스팅들을 통해 쿠버네티스가 어떤 리소스들을 갖는지, 어떤 식으로 리소스들을 구성하는지에 대해 살펴보았습니다. 이번 포스팅에서는 위의 내용들을 종합하여 일반적인 애플리케이션이 쿠버네티스 위에서 어떤 식으로 동작하는지 알아보겠습니다. 일반적으로 쿠버네티스를 통해 애플리케이션을 배포할 때는 Deployment 혹은 Statefulset을 반드시 사용합니다. 이들은 하나 이상의 컨테이너를 포함하는 파드 템플릿(pod template)을 가지고 있으며, 이 템플릿 안에는 liveness probe, readiness probe가 모두 정의되어 있습니다. 파드 안의 컨테이너 내에서 실행되는 애플리케이션은 서비스(Service)를 통해 접근할 수 있으며..
2022.03.20 -
[Kubernetes in Action] Advanced Scheduling
Using taints and tolerations to repel pods from certain nodes Taint는 "얼룩"이라는 뜻이고, Toleration은 "관용, 허용"등의 뜻을 지니고 있습니다. 따라서 Node에 Taint를 설정한다는 것은 노드에 "얼룩"을 묻힌다는 것을 의미하며 파드에 Toleration을 설정한다는 것은 "이 노드에 얼룩이 있는데 이거 눈감아 줘"라고 이야기하는 것을 의미합니다. Introducing taints and tolerations Taint는 key, value, effect로 구성되며 describe에서 =:의 문법으로 표현됩니다. 실제로 describe node를 하면 description에 "Taints"라는 항목이 나오는데 여기서 어떻게 설정되어 있..
2022.02.28 -
[Kubernetes in Action] Automatic scaling of pods and other cluster nodes
Overview 파드 내에서 동작하는 애플리케이션은 ReplicaSet이나 Deployment, 다른 Scalable Resource의 replicas필드를 수동으로 조작함으로써 스케일링할 수 있습니다(Horizontal Scaling). 또한 단일 파드의 CPU나 메모리를 requests나 limits설정을 통해 수동으로 스케일링할 수도 있습니다.(Vertical Scaling). 하지만 이러한 수동 스케일링 방식은 급작스럽거나 예측하기 어려운 트래픽 변화에 대해서 민감하고 효율적으로 대응하기 어렵기 때문에 쿠버네티스에서는 CPU usage 등의 메트릭을 사용해서 Automatic Scaling 하는 방법을 제공합니다. 이번 포스팅에서는 이러한 Automatic Scaling 방법에 대해 알아봅니다. ..
2022.02.19