1. 컨피그맵만으로 다루기 어려운 민감 정보 애플리케이션이 다루는 설정값 중에는 SSH 키, 비밀번호, 인증 토큰처럼 외부에 노출되어서는 안 되는 값들이 있다. 컨피그맵도 문자열 값을 담아 환경 변수나 볼륨 파일로 파드에 전달할 수 있지만, 컨피그맵은 애초에 노출되어도 문제없는 일반 설정을 다루기 위한 오브젝트다. 쿠버네티스는 이런 민감 정보를 별도로 다루기 위해 시크릿(Secret)이라는 오브젝트를 둔다. 시크릿은 컨피그맵과 마찬가지로 네임스페이스에 속하고, 파드에 값을 전달하는 방식도 환경 변수와 볼륨 파일 두 가지로 동일하다.
설정값을 애플리케이션에 전달하는 문제 애플리케이션은 대부분 설정값을 가진다. 로그 레벨처럼 단순한 키-값 부터 nginx.conf처럼 완결된 설정 파일 하나까지 그 형태는 다양하다. 이런 설정을 애플리케이션에 전달하는 가장 확실한 방법은 도커 이미지 안에 설정값이나 설정 파일을 정적으로 넣어 두고 함께 빌드하는 것이다. 그러나 도커 이미지는 한번 빌드되면 불변(immutable)이다. 이미지 안에 박아 둔 설정값은 상황에 따라 유연하게 바꿀 수 없고, 값 하나를 바꾸려 해도 이미지를 다시 빌드해야 한다. 그래서 흔히 쓰는 대안이 설
1. 네임스페이스(Namespace) 도커나 도커 스웜 모드에는 컨테이너를 논리적으로 나눠 관리하는 개념이 없다. docker ps를 실행하면 호스트에 떠 있는 모든 컨테이너가 한 목록에 뒤섞여 나온다. 컨테이너 수가 늘어날수록 어떤 것이 어떤 애플리케이션에 속하는지 구분하기가 어려워진다. 쿠버네티스는 이 문제를 네임스페이스(Namespace)라는 오브젝트로 해결한다. 네임스페이스는 파드, 레플리카셋, 디플로이먼트, 서비스 같은 리소스들이 묶여 있는 하나의 가상 공간이다. 리소스를 용도별로 묶어 두면, 서로 다른 목적의 리소스가 한
1. 파드 IP만으로 통신할 때의 한계 쿠버네티스에서 파드에 직접 접근하려면 kubectl describe로 파드 IP를 확인한 뒤 그 IP로 접속하면 된다. 이 방식은 클러스터 내부에서 동작 여부를 빠르게 확인할 때만 사용이 가능하다. 파드 IP는 영속적이지 않다. 파드가 재시작되거나 다른 노드로 재스케줄링되는 순간 새 IP를 할당받으므로, 한 번 확인한 IP가 무효가 될 수 있다. 또한 여러 디플로이먼트를 하나의 애플리케이션으로 엮을 때 서로의 파드 IP를 미리 알 방법이 없다. 예를 들어 프론트 파드에서 백엔드 파드를 호출하려
디플로이먼트: 레플리카셋의 상위 오브젝트 실제 운영 환경에서 레플리카셋을 YAML로 직접 정의하는 경우는 거의 없다. 대신 디플로이먼트를 YAML에 정의하고, 디플로이먼트가 레플리카셋을 생성, 교체, 삭제한다. 디플로이먼트는 레플리카셋의 상위 오브젝트로, 하나의 디플로이먼트는 시점에 따라 여러 개의 레플리카셋을 가질 수 있다. 디플로이먼트가 필요한 이유는 새 버전으로의 전환과 이전 버전으로의 복귀를 레플리카셋 단독으로는 처리할 수 없기 때문이다. 레플리카셋과 파드 레플리카셋과 디플로이먼트의 YAML은 거의 동일하다. kind만 Re
1. 레플리카셋이 필요한 이유 마이크로서비스 환경에서는 같은 역할을 하는 파드를 여러 개 동시에 운영해야 한다. 트래픽을 나눠 받기 위해서이기도 하고, 일부 인스턴스가 실패해도 나머지가 요청을 계속 처리하도록 가용성을 확보하기 위해서이기도 하다. 따라서 쿠버네티스에서 실제로 다루는 단위는 단일 파드가 아니라 동일한 스펙의 파드 N개가 된다. 이를 직접 정의하기 위해 YAML 매니페스트 안에서 ---를 구분자로 두어 동일한 파드 여러 개를 한 번의 kubectl apply로 생성할 수도 있지만, 이는 비효율적인 방법이다. 또한 파드가
1. Pod란? Pod는 쿠버네티스가 생성하고 관리하는 가장 작은 배포 단위이다. 하나의 Pod 안에 있는 컨테이너들은 다음을 공유한다. 네트워크 네임스페이스: 같은 IP를 갖고 `localhost`로 서로 통신한다. 같은 포트를 두 컨테이너가 동시에 점유할 수는 없다. 스토리지 볼륨: Pod에 정의된 볼륨을 모든 컨테이너가 마운트할 수 있다. 생명 주기와 스케줄링 단위: 항상 같은 노드에 함께 스케줄링되고, 시작과 종료 또한 함께 이뤄진다. Pod에는 컨테이너가 하나만 있을 수도, 여러 개가 있을 수도 있다. 보통은 1 Pod =
1. 쿠버네티스(Kubernetes, k8s)란? 쿠버네티스는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈소스 오케스트레이션 플랫폼이다. 2014년 구글에 의해 공개되었으며 현재는 CNCF에 의해 관리되고 있다. 쿠버네티스를 사용하면 컨테이너를 여러 서버에 분산 배포하거나 서버 장애 시 자동 복구, 트래픽에 따른 자동 확장 등이 가능해진다. *k8s라는 약어는 'K'와 's' 사이에 8개의 글자가 있다는 의미에서 유래되었다. 2. 클러스터(Cluster) 클러스터는 컨테이너화된 애플리케이션을 실행하는 노드(Nod