본문 바로가기

프로그래밍/Docker

Hyper-V에 CoreOS 설치하기(2)

 

지난 글에서는 Windows 10에 Hyper-V를 설치한뒤 여기에 가상컴퓨터를 만들어 CoreOS Install ISO 파일이 로딩되어 설치 Prompt 화면까지 보았다. 이번엔 여기까지 진행된 상황에서 CoreOS를 설치하는 과정을 진행하도록 하자.

 

CoreOS는 ISO 파일을 다운로드 받아 설치를 진행하지만 그 설치 과정에서 인터넷을 접속하여 설치와 관련된 파일을 다운로드 받아 진행하게 된다. 그래서 CoreOS 설치 Prompt 화면에서 네트워크가 이루어지도록 설정해야 할 필요성이 있다. 먼저 이 부분에 대한 내용을 설명하도록 하겠다.

 

네트워크를 잡기 위해서는 먼저 현재 Network Interface의 이름을 알아둘 필요가 있다. 다음의 명령을 실행해보자

 

 

 

ip addr 이란 명령어를 내리면 현재 설치된 가상컴퓨터의 Network Interface의 이름을 알게 되는데 lo는 Loopback Adapter 이고 eth0가 가상컴퓨터에 설치된 물리적인 Network Adapter 이다. 이 eth0가 우리가 네트워크를 설정해야 할 Network Interface가 된다. 

 

이제 이렇게 Network Interface의 이름을 알면 vi 에디터를 이용해서 다음의 파일을 작성하도록 한다

 

sudo vi /etc/systemd/network/static.network

 

위의 명령어로 vi 에디터가 열리면 다음의 내용을 입력하도록 한다

 

[Match]
Name=eth0

[Network]
Address=192.168.137.100/24
Gateway=192.168.137.1
DNS=8.8.8.8

 

Address 항목은 CoreOS에 설정할 IP이다. Address 항목에 설정한 IP 끝에 /24를 넣어줌으로써 Subnet Mask가 255.255.255.0이 된다. 근데 여기 내용을 보면 익숙한 IP가 보인다. 바로 Gateway로 설정된 192.168.137.1 이다. 이게 무슨 IP인가하면 이전 글에서 우리가 내부 가상 스위치를 만들면서 해당 가상 스위치에 설정된 IP가 바로 192.168.137.1이다. 그래서 CoreOS가 사용할 IP를 Gateway로 설정된 192.168.137.1과 같은 IP 영역대인 192.168.137.100을 설정함으로써 네트워크 통신이 이루어지도록 한다. 그리고 이 가상 스위치가 Windows 네트워크 어댑터와 통신을 하면서 인터넷 공유가 설정된 Windows 네트워크 어댑터를 통해 인터넷이 되도록 하는 것이다. 여기서는 CoreOS에 설정할 IP로 192.168.137.100을 사용했을뿐이지 반드시 이렇게 하라는 것이 아니다. 가상 스위치 IP인 192.168.137.1을 제외한 나머지 192.168.137.X IP이면 사용이 가능하다.

 

이렇게 static.network 파일을 만들면 다음의 명령을 이용해서 Network를 재시작 한다.

 

sudo systemctl restart systemd-networkd

 

이렇게 한 뒤에 ping을 이용해서 Window Host IP로 응답이 오는지 확인하고 위에서 DNS로 설정했던 8.8.8.8로도 응답이 오는지 확인한다. 8.8.8.8로 ping 명령을 내려서 응답이 오면 외부 인터넷과의 연결이 된다는 것을 의미한다(응답이 안올경우는 이 글의 마지막에 있는 주의사항을 보고 조치를 취하길 바란다).

 

ping을 통해 응답을 확인했으면 이제는 설치된 뒤의 계정을 만들 차례다. 다음과 같은 작업을 진행한다.

 

 

여기서 내릴 명령어는 sudo openssl passwd -1 > cloud-config.yaml 이다. 이 명령어 라인을 입력받으면 Password: 라고 나오면서 비밀번호를 요구하게 되는데 이때 비밀번호를 입력하고 Verifying - Password: 라고 나왔을때 위에서 입력한 비밀번호를 다시 한번 입력한다. 이런 과정을 거치면 vi나 cat을 이용해서 cloud-config.yaml 파일을 열어보았을때 입력한 비밀번호가 아닌 비밀번호를 암호화한 문자열이 나타난다.

 

이제 이렇게 만들어진 cloud-config.yaml을 편집할 차례이다. 다음의 명령어를 이용해서 cloud-config.yaml을 편집하자

 

sudo vi cloud-config.yaml

 

이 명령어를 실행하면 위에서 설명했다시피 입력한 패스워드가 암호화 된 문자열 한 줄만 있는 문서로 보이는데 이것을 다음과 같이 편집하도록 한다

 

#cloud-config
hostname: "coreos"
users:
- name: "terry"
  passwd: "$1$JAj어쩌구저쩌구..암호화된 문자열"
  groups:
    - "sudo"
    - "docker"

 

첫번째 줄은 #cloud-config로 입력한다. hostname은 CoreOS가 설치된 뒤의 hostname을 정하는 것으로 원하는 이름을 지정해주면 된다. name 항목은 계정명을 정하는 것으로 여기서는 terry로 사용했으며 passwd 항목에 위에서 만든 암호회된 문자열이 들어가게끔 한다. 애초에 이 파일을 열면 암호화된 문자열이 보이기 때문에 이 암호화된 문자열이 passwd: 뒤에 오게끔 문서를 편집하면 된다. groups 항목은 계정이 속할 group을 정하는 것으로 sudo와 docker를 지정하도록 한다(이 파일을 편집하기 전에 이 글의 마지막에 있는 주의사항을 읽기를 바란다).

 

이렇게 문서 편집을 마치면 다음의 명령을 이용해서 본격적으로 설치를 진행하도록 한다

 

sudo coreos-install -d /dev/sda -C stable -c cloud-config.yaml

 

이러면 Install 과정을 거쳐서 성공했다고 하는 메시지를 볼 수 있게 된다. 그런 메시지가 나오면 현재 보고 있는 가상컴퓨터 윈도우의 메뉴에서 미디어 -> DVD 드라이브->coreos_...꺼내기 메뉴를 선택하여 가상컴퓨터를 만들때 설정했던 CoreOS ISO 파일을 꺼내는 작업을 한 뒤에 다음의 명령을 내려서 재부팅이 되도록 한다.

 

sudo reboot

 

이렇게 재부팅을 하면 CoreOS 로그인 화면이 나오는데 그때 cloud-config.yaml을 만들때 사용했던 계정 이름과 비밀번호를 사용해서 로그인하면 된다.

 

지금까지 Windows Hyper-V에서 CoreOS를 설치하는 과정에 대해 설명했다. 마지막으로 CoreOS를 설치하면서 부딪쳤던 난관에 대해 정리한 주의사항을 정리하는 것으로 이 글을 마치도록 하겠다.

 

 

 

1. 위에서도 언급했다시피 CoreOS는 설치할때 인터넷이 되도록 설정되어 있어야 한다. 그래서 인터넷 연결이 되는지 확인해야 하는데 이때 사용하는 방법이 DNS 서버로 설정된 IP로 ping을 실행해서 응답이 오는지 확인하는 방법이다(DNS 서버로 통신이 되면 IP가 아닌 도메인으로 접속을 시도하는 것도 가능해지기 때문이다. 실제로 CoreOS는 설치시 자료를 받을때 도메인을 사용해서 자료를 받는다) 근데 ping을 실행해보면 응답이 안되는 경우가 많은데 이럴 경우 체크해야 할 부분이 방화벽이다. 방화벽에서 Hyper-V가 외부와 통신을 하는 것을 막는 경우가 있기 때문에 이런 부분에 대한 체크를 해야한다. 방화벽은 워낙 많은 프로그램이 있어서 여기서는 언급하기는 어려움을 양해해주기 바란다.

 

2. 무료로 배포되는 바이러스 백신의 경우엔 방화벽을 제공하지 않지만 상용으로 배포되는 바이러스 백신의 경우는 방화벽을 같이 배포하고 있다. 그런데 이렇게 상용으로 배포되는 방화벽의 기능을 끌 경우 컴퓨터에 방화벽이 아주 없어지는 것이 아니다. 상용으로 배포되는 방화벽 기능을 끄게 되면 자동으로 Windows 에서 제공하는 방화벽이 올라가기 때문에 상용으로 배포되는 방화벽 기능을 껐다고 해서 방화벽이 없다고 판단하면 안된다. 테스트를 하기 위해 상용으로 배포되는 방화벽을 껐다면 제어판에 들어가 Windows에서 제공하는 방화벽 기능이 현재 올라와 있는지 살펴보고 이것도 꺼야 방화벽 기능이 꺼졌다고 말할 수 있다.

 

3. 설치과정에서 네트워크 환경을 잡은것은 어디까지나 설치하기 위한 네트워크를 잡은 것이지 설치가 끝난 뒤의 네트워크 환경이 이루어지는 것은 아니다. 위에서 우리가 IP와 Gateway와 DNS를 잡았지만 그것은 어디까지나 설치하는 동안에 사용되는 것이지 설치가 된 뒤에 CoreOS가 우리가 설정한 내용으로 IP와 Gateway와 DNS가 설정되는 것은 아니라는 뜻이다. 설치가 된 뒤의 CoreOS의 네트워크 세팅은 아무것도 되어 있지가 않다. 그렇기땜에 설치가 된 뒤에 다시 위에서 진행했던 네트워크 셋팅 과정을 다시 한번 거쳐서 설치된 뒤의 CoreOS 네트워크 설정을 하도록 하자.

 

4. 설치가 다 마쳐서 인터넷이 되는것까지도 확인했는데도, 컴퓨터를 재부팅하면 CoreOS가 인터넷이 안되는 상황이 벌어진다. 네트워크 설정을 건드린것도 없었는데 안되어서 답답했었다. 가상 스위치도 ping이 되고 Windows Host ip로도 ping이 되는데 인터넷이 되질 않았다. 근데 이유를 보니 컴퓨터를 재부팅하면 이전 글에서 설명했던 Windows 네트워크 어댑터 공유 설정에서 원인이 있었다. 공유 설정이 되어 있는데도 재부팅을 하면 공유가 되지 않아서 인터넷이 안되는 그런 상황이 벌어졌다. 그래서 이럴 경우엔 공유 설정을 풀어서 확인 버튼을 클릭하며 공유 해제작업을 마친뒤 다시 공유 설정을 해서 확인 버튼을 클릭하면 정상적으로 동작한다. 이것은 비단 재부팅하는 상황뿐만이 아니라 위에서 설명했던 1,2번에서도 이 과정을 해봐야 한다. 이걸 해서 풀리는 경우도 있었다. 또한 컴퓨터에 전원을 넣고 켠 시점에서도 이 상황이 발생하기 때문에 전원을 켜서 부팅이 완료되면 공유 설정작업을 다시 진행해줘야 한다. 개인적으로 이 상황땜에 가상 컴퓨터를 몇번을 지우고 깔았는지 모를 정도로 가장 풀기 힘들었던 상황이었다.

 

5. cloud-config.yaml 파일을 만들때 users 항목의 name 항목을 통해 계정 이름을 정하게 되는데 이때 계정 이름으로 docker를 사용하면 안된다. 원래 CoreOS를 설치했던 가장 큰 이유는 docker 때문인지라 알기 쉽게 할려고 계정 이름과 패스워드를 docker로 했는데 설치는 이루어졌지만 설치된 뒤에 로그인 시 cloud-config.yaml 파일에 설정한 docker 계정과 해당 패스워드로 로그인을 할 수 없다. 이유는 CoreOS는 배포본 안에 docker 란 계정이 이미 존재하고 있어서 이와 같은 문제가 발생한 것이었다. 그래서 계정 이름으로 docker를 사용하면 안된다.

 

6. Hyper-V를 통해서 CoreOS 가상 컴퓨터를 시작한뒤 접속하면 화면에서 의미를 알 수 없는 문구들이 중간중간 나타나서 작업할때 불편한 것이 있다. 그래서 Hyper-V로는 CoreOS 가상 컴퓨터를 시작만 하고 접속은 putty를 이용해서 해당 가상 컴퓨터에 접속하면 편하다. 이때 프로토콜은 ssh를 사용하고 ip는 네트워크 설정과정에서 지정한 가상컴퓨터 ip를 사용하면 된다. 물론 포트번호는 ssh를 사용하기 때문에 22번을 사용한다

 

 

참고사이트 : Docker를 위한 CoreOS - Install