October 20, 2021

Sử dụng Packer để tự động build VM Image trên GCP

Nếu như bạn là một SysAdmin hoặc một DevOps Engineer. Công việc quản lý, vá lỗi (path), cài đặt phần mềm hoặc triển khai code từ các developer cho các VM Image xảy ra thường xuyên. Ngoài ra, chúng ta phải quản lý vòng đời (lifecycle) của các VM Image, thì việc tự động (automation) tạo VM Image sẽ giúp cho chúng ta rất nhiều trong việc tiết kiệm thời gian quản lý và đảm bảo tính bảo mật.

  • Enable các Google APIs:
gcloud services enable sourcerepo.googleapis.com
gcloud services enable compute.googleapis.com
gcloud services enable servicemanagement.googleapis.com
gcloud services enable storage-api.googleapis.com

Required IAM permissions

  1. Để sử dụng Packer, bạn cần thiết lập cloud build service account có quyền Editor

1.1 Lấy thông tin Cloud Build service account:

CLOUD_BUILD_ACCOUNT=$(gcloud projects get-iam-policy $PROJECT 
  --filter="(bindings.role:roles/cloudbuild.builds.builder)"  
  --flatten="bindings[].members" --format="value(bindings.members[])")

1.2Thêm quyền Editor cho Cloud Build account:

gcloud projects add-iam-policy-binding $PROJECT 
  --member $CLOUD_BUILD_ACCOUNT 
  --role roles/editor

2. Bước tiếp theo bạn cần tạo docker image packer để sử dụng cho Cloud Build. Các bước thực hiện:

2.1 Mở Google Cloud Console -> Mở Google Cloud Shell

2.2 Vào Google Cloud Shell dùng lệnh và build Docker Image với Cloud Build:

git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
cd cloud-builders-community/packer
gcloud builds submit .

Using the Packer builder

  1. Tạo build config file với tên cloudbuild.yaml .
steps:
- name: 'gcr.io/$PROJECT_ID/packer'
  args:
  - build
  - -var
  - project_id=$PROJECT_ID
  - -var
  - commit_short_sha=$SHORT_SHA
  - packer.json
  env:
  - 'PACKER_LOG=1'

2. Tạo file kịch bản Packer

      "machine_type": "e2-medium",
      "region": "asia-southeast1",
      "zone": "asia-southeast1-a",
      "commit_short_sha": "{{env `COMMIT_SHORT_SHA`}}"

    },
    "builders": [
      {
        "type": "googlecompute",
        "project_id": "{{user `project_id`}}",
        "machine_type": "{{user `machine_type`}}",
        "source_image_family": "{{user `source_image_family`}}",
        "image_description": "Nginx opensource Debian Image",
        "image_name": "debian-nginx-v{{timestamp}}-{{user `commit_short_sha`}}",
        "disk_size": 10,
        "disk_type": "pd-ssd",
        "ssh_username": "packer",
        "region": "{{user `region`}}",
        "zone": "{{user `zone`}}",
        "metadata": {
          "enable-oslogin": "false"
         }

      }
    ],
    "provisioners": [
      {
        "type": "shell",
        "inline": [
          "sudo apt-get install nginx -y",
          "echo 'test' > test.txt"
        ]
      }
    ]
  }

3. Push code lên Github:

# git add .
# git commit -m "Add nginx package"
# git push origin -u master

4. Tiếp theo cấu hình trigger trên Cloud Build. Khi một commit thay đổi thì sẽ tự động build image như sau:

Vào Google Cloud Console -> Nhấn vào mục Cloud Build -> Chọn Triggers -> Click Create Trigger
Nếu bạn sử dụng Github thì cần connect repository trước khi tạo Trigger.
Thông tin cấu hình Trigger như hình bên dưới:

5. Tiến hành kiểm thử xem cấu hình đã hoạt động đúng chưa bằng cách commit một thay đổi và push lên Github Repo
Hoặc bạn cũng có thể nhấn vào nút Run Trigger

6. Kiểm tra kết quả bằng cách vào Cloud Build -> History

Hoàn tất. Chúng ta dễ dàng triển khai, cập nhật bản vá và audit trail các hoạt động thay đổi Image.
Ngoài ra, bạn có thể tham khảo thêm bài viết Image management best practices của Google Cloud Platform.

Liên hệ ngay với chúng tôi, Cloud Ace Việt Nam để được tư vấn về G Suite, GCP.

2 thoughts on “Sử dụng Packer để tự động build VM Image trên GCP

Leave a Reply

Your email address will not be published. Required fields are marked *