DevOps/Kubernetes
[kubernetes] #6 쿠버네티스 YAML 설정 파일
서론 쿠버네티스의 컴포넌트의 설정을 도와주는 yaml 파일에 대해서 알아보자. yaml 파일이 보기에 엄청 길고 복잡해 보여도, 실상은 간단하고 논리적인 구조로 되어있기 때문에 겁먹을 필요 없다. 설정 파일의 세 부분 모든 쿠버네티스 설정파일은 3개의 부분으로 나눌 수 있다. # nginx-deployment.yaml apiVersion: v1 kind: Service metadata: name: nginx-service labels: spec: replicas: 2 selector: ports: templates: 1. metadata 컴포넌트를 서로 구분 지어줄 수 있는 이름과 설명을 입력할 수 있다. 2. specification kind에 적힌 컴포넌트에 대한 구체적인 내용을 정의하는 spec 부..
[kubernetes] #5 핵심 kubectl 명령어
서론 kubectl 명령어를 통해서 어떻게 파드를 생성하고 디버깅하는지 알아보자. 클러스터 컴포넌트 상태 확인, 생성, 수정 우선 클러스터에 포함된 노드의 상태를 알아보자 kubectl get nodes 클러스터에서 구동중인 파드의 상태를 알아보자 kubectl get pods 클러스터의 서비스들의 상태를 알아보자 kubectl get services get 명령어는 쿠버네티스 클러스터에 존재하는 특정 컴포넌트들의 정보를 리스트 형식으로 가져올 수 있다. create 명령어는 쿠버네티스 클러스터에 특정 컴포넌트를 생성할 수 있다. 여기 나와있는 컴포넌트들을 생성할 수 있다. (kubectl create -h 를 입력하면 볼 수 있다.) 살펴보면 '파드'가 없다는 것을 확인할 수 있다. 파드는 쿠버네티스 ..
[kubernetes] #4 Minikube와 kubectl - 클러스터 구축
서론 minikube가 무엇인지 알아보자 kubectl이 무엇인지 알아보자 Minikube cluster를 설치해보자 Minikube 란? 일반적으로 배포에 사용되는 쿠버네티스 클러스터는 위와 같은 구조를 가진다. 즉, 다수의 마스터 노드와 워커 노드를 가진다. 그리고 마스터 노드와 워커 노드들은 각자의 역할을 부여받는다. 위 그림에서 보다시피 하나의 노드는 하나의 물리 머신 또는 가상 머신이 된다. 만약 로컬 환경에서 이러한 구조를 테스트 해보고 싶다면 어떻게 할까? 작은 기능 하나를 테스트 하기 위해서 위와 같이 많은 노드를 가진 클러스터를 구성해 보는 것은 매우 어렵다. (가상 머신을 많이 만들어서 테스트 한다고 해도, 일반적인 컴퓨터에서는 CPU와 RAM은 충분하지 않을 것이다.) 이같은 걱정을 ..
[kubernetes] #3 쿠버네티스 아키텍처
서론 쿠버네티스 클러스터에는 마스터 노드와 워커 노드가 있다. 이들이 어떻게 다른지 알아보자. 쿠버네티스 클러스터 환경에서 노드들이 어떻게 스스로 복구(self-healing)하고 관리(self-managed)되는지 알아보자. 1. 워커 프로세스(Worker processes) 쿠버네티스 클러스터에는 실질적인 일을 하는 워커 노드가 있다. 워커 노드는 쿠버네티스의 기본 구성요소인 파드 여러 개를 가질 수 있다. 위 그림의 Node1은 컨테이너로 이루어진 2개의 파드를 가지고 있다. 쿠버네티스는 하나의 노드에 3개의 프로세스를 필요로 한다. 프로세스는 모든 노드에 반드시 설치되어야 하며 그들을 스케줄링, 관리 하는데 반드시 필요하다. 첫 번째 프로세스는 노드의 컨테이너 런타임을 위해 수행되는 프로그램이다...
[Kubernetes] #2 핵심 쿠버네티스 컴포넌트
1. Node와 Pod 여기 Worker Node라고 불리는 Node1이 하나 있다. 이 node는 하나의 물리 머신 또는 가상 머신일 수 있다. 그리고 이 노드 안에 'Pod'라고 하는 가장 기본적이고 심플한 쿠버네티스의 구성요소가 있다. 파드는 컨테이너의 추상화를 도와준다. 이를 abstraction over container라고 한다. 우리는 컨테이너라고 하면 기본적으로 Docker를 떠올릴 수 있지만, 노드들은 그렇지 못하다. 실제로 컨테이너 도구는 Docker이외에 다른 다양한 도구들이 있고, 쿠버네티스는 그들 중 어떤 컨테이너 도구를 사용해도 적응할 수가 있다. 적응을 도와주는 것이 바로 컨테이너의 추상화를 도와준다고 하는 파드 덕분이다. 파드에는 일반적으로 하나의 애플리케이션 컨테이너가 들어..
[Kubernetes] #1 쿠버네티스란?
쿠버네티스의 공식적인 정의 오픈소스 컨테이너 오케스트레이션 도구 구글이 개발함 각기 다른 배포 환경으로 컨테이너화 된 애플리케이션을 관리하는데 도움을 줌 오케스트레이션 도구가 필요한 이유 모놀리식에서 마이크로서비스로의 트렌드 변화 컨테이너 사용의 증가 마이크로서비스는 기술적으로 수백, 수천 개의 컨테이너를 만들어야 하는 결과를 초래할 수 있다. 각각의 컨테이너를 관리하기 위해서 컨테이너에 맞는 스크립트 파일을 개별적으로 만든다면 정말 복잡하고 불가능할지도 모른다. 그래서 많은 컨테이너들을 편리하게 관리하기 위해서 오케트스트레이션 도구가 필요한 것이다. 그래서 오케스트레이션 도구가 제공하는건? 높은 가용성 애플리케이션이 언제나 사용 가능함을 의미한다. 높은 확장성 퍼포먼스가 중요한 애플리케이션일수록 빠르게..
[K8S] 쿠버네티스 파드의 생명주기
쿠버네티스의 장점은 쿠버네티스의 구성요소들이 하는 일이 명확하게 구분되어있어서 각자의 역할만 충실하게 한다면 클러스터 시스템이 안정적으로 운영된다는 점이다. 각자의 역할이 명확히 나눠진 점은 마이크로서비스 아키텍쳐(MSA) 구조와도 밀접하다. 또한 역할이 나뉘어있기 때문에 문제가 발생했을 때 디버깅하기도 쉽다. 파드의 생명주기란? 파드가 생성, 수정, 삭제되는 과정을 의미한다. 알아보자 개발자가 kubectl 커맨드라인을 통해서 API 서버에 파드 생성을 요청한다. (create) API 서버는 etcd안에 전달된 내용을 모두 기록해 클러스터의 상태 값을 항상 최신으로 유지한다. 따라서 각 요소(etcd, API서버, 컨트롤러 매니저, 스케줄러)가 상태를 업데이트할 때마다 API 서버를 통해서 etcd에..
[K8S] 쿠버네티스 구성요소
쿠버네티스의 구성 요소의 유기적인 연결 관계를 표현하면 다음과 같다. 하나의 쿠버네티스 생태계를 쿠버네티스 클러스터라고 한다. 파드를 배포하는 순서에 따라서 요소들의 역할을 알아보자 마스터 노드 : 클러스터의 '두뇌' 역할을 담당한다. kubectl 쿠버네티스 클러스터에 명령을 내리는 커맨드라인 도구이다. docker를 사용하기 위해서 모든 명령어가 docker ... 로 시작하는데, 쿠버네티스도 마찬가지로 클러스터에 명령을 내리기 위해서는 kubectl .. 이 명령의 시작이 된다. 일반적으로 개발자는 API 서버와 주로 통신하므로 API가 서버가 위치한 마스터 노드에 구성된다. 자주 쳐야하는 명령어지만 타이핑이 까다로워서 alias kbc='kubectl'로 설정하면 편하다. API 서버 쿠버네티스 ..
[K8S] 컨테이너 이해하기
컨테이너 인프라 환경이란 리눅스 운영 체제의 커널 하나에서 여러 개의 컨테이너가 격리된 상태로 실행되는 인프라 환경을 말한다. 컨테이너 하나 이상의 목적을 위해 독립적으로 작동하는 프로세스이다. 개인 환경(개인 PC)에서는 1명의 관리자(사용자)가 다양한 프로그램을 사용하므로 각각의 프로그램을 컨테이너로 구현할 필요가 없다. 하지만 기업 환경에서는 다수의 관리자가 수백, 수천대의 서버를 함께 관리하기 때문에 일관성을 유지하는 것이 매우 중요하다. 여러 사람이 만져서 설정의 일관성이 떨어진 서버를 SnowFlake Server(눈송이 서버)라고 한다. 이런 경우에 컨테이너 인프라 환경을 구성하면 효과적이다. 또한 가상화 환경에서는 각각의 가상 머신이 모두 독립적인 운영체제 커널을 가지고 있어야 하기 때문에..