References
원문 : https://github.com/patrickhoefler/coreos-vagrant-kubernetes/blob/master/Vagrantfile
이 글은 원문의 내용을 기준으로 여러 가지를 테스트하면서 나름대로 정리한 내용으로 Vagrant를 사용해서 CoreOS, CoreOS Cluster, Kubernetes 까지 설정하는 방법을 로컬 머신에서 설정해 보는 것을 정리하도록 한다.
기본 설치
작업에 필요한 바이너리와 프로젝트등은 모두 GitHub를 통해서 얻게 되므로 로컬 머신에
Git 가 설치되어 있어야 하며 아래의 모든 명령들은 Git Bash 를 기준으로 한 것이다.
필요 도구 설치
로컬 머신에 단일 CoreOS 를 구성하는 작업을 먼저 진행하기 위해서는 다음과 같은 도구의 설치가 필요하다.
Vagrant를 사용해서 CoreOS 설치를 하기 위한 프로젝트를 복제한다.
$ git clone https://github.com/patrickhoefler/coreos-vagrant-kubernetes
$ cd coreos-vagrant-kubernetes
VM에 CoreOS 구성
VM을 구성하는데는 아래와 같이 2 가지 프로바이더가 존재한다. Vagrant의 내부 처리 명령도 프로바이더에 따라 다르기 때문에 사용할 툴에 따라서 프로바이더 정보를 설정해야 한다. 기본으로 VirtualBox 프로바이더를 사용한다.
아래와 같이
vagrant up
명령이 실행되면 CoreOS 이미지를 다운로드하고 VM에 Guest OS로 설치를 진행한다. 이미 구성된 경우라면 VM을 실행시키는 명령을 처리한다.
Notes
더 다양하게 CoreOS 이미지에 대한 채널 (Alpha, Beta, Stable) 을 설정하거나, SSH 구성 정보나, VM의 갯수 및 메모리 크기를 변경하려면 Vagrant에서 제공하는 config.rb.sample (config.rb 로 이름 변경 필요), user-data.sample (user-data 로 이름 변경 필요) 파일의 내용을 수정해서 사용하면 된다.
다운로드한 coreos-vagrant-kubernetes 폴더의 README.md 를 참고하면 된다.
VirtualBox Provider 사용
$ vagrant up
VMWare Provider 사용
VMWare는 상용 툴이기 때문에 프로바이더를 사용하기 위해서는 Hashicorp 구매를 해야한다. VMWare Player라는 프리 툴도 제공이 되지만 이에 대한 프로바이더는 현재 없는 것으로 보인다. (아마도 상용 프로바이더를 구매하면 같이 사용할 수 있을지 모른다)
$ vagrant up --provider vmware_fusion
CoreOS 연결
Vagrant를 사용해서 VM을 구성할 때 기본 설정된 SSH를 사용한다. 기본 생성되 사용자는
core
이고 비밀번호는 미 설정된 상태다.
$ vagrant ssh
CoreOS 에 대한 내용은
“Using CoreOS”를 참고하도록 한다.
동기 폴더 (Synced_folder) 설정
Vagrant 동작에 필요한 정보는
coreos-vagrant
폴더에 존재하는
Vagrantfile
파일의 내용을 사용한다. 따라서 공유 폴더 설정을 하는 부분이 주석처리 되어 있는데 이 부분에 주석을 제거해 주면 된다.
...
config.vm.synced_folder ".", "/home/core/share", id: "core", :nfs => true, :mount_options => ['nolock,vers=3,udp']
...
Notes
만일 Host OS 가 Windows 라면 위의 공유 폴더는 제대로 마운트되지 않는 오류가 발생한다. 이 경우에는 다음과 같이 설정을 해 주어야 한다.
config.vm.synced_folder ".", "/vagrant", type: "smb"
위의 같이 설정을 하고 아래 명령을 수행하면 공유 폴더 처리를 위한 HOST OS의 사용자 계정을 물어보게 된다.
$ vagrant reload
물론 이 파일을 미리 변경해 놓고
vargrant up
을 실행하면 VM 구성을 하는 단계에서 HOST OS의 사용자 계정을 물어보게 된다.
Notes
이미 vagrant를 이용해서 VM을 구성한 적이 있다면 vargrant up
명령을 통해서 VM을 생성할 때 생성은 되지만 SSH로 접속을 하지 못하고 connection refuse
오류가 계속 발생하게 된다.
이 때는 Vagrantfile
에서 아래와 같이 ip 구성 정보를 변경해 주면 된다.
ip = "172.17.8.#{i+100}" << 이 부분의 IP 구성을 기존과 다르게 변경해 주면 된다.
user-data 사용
Vagrant 는
coreos-cloudinit 을 사용해서 VM을 구성한다. 이 때 작업이 진행되는 폴더에
user-data
라는 파일이 존재하면 그 파일에 존재하는
cloud-config
설정 정보를 사용한다.
이를 활용하려면 기본 제공되는
user-data.sample
파일의 이름을
user-data
로 변경해서 사용하면 된다. 더 자세한 내용은
“coreos-cloudinit” 문서를 참고하면 된다.
Notes
이 파일은 yaml
포맷을 따르고 있다. 따라서 일반 에디터에서 사용하면 포맷 문제로 제대로 구동되지 않을 수 있으므로 조심해야 한다. 작성한 파일이 포맷이 맞는지를 확인하기 위해서는 여기서 검사를 해 보면 된다. 예를 들어 Tab 문자등이 존재하면 포맷 오류로 제대로 동작하지 않는 문제가 생긴다.
설정 정보
Vagrantfile 은 CoreOS 클러스터를 구성할 때 여러 가지 옵션을 지정할 수 있다. 예를 들어 VM 의 갯수나 VM의 메모리 사이즈 등이다. 이 정보도 작업이 진행되는 폴더에
config.rb
파일이 존재하면 그 파일에 존재하는 옵션들을 사용한다.
클러스터 설치
위에서 단일 VM 구성을 테스트 해 보았으므로 이제는 클러스터를 구성해 보도록 한다. 생성해서 테스트를 했던 VM을 제거하는 방법은 아래와 같다.
$ vagrant halt
$ vagrant destroy
클러스터를 구성할 VM 갯수는 위에서 언급한 것과 같이
config.rb
파일에서
$num_instances
에 값을 지정하면 된다.
클러스터를 구성할 때 가장 중요한 부분은 각 구성 VM 들이 동일한 클러스터의 멤버로 식별되기 위한 정보를 가져야 한다는 것이고 이를 위해서
etcd
를 사용한다. 새로운 클러스터를 구성할 때 마다 토큰을 생성해서 지정해 주어야 한다.
토큰 생성은 아래의 명령을 통해서 발급 받는다.
$ curl https://discovery.etcd.io/new
https://discovery.etcd.io/f3c1fd3c9d31746f6f194927e152fbce
위의 명령을 실행하면 새로운 토큰 값을 가진 클러스터 Discovery URL을 받게 된다. 이 URL을
user-data
파일의
discovery
부분의 주석을 제거하고 복사해 넣으면 된다.
#discovery: https://discovery.etcd.io/<token> 를 주석 제거해서 아래와 같이 구성한다.
discovery: https://discovery.etcd.io/f3c1fd3c9d31746f6f194927e152fbce
이제 클러스터 구성을 위한 정보 설정 (config.rb 와 user-data) 이 되었으므로
vagrant up
을 실행해서 클러스터를 구성하도록 한다.
Notes
만일 토큰을 사용해서 vagrant up
을 하다가 오류가 발생했다면 토큰을 재 사용할 수는 없다. 물론 다시 사용한다고 해서 오류가 발생하는 것은 아니지만 클러스터 구성이 제대로 되지 않는다. 따라서 항상 클러스를 생성 또는 재 구성할 경우는 반드시 새로운 토큰을 만들어서 사용해야 한다.
이렇게 해야 하는 이유는 클러스터 구성 멤버들 (VM들) 정보가 토큰 관리 사이트에 저장되기 때문에 정보가 꼬여서 제대로 동작하지 않기 때문이다.
Kubernetes 설치
vagrant를 이용해서 클러스터를 구성할 때
Kubernetes를 같이 설정할 수 있다.
아래와 같이 Kubernetes 설치를 위한 정보를
config.rb
파일에 설정해 주면 된다.
...
$kubernetes=true
...
그러나 Kubernetes는 하나의 마스터 서버 (Master) 와 여러 개의 미니언 서버 (Minion) 로 구성된다. 따라서 클러스터 구성 정보 파일인
user-data.master.sample
파일을
user-data.master
로
user-data.minion.sample
파일을
user-data.minion
파일로 이름을 변경하도록 한다.
이제 다시
vagrant reload
또는
vargrant halt
후에
vagrant up
을 실행해 주면 VM이 올라오면서 구성이 된다. 물론 Cluster를 구성할 때부터 설정을 미리 해 놓고 한번에 처리하는 것도 가능하다.
여기서 주의할 점은 구성되는 IP를
user-data.master
와
user-data.minion
에서 사용하므로 해당 파일들에 고정되어 있는 IP를 조정해 현재 환경에 맞도록 변경해 주어야 한다. (기본 값은 172.17.8.101를 마스터 서버 IP로 바라보게 되어 있다)
CoreOS 버전 교체
CoreOS 는 현재 수시로 버전이 갱신되고 있으므로 구성한 이후에도 CoreOS 버전이 변경되어 배포되는 상태가 된다. 이때 기존 구성한 CoreOS를 새로운 버전으로 변경할 경우는 아래와 같이 처리를 하면 된다. 이렇게 설정해 놓으면 다음
vagrant up
될 때 새로운 버전의 CoreOS로 변경된다.
$ vagrant box remove coreos-alpha --provider vmware_fusion
$ vagrant box remove coreos-alpha --provider virtualbox
Notes
CoreOS Box를 제거하지 않고 갱신할 경우는 vagrant box update
를 실행하면 된다. 그러면 최신버전이 다운로드 되고 2개의 버전이 존재하게 되므로 위의 제거 명령을 처리할 때 제거할 버전 정보를 제공해 주어야 한다. --box-version 554.0.0
HOST OS 에서 VM의 Docker 실행
config.rb
파일에서
$expose_docker_tcp
설정을 해서 현재 HOST OS의 TCP 포트를 각 VM 상의 CoreOS 에 존재하는 Docker를 실행할 수 있도록 포트 포워딩 처리를 할 수 있다. 첫 번째 서버를 기준으로 포트를 지정하고, 나머지 서버들은 지정한 포트 + 1 씩 증가하도록 설정한다. (기본 포트는 2375로 되어 있으므로 2375, 2376, 2377 로 처리된다) 좀 더 자세한 내용는 “Enable Remote API Instructions” 를 참고하도록 한다.
실제 HOST OS 에서는 아래와 같이 설정해 놓고 Docker Command를 실행할 수 있다.
$ export DOCKER_HOST=tcp://localhost:2375
이 부분은 향후 Docker 활용을 하는 시점에 다시 정리를 해 보도록 한다.
Written by Morris (MSFL)
댓글
댓글 쓰기