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, 사용자 스크립트 등 인스턴스 또는 베어메탈에 필요한 환경을 원하는 형태로 초기 구성하고 유지하는데 유용하게 활용될 수가 있습니다.
'[Cloud] > OpenStack' 카테고리의 다른 글
RHEL8 KVM 환경에서 VirtualBMC 구성 및 IPMI 연동 (0) | 2022.04.27 |
---|---|
How to install OpenStack with packstak installer (0) | 2022.02.05 |
Red Hat OpenStack Volume Multi-Attach (0) | 2021.11.11 |
Guest OS root 볼륨 확장 (0) | 2020.09.30 |
폐쇄환경에서 OSP16.1 레포지토리 및 컨테이너 이미지 레지스트리 구축하기 (0) | 2020.09.28 |