Google Cloud Integration
Ops can integrate with your existing Google Cloud Platform (GCP) account. You can use Ops CLI to create and upload an image in GCP account. Once, you have uploaded image, you can also create an instance with a particular image using CLI.
By using the gcp klib it is possible to send memory usage metrics
to the GCP monitoring service, thus emulating the GCP ops agent.
Pre-requisites
Create a Service Account (SA) in your GCP account and download the Service Account key json file.
Please make sure your Service Account has access to the Google Compute Engine and Google Storage.
Get the name of your Google Cloud account project where you would be creating images and instances.
Create a bucket in Google Cloud storage for image artifacts storage.
Please make sure you export
GOOGLE_APPLICATION_CREDENTIALS
with the Service Account key json file path, before invoking below commands.
Image Operations
Create Image
If you have already created an Ops project, you can update your existing config.json
. You need to add CloudConfig which mentions specific details like ProjectID
, BucketName
.
Once, you have updated config.json
you can create an image in Google Cloud with the following command.
For creating an image using a particular package, you need to provide the package name to ops image create
command with -p
option.
Nanos supports running ARM payloads on ARM instances but in order to do so you must build your image with an ARM instance type:
Also note that this instance type is not supported in every region. You can try us-central1-a.
List Images
You can list existing images on Google cloud with ops image list
.
Delete Image
ops image delete <imagename>
can be used to delete an image from Google Cloud.
Instance Operations
Create Instance
After the successful creation of an image in Google Cloud, we can create an instance from an existing image.
You need to export GOOGLE_APPLICATION_CREDENTIALS
and pass project-id and zone with cli options.
Alternatively, you can pass config, if you have mentioned project-id and zone in project's config.json.
You can provide list of ports to be exposed on gcp instance via config and command line.
CLI example
Sample config
Spot Provisioning
You maybe enable spot provisioning using the following config:
Disable SMT
You can disable SMT if you so desire by flagging 'ThreadsPerCore' to 1. By default Nanos will have acess to all vCPUs available but this setting can force it to only use one thread per core. Some performance, security or licensing concerns might benefit from this setting. It is important to note that not all instances allow this setting and you will still be billed for all vCPUs provisioned.
AMD-SEV (Secure Encrypted Virtualization)
You can enable encryption in-use AMD-SEV on select flavors and regions in Google Cloud. This will generate an encryption key that is generated for each new vm.
Private Static IP
By default, ops uses will rely on DHCP.
If you would like to set a static private ip you can use the following:
Note: You must choose an available IP that is within your chosen/default VPC.
IP Forwarding
By default, IP forwarding is disabled
on GCP.
If you would like to enable IP forwarding when creating the instance you can use the following:
GCP metrics - memory
The gcp klib emulates some functions of GCP ops agent to send memory usage metrics to the GCP monitoring service.
Example Ops configuration to enable sending memory metrics every 2 minutes
:
GCP logging - console
The gcp klib implements a console driver that sends console output to GCP logs.
List Instances
You can list instance on Google Cloud using ops instance list
command.
You need to export GOOGLE_APPLICATION_CREDENTIALS
, GOOGLE_CLOUD_PROJECT
and GOOGLE_CLOUD_ZONE
before firing command.
Alternatively you can pass project-id and zone with cli options.
Get Logs for Instance
You can get logs from serial console of a particular instance using ops instance logs
command.
You need to export GOOGLE_APPLICATION_CREDENTIALS
, GOOGLE_CLOUD_PROJECT
and GOOGLE_CLOUD_ZONE
before firing command.
Alternatively you can pass project-id and zone with cli options.
You may also tail the serial console using:
Delete Instance
ops instance delete
command can be used to delete instance on Google Cloud.
You need to export GOOGLE_APPLICATION_CREDENTIALS
, GOOGLE_CLOUD_PROJECT
and GOOGLE_CLOUD_ZONE
before firing command.
Alternatively you can pass project-id and zone with cli options.
Create Instance with Instance Group
OPS has initial support for putting an instance into an instance group. This allows you to load balance a handful of instances and scale up/down on demand.
The instance group must already be created to use this feature. When deploying through 'instance create' OPS will create a new instance template, apply it to the instance group, and then force re-create all the instances with the new instance template. The instance template will track any firewall rule changes (such as ports).
Volume Operations
Create Volume
You need to set the BucketName
, ProjectID
and Zone
in the CloudConfig
section of your configuration file and export GOOGLE_APPLICATION_CREDENTIALS
before firing the command.
For create a volume with existing files you can add the -d
flag and the directory path.
List Volumes
You can list volumes on Google Cloud using ops volume list -t gcp -c <configuration_file_path>
command.
You need to set the ProjectID
and Zone
in the CloudConfig
section of your configuration file and export GOOGLE_APPLICATION_CREDENTIALS
before firing the command.
Delete Volume
ops volume delete
command can be used to delete an instance on Google Cloud.
You need to set the ProjectID
and Zone
in the CloudConfig
section of your configuration file and export GOOGLE_APPLICATION_CREDENTIALS
before firing the command.
Attach Volume
For attaching a volume you need a running instance using a image configured with a mount point. This means you have to create a volume before running the instance. After the volume created you have to specify the volume label with the same name of the volume created. You can create the image running the next command.
After having the instance running you can attach a volume using ops volume attach <instance_name> <volume_name> <volume_name> -t gcp -c <configuration_file_path>
.
Note: You need to stop and start the instance to see the changes applied.
Detach Volume
You can detach a volume from a running instance using ops volume detach <instance_name> <volume_name> -t gcp -c <configuration_file_path>
.
Networking Considerations
If you specify a port in your config you are stating you wish the public ip associated with the instance to be exposed with that port. If you don't specify the port by default the private ip allows any instance in the same vpc to talk to it.
Elastic IP:
If you have already provisioned an elastic ip you may use it by setting it in the Cloud Config:
IPV6 Networking
IPV6 support differs from cloud to cloud.
To use IPv6 on Google Cloud you must create a VPC and a subnet with IPv6 enabled. You can not use the legacy network nor can you use an auto-created subnet.
After you create a new VPC and subnet you can adjust the subnet to be dual stack like so:
When you create it you won't see in the UI that it is IPv6 enabled but you can click the 'REST' button to see it.
A sample config:
Be aware that you might not have IPV6 connectivity from the laptop/server you are testing from. You can verify within an instance on Google or some other IPv6 capable machine via telnet:
or ping:
Also, keep in mind that when you create a new VPC by default there are no firewall rules so things like ICMP (ping) won't work without adding them manually nor would ssh'ing into a test instance work without a corresponding rule on the new VPC for ssh (22).
Last updated