]> git.proxmox.com Git - pve-docs.git/blame - qm-cloud-init.adoc
update API
[pve-docs.git] / qm-cloud-init.adoc
CommitLineData
7eb69fd2
DM
1[[qm_cloud_init]]
2Cloud-Init Support
3------------------
4ifdef::wiki[]
5:pve-toplevel:
6endif::wiki[]
7
8http://cloudinit.readthedocs.io[Cloud-Init] is the defacto
9multi-distribution package that handles early initialization of a
10virtual machine instance. Using Cloud-Init, one can configure network
11devices and ssh keys on the hypervisor side. When the VM starts the
12first time, the Cloud-Init software inside the VM applies those
13settings.
14
15Many Linux distributions provides ready-to-use Cloud-Init images,
16mostly designed for 'OpenStack'. Those images also works with
17{pve}. While it may be convenient to use such read-to-use images, we
18usually recommend to prepare those images by yourself. That way you know
19exactly what is installed, and you can easily customize the image for
20your needs.
21
22Once you created such image, it is best practice to convert it into a
23VM template. It is really fast to create linked clones of VM
24templates, so this is a very fast way to roll out new VM
25instances. You just need to configure the network (any maybe ssh keys)
26before you start the new VM.
27
28We recommend the use of SSH key-based authentication to login to VMs
29provisioned by Cloud-Init. It is also possible to set a password, but
30{pve} needs to store an encrypted version of that password inside the
31Cloud-Init data. So this is not as safe as using SSH key-based
32authentication.
33
34{pve} generates an ISO image to pass the Cloud-Init data to the VM. So
35all Cloud-Init VMs needs to have an assigned CDROM drive for that
36purpose. Also, many Cloud-Init Images assumes to have a serial
37console, so it is best to add a serial console and use that as display
38for those VMs.
39
40
41Prepare Cloud-Init Templates
42~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43
44The first step is to prepare your VM. You can basically use any VM,
45and simply install the Cloud-Init packages inside the VM you want to
46prepare. On Debian/Ubuntu based systems this is as simple as:
47
48----
49apt-get install cloud-init
50----
51
52Many distributions provides ready-to-use Cloud-Init images (provided
53as `.qcow2` files), so as alternative you can simply download and
54import such image. For the following example, we will use the cloud
55images provided by Ubuntu at https://cloud-images.ubuntu.com.
56
57----
58# download the image
59wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img
60
61# create a new VM
62qm create 9000 --memory 2048 --net0 virtio,bridge=vmbr0
63
64# import the downloaded disk to local-lvm storage
65qm importdisk 9000 bionic-server-cloudimg-amd64.img local-lvm
66
67# finally attach the new disk to the VM as scsi drive
68qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-1
69----
70
71NOTE: Ubuntu Cloud-Init images requires the `virtio-scsi-pci`
72controller type for SCSI drives.
73
74
d528c7ba
DM
75.Add Cloud-Init CDROM drive
76
77[thumbnail="gui-cloudinit-hardware.png"]
78
7eb69fd2
DM
79The next step is to configure a CDROM drive, used to pass the
80Cloud-Init data to the VM.
81
82----
83qm set 9000 --ide2 local-lvm:cloudinit
84----
85
86We want to boot directly from the Cloud-Init image, so we set the
87`bootdisk` parameter to `scsi0` and restrict BIOS to boot from disk
88only. This simply speeds up booting, because VM BIOS skips testing for
89a bootable CDROM.
90
91----
92qm set 9000 --boot c --bootdisk scsi0
93----
94
95We also want to configure a serial console and use that as display. Many Cloud-Init images rely on that, because it is an requirement for OpenStack images.
96
97----
98qm set 9000 --serial0 socket --vga serial0
99----
100
101Finally, it is usually a good idea to transform such VM into a template. You can create linked clones with them, so deployment from VM templates is much faster than creating a full clone (copy).
102
103----
104qm template 9000
105----
106
107
108Deploy Cloud-Init Templates
109~~~~~~~~~~~~~~~~~~~~~~~~~~~
110
d528c7ba
DM
111[thumbnail="gui-cloudinit-config.png"]
112
7eb69fd2
DM
113You can easily deploy such template by cloning:
114
115----
116qm clone 9000 123 --name ubuntu2
117----
118
119Then configure the SSH public key used for authentication, and the IP setup
120
121----
122qm set 123 --sshkey ~/.ssh/id_rsa.pub
123qm set 123 --ipconfig0 ip=10.0.10.123/24,gw=10.0.10.1
124----
125
126You can configure all Cloud-Init options using a single command. I
127just split above example to separate commands to reduce the line
128length. Also make sure you adopt the IP setup for your environment.
129
130
d528c7ba 131
7eb69fd2
DM
132Cloud-Init specific Options
133~~~~~~~~~~~~~~~~~~~~~~~~~~~
134
135include::qm-cloud-init-opts.adoc[]
136
137
138