클라우드/Kubernetes(쿠버네티스)

    [쿠버네티스] Helm

    쿠버네스 package managing tool이다. node.js 의 npm, python의 pip 과 비슷한 형태로 쿠버네티스 패키지 배포를 가능하게 하는 tool docker가 나오면서 container 혁신 -> container를 쉽게 관리하고 배포해주는 kubernetes 등장 -> kubernetes를 package로 관리해주는 것이 바로 helm이다. chart라고 부르는 package format을 사용하는데 chart는 쿠버네티스 리소스를 describe 하는 파일들의 집합이다.(파일들, 그 속에 속해있는 폴더의 집합) 특정 directory 하위에 모여있는 파일들을 통틀어서 chart라고 부르는데 좀 더 쉽게 예를들면, 가령 WordPress chart는 다음과 같은 구조를 가진다. ..

    [쿠버네티스] 시크릿

    시크릿이란? 비밀번호, OAuth 토큰, SSH키 같은 민감한 정보들을 저장하는 용도로 사용한다. 컨테이너 안에 저장하지 않고 별도로 보관했다가 실제 파드를 실행할 때의 템플릿으로 컨테이너에 제공한다. 시크릿 만들기 내장 시크릿 쿠버네티스 클러스터 안에서 쿠버네티스 API에 접근할 때 사용 클러스터 안에서 사용하는 ServiceAccount라는 계정을 생성하면 자동으로 관련 시크릿을 만든다. 이 시크릿으로 ServiceAccount가 사용 권한을 갖는 API에 저근할 수 있다. 사용자 정의 시크릿 사용자가 만든 시크릿 kubeclt create secret 명령으로 만들 수 있고 다른 자원처럼 템플릿으로 만들 수도 있다. 시크릿 사용하기 시크릿은 파드의 환경 변수나 볼륨을 이용한 파일 형식으로 사용할 수..

    [쿠버네티스] 컨피그맵

    컨피그맵이란? 컨테이너에 필요한 환경 설정을 컨테이너와 분리해서 제공하는 기능. 클라우드 네이티브 아키텍처에서 컨테이너는 변하지 않는 자원이어야 한다. 개발할 때 사용하는 컨테이너와 상용 서비스에서 사용하는 컨테이너가 같아야 한다는 것이다. 그래야만 개발과 서비스 사이의 환경 차이에서 오는 잠재적 문제를 없앨 수 있다. 그런데 개발용과 상용 서비스에서는 서로 다른 설정이 필요할 때가 많다. 사용하는 데이터베이스가 다를 수도 있고, 실제 개발할 때는 디버그 모드로 로그를 출력하는데, 서비스용에서는 시스템 정보를 나타내는 모드로 로그를 출력해야 하는 등의 차이가 있다. 이렇게 다른 설정으로 컨테이너를 실행해야 할 때 사용하는 것이 컨피그맵이다. 컨피그맵 사용하기 data의 하위 필드로 실제 사용하려는 환경 ..

    [쿠버네티스] 레이블과 애너테이션

    레이블, 애너테이션 이란? 레이블과 애너테이션은 쿠버네티스에서 자원들의 메타데이터를 관리하는 데 사용한다. 레이블은 셀렉터와 함께 특정 레이블이 있는 자원들을 선택할 때 주로 사용한다. 애너테이션은 주석 성격의 메타데이터를 기록하는 데 사용한다. 레이블은 쿠버네티스 클러스터 안에서 사용자가 오브젝트를 생성할 때 해당 오브젝트를 구분하는 용도이다. 사용자가 임의로 원하는 값을 지정해서 사용한다. 애너테이션은 레이블처럼 사용자가 원하는 값을 설정하기보다 쿠버네티스 시스템에서 필요한 정보들을 표시하는 데 사용한다. 레이블 키-값 쌍으로 구성 사용자가 클러스터 안에서 오브젝트를 만들 때 메타데이터로 설정할 수 있다. 레이블이 생성된 다음에도 언제든지 수정할 수 있다. 레이블의 키는 쿠버네티스 안에서 컨트롤러들이..

    [쿠버네티스] 인그레스

    인그레스란? 클러스터 외부에서 안에 있는 파드에 접근할 때 사용하는 방법 서비스와의 차이점은 주로 L7영역의 통신을 담당해서 처리한다는 것이다. 인그레스 개념 클러스터 외부에서 안으로 접근하는 요청들을 어떻게 처리할지 정의해둔 규칙 모음 클러스터 외부에서 접근해야 할 URL을 사용할 수 있도록 하고, 트래픽 로드밸런싱, SSL인증서 처리, 도메인 기반 가상 호스팅 등을 제공 인그레스 자체는 이런 규칙들을 정의해둔 자원이고, 실제로 동작시키는 것은 인그레스 컨트롤러이다. 클라우드 서비스를 사용하면 별다른 설정 없이 자체 로드밸런서 서비스와 연동해서 인그레스 사용할 수 있다. 클라우드 서비스를 사용하지 않고 직접 쿠버네티스 클러스터를 구축해서 사용한다면 인그레스 컨트롤러를 직접 인그레스와 연동해야한다. 이때..

    [쿠버네티스] 서비스

    서비스란? 여러 개 파드에 접근할 수 있는 IP하나를 제공한다. 다양한 기능을 제공하지만 본질적으로 로드밸런서 역할이다. 서비스의 개념 파드는 건트롤러가 관리하므로 한군데에 고정해서 실행되지 않고, 클러스터 안을 옮겨다닌다. 이 과정에서 노드를 옮기면서 실행되기도 하고 클러스터 안 파드의 IP가 변경되기도 한다. 이렇게 동적으로 변하는 파드들에 고정적으로 접근할 때 사용하는 방법이 쿠버네티스의 서비스이다. 서비스를 사용하면 파드가 클러스터 안 어디에 있든 고정 주소를 이용해 접근할 수 있다. 클러스터 외부에서 클러스터 안 파드에 접근할 수도 있다. 인스레스로도 접근할 수 있는데 서비스는 주로 L4영역에서 통신할 때 사용하고 인그레스는 L7영역에서 통신할 때 사용한다는 차이점이 있다. 상황에 따라 두 가지..

    [쿠버네티스] 컨트롤러(데몬세트, 스테이트풀세트, 잡, 크론잡)

    데몬세트 클러스터 전체 노드에 특정 파드를 실행할 때 사용하는 컨트롤러 클러스터 안에서 새롭게 노드가 추가되었을 때 데몬세트가 자동으로 해당 노드에 파드를 실행시킨다. 노드가 클러스터에서 빠졌을 때는 해당 노드에 있던 파드는 그대로 사라질 뿐 다른 곳으로 옮겨가서 실행되거나 하지 않는다. 그러므로 보통 로그 수집기를 실행하거나 노드를 모니터링하는 모니터링용 데몬 등 클러스터 전체에 항상 실행시켜두어야 하는 파드에 사용한다. 스테이트풀세트 상태가 있는 파드들을 관리하는 컨트롤러 볼륨을 사용해서 특정 데이터를 저장한 후 파드를 재시작했을 때 해당 데이터를 유지한다. 여러 개의 파드 사이에 순서를 지정해서 실행되도록 할 수 있다. 이렇게 어떠한 상태가 있어야 할 때 사용한다. 그레이스풀이란 실행 중인 프로세스..

    [쿠버네티스] 컨트롤러(레플리케이션 컨트롤러, 레플리카세트, 디플로이먼트)

    컨트롤러란? 파드들을 관리하는 역할을 한다. 다양한 목적에 맞게 사용할 수 있는 컨트롤러가 있다는 것이 쿠버네티스 장점 예1 ) 웹서비스처럼 오랜시간동안 계속 파드들을 관리할 때 > 레플리케이션 컨트롤러, 레플리카세트, 디플로이먼트 예2 ) 클러스터의 전체 노드에 같은 파드를 실행할 때는 데몬세트를 사용 예3 ) 1회성 작업을 할 때 사용하는 잡 예4 ) 주기적인 배치 작업을 실행할 때 사용하는 크론잡 레플리케이션 컨트롤러 지정한 숫자만큼의 파드가 항상 클러스터 안에서 실행되도록 리한다. 예 ) 파드 2개를 명시해둔 레플리케이션 컨트롤러가 있다면 장애나 다른 이유로 파드 갯수가 2개보다 적을 때 다시 새로운 파드를 실행해서 파드 개수를 2개로 맞춘다. 컨트롤러를 사용하지 않고 파드를 직접 실행하면 파드에..