서버 코어보다 더 작은 Windows Server, 나노 서버(Nano Server)

보다 많은 리소스를 서비스 대상에 할당하기 위한 운영 체제의 다이어트 열풍은 Windows Server에도 예외는 아닙니다. Windows Server 2008에서 GUI를 제거한 서버 코어(Server Core) 버전이 등장하였고, 이 서버 코어 버전을 활용하여 Hyper-V와 같은 무언가를 서비스해야 하는 기반 운영 체제에서 SQL Server 2016을 서버 코어에 설치할 수 있는 형태까지 발전하였습니다.

image

Windows Server 2012에서는 GUI와 서버 코어 사이에 연결 고리를 Minimum Shell (MinShell) 형태로 만들어서, 관리자가 필요할 경우, GUI 관련 구성 요소를 추가적으로 설치하고, 필요하지 않을 경우엔 제거할 수 있는 형태까지 발전하였죠.

image

Windows Server 2016에서는 서버 코어보다 훨씬(!) 더 적은 용량을 가지면서도, 강력한 서버 운영 체제의 기반을 만들기 위해, 기존 Windows Server의 명맥을 유지하면서, 완전히 새로운 운영 체제를 개발하고 있습니다. 바로 Nano Server (나노 서버)가 여기에 해당됩니다. 잘 아시다시피, Microsoft는 Microsoft Azure라는 공용 클라우드를 서비스하고 있습니다. Microsoft Azure에는 백만대 이상의 물리적인 서버들이 서비스를 제공하고 있는데, 물리적인 서버의 운영 체제 크기가 영향을 줄 수 있는 부분은 여러 곳이 있습니다. 우선 여러 구성 요소들이 엮일수록, 패치가 나올 확률이 높게 됩니다. 더불어, 해당 패치를 설치하였을 때, 리부팅을 할 확률 역시 높아지게 되죠. 서버 코어가 나오면서, GUI 버전보다 패치의 숫자와 이로 인한 다시 시작 빈도는 낮아졌지만, 더 높은 수준의 요구 사항이 Microsoft Azure에서 나타났던 것입니다. 또한 기반 운영 체제의 용량은 물리적인 서버내 운영 체제를 설치할 때, 소요되는 시간, 그리고 이를 설치하기 위해 네트워크로 전송하는 대역폭에 대한 요구 사항도 필요하게 됩니다.

image

최근 릴리즈된 Windows Server 2016 Technical Preview 4를 기준으로, GPT를 사용하는 형태의 VHDX 파일을 생성하였을 때, GUI 버전은 대략 9GB, 코어 버전은 6.5GB 정도를 차지합니다.

나노 서버는 지금까지의 서버 코어와 GUI 버전과의 설치 연결 고리를 가지지는 않습니다. 별도의 Windows Server 형태로 설치가 진행되게 되며, 이를 서버 코어나 GUI 버전으로 변경할수는 없습니다.

image

Windows Server 2016 설치 미디어를 열어보면, NanoServer라는 폴더가 있습니다. 해당 폴더에서 나노 서버의 이야기는 시작됩니다.

image

NanoServer.wim 파일이 바로 나노 서버의 설치 관련 파일입니다. 용량이 놀랍지 않나요? 약 130MB 정도밖에 되지 않습니다. 130MB 정도의 설치 파일이 Windows Server를 제공할 수 있다니… 도대체 어떠한 형태인지에 대해서 많이들 여쭤보십니다. 기본적으로 NanoServer.wim에는 Windows 관련 드라이버조차 포함되어 있지 않습니다. Windows Server가 제공하는 역할 및 기능 역시, 파일 형태로 포함하고 있지 않습니다. 말 그대로 Windows Server의 코어중 코어만을 집적해놓은 것입니다.

image

Packages 폴더에 들어가보면, 현재 Windows Server 2016 Technical Preview 4에서 사용할 수 있는 나노 서버의 용도를 알 수 있습니다. Compute는 Hyper-V이며, Containers는 곧 업데이트된 내용으로 다시 포스팅할 Windows Container (Docker)입니다. 관련된 패키지에 대한 정리는 TechNet 페이지에서 볼 수 있습니다.

앞서 언급한 바와 같이 나노 서버에는 기본적인 하드웨어 드라이버조차도 포함되어 있지 않습니다. 본인의 하드웨어에 적절한 드라이버를 WIM 파일내, 혹은 VHD/VHDX 파일내에 추가시켜줘야 합니다. Windows Server 서버 코어 버전에 포함된 형태의 드라이버 셋트와 동일한 형태의 드라이버를 나노 서버에 추가하려면, 패키지중 OEM-Drivers 패키지 파일을 추가하면 됩니다. 또한 나노 서버를 Hyper-V 기반에서 사용하려면, Guest 패키지가 이에 해당됩니다. 잠시 후 살펴볼, 이미지 제작에서 해당 패키지를 손쉽게 나노 서버 이미지에 넣는 방법을 살펴볼 것입니다.

Windows Server 2016 Technical Preview 3에서는 이번 Technical Preview 4보다 나노 서버에서 활용할 수 있는 패키지가 적었습니다. 이 의미는 차후 정식 버전의 Windows Server 2016내 나노 서버는 더 많은 역할을 제공할 것임을 알 수 있게 합니다. 기존 Technical Preview 3에서는 Windows Container의 호스트로 나노 서버를 사용할 수 없었지만, 이번 버전에는 드디어 제공하며, Nested Virtualization 기술과 결합하면, Hyper-V Container까지 이용할 수 있습니다.

자.. 이제 나노 서버를 이용할 수 있는 형태의 이미지로 제작해봐야겠죠. 앞서 언급한 바와 같이, 물리적인 서버에 나노 서버를 설치할 수도 있고(WIM 파일을 직접 하드 디스크에 풀어주는 형태), 아니면 VHDX 파일 형태로 제작하여, Hyper-V에서 가상 컴퓨터(VM) 형태로 사용하는 것입니다. 우선 VM 형태로 사용하기 위해 VHDX 파일을 제작하는 것을 살펴보죠.

Windows Server 2016 Technical Preview 4 설치 미디어내 NanoServer 폴더에 보면, NanoServerImageGenerator.psm1 파일이 존재합니다. 해당 모듈을 가져오기(Import)하여, Windows PowerShell에서 손쉽게 이미지를 제작할 수 있게 합니다. 제 경우에는 해당 폴더를 서버내 디스크로 복사한 후, 가져오기를 진행하였습니다.

image

감이 올 것입니다. New-NanoServerImage Cmdlet을 이용해서, Hyper-V 가상 컴퓨터용 나노 서버 이미지를 생성하는 것입니다. New-NanoServerImage Cmdlet의 자세한 사용법은 관련 링크를 활용하시면 됩니다.

image

New-NanoServerImage의 옵션 중 MediaPath는 Windows Server 2016 원본 미디어의 위치입니다. 예제에서는 F:\가 여기에 해당됩니다. BasePath의 경우는 나노 서버의 WIM과 관련 패키지를 복사할 폴더를 의미하며, TargetPath는 결과로 생성될 이미지의 위치 및 이름입니다. 여기서 중요한 것은 VHD로 파일 확장자를 지정하면 1세대(MBR 기반)의 VHD 파일이 생성되며, VHDX로 지정하면 2세대(GPT 기반)의 VHDX 파일이 생성됩니다.

Compute 옵션을 붙이면, Hyper-V가 설치되고, Containers 옵션을 사용하면 Container Host 관련 패키지가 설치됩니다. Storage는 파일 서버와 관련된, Clustering은 장애 조치 클러스터에 해당됩니다.

New-NanoServerImage Cmdlet에 ? 옵션을 붙여서 모든 옵션들을 다 뽑아내면, 아래와 그림과 같습니다.

image

제가 예제에서 사용한 EnableRemoteManagementPort 옵션은 Windows Remote Management(WinRM)을 이용하여 나노 서버에 다른 서브넷에서도 접근할 수 있도록 5985 포트를 방화벽에서 설정하라는 의미입니다. Windows Server 2016 Technical Preview 3의 나노 서버는 이미지 구성시, IP 주소와 같은 기본적인 설정조차, 이미지 생성시 고려해야 했지만, Windows Server 2016 Technical Preview 4부터는 기본 부팅 화면에서 IP 주소와 방화벽 설정은 구성이 가능하게 편의성을 높혔습니다.

image

New-NanoServerImage Cmdlet에서 가장 중요한 한가지가 있습니다. 사용하는 Windows의 언어에 따라서, 관련 패키지 언어를 사용하게 되어 있기에, 이미지를 제작하는 운영 체제가 한글판인 경우, 한글판 Windows Server 2016 이미지를 사용하면, 아무 문제가 없습니다만, 영문판 이미지를 사용할 경우에는 Language 옵션과 en-us를 붙여줘야 합니다. 반대의 경우도 동일합니다. Hyper-V용 드라이버만을 포함하여, 2세대 VM 이미지를 제작해보면, 아래와 같은 결과를 얻게 됩니다. 이미지 제작시 관리자 암호를 입력하게 됩니다.

image

이를 MB로 환산해보니, 644MB밖에 되지 않는군요. 서버 코어가 6.5GB 정도였으니, 1/10 수준입니다.

image

이제 해당 VHDX 파일을 적절한 폴더로 복사하여, Hyper-V의 VM으로 동작시켜봅니다. 아주 심플한 형태의 로그온 창이 나타납니다. 이미지 제작시 지정한 암호를 Administrator 계정과 함께 입력합니다. 로컬 로그온이므로, Domain 항목은 비워놓아도 됩니다.

image

로그온은 마치면, 텍스트 기반의 기본 콘솔이 나타납니다. 여기서, IP 주소와 방화벽 설정은 변경할 수 있습니다.

image

이제 어떻게 해야 하는지가 참 고민이 되실 것입니다. Smile 나노 서버의 경우에는 모든 관리는 원격에서 PowerShell 형태의 관리나, 차후 출시될 Microsoft Azure Stack을 통해 웹 기반으로 관리하게 될 예정입니다. (사실 Microsoft Azure Stack의 경우에도 내부적으론 WS-Management를 활용한 원격 PowerShell과 동일합니다.)

도메인 환경이 아니기에, 우선 세션을 연결하기 위한 계정 정보를 입력받아야 합니다. $Cred = Get-Credential “IP 주소\Administrator”라고 입력합니다.

image

암호를 입력하면, $Cred 변수에 계정 정보가 저장되게 됩니다. 이를 이용해서 세션을 연결해보죠. 이때, Enter-PSSession Cmdlet을 활용합니다.

image

image

프롬프트에 IP 주소가 추가되었습니다. 해당 서버에 원격으로 연결되었다는 의미입니다. 이제는 PowerShell Cmdlet으로 시스템들에 대한 설정을 할 수 있습니다. 이미지 제작시 컴퓨터 이름을 입력하지 않았거나, 이름을 변경할 경우, Rename-Computer Cmdlet을 이용합니다. 기본적으로 동작하는 프로세스의 목록을 살펴보면..

image

22개밖에 되지 않습니다. Windows Server 2016 서버 코어 버전은 28개, GUI 버전은 46개의 프로세스가 기본 동작합니다.

image

동일하게 2GB씩 메모리를 할당한 VM에서 사용 가능한 물리 메모리의 크기는 나노 서버가 1894888, 서버 코어가 1589228, GUI 버전이 1135208입니다. 메모리에 대한 사용량도 매우 적죠.

image

나노 서버에서 살펴볼 내용은 매우 많지만, 오늘의 기본적인 나노 서버 이야기는 도메인에 나노 서버를 가입시키는 것으로 끝낼까 합니다. GUI 라면 매우 손쉽게 진행할 수 있는 도메인 가입이 나노 서버에서는 도통 감이 안잡히실거라 생각합니다. Offline Domain Join (ODJ)를 활용해야 합니다. ODJ에 대한 자세한 설명은 여기를 살펴보시면 됩니다. 도메인에 가입된 서버 코어나 GUI 버전의 Windows Server에서 명령 프롬프트를 열고, djoin /provision /domain “KOALRA.COM” /machine “KOALRA-NANO-01” /savefile C:\ODJ\KOALRA-NANO-01 이라고 입력합니다. 도메인 이름과 컴퓨터 이름은 본인이 사용하는 이름을 입력하시면 됩니다.

image

C:\ODJ에 도메인 가입을 위한 BLOB이 생성되었습니다. 이 다음 난관은 이 파일을 어떻게 나노 서버 안으로 복사하느냐는 것입니다. 이때 Windows Server 2016의 개선 사항이 또다시 빛을 냅니다. Smile 

image

Copy-Item Cmdlet이 ToSession, FromSession이라는 옵션이 추가되어, 세션내로 복사가 가능해졌습니다. 반대로도 파일을 가져나올 수도 있고.. 위의 그림을 살펴보시면, 매우 쉽게 이해되실 것입니다. 나노 서버로 세션을 연결하여, djoin /requestodj /loadfile “BLOB 파일” /windowspath “Windows 경로” /localos라고 입력합니다. 그리고 Shutdown /r /t 5 명령어를 이용하여 다시 시작을 시킵니다.

image

다시 시작이 완료되면, 도메인 계정으로 로그온할 수 있습니다. 서버의 표준 시간대는 tzutil 명령어로 수정할 수 있습니다.

나노 서버는 기존의 Windows Server의 모든 모습을 다 호환할 수는 없을 것입니다. 그렇지만, 최대한 하위 호환성을 가지기 위해서 노력하고 있습니다. 패키지 중 ReverseForwarders 패키지가 이를 반증하고 있습니다.

image

나노 서버는 매우 최적화된 형태로 서비스에 보다 많은 자원을 할당해야 하는 클라우드 기반 운영 체제에 목적을 가지고 있으며, 기존 서버 코어는 Windows Server GUI 버전과의 호환성 및 기존 응용 프로그램과의 연관성을 방향으로 가지고 있습니다.

조금 길었지만, 어떠신가요? 새로운 Windows Server의 세계가 느껴지시는가요? 앞으로 출시까진 시간이 남았지만, Windows Server 2016의 향상은 계속될 것이며, 여기 중심에 나노 서버가 있을 것이라고 생각합니다.