Packer הוא כלי בקוד פתוח ליצירת תמונות זהות של מכונות וירטואליות (VM) למספר פלטפורמות, מתוך הגדרת מקור יחידה. בדף הזה מוסבר איך להשתמש ב-Packer וב-Cloud Build כדי ליצור תמונת מצב של מכונה וירטואלית לשימוש ב-Compute Engine.
לפני שמתחילים
ההוראות בדף הזה מניחות שאתם מכירים את Packer. בנוסף:
- חשוב שקוד המקור יהיה בהישג יד, כולל תבנית Packer.
- יש לכם מאגר Docker ב-Artifact Registry או שאתם יוצרים מאגר חדש.
- כדי להשתמש בפקודות
gcloudשבדף הזה, צריך להתקין את Google Cloud CLI. מפעילים את ממשקי ה-API הבאים:
gcloud services enable compute.googleapis.com gcloud services enable servicemanagement.googleapis.com gcloud services enable storage-api.googleapis.com gcloud services enable artifactregistry.googleapis.com
הרשאות IAM נדרשות
כדי להשתמש ב-Packer עם Cloud Build, צריך להקצות לחשבון השירות של ה-build את התפקיד אדמין מכונות של Compute Engine (v1) (
roles/compute.instanceAdmin.v1) ואת התפקיד משתמש בחשבון שירות (roles/iam.serviceAccountUser).כדי לאחסן תמונות שנוצרו ב-Artifact Registry, צריך להעניק לחשבון השירות שלכם לבנייה את התפקיד Artifact Registry Writer (
roles/artifactregistry.writer).
יצירת תמונה של Packer builder
Cloud Build מספק קובץ אימג' של Packer community builder שבו אפשר להשתמש כדי להפעיל פקודות packer ב-Cloud Build.
לפני שמשתמשים ב-builder הזה בקובץ תצורת Cloud Build, צריך ליצור את קובץ האימג' ולהעביר אותו בדחיפה ל-Artifact Registry:
משכפלים את המאגר cloud-builders-community:
git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.gitעוברים אל קובץ האימג' של ה-builder של Packer:
cd cloud-builders-community/packerשולחים את ה-builder לפרויקט:
gcloud builds submit . --config cloudbuild.yaml --substitutions=_AR_HOST=[LOCATION]-docker.pkg.dev,_AR_REPO=[REPOSITORY]כאשר:
-
[LOCATION]הוא האזור של מאגר Artifact Registry. -
[REPOSITORY]הוא השם של מאגר Artifact Registry.
-
יצירת תבנית Packer
יוצרים קובץ חדש בשם packer.pkr.hcl ומוסיפים את הגדרות התבנית.
הדוגמה הבאה מציגה תבנית Packer (packer.pkr.hcl) שמוגדרת ליצירת תמונת מכונה וירטואלית ב-Compute Engine:
packer {
required_plugins {
googlecompute = {
version = ">= 1.1.1"
source = "github.com/hashicorp/googlecompute"
}
}
}
variable "image_name" {
type = string
description = "The name of the output VM image"
default = "my-packer-image"
}
variable "project_id" {
type = string
description = "The GCP project ID"
}
variable "image_family" {
type = string
description = "The family of the output VM image"
default = "my-image-family"
}
variable "image_zone" {
type = string
description = "The zone to build the image in"
default = "us-central1-a"
}
source "googlecompute" "gce" {
project_id = var.project_id
source_image_family = "ubuntu-2004-lts"
source_image_project_ids = ["ubuntu-os-cloud"]
zone = var.image_zone
ssh_username = "packer"
machine_type = "e2-small"
image_name = "${var.image_name}-"
image_family = var.image_family
}
build {
name = "gce-vm-image"
sources = ["sources.googlecompute.gce"]
provisioner "shell" {
inline = [
"echo 'Provisioning image...'",
"sudo apt-get update",
"sudo apt-get install -y nginx"
]
}
}
שימוש ב-Packer builder
מוודאים שיש לכם את תבנית Packer (לדוגמה,
packer.pkr.hcl) יחד עם קוד המקור.בתיקיית השורש של הפרויקט, יוצרים קובץ הגדרות build בשם
cloudbuild.yamlאוcloudbuild.json.בקובץ הגדרות ה-build, מוסיפים שלב build להפעלת הפקודה
packer build:YAML
steps: - name: '[LOCATION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY]/packer' args: - build - -var - image_name=[IMAGE_NAME] - -var - project_id=[PROJECT_ID] - -var - image_family=[IMAGE_FAMILY] - -var - image_zone=[IMAGE_ZONE] - packer.pkr.hclJSON
{ "steps": [ { "name": "[LOCATION]-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY]/packer", "args": [ "build", "-var", "image_name=[IMAGE_NAME]", "-var", "project_id=[PROJECT_ID]", "-var", "image_family=[IMAGE_FAMILY]", "-var", "image_zone=[IMAGE_ZONE]", "packer.pkr.hcl" ] } ] }כאשר:
-
[LOCATION]הוא האזור של מאגר Artifact Registry. -
[PROJECT_ID]הוא מזהה הפרויקט. Google Cloud -
[REPOSITORY]הוא השם של מאגר Artifact Registry. -
[IMAGE_NAME]הוא השם של קובץ האימג' של המכונה הווירטואלית שאתם בונים. -
[IMAGE_FAMILY]הוא משפחת התמונות של תמונת ה-VM. -
[IMAGE_ZONE]הוא אזור התמונה.
-
מריצים את ה-build באמצעות קובץ התצורה של ה-build:
gcloud builds submit --region=[REGION] --config [CONFIG_FILE_PATH] [SOURCE_DIRECTORY]כאשר:
-
[CONFIG_FILE_PATH]הוא הנתיב לקובץ התצורה של ה-build. -
[SOURCE_DIRECTORY]הוא הנתיב או כתובת ה-URL של קוד המקור. -
[REGION]הוא אחד מאזורי הבנייה הנתמכים.
אם לא מציינים
[CONFIG_FILE_PATH]ו-[SOURCE_DIRECTORY]בפקודהgcloud builds submit, Cloud Build מניח שקובץ ההגדרות וקוד המקור נמצאים בספריית העבודה הנוכחית.-
אחרי שהתמונות נוצרות, אפשר לראות אותן בדף התמונות של Compute Engine במסוף Google Cloud .