개발 이야기 94

쿠버네티스 - 파드 - 11

파드는 쿠버네티스에서 가장 중요한 개념이다. 파드는 컨테이너 그룹이며, 구성단위다. 쿠버네티스는 파드 단위로 배포하고 운영한다. 기본 단위인 파드를 쪼개, 여러 워커 노드에서 실행할 수는 없으며, 하나의 워커 노드에는 여러 파드가 있을 수 있다. 컨테이너 묶음의 장점 하나의 컨테이너에 여러 프로세스를 띄우는 것보다, 각자의 컨테이너에서 단일 프로세스를 실행하는 것이 낫다. 때문에 자연스레 다중 프로세스는 다중 컨테이너 환경에서 실행될 것이고 이런 다중 컨테이너를 파드라는 하나의 단위로 그룹핑하는 것이다. 이것은 하나의 컨테이너에서 복수의 프로세스가 동작하는 것과 같은 장점을 가질 수 있게 해 준다. 하지만 프로세스는 컨테이너 단위로 격리되어 있기 때문에 분리의 장점도 함께 가져가게 된다. 또한 파드 내의..

쿠버네티스 - 수평 확장 - 10

쿠버네티스의 장점 중 하나는 간단하게 확장할 수 있다는 점이다. 파드의 개수를 한번 늘려보자. kubectl get rc DESIRED 열은 RC가 유지해야 할 파드의 레플리카 수를 보여준다. CURRENT 열은 현재 실행 중인 파드의 실제 수를 나타낸다. 지금은 파드의 레플리카를 하나만 실행하도록 지정했기에 하나만 실행 중에 있다. 이제 한번 늘려보자. kubectl scale rc suk9 --replicas=3 kubectl get rc kubectl get pods 쿠버네티스에게 파드 인스턴스 세 개를 유지하도록 '알려줬다.' 이처럼 우리가 원하는 최종 결과만 선언하면 된다. 명령 결과 레플리카도와 파드가 3개로 증가한 것을 알 수 있다. 애플리케이션 스케일링이 끝났다. 이제 서비스와 파드의 관계..

쿠버네티스 - 시스템 구조 - 9

이번 시간에는 간단하게 컨테이너를 둘러싸고 있는 시스템을 알아보자. 이전에 이야기했듯이 우리는 직접 컨테이너를 생성하거나 동작시키지 않는다. 파드라는 컨테이너 그룹의 단위로 접근한다. 하지만 파드도 우리가 직접 생성하지는 않는다. 실제로 우리는 레플리케이션을 생성하고 이 친구가 파드를 실행한다. 그리고 그 파드를 서비스로 노출하도록 명령한다. 서비스 파드 레플리케이션 파드 시스템의 가장 중요한 구성 요소는 물론 파드다. 파드는 원하는 만큼의 컨테이너를 포함할 수 있고 자체의 고유한 사설 IP 주소와 호스트 이름을 갖는다. 레플리케이션 파드를 복제하고 항상 실행 상태로 만든다. 어떤 이유로 파드가 사라진다면, 사라진 파드를 대체하기 위해 새로운 파드를 생성한다. 서비스 파드는 일시적이다. 파드를 실행 중인..

쿠버네티스 - 파드 - 8

쿠버네티스 실행 apiVersion: v1 kind: ReplicationController metadata: name: suk9 spec: replicas: 1 selector: app: suk9 template: metadata: name: suk9 labels: app: suk9 spec: containers: - name: suk9 image: seokkyulee/suk9 ports: - containerPort: 8080 우선 first.yaml 파일을 만들고, 이후 터미널을 열어 커맨드를 입력해보자. minikube start kubectl apply -f first.yaml kubectl이 minikube 클러스터를 사용하도록 설정되고, 이전에 만든 이미지(seokkyulee/suk9)를 기..

쿠버네티스 - 설치/설정 부록

Minikube는 로컬 환경에 단일 노드 클러스터를 설치하는 도구다. 문서를 통해, 각자 환경에 맞는 minikube를 설치를 하도록 하자. 설치가 끝났다면, 터미널을 열고 아래 명령어를 통해 실행해보자. minikube start 쿠버네티스 커맨드 라인 도구인 kubectl을 사용해 쿠버네티스 클러스터에 명령을 실행할 수 있다. 문서를 통해 설치하도록 하자. kubectl get nodes 설치를 완료한 후, 위 명령어를 입력해보자. minikube 클러스터 노드가 조회될 것이다. kubectl describe node minikube 해당 명령어를 통해 minikube 노드의 상세 정보를 볼 수 있다. CPU, 메모리, 노드에 실행 중인 컨테이너 등의 노드 상태를 보여준다. 이렇게 우리는 간단하지만 ..

쿠버네티스 이미지 공유 - 7

우리는 컨테이너 환경을 익히기 위해 도커 이미지를 만들고, 컨테이너화하고 접속해보고 종료도 해봤다. 이렇게 만든 '우리의 노드 어플리케이션 이미지'를 다른 곳에서도 실행하기 위해 공유해야 한다. 공유하는 방법은 간단하다. 이미지 저장소에 push하고 다른 컴퓨터에서 pull 하면 된다. git과 비슷한 개념이라고 생각하면 된다. 도커 허브 저장소를 이용하도록 하자 수많은 사람들의 수많은 이미지가 존재하는 저장소에 우리 이미지를 push 하려면, 당연하게도 이미지의 이름(태그)을 수정해야 한다. ${도커 허브 id}/${이름}의 형태로 이름을 바꾸자. docker tag suk9 seokkyulee/suk9 docker images 이미지의 이름이 바뀌었는가? 아니다. seokkyulee/suk9 태그가 ..

쿠버네티스 헬로월드 - 6

간단하게 애플리케이션을 이미지(패키징)로 만들고, 쿠버네티스 클러스터에서 실행하는 방법을 살펴보자. 도커를 빠르게 설치하고 시작하자. https://www.docker.com/get-started Get Started with Docker | Docker Learn about the complete container solution provided by Docker. Find information for developers, IT operations, and business executives. www.docker.com 도커 이미지 실행 docker run busybox echo "Hello world" 터미널을 열고 위 커맨드를 입력하자. 먼저 로컬에서 busybox:latest 이미지를 찾을 것이고..

쿠버네티스 장점 - 5

- 컨테이너화 된 애플리케이션은 실행에 필요한 모든 것이 포함돼 있으므로 아무것도 설치할 필요가 없다. - 모든 노드는 자신이 사용되기를 기다리는 하나의 리소스로 표현된다. 적절한 시스템 리소스를 제공할 수 있는 한 어느 서버에서 애플리케이션이 실행 중인지 신경 쓰지 않는다. - 쿠버네티스가 서로 다른 애플리케이션 구성 요소를 혼합해, 노드에 배치함으로써 하드웨어 리소스를 최대한 활용할 수 있게 된다. - 노드에 문제가 발생하면, 다른 노드로 자동으로 스케줄링한다. 문제가 된 노드를 고치고 다시 리소스풀에 반환하는 역할에 집중하면 된다.

쿠버네티스 애플리케이션 실행 - 4

쿠버네티스에서 애플리케이션을 실행하려면 어찌해야 할까? 1. 애플리케이션을 컨테이너 이미지로 패키징 하고, 2. 해당 이미지를 이미지 레지스트리로 푸시하고, 3. 쿠버네티스 API 서버에 애플리케이션 디스크립션을 게시한다. 디스크립션에는 컨테이너 이미지, 애플리케이션 구성 요소가 포함된 이미지, 해당 구성 요소가 서로 통신하는 방법, 동일 서버에 함께 배치돼야 하는 정보, 복제본 수 등의 정보가 기록되어있다. 쿠버네티스에서 애플리케이션은 어떻게 실행될까? 1. 스케줄러는 각 컨테이너에 필요한 리소스를 계산하고 사용 가능한 워커 노드에 지정된 컨테이너를 할당한다. 2. 해당 워커 노드의 Kubelet은 컨테이너 런타임에 필요한 컨테이너 이미지를 가져와 컨테이너를 실행하도록 지시한다. 실행된 컨테이너 유지 ..

쿠버네티스 아키텍처 - 3

쿠버네티스 시스템은 마스터 노드와 여러 워커 노드로 구성된다. 개발자가 애플리케이션 매니페스트를 마스터에 게시하면 쿠버네티스는 워커 노드 클러스터에 애플리케이션을 배포한다. 1. 마스터 노드는 전체 시스템을 제어하고, 관리하는 쿠버네티스 컨트롤 플레인을 실행한다. 2. 워커 노드는 실제 배포되는 컨테이너 애플리케이션을 실행한다. 컨트롤 플레인 클러스터를 제어하고 작동시킨다. 실제 애플리케이션을 실행하지는 않는다. 4가지 요소로 구성된다. API 서버는 사용자 컨트롤 플레인 구성 요소와 통신한다. 스케줄러는 배포를 담당한다. 컨트롤러 매니저는 구성 요소 복제본, 워커 노드 추적, 노드 장애 처리 등과 같은 크러스터단의 기능을 수행한다. Etcd는 클러스터 구성을 저장하는 데이터 저장소다. 워커 노드 컨테이..