이번 달에 저희는 매우 흥미로운 Canonical과의 파트너십을 발표했습니다. Canonical은 Ubuntu의 제작사입니다. 무엇보다도 이번 파트너십의 핵심 요소는 CloudSigma 클라우드와 Ubuntu 간의 완전한 CloudInit 지원 도입입니다.
CloudInit 소개
CloudInit에 익숙하지 않으시다면, 이는 클라우드 서버 부트스트랩을 위한 업계 표준입니다. 명확히 하자면, 만약 여러분이 간단한 DSL 을 사용 중이시라면 첫 부팅 시 작업을 쉽게 수행할 수 있습니다. 또한 CloudInit이 Ubuntu에만 국한되지 않는다는 점도 짚고 넘어갈 가치가 있습니다. 오늘날 대부분의 최신 Linux 배포판에서 CloudInit 지원을 찾을 수 있습니다 (단, 지원되는 클라우드는 다를 수 있습니다).
CloudInit을 시작하기 전에, CloudInit이 프로비저닝 생태계에서 어디에 위치하는지 이해하는 것이 중요합니다. CloudInit을 독립형 프로비저닝 시스템으로 실행할 수도 있지만, Ansible, Chef, Puppet 또는 Salt와 같은 다른 프로비저닝 시스템과 함께 사용하는 것이 훨씬 더 일반적입니다. 이 경우, 프로비저닝 시스템이 제어권을 넘겨받을 수 있는 상태로 새 서버를 전환하기 위해 CloudInit을 사용하기만 하면 됩니다. 개인적으로 저는 종종 CloudInit을 Ansible과 결합하여 사용합니다.
CloudSigma에서 CloudInit 사용하기
CloudSigma에서 CloudInit을 사용하는 것은 매우 간단합니다.
Ubuntu 14.04 서버에서 CloudInit을 사용하려면 다음 단계를 수행하십시오:
-
- 드라이브 복제 마켓플레이스에서 “Ubuntu 14.04 Cloud Image”를 복제합니다 (현재 CloudInit을 완전히 지원하는 유일한 드라이브입니다). 복제된 드라이브의 크기를 원하는 크기로 조정해야 첫 부팅 시 파일 시스템이 자동으로 확장됩니다.
- 새 서버를 생성합니다.
- 서버가 생성되면 서버 상태 아래에 CloudInit 버튼이 표시됩니다.

-
- 이 버튼을 클릭하면 다음과 같은 대화 상자가 나타납니다.

- 여기에 CloudInit 데이터를 붙여넣고 ‘Activate’를 누르기만 하면 됩니다.
- 서버를 시작하면 첫 부팅 시 스크립트가 실행됩니다.
CloudInit으로 SSH 키 설치하기
이제 저희 클라우드에서 CloudInit을 사용하는 방법을 알게 되었으니, 이 새로운 지식을 활용하여 두 개의 SSH 키를 설치해 보겠습니다. 우리가 사용할 가상의 두 공개 SSH 키는 ‘ssh-rsa AAA[…] user1@host‘ 및 ‘ssh-rsa AAA[…] user2@host‘입니다. (SSH 키 생성에 대해 자세히 알아보려면 Github의 이 페이지를 참조하십시오.)
Ubuntu Cloud Image에서 기본 사용자 이름은 ‘ubuntu’입니다. 따라서 키는 해당 사용자 계정에 설치됩니다.
이를 위한 CloudInit 구성은 다음과 같습니다:
[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
[/ruby]
주의하십시오 공백이 중요합니다. ‘-‘ 앞에 두 개의 공백이 있습니다. 하나만 넣으면 서버에서 읽지 못할 수 있습니다.
CloudInit 구성을 저장하고 서버를 부팅한 후에는 ‘ubuntu’ 사용자를 사용하여 서버에 SSH로 접속할 수 있어야 합니다:
[bash light="true"]
$ ssh ubuntu@aaa.bbb.ccc.ddd
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-36-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Sun Oct 19 21:51:54 UTC 2014
System load: 0.0 Users logged in: 0
Usage of /: 77.4% of 39.34GB IP address for eth0: aaa.bbb.ccc.ddd
Memory usage: 26%
Swap usage: 0%
Processes: 113
Graph this data and manage this system at:
https://landscape.canonical.com/
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
[...]
ubuntu@myserver:~$
[/bash]
CloudInit으로 시스템 업데이트 설치하기
CloudInit으로 쉽게 수행할 수 있는 또 다른 매우 유용한 작업은 첫 부팅 시 시스템 업데이트를 실행하는 것입니다. 디스크 이미지를 자주 업데이트하고 있지만, 시스템이 최신 상태인지 확인하기 위해 추가적인 예방 조치를 취하는 것이 좋습니다.
첫 부팅 시 시스템 업데이트를 설치하려면 다음을 추가하십시오:
[ruby]
#cloud-config
apt_update: true
apt_upgrade: true
[/ruby]
또한 Ubuntu에서 ‘apt_update’에 대한 배포판 중립적 별칭인 ‘package_update’라는 유사한 옵션이 있음을 알 수 있습니다.
또한 아래의 ‘packages’가 설정되면 ‘apt_update’가 기본적으로 true로 설정되지만, 더 명시적으로 나타내기 위해 위에 추가했습니다.
CloudInit으로 패키지 설치하기
시스템 부트스트래핑의 핵심적인 부분 중 하나는 부팅 시 패키지를 설치할 수 있도록 하는 것입니다. 다행히 CloudInit을 사용하면 이 작업도 쉽게 수행할 수 있습니다. 우리가 해야 할 일은 ‘packages’ 아래에 설치하려는 패키지 목록을 지정하는 것뿐입니다. 예를 들어 ‘python-pip’, ‘fail2ban’, ‘vim’을 설치하려면 다음과 같이 작성합니다.
[ruby]
#cloud-config
packages:
- python-pip
- fail2ban
- vim
[/ruby]
다시 한번 주의해 주세요 공백이 중요합니다. ‘-‘ 앞에 두 개의 공백이 있습니다.
CloudInit을 사용하여 호스트 이름 설정하기
새 서버를 프로비저닝할 때 해당 서버의 호스트 이름도 설정하고 싶을 수 있습니다.
[ruby]
#cloud-config
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
[/ruby]
CloudInit으로 첫 부팅 시 명령 실행하기
서버로 더 정교한 작업을 수행하고 있다면, 첫 부팅 시 실행해야 하는 명령이 있을 가능성이 높습니다.
여기서 ‘runcmd’와 ‘bootcmd’가 사용됩니다. 이 두 가지 모두 첫 부팅 시 명령을 실행할 수 있게 해줍니다. 차이점은 ‘bootcmd’가 ‘runcmd’보다 부팅 프로세스에서 더 일찍 실행된다는 것입니다.
이 명령 중 하나를 사용하려면 CloudInit에 다음을 추가하세요.
[ruby]
#cloud-config
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]
구성 관리자와 함께 CloudInit 사용하기
마지막으로, 더 숙련된 클라우드 사용자라면 구성 관리자를 사용하고 있을 가능성이 높습니다. 다행히 CloudInit은 이에 대한 준비가 되어 있습니다. 하지만 여러 변수를 고려할 때 다루기 다소 복잡한 주제입니다.
따라서 올바른 방향을 제시해 줄 수 있는 몇 가지 예시는 다음과 같습니다.
여러 요소를 함께 묶는 방법
YAML 스타일 파일에 익숙하지 않은 분들에게는 여러 CloudInit 요소를 함께 연결하는 방법이 명확하지 않을 수 있습니다. 하지만 간단합니다. 첫 번째 줄에 ‘#cloud-config‘이 필요합니다. 그 후에는 단순히 구성을 추가하면 됩니다.
예를 들어, 위의 모든 예시를 하나의 구성으로 결합하면 다음과 같습니다.
[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
apt_update: true
apt_upgrade: true
packages:
- python-pip
- fail2ban
- vim
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]
추가 리소스
이 문서에서는 CloudInit이 할 수 있는 일의 아주 일부분만 다루었습니다. 다음과 같이 학습할 수 있는 다른 많은 작업들이 있습니다: 사용자 및 그룹 생성, 디스크에 파일 쓰기 및 완료 시 URL 호출 (다른 시스템에 알리기 위함).
CloudInit에 대해 더 자세히 알고 싶다면 다음 소스를 추천합니다:
- 공식 CloudInit 문서
- Ubuntu의 CloudInit 가이드
- RedHat의 CloudInit 문서
- Ubuntu의 CloudInit 예제 라이브러리
댓글
아직 댓글이 없습니다. 첫 번째로 작성해 보세요.