반응형

DevOps 22

[Kubernetes] Service / Ingress: L4 L7 Load Balancer

Service란? 이전 포스팅에서 파드는 컨트롤러에 의해서 관리되고 만약 노드 중 하나에 장애가 발생하면 해당 노드에 있는 파드들을 다른 노드에 옮김으로써 동적으로 파드들을 관리한다고 이야기했습니다. 때문에 파드는 클러스터 안에서 옮겨 다니게 되는데, 이 과정에서 노드를 옮기면서 파드 안의 IP가 변경되게 됩니다. 이와 같이 동적으로 변하는 파드의 IP를 특정하기 위해서 사용하는 방법이 쿠버네티스 서비스(Service)입니다. 서비스는 위치를 바꿔가는 노드의 정보를 유연하게 쫓기위해 라벨(label)과 라벨 셀렉터(labal selector)를 사용하며, yaml 템플릿을 정의할 때 어떤 파드를 같은 서비스로 묶을지 정하게 됩니다. (metadata영역에 label을 정의할 수 있고, 라벨 셀렉터에 매핑..

DevOps/Kubernetes 2020.07.16

[Kubernetes] 쿠버네티스 컨트롤러: Pod를 동적으로 관리

컨트롤러는 파드의 설정과 배포를 조금 더 편리하게 관리하기 위해 사용하는 개념입니다. 컨트롤러를 이용하면 일일이 파드를 하나씩 실행시키지 않아도 되며, 컨트롤러에 지정된 숫자만큼 항상 파드를 유지하기 때문에, 장애로 인해 일부 파드가 비정상적으로 종료되더라도 다른 노드에 새롭게 파드를 추가한다는 것과 같이 동적으로 파드들을 관리할 수 있습니다. 컨트롤러 종류에는 Replication Controller(RC), Replica Set, DaemonSet, Job, StatefulSet, Deployment들이 있습니다. Replication Controller(RC) 레플리케이션 컨트롤러는 쿠버네티스 프로젝트의 초기부터 있었던 가장 기본적인 컨트롤러입니다. 지정한 숫자만큼의 파드가 항상 클러스터 안에서 실..

DevOps/Kubernetes 2020.07.13

[Kubernetes] Pod #2: 쿠버네티스 셀프 힐링 및 자원 할당

컨테이너 진단 쿠버네티스는 장애가 생기는 컨테이너가 있는지, 또 있다면 재시작을 하기 위해서 등 컨테이너가 실행된 후에도 주기적으로 kubelet을 이용해 컨테이너를 진단합니다. 이때 필요한 프로브가 두 가지가 있습니다. livenessProbe : 컨테이너가 실행됐는지 확인합니다. 만약 이 진단에 실패하면 kubelet는 컨테이너를 종료시키고 재시작 정책에 따라 컨테이너를 재시작합니다. spec: selector: matchLabels: app: sisko ... template: ... spec: containers: - name: sisko image: imagePullPolicy: Always ... livenessProbe: httpGet: path: /v1/relations/datahub_ho..

DevOps/Kubernetes 2020.07.13

[Kubernetes] Pod #1: 쿠버네티스에서 컨테이너를 담당하는 기본 단위

Pod란? 쿠버네티스는 컨테이너를 개별적으로 배포하는 것이 아니라 Pod라는 단위로 컨테이너를 묶어서 관리하게 됩니다. 하나의 파드는 다수의 컨테이너를 가지고 있을 수 있는데, 왜 개별적으로 하나씩 컨테이너를 배포하지 않고 여러 개의 컨테이너를 Pod단위로 묶어서 배포하게 될까요? 이와 같은 이유에는 두 가지 특징이 있습니다. Pod 내의 컨테이너는 IP와 Port를 공유합니다. 즉 두개 이상의 컨테이너가 하나의 파드를 통해 배포되었을 때 localhost로 통신이 가능합니다. Pod내에 배포된 컨테이너 간에는 디스크 볼륨을 공유할 수 있습니다. 최근 애플리케이션들은 실행할 때 애플리케이션만 올라가는 것이 아니라 로그 수집기와 같은 다양한 솔루션이 함께 배포되는 경우가 많습니다. 특히 로그수집기 같은 경..

DevOps/Kubernetes 2020.07.10

[Kubernetes] 쿠버네티스의 기본 구조와 개념

핵심 개념 쿠버네티스의 핵심 개념을 한 줄로 표현하자면, 계속해서 원하는 상태를 만들기 위해 현재 상태를 바꾸는 플랫폼입니다. 예를 들어 내가 원하는 컨테이너를 쿠버네티스에 알려주면 (Desired State) 쿠버네티스는 계속해서 Current State(현재상태) 를 체크합니다. 단순히 컨테이너 뿐만 아니라 네임스페이스나 네트워크, 스토리지 같은 부분도 동일하게 동작합니다. 마스터와 노드 쿠버네티스는 가장 먼저 클러스터 구조를 이해할 필요가 있습니다. 클러스터는 여러 대의 컴퓨터가 모여서 같은 목적으로 수행되는 컴퓨터들의 집합이라고 볼 수 있는데, 이때 클러스터 전체를 관리하는 컨트롤러로서 마스터가 존재하고, 컨테이너가 배포되는 물리적인 머신을 노드라고 하게 됩니다. 마스터에는 kube-api-ser..

DevOps/Kubernetes 2020.07.10

[Docker] docker-compose: 멀티 컨테이너를 손쉽게 배포하기

이전 포스팅에서 docker network를 이용하여 하나의 네트워크 안에 여러 개의 멀티 컨테이너를 배포하는 것을 실습해보았습니다. 그런데 만약 이전 포스팅처럼 2개의 컨테이너를 배포하는 것이 아니라 100개의 컨테이너를 배포해야 되는 상황이라면 어떨까요? 분명 도커를 사용함으로 인해서 많은 부분 배포가 간결해졌지만, 100개의 컨테이너를 손수 배포하는 것은 여전히 부담스럽습니다. 또한 중간에 오타가 나거나 실수를 하는 경우가 발생할 수 있고 다수의 인스턴스에 일관되게 배포하는 것에 어려움이 있을 수 있습니다. 이러한 문제를 해결하는 것이 바로 docker-compose입니다. docker-compose는 docker 프로그램을 정의하고 멀티 컨테이너를 손쉽게 배포할 수 있는 도구입니다. 컨테이너 하나..

DevOps/Docker 2020.07.08

[Kubernetes] 쿠버네티스의 등장 배경

※ 본 포스팅은 Network > Cloud > Docker > Kubernetes 순으로 먼저 클라우드와 인프라에 관한 전반적인 지식이 수행된 다음 읽어볼 것을 추천합니다. [Docker] Docker의 개요 Docker란 무엇일까? 개발자라면 도커를 사용해보진 않았더라도 한 번쯤은 들어봤을 것이다. 많은 개발자들이 이미 도커를 사용하고 있고, 심지어 채용 우대사항에서도 Docker라는 이름을 심심치 않게 볼 수 있다... ooeunz.tistory.com 이번 포스팅에선 쿠버네티스를 사용하게된 이유에 대해서 알아보고 전체적인 구조에 대해 간단하게 살펴볼 예정입니다. 자세한 내용은 이후의 포스팅에서 다루도록 하겠습니다. 쿠버네티스는 왜 등장했는가? 2013년 3월에 도커가 세상에 등장하면서 서버 관리 ..

DevOps/Kubernetes 2020.02.02

[Docker] Docker Network를 이용하여 네트워크 공유하기

Docker Network란 실행된 각각의 컨테이너끼리 연결하기 위한 논리적인 네트워크입니다. 같은 네트워크 안에서는 각각의 컨테이너의 IP를 지정해주거나 할 필요 없이 name만으로 손쉽게 네트워크를 연결할 수 있다는 장점이 있습니다. 또한 아웃바운드 포트를 오픈하지 않는 이상 내부적으로만 통신하게 됩니다. 예를 들어 Node서버와 Redis서버가 통신을 하게 되는 아키텍처가 있다고 가정해보겠습니다. Node서버는 외부의 클라이언트로부터 api요청을 받게 되지만 redis는 node 서버와만 통신이 필요합니다. 이러한 경우 하나의 네트워크 안에 두개의 컨테이너를 배포하고 노드 서버만 포트포워딩을 해줌으로서 문제를 해결할 수 있습니다. ※ 예전에는 Docker Link를 사용해서 private IP끼리 ..

DevOps/Docker 2020.01.31

[Docker] Docker Tutorial (3) : 생성한 이미지 AWS에 배포하기

이번 포스팅에서는 docker hub에 직접 만든 이미지를 push 하고 aws에서 배포해보도록 하겠다. 하지만 그전에 해야 할 일이 있다. 이전 포스팅에서는 내부적으로 8080 포트에서 3000번 포트로 접근하여 로컬에서 컨테이너에 접근할 수 있었다. 하지만 그것은 어디까지나 테스트를 위한 설정이었고, 실제로 AWS에 배포를 한다는 것은 로컬에서만 접근할 수 있는 URI가 아닌, 어디에서든 접근할 수 있는 접근성이 필요하다. 그러기 위해 이 포스팅에서는 pm2를 이용하도록 하겠다. 그러기 위해서는 먼저 이전에 만들어주었던 컨테이너들과 이미지를 삭제하고 이미지를 새롭게 빌드해야한다. docker ps 명령어를 입력해보면 아까 -d (백그라운드로 컨테이너 생성 및 실행)으로 인한 3개의 컨테이너가 돌아가고..

DevOps/Docker 2019.12.09

[Docker] Docker Tutorial (2) : 직접 이미지 만들기

앞선 포스팅에서는 docker hub에서 이미지를 pull 하고 그 이미지를 이용해서 대략적인 사용방법에 관하여 알아보았다. 하지만 docker hub에서 이미지를 pull 하는 경우는 DB 이미지를 제외하면 거의 없다. 보통은 Dockerfile에 개인적인 이미지를 작성해서 사용한다. 이번 포스팅에서는 간단한 Node.js 서버를 만들고 직접 이미지를 만드는 것까지 진행해보도록 하겠다. sample project 생성하기 ※아래의 예시는 express가 설치 되어있다는 가정하에 진행되며 express로 만든 애플리케이션의 root로 접근하면 확인할 수 있는 "Welcome to Express"라는 메시지를 도커를 이용해 EC2에 배포하여 확인하는 것을 목표로 한다. // express로 프로젝트 생성 ..

DevOps/Docker 2019.12.09
반응형