2017.12.15

쿠버네티스 컨테이너, 무엇이 새로워졌나

Serdar Yegulalp | InfoWorld
오픈 소스 오케스트레이션 프레임워크 쿠버네티스(Kubernetes)의 최신 버전인 쿠버네티스 1.9가 공개됐다. 주요 신기능은 다음과 같다.

- 워크로드 API의 일반 가용성
- 윈도우 서버용 베타 지원
- 신형 컨테이너 스토리지 API의 알파 버전
 


먼저 쿠버네티스 1.9를 살펴보자. 2017년 12월 배포판이다.

워크로드 API의 생산 버전
쿠버네티스 1.8에서 베타 공개되고 1.9 버전에 추가된 앱 워크로드 API(Apps Workloads API)를 이용하면 영속성을 요하는 장기 구동 앱 등 사용자의 운영 방식에 따른 워크로드를 정의할 수 있다. 앱 워크로드 API의 버전 1은 다음의 4가지 API에 일반 가용성을 지원한다.

- 디벨롭먼트(Developement). 레플리카셋을 비롯한 애플리케이션 구동을 위한 권장 상태를 설명할 기본 방식이다.
- 레플리카셋(ReplicaSet). 레플리카셋은 디벨롭먼트의 설정을 통해 특정 앱이 정의를 충족하기에 충분한 구동 컨테이너 인스턴스를 보유하고 있는지 확인한다.
- 데몬셋(Daemonset). 솔루션 모니터링, 로깅 등 다른 앱의 구동과 무관하게 지속적으로 구동되는 앱을 위한 개발.
- 스테이트풀셋(StatefulSet). 컨테이너가 제거 또는 재시작돼도 상태 영속성을 보장해야 하는 워크로드에 사용된다. 컨테이너용 네트워크 증명이나 컨테이너 시작, 중지 명령 등 대상의 지속성을 보장하는 역할도 맡는다.
 
이밖에 잡(Job), 크론잡(CronJob) 등 기타 워크로드 API는 예정대로 사용될 예정이다. 보통 배치 워크로드 API(Batch Workloads API)라고 불리는데, 아직 베타 단계에 있다. 

원도우 서버에 대한 베타 지원
마이크로소프트가 윈도우에서 도커(Docker) 컨테이너에 대한 네이티브 지원을 추가한 후 쿠버네티스와 같은 도커 사용 앱이 이를 지원하는 것은 자연스러운 수순이다. 쿠버네티스 1.9도 윈도우 서버에서 쿠버네티스를 이용할 수 있도록 임시로 지원한다.

윈도우 서버에서 쿠버네티스를 테스트하려면 윈도우 서버 2016과 도커 1.12가 필요하다. 현 시점에서 쿠버네티스 제어 영역은 리눅스 환경에서만 구동할 수 있다. 즉 현재 지원되는 윈도우 서버 상의 구동은 리눅스 컨트롤러로부터 컨테이너를 스케줄링하는 방식이며, 윈도우 서버를 컨테이너로 이용하는 방식은 불가능하다.

컨테이너 스토리지 인터페이스의 첫 번째 알파
스토리지 등의 리소스를 애플리케이션으로부터 분리하는 기능은 쿠버네티스의 첫 등장부터 주목 받은 주요 기능이다. 하지만 안타깝게도 컨테이너 스토리지는 아직 온전한 의미의 표준이 없으며, 쿠버네티스를 비롯한 거의 모든 컨테이너 솔루션이 각자의 방법을 적용하고 있다.

이런 가운데 클라우드 네이티브 컴퓨팅 재단(CNCF, Cloud Native Computing Foundation)의 서브그룹 중 한 곳인 CNCF 스토리지 워킹 그룹이 컨테이너 클러스터 내 스토리지용 자체 표준을 개발했다는 반가운 소식이 전해졌다.

쿠버네티스 1.9에는 컨테이너 스토리지 인터페이스(CSI, Container Storage Interface)라는 이름의 플러그인 알파 버전이 포함돼 스토리지 볼륨 플러그인을 쿠버네티스 자체와 완전히 독립해 개발할 수 있도록 지원한다. 프로젝트는 아직 초기 단계지만, 쿠버네티스 개발자가 관련 작업을 진행 중이다.

쿠버네티스 1.9의 기타 신규 기능
이외에도 쿠버네티스 1.9에는 다음과 같은 추가, 변경 사항들이 포함된다.

- GPU를 자원으로 활용할 수 있도록 하는 쿠버네티스용 하드웨어 가속의 알파 버전. 이를 통해 쿠버네티스는 머신 러닝 워크로드를 더 효과적으로 처리할 수 있게 됐다.
- IPv6 주소할당을 위한 알파 지원
- 커스텀 리소스 정의(CRD, Custom Resource Definition) 데이터에 대한 검증 속도 개선. CRD는 관리자가 주어진 쿠버네티스 설비를 커스텀, 확장할 수 있도록 지원하며 새로운 버전의 쿠버네티스 출시에 따른 호환성 이슈도 해소해준다. 
 

다음은 2017년 10월 배포판인 쿠버네티스 1.8의 신기능을 살펴보자

쿠버네티스 1.8의 신규 보안 기능
쿠버네티스는 이전 버전을 통해 역할 기반 접근 통제(RBAC, Role-Based Access Control)를 베타 기능으로 선보여왔다. RBAC를 통해 관리자는 팟(pod), 시크릿(secret) 등의 쿠버네티스 자원에 대한 접근 허용권을 정의할 수 있으며, 더불어 그 권한을 개별 혹은 복수 사용자에게 부여할 수 있다.

허용은 대상의 변경을 위해(‘생성', ‘업데이트', ‘패치'), 혹은 대상에 대한 정보 획득만을 위해(‘획득', ‘목록화', ‘검토') 이뤄질 수 있다. 역할의 적용은 두 별개의 API를 통해 단일 네임공간(namespace) 또는 특정 클러스터 전체에 적용할 수 있다.

그간 쿠버네티스의 네트워킹 정책 시스템이 팟에 대한 진입 트래픽만을 필터링할 수 있던 데에서 나아가 쿠버네티스 1.8에서는 유출 트래픽에 대한 필터링의 베타 지원이 추가됐다. 단, 양방향 필터링 지원 대상은 일련의 종착 포트와 피어로 제한되고 있다. 비율 제한(rate limiting)과 같은 대상을 쿠버네티스의 인터페이스에서 이용하려면 앞으로도 시간이 더 필요할 것으로 보인다(물론, 커스텀 네트워킹 브릿지를 이용하는 컨테이너에서는 이 해당 작업을 바로 수행할 수 있다).

베타로 선보인 또 다른 네트워킹 기능은 각 쿠버네티스 로드 상에서 구동되는 에이전트 소프트웨어인 큐블릿(Kubelet)용 자동 TLS 인증 로테이션이 있다. 쿠버네티스 내부에서 사용되는 TLS 인증은 수명이 1년인데, 재생성 관련해서 많은 경우 간과되곤 했다. 하지만 이번 신기능을 통해 이제는 현 큐블릿용 인증서의 만료 시점에 자동으로 신규 인증서를 생성해 편의성을 높였다.

쿠버네티스 1.8 감사 기능
쿠버네티스 1.7의 알파 기능으로 처음 도입된 감사(audit) 기능은 1.8에서 베타(beta status)로 한 단계 업그레이드 됐다. 감사 로그에 대한 포맷팅은 물론 클러스터의 어떤 요소를 누가 로깅할 수 있는가에 대한 정책, 그리고 외부 서비스로 이벤트를 릴레이하는 웹훅 등이 추가됐다.

감사 기능을 베타로 한 단계 업그레이드 했다는 것은 감사 이벤트 포맷이 역 호환성 변경만 할 수 있음을 의미한다. 즉 쿠버네티스 개발자가 이 기능을 활용해 생산 기능(production functionality)을 빌드 할 수 있다. 예를 들어 감사 이벤트로부터 RBAC 프로파일을 생성하는 audit2rbac 툴이 대표적이다.

쿠버네티스 1.8의 워크로드 기능
일련의 워크로드 API 역시 쿠버네티스 1.8에서 베타로 승격된 또 다른 기능이다. 워크로드 API는 애플리케이션의 전반적 행동에 기반해 이들을 오케스트레이션하는 방법을 찾아낸다. 예를 들어 일괄 작업이나 크론 스타일 작업과 계속해서 진행되는 데몬(daemon) 작업 간 오케스트레이션을 가능케 하는 것이다. 

워크로드 API 중 일부는 다른 것보다 더 빨리 베타에서 업그레이드 될 것으로 보인다. 디플로이먼트(Deployment), 데몬셋(DaemonSet), 레플리카셋(ReplicaSet), 그리고 스테이트풀셋(StatefulSet) 네 API는 쿠버네티스 1.9부터 풀 프로덕션(full production)으로 승격된다. 배치 API(잡과 크론잡)이 뒤를 따를 예정이지만, 쿠버네티스 1.8은 이들 API가 어떻게 작동해야 하는지에 대한 대략적인 방향을 개발자에게 제시할 것으로 보인다. 

일부 애플리케이션에서는 벌써 워크로드 API를 이용할 수 있지만, 어디까지나 잠정적인 이용이다. 예를 들어 아파치 스파크(Apache Spark)는 쿠버네티스에서 직접 구동되는 포크(fork)가 있지만 이러한 기능은 당분간은 스파크에서도, 쿠버네티스에서도 이용할 수 없다.

쿠버네티스 1.8의 기타 알파/베타 기능
이외에도 쿠버네티스 1.8에는 다음과 같은 알파, 베타 기능이 추가됐다.

- (베타) 크라이-컨테이너드(cri-containerd)는 사용자가 도커 데몬을 대신해 컨테이너드를 사용할 수 있도록 지원해 도커에 대한 직접 의존도를 낮춰준다.
- (알파) 볼륨 스냅샷은 쿠버네티스 API 콜을 사용해 쿠버네티스 볼륨의 스냅샷을 저장하는 기능이다. 다만 이 기능은 스냅샷 촬영 시점의 일관성을 보장하기 어려워 아직 정확한 생산 배포 일정이 확정되지 않았다.
- (알파) 볼륨 리사이징 기능은 쿠버네티스 API 콜을 이용해 볼륨 사이즈를 조정할 수 있다. 단, 볼륨 사이즈를 조정한다고 해서 볼륨상의 파일 시스템이 변하는 것은 아니며, 오직 기저의 볼륨 사이즈만 변한다는 것을 잊지 말자. 파일 시스템은 무엇이든 될 수 있기 때문이다. ciokr@idg.co.kr



2017.12.15

쿠버네티스 컨테이너, 무엇이 새로워졌나

Serdar Yegulalp | InfoWorld
오픈 소스 오케스트레이션 프레임워크 쿠버네티스(Kubernetes)의 최신 버전인 쿠버네티스 1.9가 공개됐다. 주요 신기능은 다음과 같다.

- 워크로드 API의 일반 가용성
- 윈도우 서버용 베타 지원
- 신형 컨테이너 스토리지 API의 알파 버전
 


먼저 쿠버네티스 1.9를 살펴보자. 2017년 12월 배포판이다.

워크로드 API의 생산 버전
쿠버네티스 1.8에서 베타 공개되고 1.9 버전에 추가된 앱 워크로드 API(Apps Workloads API)를 이용하면 영속성을 요하는 장기 구동 앱 등 사용자의 운영 방식에 따른 워크로드를 정의할 수 있다. 앱 워크로드 API의 버전 1은 다음의 4가지 API에 일반 가용성을 지원한다.

- 디벨롭먼트(Developement). 레플리카셋을 비롯한 애플리케이션 구동을 위한 권장 상태를 설명할 기본 방식이다.
- 레플리카셋(ReplicaSet). 레플리카셋은 디벨롭먼트의 설정을 통해 특정 앱이 정의를 충족하기에 충분한 구동 컨테이너 인스턴스를 보유하고 있는지 확인한다.
- 데몬셋(Daemonset). 솔루션 모니터링, 로깅 등 다른 앱의 구동과 무관하게 지속적으로 구동되는 앱을 위한 개발.
- 스테이트풀셋(StatefulSet). 컨테이너가 제거 또는 재시작돼도 상태 영속성을 보장해야 하는 워크로드에 사용된다. 컨테이너용 네트워크 증명이나 컨테이너 시작, 중지 명령 등 대상의 지속성을 보장하는 역할도 맡는다.
 
이밖에 잡(Job), 크론잡(CronJob) 등 기타 워크로드 API는 예정대로 사용될 예정이다. 보통 배치 워크로드 API(Batch Workloads API)라고 불리는데, 아직 베타 단계에 있다. 

원도우 서버에 대한 베타 지원
마이크로소프트가 윈도우에서 도커(Docker) 컨테이너에 대한 네이티브 지원을 추가한 후 쿠버네티스와 같은 도커 사용 앱이 이를 지원하는 것은 자연스러운 수순이다. 쿠버네티스 1.9도 윈도우 서버에서 쿠버네티스를 이용할 수 있도록 임시로 지원한다.

윈도우 서버에서 쿠버네티스를 테스트하려면 윈도우 서버 2016과 도커 1.12가 필요하다. 현 시점에서 쿠버네티스 제어 영역은 리눅스 환경에서만 구동할 수 있다. 즉 현재 지원되는 윈도우 서버 상의 구동은 리눅스 컨트롤러로부터 컨테이너를 스케줄링하는 방식이며, 윈도우 서버를 컨테이너로 이용하는 방식은 불가능하다.

컨테이너 스토리지 인터페이스의 첫 번째 알파
스토리지 등의 리소스를 애플리케이션으로부터 분리하는 기능은 쿠버네티스의 첫 등장부터 주목 받은 주요 기능이다. 하지만 안타깝게도 컨테이너 스토리지는 아직 온전한 의미의 표준이 없으며, 쿠버네티스를 비롯한 거의 모든 컨테이너 솔루션이 각자의 방법을 적용하고 있다.

이런 가운데 클라우드 네이티브 컴퓨팅 재단(CNCF, Cloud Native Computing Foundation)의 서브그룹 중 한 곳인 CNCF 스토리지 워킹 그룹이 컨테이너 클러스터 내 스토리지용 자체 표준을 개발했다는 반가운 소식이 전해졌다.

쿠버네티스 1.9에는 컨테이너 스토리지 인터페이스(CSI, Container Storage Interface)라는 이름의 플러그인 알파 버전이 포함돼 스토리지 볼륨 플러그인을 쿠버네티스 자체와 완전히 독립해 개발할 수 있도록 지원한다. 프로젝트는 아직 초기 단계지만, 쿠버네티스 개발자가 관련 작업을 진행 중이다.

쿠버네티스 1.9의 기타 신규 기능
이외에도 쿠버네티스 1.9에는 다음과 같은 추가, 변경 사항들이 포함된다.

- GPU를 자원으로 활용할 수 있도록 하는 쿠버네티스용 하드웨어 가속의 알파 버전. 이를 통해 쿠버네티스는 머신 러닝 워크로드를 더 효과적으로 처리할 수 있게 됐다.
- IPv6 주소할당을 위한 알파 지원
- 커스텀 리소스 정의(CRD, Custom Resource Definition) 데이터에 대한 검증 속도 개선. CRD는 관리자가 주어진 쿠버네티스 설비를 커스텀, 확장할 수 있도록 지원하며 새로운 버전의 쿠버네티스 출시에 따른 호환성 이슈도 해소해준다. 
 

다음은 2017년 10월 배포판인 쿠버네티스 1.8의 신기능을 살펴보자

쿠버네티스 1.8의 신규 보안 기능
쿠버네티스는 이전 버전을 통해 역할 기반 접근 통제(RBAC, Role-Based Access Control)를 베타 기능으로 선보여왔다. RBAC를 통해 관리자는 팟(pod), 시크릿(secret) 등의 쿠버네티스 자원에 대한 접근 허용권을 정의할 수 있으며, 더불어 그 권한을 개별 혹은 복수 사용자에게 부여할 수 있다.

허용은 대상의 변경을 위해(‘생성', ‘업데이트', ‘패치'), 혹은 대상에 대한 정보 획득만을 위해(‘획득', ‘목록화', ‘검토') 이뤄질 수 있다. 역할의 적용은 두 별개의 API를 통해 단일 네임공간(namespace) 또는 특정 클러스터 전체에 적용할 수 있다.

그간 쿠버네티스의 네트워킹 정책 시스템이 팟에 대한 진입 트래픽만을 필터링할 수 있던 데에서 나아가 쿠버네티스 1.8에서는 유출 트래픽에 대한 필터링의 베타 지원이 추가됐다. 단, 양방향 필터링 지원 대상은 일련의 종착 포트와 피어로 제한되고 있다. 비율 제한(rate limiting)과 같은 대상을 쿠버네티스의 인터페이스에서 이용하려면 앞으로도 시간이 더 필요할 것으로 보인다(물론, 커스텀 네트워킹 브릿지를 이용하는 컨테이너에서는 이 해당 작업을 바로 수행할 수 있다).

베타로 선보인 또 다른 네트워킹 기능은 각 쿠버네티스 로드 상에서 구동되는 에이전트 소프트웨어인 큐블릿(Kubelet)용 자동 TLS 인증 로테이션이 있다. 쿠버네티스 내부에서 사용되는 TLS 인증은 수명이 1년인데, 재생성 관련해서 많은 경우 간과되곤 했다. 하지만 이번 신기능을 통해 이제는 현 큐블릿용 인증서의 만료 시점에 자동으로 신규 인증서를 생성해 편의성을 높였다.

쿠버네티스 1.8 감사 기능
쿠버네티스 1.7의 알파 기능으로 처음 도입된 감사(audit) 기능은 1.8에서 베타(beta status)로 한 단계 업그레이드 됐다. 감사 로그에 대한 포맷팅은 물론 클러스터의 어떤 요소를 누가 로깅할 수 있는가에 대한 정책, 그리고 외부 서비스로 이벤트를 릴레이하는 웹훅 등이 추가됐다.

감사 기능을 베타로 한 단계 업그레이드 했다는 것은 감사 이벤트 포맷이 역 호환성 변경만 할 수 있음을 의미한다. 즉 쿠버네티스 개발자가 이 기능을 활용해 생산 기능(production functionality)을 빌드 할 수 있다. 예를 들어 감사 이벤트로부터 RBAC 프로파일을 생성하는 audit2rbac 툴이 대표적이다.

쿠버네티스 1.8의 워크로드 기능
일련의 워크로드 API 역시 쿠버네티스 1.8에서 베타로 승격된 또 다른 기능이다. 워크로드 API는 애플리케이션의 전반적 행동에 기반해 이들을 오케스트레이션하는 방법을 찾아낸다. 예를 들어 일괄 작업이나 크론 스타일 작업과 계속해서 진행되는 데몬(daemon) 작업 간 오케스트레이션을 가능케 하는 것이다. 

워크로드 API 중 일부는 다른 것보다 더 빨리 베타에서 업그레이드 될 것으로 보인다. 디플로이먼트(Deployment), 데몬셋(DaemonSet), 레플리카셋(ReplicaSet), 그리고 스테이트풀셋(StatefulSet) 네 API는 쿠버네티스 1.9부터 풀 프로덕션(full production)으로 승격된다. 배치 API(잡과 크론잡)이 뒤를 따를 예정이지만, 쿠버네티스 1.8은 이들 API가 어떻게 작동해야 하는지에 대한 대략적인 방향을 개발자에게 제시할 것으로 보인다. 

일부 애플리케이션에서는 벌써 워크로드 API를 이용할 수 있지만, 어디까지나 잠정적인 이용이다. 예를 들어 아파치 스파크(Apache Spark)는 쿠버네티스에서 직접 구동되는 포크(fork)가 있지만 이러한 기능은 당분간은 스파크에서도, 쿠버네티스에서도 이용할 수 없다.

쿠버네티스 1.8의 기타 알파/베타 기능
이외에도 쿠버네티스 1.8에는 다음과 같은 알파, 베타 기능이 추가됐다.

- (베타) 크라이-컨테이너드(cri-containerd)는 사용자가 도커 데몬을 대신해 컨테이너드를 사용할 수 있도록 지원해 도커에 대한 직접 의존도를 낮춰준다.
- (알파) 볼륨 스냅샷은 쿠버네티스 API 콜을 사용해 쿠버네티스 볼륨의 스냅샷을 저장하는 기능이다. 다만 이 기능은 스냅샷 촬영 시점의 일관성을 보장하기 어려워 아직 정확한 생산 배포 일정이 확정되지 않았다.
- (알파) 볼륨 리사이징 기능은 쿠버네티스 API 콜을 이용해 볼륨 사이즈를 조정할 수 있다. 단, 볼륨 사이즈를 조정한다고 해서 볼륨상의 파일 시스템이 변하는 것은 아니며, 오직 기저의 볼륨 사이즈만 변한다는 것을 잊지 말자. 파일 시스템은 무엇이든 될 수 있기 때문이다. ciokr@idg.co.kr

X