Create and Manage Compute Engine VM’s in GCP
Test Environment
Fedora 32 installed
Active GCP account
Procedure
Step1: Create an Ubuntu instance with the following parameter in the GUI
Instance Name : ubser-1
Label : env=dev
Region : us-central1
Zone : us-central1-a
Machine Type : e2-micro
Image : Ubuntu 20.04 LTS with 10 GB Standard Persistent Disk
Other Config : Set as default
This will create an instance with a Boot disk name same as Instance name (ie. ubser-1). Also it will assign an Internal IP address based on the default subnet which is assigned for your instance based on the region selected and an external IP address is also assigned.
In my case the default subnet that is assigned to my instance is ‘10.128.0.0/20’
Internal IP address - 10.128.0.4
External IP address - 34.122.64.164
Step2: Get the list of instances and disks using gcloud cli
gcloud compute instances list
Output:
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
ubser-1 us-central1-a e2-micro 10.128.0.4 34.122.64.164 RUNNING
gcloud compute disks list
Output:
NAME LOCATION LOCATION_SCOPE SIZE_GB TYPE STATUS
ubser-1 us-central1-a zone 10 pd-standard READY
The output that we see here is a human readable format with limited details about the instance. In case we want to get the complete details about the instance in JSON or YAML format we can run the below command.
gcloud compute instances list --format json
gcloud compute instances list --format yaml
gcloud compute instances list --format text
Step3: Stop the Compute instance
gcloud compute instances stop ubser-1 --zone=us-central1-a
Output:
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
ubser-1 us-central1-a e2-micro 10.128.0.4 TERMINATED
Step4: Start the Compute instance
gcloud compute instances list
Output:
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
ubser-1 us-central1-a e2-micro 10.128.0.4 35.188.124.254 RUNNING
One important thing to note here is that once we restart the instance the External IP associated with the instances gets changed. The External IP address assigned to the instance is not persistent with the instance lifecycle.
gcloud compute instances list --format text | grep -i nat
Output:
networkInterfaces[0].accessConfigs[0].name: External NAT
networkInterfaces[0].accessConfigs[0].natIP: 35.188.124.254
networkInterfaces[0].accessConfigs[0].type: ONE_TO_ONE_NAT
The External IP address that is assigned to the instance is an NAT IP address.
Step5: Create an Ubuntu instance with the following parameter using Cloud SDK or Cloud Shell
Instance Name : ubser-2
Label : env=uat
Region : us-central1
Zone : us-central1-b
Machine Type : e2-micro
Image : Ubuntu 20.04 LTS with 10 GB Standard Persistent Disk
Other Config : Set as default
Identify the image name from the list of images available in public images.
gcloud compute images list --filter=[ubuntu]
Output:
NAME PROJECT FAMILY DEPRECATED STATUS
ubuntu-1604-xenial-v20201210 ubuntu-os-cloud ubuntu-1604-lts READY
ubuntu-1804-bionic-v20201211a ubuntu-os-cloud ubuntu-1804-lts READY
ubuntu-2004-focal-v20201211 ubuntu-os-cloud ubuntu-2004-lts READY
ubuntu-2010-groovy-v20201210 ubuntu-os-cloud ubuntu-2010 READY
ubuntu-minimal-1604-xenial-v20201210 ubuntu-os-cloud ubuntu-minimal-1604-lts READY
ubuntu-minimal-1804-bionic-v20201216 ubuntu-os-cloud ubuntu-minimal-1804-lts READY
ubuntu-minimal-2004-focal-v20201211 ubuntu-os-cloud ubuntu-minimal-2004-lts READY
ubuntu-minimal-2010-groovy-v20201210 ubuntu-os-cloud ubuntu-minimal-2010 READY
Create Compute instance using gcloud
gcloud compute instances create ubser-2 --machine-type=e2-micro --image=ubuntu-2004-focal-v20201211 --image-project=ubuntu-os-cloud --labels=env=uat --zone=us-central1-b
Output:
Created [https://www.googleapis.com/compute/v1/projects/gcplearning-299822/zones/us-central1-b/instances/ubser-2].
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
ubser-2 us-central1-b e2-micro 10.128.0.5 34.122.64.164 RUNNING
gcloud compute instances list
Output:
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
ubser-1 us-central1-a e2-micro 10.128.0.4 35.188.124.254 RUNNING
ubser-2 us-central1-b e2-micro 10.128.0.5 34.122.64.164 RUNNING
gcloud compute disks list
Output:
NAME LOCATION LOCATION_SCOPE SIZE_GB TYPE STATUS
ubser-1 us-central1-a zone 10 pd-standard READY
ubser-2 us-central1-b zone 10 pd-standard READY
Step6: Create a snapshot of the disk
Lets create a snapshot of the disk using gcloud as show below.
gcloud compute disks snapshot ubser-1 --snapshot-names=ubser-1-snapshot --zone=us-central1-a
gcloud compute disks snapshot ubser-2 --snapshot-names=ubser-2-snapshot --zone=us-central1-b
Fetch the details about the snapshot that has been created in previous step.
gcloud compute snapshots describe ubser-1-snapshot
Output:
creationTimestamp: '2020-12-28T00:58:22.710-08:00'
diskSizeGb: '10'
downloadBytes: '655537518'
id: '2955226188043526337'
kind: compute#snapshot
labelFingerprint: 42WmSpB8rSM=
licenseCodes:
- '2211838267635035815'
licenses:
- https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2004-lts
name: ubser-1-snapshot
selfLink: https://www.googleapis.com/compute/v1/projects/gcplearning-299822/global/snapshots/ubser-1-snapshot
sourceDisk: https://www.googleapis.com/compute/v1/projects/gcplearning-299822/zones/us-central1-a/disks/ubser-1
sourceDiskId: '8882054917905462950'
status: READY
storageBytes: '655521856'
storageBytesStatus: UP_TO_DATE
storageLocations:
- us
gcloud compute snapshots describe ubser-2-snapshot
Output:
creationTimestamp: '2020-12-28T00:59:09.097-08:00'
diskSizeGb: '10'
downloadBytes: '655024833'
id: '4327695696288555187'
kind: compute#snapshot
labelFingerprint: 42WmSpB8rSM=
licenseCodes:
- '2211838267635035815'
licenses:
- https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2004-lts
name: ubser-2-snapshot
selfLink: https://www.googleapis.com/compute/v1/projects/gcplearning-299822/global/snapshots/ubser-2-snapshot
sourceDisk: https://www.googleapis.com/compute/v1/projects/gcplearning-299822/zones/us-central1-b/disks/ubser-2
sourceDiskId: '237275101069060074'
status: READY
storageBytes: '655009216'
storageBytesStatus: UP_TO_DATE
storageLocations:
- us
Hope you enjoyed reading this article. Thank you..
Leave a Reply
You must be logged in to post a comment.