[Cloud]/OpenStack

cloud-init 소개 및 활용

ByoungHee Lee 2020. 9. 30. 21:04

cloud-init은 다양한 클라우드 플랫폼에서 인스턴스 초기화를 위해 사용되는 산업 표준 다중 배포 방법을 제공하며, 모든 주요 퍼블릭 / 프라이빗 클라우드 제공업체의 프로비저닝 시스템 및 베어메탈 설치를 지원 합니다. 

클라우드 인스턴스들은 디스크 이미지와 인스턴스 데이터로부터 초기화됩니다. 

  • Cloud metadata
  • User data(옵션)
  • Vendor data(옵션)

cloud-init은 부팅 중에 실행중인 클라우드를 식별하고 클라우드에서 제공된 메타 데이터를 읽고 그에 따라 시스템을 초기화 합니다. 여기에는 SSH 액세스 키, 시스템의 네트워크 및 저장 장치 설정이 포함될 수 있습니다. 그외에도 인스턴스에 전달된 선택적 사용자 또는 공급 업체 데이터도 구문 분석하고 처리 합니다. 

cloud-init 이 지원하는 리눅스 distribution은 다음과 같습니다. 

  • Alpine Linux
  • ArchLinux
  • Debian
  • Fedora
  • FreeBSD
  • Gentoo Linux
  • NetBSD
  • OpenBSD
  • RHEL/CentOS
  • SLES/openSUSE
  • Ubuntu

cloud-init이 지원하는 퍼블릭 클라우드는 다음과 같습니다. 

  • Amazon Web Services
  • Microsoft Azure
  • Google Cloud Platform
  • Oracle Cloud Infrastructure
  • Softlayer
  • Rackspace Public Cloud
  • IBM Cloud
  • Digital Ocean
  • Bigstep
  • Hetzner
  • Joyent
  • CloudSigma
  • Alibaba Cloud
  • OVH
  • OpenNebula
  • Exoscale
  • Scaleway
  • CloudStack
  • AltCloud
  • SmartOS

그외에도, cloud-init은 아래와 같은 private cloud 에서도 활용되어 집니다. 

  • Bare metal installs
  • OpenStack
  • LXD
  • KVM
  • Metal-as-a-Service (MAAS)

cloud-init은 보통 boot 시점에 발생하며, 5 가지의 단계를 거칩니다. 

  • Generator
  • Local
  • Network
  • Config
  • Final

이상으로 cloud-init에 대한 개념을 알아 보았으며, 다음으로는 사용자 패스워드 변경에 대해 cloud-init을 활용해 보도록 하겠습니다. 

1.  우선, 사용자 패스워드 변경을 위해서는 /etc/cloud/cloud.cfg 파일에 아래와 같은 형식의 내용을 추가 합니다.  

chpasswd:
  list: |
     root:redhat
     cloud-user:super_secret_password
  expire: False

2. 인스턴스를 재부팅하면 cloud-init이 /etc/cloud/cloud.cfg의 정보를 읽어들여 5 가지 단계를 거쳐 모듈과 설정 정보들이 실행하여 반영됩니다. 여기서는 부팅을 하지 않고 필요한 모듈만 적용해 보도록 하겠습니다. 

 먼저, cloud-init이 적용된 캐시 정보를 삭제해야 합니다. 이 캐시 정보가 남아 있으면 부팅없이 적용이 되지 않습니다. 캐시정보를 삭제하는 방법은 두가지 방법이 있습니다. 

하나는, /var/lib/cloud 이하에 있는 데이터를 강제로 삭제하는 것이고,
두번째는, cloud-init clean을 실행하는 것입니다. 

여기에서는 cloud-init clean을 실행하도록 하겠습니다. 

/var/lib/cloud 디렉토리에 캐시가 남아 있는 것을 확인후,

# ls -al /var/lib/cloud/
total 0
drwxr-xr-x. 2 root root 25 Sep 30 10:06 data
drwxr-xr-x. 2 root root  6 Sep 30 10:06 handlers
drwxr-xr-x. 3 root root 33 Sep 30 10:06 instances
drwxr-xr-x. 6 root root 72 Sep 30 10:06 scripts
drwxr-xr-x. 2 root root  6 Sep 30 06:57 seed
drwxr-xr-x. 2 root root  6 Sep 30 10:06 sem

cloud-init clean을 실행한 후 다시 조회하면 캐시 정보가 삭제된것을 확인하실 수 있습니다. 

# cloud-init clean
# ls -al /var/lib/cloud/
total 4
drwxr-xr-x.  3 root root   18 Sep 30 10:26 .
drwxr-xr-x. 31 root root 4096 Jul 24 02:43 ..
drwxr-xr-x.  2 root root    6 Sep 30 06:57 seed

다음으로는 현재 세션에서 재부팅없이 passwords 관련 모듈을 확인후 해당 모듈만 적용해 보겠습니다. 

# cloud-init init --local
Cloud-init v. 18.2 running 'init-local' at Wed, 30 Sep 2020 14:27:58 +0000. Up 2102.95 seconds.
# cat /etc/cloud/cloud.cfg | grep passwords
- set-passwords
# cloud-init single --name set-passwords
Cloud-init v. 18.2 running 'single' at Wed, 30 Sep 2020 14:29:26 +0000. Up 2190.37 seconds.

패스워드가 정상적으로 변경이 되었으며, 확인을 위해서 변경된 패스워드로 로그인을 해 보겠습니다. 

# login
test login: Connection to 192.168.103.181 closed.
$ ssh root@192.168.103.181
root@192.168.103.181's password: 
Last login: Wed Sep 30 10:35:49 2020 from 192.168.103.51

변경된 패스워드로 정상 로그인이 된것을 확인 하였습니다.

cloud-init은 패스워드 외에도 SSH, Network, User, 사용자 스크립트 등 인스턴스 또는 베어메탈에 필요한 환경을 원하는 형태로 초기 구성하고 유지하는데 유용하게 활용될 수가 있습니다.