DevOps

    [kubernetes] #6 쿠버네티스 YAML 설정 파일

    [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 명령어

    [kubernetes] #5 핵심 kubectl 명령어

    서론 kubectl 명령어를 통해서 어떻게 파드를 생성하고 디버깅하는지 알아보자. 클러스터 컴포넌트 상태 확인, 생성, 수정 우선 클러스터에 포함된 노드의 상태를 알아보자 kubectl get nodes 클러스터에서 구동중인 파드의 상태를 알아보자 kubectl get pods 클러스터의 서비스들의 상태를 알아보자 kubectl get services get 명령어는 쿠버네티스 클러스터에 존재하는 특정 컴포넌트들의 정보를 리스트 형식으로 가져올 수 있다. create 명령어는 쿠버네티스 클러스터에 특정 컴포넌트를 생성할 수 있다. 여기 나와있는 컴포넌트들을 생성할 수 있다. (kubectl create -h 를 입력하면 볼 수 있다.) 살펴보면 '파드'가 없다는 것을 확인할 수 있다. 파드는 쿠버네티스 ..

    [kubernetes] #4 Minikube와 kubectl - 클러스터 구축

    [kubernetes] #4 Minikube와 kubectl - 클러스터 구축

    서론 minikube가 무엇인지 알아보자 kubectl이 무엇인지 알아보자 Minikube cluster를 설치해보자 Minikube 란? 일반적으로 배포에 사용되는 쿠버네티스 클러스터는 위와 같은 구조를 가진다. 즉, 다수의 마스터 노드와 워커 노드를 가진다. 그리고 마스터 노드와 워커 노드들은 각자의 역할을 부여받는다. 위 그림에서 보다시피 하나의 노드는 하나의 물리 머신 또는 가상 머신이 된다. 만약 로컬 환경에서 이러한 구조를 테스트 해보고 싶다면 어떻게 할까? 작은 기능 하나를 테스트 하기 위해서 위와 같이 많은 노드를 가진 클러스터를 구성해 보는 것은 매우 어렵다. (가상 머신을 많이 만들어서 테스트 한다고 해도, 일반적인 컴퓨터에서는 CPU와 RAM은 충분하지 않을 것이다.) 이같은 걱정을 ..

    [kubernetes] #3 쿠버네티스 아키텍처

    [kubernetes] #3 쿠버네티스 아키텍처

    서론 쿠버네티스 클러스터에는 마스터 노드와 워커 노드가 있다. 이들이 어떻게 다른지 알아보자. 쿠버네티스 클러스터 환경에서 노드들이 어떻게 스스로 복구(self-healing)하고 관리(self-managed)되는지 알아보자. 1. 워커 프로세스(Worker processes) 쿠버네티스 클러스터에는 실질적인 일을 하는 워커 노드가 있다. 워커 노드는 쿠버네티스의 기본 구성요소인 파드 여러 개를 가질 수 있다. 위 그림의 Node1은 컨테이너로 이루어진 2개의 파드를 가지고 있다. 쿠버네티스는 하나의 노드에 3개의 프로세스를 필요로 한다. 프로세스는 모든 노드에 반드시 설치되어야 하며 그들을 스케줄링, 관리 하는데 반드시 필요하다. 첫 번째 프로세스는 노드의 컨테이너 런타임을 위해 수행되는 프로그램이다...

    [Kubernetes] #2 핵심 쿠버네티스 컴포넌트

    [Kubernetes] #2 핵심 쿠버네티스 컴포넌트

    1. Node와 Pod 여기 Worker Node라고 불리는 Node1이 하나 있다. 이 node는 하나의 물리 머신 또는 가상 머신일 수 있다. 그리고 이 노드 안에 'Pod'라고 하는 가장 기본적이고 심플한 쿠버네티스의 구성요소가 있다. 파드는 컨테이너의 추상화를 도와준다. 이를 abstraction over container라고 한다. 우리는 컨테이너라고 하면 기본적으로 Docker를 떠올릴 수 있지만, 노드들은 그렇지 못하다. 실제로 컨테이너 도구는 Docker이외에 다른 다양한 도구들이 있고, 쿠버네티스는 그들 중 어떤 컨테이너 도구를 사용해도 적응할 수가 있다. 적응을 도와주는 것이 바로 컨테이너의 추상화를 도와준다고 하는 파드 덕분이다. 파드에는 일반적으로 하나의 애플리케이션 컨테이너가 들어..

    [Kubernetes] #1 쿠버네티스란?

    쿠버네티스의 공식적인 정의 오픈소스 컨테이너 오케스트레이션 도구 구글이 개발함 각기 다른 배포 환경으로 컨테이너화 된 애플리케이션을 관리하는데 도움을 줌 오케스트레이션 도구가 필요한 이유 모놀리식에서 마이크로서비스로의 트렌드 변화 컨테이너 사용의 증가 마이크로서비스는 기술적으로 수백, 수천 개의 컨테이너를 만들어야 하는 결과를 초래할 수 있다. 각각의 컨테이너를 관리하기 위해서 컨테이너에 맞는 스크립트 파일을 개별적으로 만든다면 정말 복잡하고 불가능할지도 모른다. 그래서 많은 컨테이너들을 편리하게 관리하기 위해서 오케트스트레이션 도구가 필요한 것이다. 그래서 오케스트레이션 도구가 제공하는건? 높은 가용성 애플리케이션이 언제나 사용 가능함을 의미한다. 높은 확장성 퍼포먼스가 중요한 애플리케이션일수록 빠르게..

    git 원격 레포지토리 파일 삭제

    git 원격 레포지토리에 원하지 않는 파일을 잘못 올렸을 때 해결방법 잘못된 해결 방법 실제로 .idea 폴더를 로컬에서 삭제하고, git add . 와 git commit -m "..." 을 통해 파일 삭제 커밋을 올린다. 이때 같이 작업하는 사람이 브랜치의 변경 사항을 합치기 위해서 git pull 명령어를 수행한다면, 커밋이 동기화 되면서 .idea같은 폴더가 삭제되고 IntelliJ의 개인 설정이 모두 날아갈 수 있다. 올바른 해결 방법 파일 단위 해결 git rm --cached 파일이름 폴더 단위 해결 git rm --cached -r 폴더이름 git rm : 원격 저장소와 로컬 저장소에 있는 파일을 삭제한다. git rm --cached : 원격 저장소에 있는 파일을 삭제한다. 로컬 저장소에..

    마이크로서비스를 위한 git branch 생성 자동화

    마이크로서비스를 위한 git branch 생성 자동화

    서비스 branch 간의 의존성을 최소한으로 하고, 하나의 branch를 하나의 개별적인 레포지토리처럼 사용할 수 있는 branch 생성, 병합 전략을 만들어 보았다. 잘못된 점이나 추가할 사항이 있다면 가감없이 피드백 부탁드립니다! 먼저 일반적인 Branch 명명 규칙을 알아보자 1. Master Branch 레포지토리를 새로 만들면 가장 먼저 만들어지는 브랜치 Release(배포) 할 수 있는 브랜치의 이력을 관리하기 위한 최상위 브랜치로 사용된다. 즉시 배포 가능한 상태만을 관리한다. 2. Dev Branch 다음 출시 버전을 개발하는 브랜치 Master에서 분기되어 기능 개발을 위한 브랜치들을 병합하기 위해 사용한다. 일반적인 모놀리식 아키텍처에서는 이 브랜치를 기반으로 개발이 진행된다. 기능 개..

    [Docker] 이미지와 레이어(layer) 구조

    도커의 이미지는 컨테이너를 만드는 '압축파일'이라고 생각하면 이해가 편하다. 도커 이미지는 도커 컨테이너를 만들기 위한 모든 정보를 가지고 있다. 한 번 만들어지면 이미지 내의 정보는 절대 변하지 않으며, 이미지를 통해서 컨테이너가 만들어진다. 이미지는 컨테이너를 만들어도 사라지지 않으며 여러 개의 컨테이너를 만들 수 있다. 도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 보통 용량이 수백MB이다. 처음 컨테이너를 만들기 위해서 이미지를 다운로드하는 건 당연히 그럴 수 있다. 그런데 이미지의 불변성 때문에 현재 이미지에 수정사항이 생겨 파일을 단 하나 추가된 이미지를 새로 다운로드한다고 가정하자. 기존 이미지에 파일 하나 추가했다고 수백MB를 다시 다운받는다면 매우 비효율적일 수 ..

    [K8S] 쿠버네티스 파드의 생명주기

    쿠버네티스의 장점은 쿠버네티스의 구성요소들이 하는 일이 명확하게 구분되어있어서 각자의 역할만 충실하게 한다면 클러스터 시스템이 안정적으로 운영된다는 점이다. 각자의 역할이 명확히 나눠진 점은 마이크로서비스 아키텍쳐(MSA) 구조와도 밀접하다. 또한 역할이 나뉘어있기 때문에 문제가 발생했을 때 디버깅하기도 쉽다. 파드의 생명주기란? 파드가 생성, 수정, 삭제되는 과정을 의미한다. 알아보자 개발자가 kubectl 커맨드라인을 통해서 API 서버에 파드 생성을 요청한다. (create) API 서버는 etcd안에 전달된 내용을 모두 기록해 클러스터의 상태 값을 항상 최신으로 유지한다. 따라서 각 요소(etcd, API서버, 컨트롤러 매니저, 스케줄러)가 상태를 업데이트할 때마다 API 서버를 통해서 etcd에..